亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

單元測(cè)試方法及系統(tǒng)的制作方法

文檔序號(hào):9200305閱讀:633來(lái)源:國(guó)知局
單元測(cè)試方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及軟件測(cè)試,尤其涉及一種單元測(cè)試方法及系統(tǒng)。
【背景技術(shù)】
[0002] 單元測(cè)試是指對(duì)軟件程序中的最小可測(cè)試單元進(jìn)行檢查和驗(yàn)證,以檢驗(yàn)程序邏輯 的正確性,由此確保所編寫程序的代碼的行為是否與編程者期望的一致。單元測(cè)試是在軟 件開發(fā)過(guò)程中要進(jìn)行的最低級(jí)別的測(cè)試活動(dòng),軟件的一獨(dú)立單元將在與程序的其他部分相 隔離的情況下進(jìn)行測(cè)試。
[0003] 對(duì)于面向?qū)ο蟮木幊陶Z(yǔ)言(例如,C++)來(lái)說(shuō),因?yàn)槠渌峁┑某橄蠊δ芟鄬?duì)比較具 體,可以比較簡(jiǎn)單地通過(guò)一定的替換技術(shù),將被測(cè)單元和其他目標(biāo)隔離開來(lái),即除了被測(cè)單 元本身的邏輯保持不變,其他對(duì)象均可以是出于測(cè)試目的而構(gòu)造的偽對(duì)象,從而達(dá)到解除 被測(cè)單元和其他對(duì)象之間耦合的目的,例如JMock。
[0004] 但是,對(duì)于許多較為底層的面向過(guò)程的編程語(yǔ)言(例如,C語(yǔ)言),或者一些基于解 釋器解釋執(zhí)行的腳本語(yǔ)言(例如,Bash Script),在對(duì)它們所需要實(shí)現(xiàn)的邏輯功能編寫單元 測(cè)試用例的時(shí)候,缺乏簡(jiǎn)單有效的方法來(lái)解除被測(cè)單元與其它部分之間的耦合,使得編寫 單元測(cè)試用例的人員無(wú)法專注于被測(cè)邏輯的驗(yàn)證,而在解除耦合的方法上花費(fèi)了大量不必 要的精力。
[0005] 現(xiàn)有技術(shù)的解決方案主要有以下特點(diǎn)和缺陷。
[0006] 現(xiàn)有技術(shù)多采用二進(jìn)制插樁的方式進(jìn)行測(cè)試控制代碼的植入,或者依賴 于對(duì)于編譯后的二進(jìn)制文件的分析,例如,CN200510126499. 1、CN200710117969. 7、 CN200710121236. 0、CN200710129959· 5、CN201110380418. 6 ;或者依賴特定編程語(yǔ)言的特定 技術(shù)來(lái)實(shí)現(xiàn)其核心功能,例如CN02146712. 9、CN200510040422. 2。
[0007] 此類測(cè)試方案的問(wèn)題在于僅能針對(duì)特定的CPU體系結(jié)構(gòu)來(lái)實(shí)現(xiàn),具有一定的局限 性,針對(duì)不同CPU體系結(jié)構(gòu),實(shí)現(xiàn)難度大,并且繁瑣;又或者僅能針對(duì)某一特定的編程語(yǔ)言、 或者具有類似特性的語(yǔ)言來(lái)實(shí)現(xiàn),如果程序語(yǔ)言不具備類似特性,那么就很難實(shí)現(xiàn)。而且, 對(duì)于解釋器解釋執(zhí)行的腳本語(yǔ)言,如果解釋器的技術(shù)沒(méi)有公開,此類測(cè)試技術(shù)也會(huì)變得一 籌吳展。
[0008] 現(xiàn)有技術(shù)常通過(guò)分析源代碼、自動(dòng)插入代碼修改其分支路徑的執(zhí)行,以覆蓋 所有程序的執(zhí)行分支。為了控制程序的分支執(zhí)行,代碼的自動(dòng)插入修改了被測(cè)單元 的原有分支執(zhí)行邏輯。例如,CN02146712.9、CN200510126499. 1、CN201110338915.X、 CN200710177534. 1。
[0009] 此類測(cè)試手段修改了被測(cè)函數(shù)的原有邏輯。具體而言,在被測(cè)單元原邏輯中的代 碼插入,其邏輯一致性無(wú)法得到保證一一即原函數(shù)邏輯和修改后的邏輯是否一致,已經(jīng)無(wú) 從論證了。因此就算測(cè)試通過(guò),只能說(shuō)明被測(cè)程序單元中各條指令的可執(zhí)行性,但是其邏輯 正確性,特別是在多線程、存在競(jìng)爭(zhēng)的環(huán)境中,無(wú)從驗(yàn)證。
[0010] 現(xiàn)有技術(shù)多采用和被測(cè)文件不一樣的編程語(yǔ)言來(lái)定義測(cè)試腳本,例如, CN02146712. 9、CN200510126499. 1、CN200710176970. 7。此類技術(shù)的問(wèn)題在于開發(fā)人員的學(xué) 習(xí)成本增加,無(wú)法利用現(xiàn)有編輯工具。
[0011] 現(xiàn)有技術(shù)也不足以應(yīng)對(duì)大規(guī)模單元測(cè)試的需求。對(duì)于大規(guī)模的單元測(cè)試用例的 撰寫,依然需要手工編寫大量樁函數(shù)來(lái)控制測(cè)試行為;或者因?yàn)榧夹g(shù)原因,就算編寫了樁函 數(shù),在不修改代碼的情況下,也無(wú)法進(jìn)行插樁操作。
[0012] 而且,在實(shí)際工程實(shí)踐中,代碼重構(gòu)后如何保證程序的功能依然正確,也是非常重 要的一個(gè)課題。目前流行的開發(fā)方法中,對(duì)測(cè)試驅(qū)動(dòng)開發(fā)(Test-Driven Development,TDD) 的需求也越來(lái)越高。但是某些現(xiàn)有技術(shù)的單元測(cè)試手段并不支持代碼重構(gòu)后的回歸測(cè)試, 或者測(cè)試驅(qū)動(dòng)開發(fā)。
[0013] 例如,一些現(xiàn)有技術(shù)將已經(jīng)完成的程序作為輸入,以生成執(zhí)行其中每條語(yǔ)句的測(cè) 試用例。這類單元測(cè)試僅測(cè)試程序語(yǔ)句的可執(zhí)行性,對(duì)程序邏輯上的正確性不做驗(yàn)證。因 此,不支持重構(gòu)程序以后的回歸測(cè)試,以及測(cè)試驅(qū)動(dòng)開發(fā)的模式,例如CN201110338915. X、 CN200710177534. 1。
[0014] 可見,現(xiàn)有技術(shù)的單元測(cè)試方案在針對(duì)面向過(guò)程編程測(cè)試的通用性上存在局限, 在程序邏輯正確性的測(cè)試上存在不足,無(wú)力應(yīng)對(duì)測(cè)試需求量大,測(cè)試覆蓋率要求高的測(cè)試, 而且無(wú)法用于代碼重構(gòu)后進(jìn)行的回歸測(cè)試、或者需要進(jìn)行測(cè)試驅(qū)動(dòng)開發(fā)場(chǎng)合的單元測(cè)試。 因此,本發(fā)明亟需一種改進(jìn)的單元測(cè)試方案。

