• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      軟件覆蓋測(cè)試技術(shù)研究

      2012-05-03 09:13:36尹黨輝于佳偉
      中國測(cè)試 2012年1期
      關(guān)鍵詞:測(cè)試用例覆蓋率表達(dá)式

      尹黨輝,于佳偉,李 虎

      (總后后勤科學(xué)研究所,北京 100071)

      0 引 言

      覆蓋測(cè)試,也稱為邏輯覆蓋測(cè)試,是軟件白盒測(cè)試的主要方法[1-3]。在一個(gè)軟件產(chǎn)品中,如果存在某些從來沒有被執(zhí)行過的代碼,那么這個(gè)軟件的質(zhì)量是不可靠的[4],在從來沒有被執(zhí)行過的代碼中可能存在著使整個(gè)軟件崩潰的BUG而沒有被發(fā)現(xiàn)[5]。

      覆蓋測(cè)試就是讓軟件的所有代碼都被執(zhí)行過至少一次,力爭在測(cè)試過程中發(fā)現(xiàn)那些非常隱秘的BUG,從一定程度上確保軟件的可靠性。

      衡量覆蓋測(cè)試好壞的標(biāo)準(zhǔn)就是覆蓋率,覆蓋率越高,則認(rèn)為測(cè)試所達(dá)到的效果越好。足夠高的覆蓋率可以增強(qiáng)對(duì)被測(cè)軟件的信心[6]。覆蓋率代表測(cè)試過程中被執(zhí)行的程序?qū)ο蟮陌俜直?,其?jì)算公式為

      覆蓋率=(已執(zhí)行的程序?qū)ο蟮臄?shù)量/程序中可執(zhí)行程序?qū)ο蟮目倲?shù))×100%

      1 軟件覆蓋測(cè)試

      1.1 語句覆蓋

      語句覆蓋(statement coverage,SC)的含義是:選擇足夠多的測(cè)試數(shù)據(jù),使被測(cè)程序中每條語句至少執(zhí)行一次。語句覆蓋報(bào)告每個(gè)可執(zhí)行語句是否都被執(zhí)行過。這種測(cè)試準(zhǔn)則的主要優(yōu)點(diǎn)是可以直接被用于對(duì)目標(biāo)代碼進(jìn)行測(cè)試,不要求對(duì)源代碼進(jìn)行處理;語句覆蓋的主要缺點(diǎn)是它對(duì)某些控制機(jī)構(gòu)不敏感。

      可以通過語句所在文件的行號(hào)來唯一標(biāo)識(shí)一條語句,語句是以行為單位的可以執(zhí)行代碼。如下面的代碼所示,如果第1行的代碼被執(zhí)行,則認(rèn)為該語句被覆蓋。

      語句覆蓋是衡量一個(gè)測(cè)試所達(dá)到的覆蓋率的最基本也是最簡單的方法。語句覆蓋率代表測(cè)試過程中被執(zhí)行的語句在被測(cè)程序中所占的百分比,其計(jì)算公式為

      語句覆蓋率=(至少執(zhí)行了一次的語句總數(shù)/可執(zhí)行的語句總數(shù))×100%

      語句覆蓋是最弱的邏輯覆蓋準(zhǔn)則,即便語句覆蓋率達(dá)到了100%,也不能完全保證被測(cè)程序100%的被覆蓋。還是以上面一行程序?yàn)槔?,程序中如果if語句中的條件表達(dá)式不成立,則“j++”不可能被執(zhí)行,但在語句覆蓋來看,這一行語句是被覆蓋了的。

      1.2 判定覆蓋

      比語句覆蓋稍強(qiáng)的覆蓋標(biāo)準(zhǔn)是判定覆蓋(decision coverage,DC)。判定覆蓋的含義是:設(shè)計(jì)足夠多的測(cè)試用例,使得程序中的每個(gè)判定至少都獲得一次“真值”或“假值”,因此判定覆蓋又稱為分支覆蓋。該測(cè)試準(zhǔn)則只報(bào)告控制結(jié)構(gòu)中被測(cè)試的布爾表達(dá)式為真或假。整個(gè)布爾表達(dá)式看作為一個(gè)trueor-false謂詞,不管他是否含有邏輯“and”或邏輯“or”。它的缺點(diǎn)是該測(cè)試值忽略布爾表達(dá)式內(nèi)的分支,特別是當(dāng)布爾表達(dá)式簡化時(shí)。

      從程序運(yùn)行流程的角度來看,程序有順序、分支和循環(huán)3種基本流程,從一定意義上說循環(huán)也是分支的一種。最典型的分支就是if語句,以下面的程序?yàn)槔?/p>

      由于if語句,使得程序流程產(chǎn)生了兩個(gè)明顯的分支,一支是“j++;”,另一支是“k++;”。

      以上面的程序?yàn)槔?,共有如?個(gè)分支:1→2;3→4;2→5;4→5。判定覆蓋是衡量一個(gè)測(cè)試所達(dá)到的覆蓋率的比較可靠的方法,如果一個(gè)程序的所有分支都被執(zhí)行過一遍,那么可以認(rèn)為程序中所有的代碼毫無遺漏的被執(zhí)行過一遍。判定覆蓋率代表被執(zhí)行的分支在被測(cè)程序的所有分支中所占的百分比,其計(jì)算公式為

      判定覆蓋率=(至少執(zhí)行了一次的分支總數(shù)/可執(zhí)行的分支總數(shù))×100%

      雖然判定覆蓋是覆蓋測(cè)試中比較可靠的方法,但是判定覆蓋的代價(jià)很高,達(dá)到很高的覆蓋率非常困難;不過分支覆蓋有一個(gè)優(yōu)點(diǎn)是可以實(shí)現(xiàn)對(duì)go_to,switch語句以及函數(shù)調(diào)用等復(fù)雜程序邏輯的覆蓋。

      1.3 條件覆蓋

      在設(shè)計(jì)程序中,一個(gè)判定語句往往是由多個(gè)條件組合而成的復(fù)合判定。這樣,為了更徹底地實(shí)現(xiàn)邏輯覆蓋,可以采用條件覆蓋(condition coverage,CC)的標(biāo)準(zhǔn)。條件覆蓋的含義是:構(gòu)造一組測(cè)試用例,使得每一判定語句中每個(gè)邏輯條件的可能值至少滿足一次。條件覆蓋報(bào)告每個(gè)布爾子表達(dá)式的真假結(jié)果,這些子表達(dá)式是由邏輯and和邏輯or組成的,條件覆蓋測(cè)試相互獨(dú)立的子表達(dá)式。此測(cè)試準(zhǔn)則值類似于判定覆蓋,但對(duì)控制流更敏感。然而,完全的條件覆蓋并不保證完全的判定覆蓋。

      1.4 條件判定組合覆蓋

      條件判定組合覆蓋(condition decision coverage,CDC)的含義是:設(shè)計(jì)足夠的測(cè)試用例,使得判定中每個(gè)條件的所有可能(真/假)至少出現(xiàn)一次,并且每個(gè)判定本身的判定結(jié)果(真/假)也至少出現(xiàn)一次。

      1.5 多條件覆蓋

      多條件覆蓋(multiple condition coverage,MCC)也稱條件組合覆蓋,它的含義是:設(shè)計(jì)足夠多的測(cè)試用例,使得每個(gè)判定中條件的可能組合都至少出現(xiàn)一次。顯然滿足多條件覆蓋的測(cè)試用例是一定滿足判定覆蓋、條件覆蓋和條件判定組合覆蓋的。當(dāng)一個(gè)程序中判定語句較多時(shí),其條件取值的組合數(shù)目是非常大的。

      1.6 修正條件/判定覆蓋

      修正條件判定覆蓋(modified condition/decision coverage,MCDC)是由歐美的航空/航天制造廠商和使用單位聯(lián)合制定的“航空運(yùn)輸和裝備系統(tǒng)軟件認(rèn)證標(biāo)準(zhǔn)”,目前在國外的國防、航空航天領(lǐng)域應(yīng)用廣泛。這個(gè)覆蓋度量需要足夠的測(cè)試用例來確定各個(gè)條件能夠影響到包含的判定結(jié)果。它要求滿足兩個(gè)條件:首先,每一個(gè)程序模塊的入口和出口點(diǎn)都要考慮至少要被調(diào)用一次,每個(gè)程序的判定到所有可能的結(jié)果值要至少轉(zhuǎn)換一次;其次,程序的判定被分解為通過邏輯操作符(and、or)連接的bool條件,每個(gè)條件對(duì)于判定的結(jié)果是獨(dú)立的。此測(cè)試準(zhǔn)則要求用足夠的測(cè)試用例,驗(yàn)證每個(gè)可能影響判斷的條件。

      修正條件判定覆蓋可以發(fā)現(xiàn)3類錯(cuò)誤:“與”、“或”被誤寫;一個(gè)變量被誤寫為它的否定;一個(gè)表達(dá)式被誤寫為它的否定。

      例如,A and(B or C)是一個(gè)判定,A、B、C 均為條件,其全部的條件組合見表1。

      表1 條件組合表1)

      測(cè)試用例對(duì)(1,5),(2,6),(3,7)都可表明條件 A獨(dú)立地影響判定結(jié)果;測(cè)試用例對(duì)(2,4)可表明條件B獨(dú)立地影響判定結(jié)果;測(cè)試用例(3,4)可表明條件C獨(dú)立地影響判定結(jié)果;因此,測(cè)試用例集(1,2,3,4,5)可滿足上述判定的修正的條件判定覆蓋率。

      1.7 路徑覆蓋

      路徑覆蓋(path coverage,PC)報(bào)告函數(shù)中每個(gè)可能的路徑是否走過。一個(gè)路徑是唯一的一個(gè)分支序列,從函數(shù)入口到退出。由于循環(huán)體引入很大的路徑個(gè)數(shù),此測(cè)試準(zhǔn)則僅考慮有限循環(huán)的可能性。此測(cè)試準(zhǔn)則的大量變體與循環(huán)是有關(guān)的。邊界-內(nèi)部路徑測(cè)試考慮循環(huán)的兩種可能性:零次循環(huán)和多于零次的循環(huán)。對(duì)于do-while循環(huán),兩種可能性是一次循環(huán)和多于一次循環(huán)。

      從以上介紹可看出,這7種覆蓋策略的嚴(yán)格順序如圖1所示[7]。

      圖1 覆蓋策略的嚴(yán)格順序

      2 C++test中覆蓋測(cè)試

      本測(cè)試的測(cè)試環(huán)境是C++test 9.0,加載的是Virtual C++6.0工程,測(cè)試用例由C++test測(cè)試工具自動(dòng)生成。主要驗(yàn)證了C++test對(duì)判定“A and(B or C)”的邏輯覆蓋測(cè)試。

      程序源碼如圖2,覆蓋測(cè)試結(jié)果如圖3。在圖3中,C++test對(duì)語句覆蓋、判定覆蓋、條件覆蓋、修正條件1判定覆蓋、路徑覆蓋進(jìn)行了統(tǒng)計(jì)分析。

      3 結(jié)束語

      在現(xiàn)實(shí)應(yīng)用中,通常一個(gè)工程的源程序都遠(yuǎn)比本文所列舉的源程序復(fù)雜的多,要實(shí)現(xiàn)上面任一個(gè)覆蓋準(zhǔn)則的100%的覆蓋率都是不可行的[8]。通常都用覆蓋測(cè)試工具來自動(dòng)實(shí)施,即測(cè)試人員只負(fù)責(zé)測(cè)試用例的編寫與執(zhí)行,測(cè)試工具自動(dòng)記錄程序的覆蓋執(zhí)行范圍并給出覆蓋率,這就大大降低了測(cè)試人員的勞動(dòng)強(qiáng)度。測(cè)試由于其本身的復(fù)雜性仍然是非常繁瑣的?,F(xiàn)在的一些商品化工具還提供一些案例的自動(dòng)生成,可以進(jìn)一步降低測(cè)試人員的勞動(dòng)強(qiáng)度。

      圖2 程序源碼

      圖3 覆蓋測(cè)試結(jié)果

      [1]Jorgensen P C.軟件測(cè)試[M].2版.韓柯,杜旭濤,譯.北京:機(jī)械工業(yè)出版社,2003.

      [2]鄭人杰.計(jì)算機(jī)軟件測(cè)試技術(shù)[M].北京:清華大學(xué)出版社,1992.

      [3]尹黨輝.嵌入式軟件測(cè)試技術(shù)研究[J].中國測(cè)試技術(shù),2011(8):74-77.

      [4]朱少民.軟件質(zhì)量保證和管理[M].北京:清華大學(xué)出版社,2007.

      [5]姚礪,束永安,葉澄清.面向?qū)ο筌浖采w量度的研究和軟件測(cè)試工具的實(shí)現(xiàn)[J].計(jì)算機(jī)研究與發(fā)展,2002,39(8):1017-1022.

      [6]黎連生,王華,李淑春.軟件測(cè)試與測(cè)試技術(shù)[M].北京:清華大學(xué)出版社,2009.

      [7]陳麗蓉,熊光澤,羅蕾,等.嵌入式軟件的覆蓋測(cè)試[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2002(11):8-11.

      [8]柳純錄.軟件評(píng)測(cè)師教程[M].北京:清華大學(xué)出版社,2005.

      猜你喜歡
      測(cè)試用例覆蓋率表達(dá)式
      民政部等16部門:到2025年村級(jí)綜合服務(wù)設(shè)施覆蓋率超80%
      我國全面實(shí)施種業(yè)振興行動(dòng) 農(nóng)作物良種覆蓋率超過96%
      基于SmartUnit的安全通信系統(tǒng)單元測(cè)試用例自動(dòng)生成
      一個(gè)混合核Hilbert型積分不等式及其算子范數(shù)表達(dá)式
      表達(dá)式轉(zhuǎn)換及求值探析
      淺析C語言運(yùn)算符及表達(dá)式的教學(xué)誤區(qū)
      基于混合遺傳算法的回歸測(cè)試用例集最小化研究
      基于噴丸隨機(jī)模型的表面覆蓋率計(jì)算方法
      基于依賴結(jié)構(gòu)的測(cè)試用例優(yōu)先級(jí)技術(shù)
      基于覆蓋率驅(qū)動(dòng)的高性能DSP指令集驗(yàn)證方法
      嘉黎县| 三台县| 孟津县| 洛浦县| 鄂尔多斯市| 望江县| 樟树市| 龙山县| 根河市| 安阳县| 且末县| 东光县| 娄烦县| 嘉善县| 新建县| 新邵县| 长顺县| 元朗区| 斗六市| 东乡族自治县| 沙湾县| 百色市| 共和县| 荔波县| 张家界市| 沐川县| 古丈县| 虞城县| 湖南省| 巨野县| 来凤县| 乐清市| 金平| 南宁市| 肥城市| 宝清县| 禄丰县| 高青县| 呼图壁县| 阳信县| 延吉市|