專利名稱:一種單元測(cè)試方法及其裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件測(cè)試技術(shù),特別是涉及一種單元測(cè)試方法及其裝置。
技術(shù)背景單元測(cè)試是軟件開(kāi)發(fā)中質(zhì)量保證的重要環(huán)節(jié)。單元測(cè)試包括以下幾個(gè)過(guò)程1) 、根據(jù)被測(cè)試模塊設(shè)計(jì)相應(yīng)的測(cè)試模塊,測(cè)試模塊包括測(cè)試邏輯和測(cè) 試接口,測(cè)試邏輯需要構(gòu)造被測(cè)試模塊的環(huán)境變量,設(shè)計(jì)測(cè)試用例,其中樁函 數(shù)是最主要的一種環(huán)境變量;而測(cè)試接口則是某一個(gè)測(cè)試的入口 ;2) 、修改被測(cè)試模塊,使被測(cè)試模塊可以引用測(cè)試模塊中的樁函數(shù),通 常采用額外全局變量或者宏判別是否引用樁函數(shù)還是原來(lái)功能函數(shù);3) 、編譯修改過(guò)的被測(cè)試模塊和測(cè)試模塊,生成可執(zhí)行目標(biāo)運(yùn)行文件;4) 、運(yùn)行目標(biāo)可執(zhí)行文件,啟動(dòng)測(cè)試模塊;測(cè)試模塊通過(guò)不同的環(huán)境變 量組合(測(cè)試邏輯負(fù)責(zé)實(shí)現(xiàn)),完成對(duì)被測(cè)試模塊的測(cè)試;5) 、發(fā)布最后版本時(shí),去掉測(cè)試模塊,修改被測(cè)試模塊,去除不必要的 針對(duì)測(cè)試的相關(guān)修改,重新編譯生成可執(zhí)行文件。在上述過(guò)程中,需要兩次修改被測(cè)試模塊,第一次修改被測(cè)試模塊是為了 實(shí)現(xiàn)與測(cè)試模塊的關(guān)聯(lián),傳統(tǒng)的方法是使用宏開(kāi)關(guān)或控制變量,最后在測(cè)試完 畢后,需要再次修改被測(cè)試模塊,去除冗余的代碼,這樣帶來(lái)一些弊端1) 、采用靜態(tài)打樁或編譯期打樁,原有被測(cè)試模塊被修改,發(fā)布版本又 需要修改回來(lái),單元測(cè)試結(jié)果的可信性、準(zhǔn)確性都受到一定程度影響;2) 、被測(cè)試模塊的測(cè)試代碼和實(shí)際發(fā)布代碼混合在一起,給代碼版本管 理帶來(lái)不便。發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問(wèn)題在于提供一種單元測(cè)試方法及其裝置,用于在不修改測(cè)試代碼時(shí)減小測(cè)試版本和發(fā)布版本的差異。為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種單元測(cè)試方法,用于實(shí)現(xiàn)對(duì)軟件系 統(tǒng)的單元測(cè)試,所述軟件系統(tǒng)包括被測(cè)試模塊,包括步驟一,根據(jù)所述被測(cè)試模塊設(shè)計(jì)生成相應(yīng)的測(cè)試模塊,并對(duì)所述被測(cè)試 模塊、所述測(cè)試模塊進(jìn)行編譯生成一執(zhí)行文件;步驟二,運(yùn)行所述執(zhí)行文件,通過(guò)動(dòng)態(tài)打樁完成所述被測(cè)試模塊與所述測(cè) 試模塊的掛接,執(zhí)行測(cè)試;步驟三,修改編譯策略,去除對(duì)所述測(cè)試模塊的編譯,生成發(fā)布版本。 所述的單元測(cè)試方法,其中,所述步驟二中,由所述測(cè)試模塊的樁函數(shù)進(jìn)行動(dòng)態(tài)打樁完成所述被測(cè)試模塊與所述測(cè)試模塊的掛接。所述的單元測(cè)試方法,其中,所述步驟二中,所述樁函數(shù)根據(jù)一相應(yīng)描述符的信息控制所述被測(cè)試模塊與所述測(cè)試模塊之間的跳轉(zhuǎn)條件和相互聯(lián)系,所述描述符的信息包括跳轉(zhuǎn)前后序言代碼、控制數(shù)據(jù)。所述的單元測(cè)試方法,其中,所述步驟二中,還包括在動(dòng)態(tài)打樁時(shí)將所 述跳轉(zhuǎn)前后序言代碼、所述控制數(shù)據(jù)保存至所述描述符的歩驟。所述的單元測(cè)試方法,其中,所述步驟二中,還包括在進(jìn)行動(dòng)態(tài)打樁之 前,由被測(cè)試函數(shù)調(diào)用原功能函數(shù),并將原功能函數(shù)的第一條指令替換為跳轉(zhuǎn) 指令,跳轉(zhuǎn)至所述樁函數(shù)的序言中的步驟。所述的單元測(cè)試方法,其中,所述步驟二中,由所述跳轉(zhuǎn)前后序言代碼完 成所述原功能函數(shù)向所述樁函數(shù)的序言的跳轉(zhuǎn)。所述的單元測(cè)試方法,其中,所述步驟二中,還包括由所述樁函數(shù)的序 言通過(guò)調(diào)用一條件函數(shù)判斷是執(zhí)行所述樁函數(shù)還是返回至所述原功能函數(shù)繼續(xù)執(zhí)行的步驟,若所述條件函數(shù)返回TRUE,則執(zhí)行所述樁函數(shù),否則返回至所述原功能函數(shù)繼續(xù)執(zhí)行。所述的單元測(cè)試方法,其中,所述步驟二中,由所述條件函數(shù)根據(jù)由所述 樁函數(shù)的路徑控制函數(shù)得到的路徑參數(shù)判斷是執(zhí)行所述樁函數(shù)還是返回至所 述原功能函數(shù)繼續(xù)執(zhí)行。所述的單元測(cè)試方法,其中,所述步驟二中,還包括在所述執(zhí)行測(cè)試完 成后,刪除打樁的步驟。為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種單元測(cè)試裝置,用于實(shí)現(xiàn)對(duì)軟件系統(tǒng)的單元測(cè)試,所述軟件系統(tǒng)包括被測(cè)試模塊,該裝置包括一生成編譯模塊,根據(jù)所述被測(cè)試模塊生成相應(yīng)的測(cè)試模塊,并對(duì)所述被測(cè)試模塊、所述測(cè)試模塊進(jìn)行編譯生成一執(zhí)行文件;一動(dòng)態(tài)打樁模塊,用于運(yùn)行所述執(zhí)行文件,通過(guò)動(dòng)態(tài)打樁完成所述被測(cè)試模塊與所述測(cè)試模塊的掛接,執(zhí)行測(cè)試;及一版本生成模塊,用于修改編譯策略,去除對(duì)所述測(cè)試模塊的編譯,生成 發(fā)布版本。相比于現(xiàn)有測(cè)試方法和裝置,本發(fā)明的主要優(yōu)點(diǎn)在于1) 、保持待測(cè)試代碼的完整性運(yùn)行期間代碼調(diào)用更換,不用因?yàn)槊Q問(wèn)題而修改待測(cè)試的代碼;保持測(cè) 試代碼的完整性;盡量減小測(cè)試版本和發(fā)布版本的行為的差異性。2) 、測(cè)試代碼集中管理測(cè)試代碼全部集中在一起,測(cè)試代碼的去留簡(jiǎn)單易行,測(cè)試代碼便于統(tǒng)一 管理,版本具有更好的可控性。3) 、使集成測(cè)試更容易所有單元的單元測(cè)試代碼可以同時(shí)存在,在系統(tǒng)運(yùn)行期間,可以根據(jù)需要 有選擇的進(jìn)行部分或者全部單元的測(cè)試,使集成測(cè)試變得方便靈活。4) 、增強(qiáng)單元測(cè)試?yán)碚摰膶?shí)踐可用性實(shí)現(xiàn)了動(dòng)態(tài)打樁功能后,可以將動(dòng)態(tài)打樁工具集成到自動(dòng)化測(cè)試環(huán)境,使 得單元測(cè)試更加便于使用。
圖1是本發(fā)明的樁函數(shù)調(diào)用關(guān)系及路徑; 圖2是本發(fā)明的單元測(cè)試流程圖; 圖3是本發(fā)明的bootstrap實(shí)現(xiàn)流程圖; 圖4是本發(fā)明的stub_prelude實(shí)現(xiàn)流程圖; 圖5是本發(fā)明的單元測(cè)試裝置結(jié)構(gòu)圖。
具體實(shí)施方式
以下結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述,但不作為對(duì)本發(fā)明的限定。下面以PowerPC CPU為例,詳細(xì)說(shuō)明本發(fā)明動(dòng)態(tài)打樁的實(shí)現(xiàn)方法,如圖1 所示,是本發(fā)明的樁函數(shù)調(diào)用關(guān)系及路徑,圖2描述了本發(fā)明的單元測(cè)試流程 圖;在說(shuō)明實(shí)現(xiàn)方法之前,先說(shuō)明一下使用方法,使用時(shí)分幾個(gè)步驟al)進(jìn)行打樁,形式如下install一stub(B, stub—B, NULL);最后的參數(shù)NULL為條件函數(shù)—condition(),在執(zhí)行樁函數(shù)之前,通過(guò) —condition()函數(shù)來(lái)判斷是執(zhí)行樁函數(shù)stub—B()還是回到原功能函數(shù)B()繼續(xù)執(zhí) 行;a2)樁函數(shù)的路徑控制函數(shù)path—ctrlCpath),通過(guò)路徑參數(shù)jath,樁函數(shù) stub—B()返回不同的值,同時(shí)缺省的—condition()函數(shù)可以根據(jù)此參數(shù)來(lái)判斷是否返回原功能函數(shù)BO;a3)執(zhí)行被測(cè)試函數(shù)A();a4)判斷返回結(jié)果,確認(rèn)測(cè)試結(jié)論;a5)刪除打樁動(dòng)作remov^stub(stub—B)。運(yùn)行時(shí)動(dòng)態(tài)函數(shù)替換的一般原則是,被測(cè)試函數(shù)AO調(diào)用原功能函數(shù)B0, 原功能函數(shù)B()的第一條指令被替換為跳轉(zhuǎn)指令,跳轉(zhuǎn)到樁函數(shù)stub一B()的序 言stub_prelude中,然后在序言stub_prelude中調(diào)用描述符中的信息 —conditional()判斷是執(zhí)行樁函數(shù)stub—B()還是繼續(xù)執(zhí)行原功能函數(shù)B(),如果 —conditional()返回TRUE(非0),那么繼續(xù)運(yùn)行樁函數(shù)代碼,如果—conditional) 返回FALSE (0),那么fallback運(yùn)行原功能函數(shù)B()的代碼。增加—conditional() 主要是考慮到用戶可能有一些特別的需求,希望在特定情況下(如jath()無(wú)法 控制的特殊情況),能夠臨時(shí)回避樁函數(shù)stub一B()而調(diào)用原功能函數(shù)B()。在install—stub()之后,被測(cè)試函數(shù)A()調(diào)用原功能函數(shù)B()的情況變化,見(jiàn) 圖1所示。針對(duì)每個(gè)樁替換,都存在一個(gè)相應(yīng)的描述符,在install—stub()時(shí)需要保存 如下信息到描述符bl) —orig函數(shù)地址(B地址),以便以后恢復(fù)指令;b2) —stub函數(shù)地址(stub—B地址),—stub函數(shù)地址之后將作為描述符數(shù) 組的關(guān)鍵字來(lái)使用;描述符數(shù)組是指所有測(cè)試模塊的樁函數(shù)stub—B()的描述符組成的數(shù)組。 b3) —conditional函數(shù)地址,供樁函數(shù)調(diào)用; b4)創(chuàng)建這個(gè)樁函數(shù)stub—B()的進(jìn)程owner ID;b5) prelude序言的bootstrap部分,包括棧分配,保存lr、 r3;然后裝載 描述符結(jié)構(gòu)地址到r3,并調(diào)用prdude();b6) fallback指令,包括被替換的指令(32bit),以及一條跳轉(zhuǎn)到—orig + 4 的指令,因?yàn)槿绻枰獔?zhí)行原功能函數(shù)B(),那么就要跳回原功能函數(shù)B()的 代碼段;fallback指令用于實(shí)現(xiàn)返回到原功能函數(shù)B()的跳轉(zhuǎn),不是從樁函數(shù)stub—B() 跳轉(zhuǎn)至原功能函數(shù)B(),其通過(guò)條件判斷后返回原功能函數(shù)B(),由序言代碼 到原功能函數(shù)B的跳轉(zhuǎn),樁函數(shù)stub—BG沒(méi)有執(zhí)行;一orig是被替換的指令,在PowerPC中是一個(gè)32bit指令,該指令在構(gòu)造 的fallback指令序列中已經(jīng)被執(zhí)行,所以繼續(xù)原功能函數(shù)B()的執(zhí)行就是執(zhí)行 —orig指令的下一條指令,即一orig + 4;b7)初始路徑設(shè)置,初始值為0。prelude—bootstrap()函數(shù)用于完成原功能函數(shù)B()至U stub_prelude調(diào)轉(zhuǎn)的接 續(xù),每個(gè)描述符結(jié)構(gòu)中都包括這部分代碼,具體作用是保存描述符本身、原功 能函數(shù)B()、樁函數(shù)stub一B()之間的對(duì)應(yīng)關(guān)系,具體到PowerPC上來(lái)講,就是 記錄返回寄存器lr的內(nèi)容,中間包括如下兩個(gè)調(diào)轉(zhuǎn)1、 原功能函數(shù)B()調(diào)轉(zhuǎn)到prelude—bootstrap()函數(shù),在調(diào)轉(zhuǎn)中不影響原有 的lr, prdudej)ootstrap()函數(shù)記錄lr,其實(shí)記錄的是原有函數(shù)A()調(diào)用原功能 函數(shù)B()完成后應(yīng)返回的地址;2、 從存在于描述符中的prelude—bootstrap()函數(shù)代碼調(diào)轉(zhuǎn)到stub_prelude, 這時(shí)候使用bl指令,也就是把描述符內(nèi)部的一個(gè)地址裝載到了 lr寄存器, stubjrelude執(zhí)行時(shí)候,可以根據(jù)lr判斷出當(dāng)前使用的是哪個(gè)描述符。上述bl b7信息中,其中b5、 b6為跳轉(zhuǎn)前后序言代碼,其余為控制數(shù)據(jù)。 在對(duì)樁函數(shù)的調(diào)用關(guān)系及路徑進(jìn)行描述后,進(jìn)一步地,本發(fā)明的單元測(cè)試 方法包括以下過(guò)程步驟201,根據(jù)被測(cè)試模塊設(shè)計(jì)/設(shè)置相應(yīng)的測(cè)試模塊;步驟202,通過(guò)不修改被測(cè)試模塊,對(duì)測(cè)試模塊和被測(cè)試模塊進(jìn)行編譯,生成執(zhí)行文件;步驟203,運(yùn)行執(zhí)行文件,通過(guò)動(dòng)態(tài)打樁完成被測(cè)試模塊與測(cè)試模塊的掛 接,執(zhí)行測(cè)試;該步驟中,被測(cè)試模塊與測(cè)試模塊的掛接即是進(jìn)行install—stub(B, stub—B, NULL)調(diào)用后,修改了被測(cè)試模塊的功能函數(shù)的第一條指令為到測(cè)試模塊的跳 轉(zhuǎn),測(cè)試模塊的樁函數(shù)就可以被調(diào)用到。步驟204、修改編譯策略,去掉對(duì)測(cè)試模塊的編譯,生成發(fā)布版本。與現(xiàn)有單元測(cè)試不同之處在于步驟202不修改被測(cè)試模塊源代碼,步驟 203執(zhí)行測(cè)試時(shí)通過(guò)動(dòng)態(tài)打樁完成被測(cè)試模塊與測(cè)試模塊的掛接。動(dòng)態(tài)打樁是在運(yùn)行期動(dòng)態(tài)修改被測(cè)試模塊,改變被測(cè)試模塊與測(cè)試模塊之 間的調(diào)用關(guān)系,使得被測(cè)試模塊的函數(shù)在測(cè)試模塊的測(cè)試策略驅(qū)動(dòng)下根據(jù)不同 的環(huán)境變量返回不同的結(jié)果,從而驗(yàn)證被測(cè)試模塊在不同的環(huán)境參數(shù)組合下, 返回結(jié)果是否正常,從而達(dá)到單元測(cè)試的目的。進(jìn)一步地,根據(jù)上述內(nèi)容,動(dòng)態(tài)打樁包括以下幾個(gè)主要部分cl)為了能夠有效控制被測(cè)試模塊和測(cè)試模塊之間的跳轉(zhuǎn)條件和相互聯(lián) 系,針對(duì)每個(gè)測(cè)試模塊中的樁函數(shù)stub—B()有對(duì)應(yīng)的描述符,描述符包括跳轉(zhuǎn) 前后序言代碼及控制數(shù)據(jù);c2)樁函數(shù)stub—B()根據(jù)路徑控制函數(shù)傳入的參數(shù)控制執(zhí)行路徑,針對(duì)非 測(cè)試的路徑,會(huì)跳轉(zhuǎn)到原功能函數(shù)B()的內(nèi)容;c3)測(cè)試完畢后可以動(dòng)態(tài)恢復(fù)對(duì)原功能函數(shù)B()的修改,保持測(cè)試前運(yùn)行 代碼的完整性。如圖3所示,是本發(fā)明的bootstrap實(shí)現(xiàn)流程圖,并結(jié)合圖1、 2,由于替 換了原功能函數(shù)B()的第一條指令為b prelude指令,因此當(dāng)執(zhí)行到 prelude—bootstrap()函數(shù)的第一條指令時(shí),除了 pc值,其他寄存器以及棧的情 況較被測(cè)試函數(shù)A()都沒(méi)有變化,而被測(cè)試函數(shù)A()的調(diào)用信息也就丟失了, 因此,只能通過(guò)pc當(dāng)前指令地址來(lái)取得樁函數(shù)的描述符的地址,即 prelude—bootstrap (PowerPC),該流程具體包括步驟301,開(kāi)始;步驟302,分配棧楨,stwusp,-160(sp); 步驟303,保存r3, stwr3,32(sp);該步驟中,stwr3,32(sp訴于保存r3到堆棧,即保存lr (返回寄存器)的 內(nèi)容;步驟304,保存lr, mflrr3, stw r3, 160(sp);該步驟中,mflrr3用于將lr調(diào)入r3; stwr3, 160(sp)用于保存r3到堆棧, 即保存lr (返回寄存器)的內(nèi)容;步驟305,調(diào)用stub_prelude, bl stub_prelude; 該步驟中,bl stub_prelude用于調(diào)用stubj3relude()函數(shù); 步驟306,結(jié)束。 該流程中,sp指棧指針寄存器。如圖4所示,是本發(fā)明的stubjrdude實(shí)現(xiàn)流程圖,并結(jié)合圖1、 2,由于 樁函數(shù)的序言部分被分為兩部分,而bootstrap實(shí)現(xiàn)流程已經(jīng)做了一部分工作, 因此stubjrdude函數(shù)獲得了一個(gè)參數(shù)(r3),指向當(dāng)前描述符數(shù)據(jù)結(jié)構(gòu)地址, stub_prelude的流程具體包括步驟401,開(kāi)始;步驟402,保存其他工作寄存器到棧楨,包括描述符數(shù)據(jù)結(jié)構(gòu)指針; 步驟403,判斷一condition()是否為TRUE;若是,則調(diào)用樁函數(shù),并結(jié)束;否則FALSE,恢復(fù)所有寄存器、sp,并跳轉(zhuǎn)到fallback,恢復(fù)恢復(fù)執(zhí)行原功能函數(shù)B(),結(jié)束。prelude代碼是整個(gè)動(dòng)態(tài)打樁的核心代碼部分,按照上述完成序言代碼的 編寫,就可以實(shí)現(xiàn)動(dòng)態(tài)打樁的功能。如圖5所示,是本發(fā)明的單元測(cè)試裝置結(jié)構(gòu)圖。該裝置50用于實(shí)現(xiàn)對(duì)軟 件系統(tǒng)10的單元測(cè)試,軟件系統(tǒng)10包括被測(cè)試模塊101;該裝置50包括生成編譯模塊501,用于根據(jù)被測(cè)試模塊101生成相應(yīng)的測(cè)試模塊102, 并對(duì)被測(cè)試模塊101、測(cè)試模塊102進(jìn)行編譯生成執(zhí)行文件;動(dòng)態(tài)打樁模塊502,用于運(yùn)行執(zhí)行文件,通過(guò)動(dòng)態(tài)打樁完成被測(cè)試模塊101 與測(cè)試模塊102的掛接,執(zhí)行測(cè)試;版本生成模塊503,用于修改編譯策略,去除對(duì)測(cè)試模塊101的編譯,生 成發(fā)布版本。本發(fā)明方法是一種采用動(dòng)態(tài)打樁的軟件單元測(cè)試方法,適用于所有需要進(jìn) 行單元測(cè)試的軟件系統(tǒng),尤其適用于采用過(guò)程語(yǔ)言的軟件系統(tǒng)。采用本發(fā)明運(yùn)行期動(dòng)態(tài)打樁的單元測(cè)試方法,無(wú)需修改被測(cè)試代碼,保持 了被測(cè)試代碼的完整性,減小測(cè)試版本和發(fā)布版本的行為的差異性。當(dāng)然,本發(fā)明還可有其他多種實(shí)施例,在不背離本發(fā)明精神及其實(shí)質(zhì)的情 況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但 這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1、一種單元測(cè)試方法,用于實(shí)現(xiàn)對(duì)軟件系統(tǒng)的單元測(cè)試,所述軟件系統(tǒng)包括被測(cè)試模塊,其特征在于,包括步驟一,根據(jù)所述被測(cè)試模塊設(shè)計(jì)生成相應(yīng)的測(cè)試模塊,并對(duì)所述被測(cè)試模塊、所述測(cè)試模塊進(jìn)行編譯生成一執(zhí)行文件;步驟二,運(yùn)行所述執(zhí)行文件,通過(guò)動(dòng)態(tài)打樁完成所述被測(cè)試模塊與所述測(cè)試模塊的掛接,執(zhí)行測(cè)試;步驟三,修改編譯策略,去除對(duì)所述測(cè)試模塊的編譯,生成發(fā)布版本。
2、 根據(jù)權(quán)利要求1所述的單元測(cè)試方法,其特征在于,所述步驟二中, 由所述測(cè)試模塊的樁函數(shù)進(jìn)行動(dòng)態(tài)打樁完成所述被測(cè)試模塊與所述測(cè)試模塊 的掛接。
3、 根據(jù)權(quán)利要求2所述的單元測(cè)試方法,其特征在于,所述步驟二中, 所述樁函數(shù)根據(jù)一相應(yīng)描述符的信息控制所述被測(cè)試模塊與所述測(cè)試模塊之 間的跳轉(zhuǎn)條件和相互聯(lián)系,所述描述符的信息包括跳轉(zhuǎn)前后序言代碼、控制 數(shù)據(jù)。
4、 根據(jù)權(quán)利要求3所述的單元測(cè)試方法,其特征在于,所述步驟二中,還包括在動(dòng)態(tài)打樁時(shí)將所述跳轉(zhuǎn)前后序言代碼、所述控制數(shù)據(jù)保存至所述描述符的步驟。
5、 根據(jù)權(quán)利要求4所述的單元測(cè)試方法,其特征在于,所述步驟二中,還包括在進(jìn)行動(dòng)態(tài)打樁之前,由被測(cè)試函數(shù)調(diào)用原功能函數(shù),并將原功能函 數(shù)的第一條指令替換為跳轉(zhuǎn)指令,跳轉(zhuǎn)至所述樁函數(shù)的序言中的步驟。
6、 根據(jù)權(quán)利要求5所述的單元測(cè)試方法,其特征在于,所述步驟二中, 由所述跳轉(zhuǎn)前后序言代碼完成所述原功能函數(shù)向所述樁函數(shù)的序言的跳轉(zhuǎn)。
7、 根據(jù)權(quán)利要求5或6所述的單元測(cè)試方法,其特征在于,所述步驟二中,還包括由所述樁函數(shù)的序言通過(guò)調(diào)用一條件函數(shù)判斷是執(zhí)行所述樁函數(shù)還是返回至所述原功能函數(shù)繼續(xù)執(zhí)行的步驟,若所述條件函數(shù)返回TRUE,則 執(zhí)行所述樁函數(shù),否則返回至所述原功能函數(shù)繼續(xù)執(zhí)行。
8、 根據(jù)權(quán)利要求7所述的單元測(cè)試方法,其特征在于,所述步驟二中, 由所述條件函數(shù)根據(jù)由所述樁函數(shù)的路徑控制函數(shù)得到的路徑參數(shù)判斷是執(zhí)行所述樁函數(shù)還是返回至所述原功能函數(shù)繼續(xù)執(zhí)行。
9、 根據(jù)權(quán)利要求l、 2、 3、 4、 5、 6或8所述的單元測(cè)試方法,其特征在 于,所述步驟二中,還包括在所述執(zhí)行測(cè)試完成后,刪除打樁的步驟。
10、 一種單元測(cè)試裝置,用于實(shí)現(xiàn)對(duì)軟件系統(tǒng)的單元測(cè)試,所述軟件系統(tǒng)包括被測(cè)試模塊,其特征在于,該裝置包括一生成編譯模塊,根據(jù)所述被測(cè)試模塊生成相應(yīng)的測(cè)試模塊,并對(duì)所述被測(cè)試模塊、所述測(cè)試模塊進(jìn)行編譯生成一執(zhí)行文件;一動(dòng)態(tài)打樁模塊,用于運(yùn)行所述執(zhí)行文件,通過(guò)動(dòng)態(tài)打樁完成所述被測(cè)試 模塊與所述測(cè)試模塊的掛接,執(zhí)行測(cè)試;及一版本生成模塊,用于修改編譯策略,去除對(duì)所述測(cè)試模塊的編譯,生成 發(fā)布版本。
全文摘要
本發(fā)明公開(kāi)了一種單元測(cè)試方法及其裝置,用于實(shí)現(xiàn)對(duì)軟件系統(tǒng)的單元測(cè)試,所述軟件系統(tǒng)包括被測(cè)試模塊,其特征在于,該方法包括步驟一,根據(jù)所述被測(cè)試模塊設(shè)計(jì)生成相應(yīng)的測(cè)試模塊,并對(duì)所述被測(cè)試模塊、所述測(cè)試模塊進(jìn)行編譯生成一執(zhí)行文件;步驟二,運(yùn)行所述執(zhí)行文件,通過(guò)動(dòng)態(tài)打樁完成所述被測(cè)試模塊與所述測(cè)試模塊的掛接,執(zhí)行測(cè)試;及步驟三,修改編譯策略,去除對(duì)所述測(cè)試模塊的編譯,生成發(fā)布版本。采用本發(fā)明保持待測(cè)試代碼的完整性,減小測(cè)試版本和發(fā)布版本的行為的差異性,方便測(cè)試代碼集中管理,使集成測(cè)試更容易,大大增強(qiáng)了單元測(cè)試?yán)碚摰膶?shí)踐可用性。
文檔編號(hào)G06F11/36GK101334753SQ200710117969
公開(kāi)日2008年12月31日 申請(qǐng)日期2007年6月26日 優(yōu)先權(quán)日2007年6月26日
發(fā)明者王云峰 申請(qǐng)人:中興通訊股份有限公司