【發(fā)明內(nèi)容】

[0015] 以下給出一個(gè)或多個(gè)方面的簡(jiǎn)要概述以提供對(duì)這些方面的基本理解。此概述不是 所有構(gòu)想到的方面的詳盡綜覽,并且既非旨在指認(rèn)出所有方面的關(guān)鍵性或決定性要素亦非 試圖界定任何或所有方面的范圍。其唯一的目的是要以簡(jiǎn)化形式給出一個(gè)或多個(gè)方面的一 些概念以為稍后給出的更加詳細(xì)的描述之序。
[0016] 根據(jù)本發(fā)明的一方面,提供了一種用于單元測(cè)試的方法,包括:向被測(cè)文件中的每 個(gè)單元注入用于測(cè)試目的的控制代碼;定義測(cè)試邏輯,測(cè)試邏輯包括控制邏輯和驗(yàn)證邏輯, 其中控制邏輯被登記在注冊(cè)表中;執(zhí)行被測(cè)文件測(cè)試,執(zhí)行包括執(zhí)行被測(cè)單元的原始邏輯 和被測(cè)單元的所調(diào)用單元的控制邏輯,其中,控制邏輯由控制代碼從注冊(cè)表中讀取和實(shí)現(xiàn); 以及基于驗(yàn)證邏輯執(zhí)行對(duì)被測(cè)單元的預(yù)期邏輯的驗(yàn)證。
[0017] 在一實(shí)例中,單元包括函數(shù)、方法、過(guò)程中的任意一者。
[0018] 在一實(shí)例中,控制代碼用于在測(cè)試執(zhí)行中按需將每個(gè)單元被調(diào)用時(shí)的執(zhí)行信息首 先記錄在注冊(cè)表中,并對(duì)該單元被調(diào)用時(shí)的行為進(jìn)行控制。
[0019] 在一實(shí)例中,驗(yàn)證邏輯也被登記在注冊(cè)表中,其中控制代碼在測(cè)試執(zhí)行中根據(jù)注 冊(cè)表中的驗(yàn)證邏輯在注冊(cè)表中記錄每個(gè)單元被調(diào)用時(shí)的執(zhí)行信息。
[0020] 在一實(shí)例中,按需向注冊(cè)表中記錄每個(gè)單元被調(diào)用時(shí)的執(zhí)行信息包括:記錄該單 元的本次調(diào)用;和/或記錄該單元被調(diào)用時(shí)的參數(shù)。
[0021] 在一實(shí)例中,執(zhí)行驗(yàn)證包括:從注冊(cè)表中讀取執(zhí)行信息;以及基于執(zhí)行信息和驗(yàn) 證邏輯執(zhí)行驗(yàn)證。
[0022] 在一實(shí)例中,對(duì)被測(cè)單元的預(yù)期邏輯的驗(yàn)證包括以下至少一者:驗(yàn)證被測(cè)單元的 所調(diào)用單元是否按照預(yù)期的調(diào)用順序被執(zhí)行;驗(yàn)證被測(cè)單元的所調(diào)用單元每次被調(diào)用時(shí)的 參數(shù)是否為預(yù)期值;以及驗(yàn)證被測(cè)單元是否返回預(yù)定值。
[0023] 在一實(shí)例中,對(duì)每個(gè)單元被調(diào)用時(shí)的行為進(jìn)行控制至少包括:?jiǎn)卧鎿Q判斷,包 括:判斷該單元是否需要被替換為替換單元,若是,則將參數(shù)代入替換單元執(zhí)行以返回執(zhí)行 結(jié)果,結(jié)束該單元的調(diào)用,以及若否,則進(jìn)入?yún)?shù)修改判斷;參數(shù)修改判斷,包括:判斷是否 需要修改該單元的參數(shù),若是,則將該單元的參數(shù)修改為指定值,并進(jìn)入指定值返回判斷, 以及若否,則進(jìn)入指定值返回判斷;指定值返回判斷,包括:判斷是否需要為該單元返回指 定值,若是,則直接返回指定值,結(jié)束該單元的調(diào)用,若否,則執(zhí)行該單元的原始邏輯。
[0024] 在一實(shí)例中,控制邏輯用于根據(jù)測(cè)試目的在測(cè)試執(zhí)行中對(duì)每個(gè)單元被調(diào)用時(shí)的行 為進(jìn)行設(shè)置,以及驗(yàn)證邏輯用于聲明需要記錄以待驗(yàn)證的信息。
[0025] 在一實(shí)例中,對(duì)每個(gè)單元被調(diào)用時(shí)的行為的設(shè)置包括以下至少一者:用替換單元 來(lái)替代該單元的執(zhí)行;將該單元的參數(shù)修改為指定值;以及為該單元強(qiáng)制返回指定值。
[0026] 在一實(shí)例中,需要記錄以待驗(yàn)證的信息包括以下至少一者:需要記錄其調(diào)用順序 的單元;以及在單元被調(diào)用時(shí)需要記錄其值的參數(shù)。
[0027] 在一實(shí)例中,注入控制代碼包括:對(duì)被測(cè)文件執(zhí)行詞法分析和語(yǔ)法分析以生成抽 象語(yǔ)法樹;對(duì)作為抽象語(yǔ)法樹上的每個(gè)單元的節(jié)點(diǎn)注入控制代碼;以及將注入了控制代碼 的抽象語(yǔ)法樹轉(zhuǎn)換回被測(cè)文件。
[0028] 在一實(shí)例中,控制代碼是由被測(cè)文件語(yǔ)言編寫的統(tǒng)一格式的指令。
[0029] 在一實(shí)例中,測(cè)試邏輯由測(cè)試腳本定義,測(cè)試腳本由設(shè)置腳本、驗(yàn)證腳本和被測(cè)文 件語(yǔ)言所支持的其他語(yǔ)句構(gòu)成,其中,設(shè)置腳本在注冊(cè)表中登記控制邏輯,以及驗(yàn)證腳本在 注冊(cè)表中登記驗(yàn)證邏輯。
[0030] 在一實(shí)例中,測(cè)試腳本由被測(cè)文件語(yǔ)言所編寫。
[0031] 根據(jù)本發(fā)明的另一方面,提供了一種用于單元測(cè)試的系統(tǒng),包括:注入器,注入器 用于向被測(cè)文件中的每個(gè)單元注入用于測(cè)試目的的控制代碼;測(cè)試邏輯設(shè)置模塊,測(cè)試邏 輯設(shè)置模塊用于定義測(cè)試邏輯,測(cè)試邏輯包括控制邏輯和驗(yàn)證邏輯,其中控制邏輯被登記 在注冊(cè)表中;測(cè)試執(zhí)行模塊,測(cè)試執(zhí)行模塊用于執(zhí)行被測(cè)文件測(cè)試,執(zhí)行包括執(zhí)行被測(cè)單元 的原始邏輯和被測(cè)單元的所調(diào)用單元的控制邏輯,其中,控制邏輯由控制代碼從注冊(cè)表中 讀取和實(shí)現(xiàn);以及驗(yàn)證模塊,驗(yàn)證模炔基于驗(yàn)證邏輯執(zhí)行對(duì)被測(cè)單元的預(yù)期邏輯的驗(yàn)證。
[0032] 在一實(shí)例中,單元包括函數(shù)、方法、過(guò)程中的任意一者。
[0033] 在一實(shí)例中,控制代碼用于在測(cè)試執(zhí)行中按需將每個(gè)單元被調(diào)用時(shí)的執(zhí)行信息首 先記錄在注冊(cè)表中,并對(duì)該單元被調(diào)用時(shí)的行為進(jìn)行控制。
[0034] 在一實(shí)例中,驗(yàn)證邏輯也被登記在注冊(cè)表中,其中控制代碼在測(cè)試執(zhí)行中根據(jù)注 冊(cè)表中的驗(yàn)證邏輯在注冊(cè)表中記錄每個(gè)單元被調(diào)用時(shí)的執(zhí)行信息。
[0035] 在一實(shí)例中,向注冊(cè)表中按需記錄每個(gè)單元被調(diào)用時(shí)的執(zhí)行信息包括:記錄該單 元的本次調(diào)用;和/或記錄該單元被調(diào)用時(shí)的參數(shù)。
[0036] 在一實(shí)例中,驗(yàn)證模塊還用于:從注冊(cè)表中讀取執(zhí)行信息;以及基于執(zhí)行信息和 驗(yàn)證邏輯執(zhí)行驗(yàn)證。
[0037] 在一實(shí)例中,驗(yàn)證模塊對(duì)被測(cè)單元的預(yù)期邏輯的驗(yàn)證包括以下至少一者:驗(yàn)證被 測(cè)單元的所調(diào)用單元是否按照預(yù)期的調(diào)用順序被執(zhí)行;驗(yàn)證被測(cè)單元的所調(diào)用單元每次被 調(diào)用時(shí)的參數(shù)是否為預(yù)期值;以及驗(yàn)證被測(cè)單元是否返回預(yù)定值。
[0038] 在一實(shí)例中,對(duì)每個(gè)單元被調(diào)用時(shí)的行為進(jìn)行控制至少包括:?jiǎn)卧鎿Q判斷,包 括:判斷該單元是否需要被替換為替換單元,若是,則將參數(shù)代入替換單元執(zhí)行以返回執(zhí)行 結(jié)果,結(jié)束該單元的調(diào)用,以及若否,則進(jìn)入?yún)?shù)修改判斷;參數(shù)修改判斷,包括:判斷是否 需要修改該單元的參數(shù),若是,則將該單元的參數(shù)修改為指定值,并進(jìn)入指定值返回判斷, 以及若否,則進(jìn)入指定值返回判斷;指定值返回判斷,包括:判斷是否需要為該單元返回指 定值,若是,則直接返回指定值,結(jié)束該單元的調(diào)用,若否,則執(zhí)行該單元的原始邏輯。
[0039] 在一實(shí)例中,控制邏輯用于根據(jù)測(cè)試目的在測(cè)試執(zhí)行中對(duì)每個(gè)單元被調(diào)
當(dāng)前第1頁(yè)1 2 3 4 5 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1