岳 海 任慧敏
北京航天自動(dòng)控制研究所,北京 100854
?
基于修正條件判定覆蓋的軟件測(cè)試技術(shù)研究和方法應(yīng)用
岳 海 任慧敏
北京航天自動(dòng)控制研究所,北京 100854
對(duì)在航天軟件測(cè)試過(guò)程中廣泛應(yīng)用的修正條件判定覆蓋測(cè)試技術(shù)進(jìn)行了說(shuō)明,并在此基礎(chǔ)上對(duì)修正條件判定覆蓋的測(cè)試用例設(shè)計(jì)方法進(jìn)行舉例描述,最后給出了使用工具對(duì)修正條件判定覆蓋測(cè)試的應(yīng)用情況,對(duì)相關(guān)領(lǐng)域的技術(shù)人員有一定的參考意義。
軟件測(cè)試;修正條件判定覆蓋;最小測(cè)試用例集
軟件測(cè)試是為了發(fā)現(xiàn)軟件錯(cuò)誤而執(zhí)行程序的過(guò)程,是保證軟件質(zhì)量的重要手段。通過(guò)軟件測(cè)試可以有效的減少軟件缺陷,提高軟件的安全性和可靠性。通常根據(jù)軟件代碼在動(dòng)態(tài)測(cè)試執(zhí)行過(guò)程中的可見(jiàn)性,又分為黑盒測(cè)試和白盒測(cè)試。黑盒測(cè)試是在程序代碼不可見(jiàn)的情況下,基于規(guī)格說(shuō)明進(jìn)行功能測(cè)試的方法;而白盒測(cè)試是在程序代碼可知的情況下,依據(jù)結(jié)構(gòu)設(shè)計(jì)開(kāi)展的結(jié)構(gòu)或邏輯測(cè)試方法。白盒測(cè)試又包括程序結(jié)構(gòu)分析、邏輯覆蓋、路徑分析等方法技術(shù),其中修正條件判定覆蓋(Modified Condition/Decision Coverage,以下簡(jiǎn)稱(chēng)MC/DC)就是邏輯覆蓋中比較典型的測(cè)試技術(shù),目前被廣泛應(yīng)用于高安全性、高可靠性的關(guān)鍵軟件測(cè)試中。
1.1 MC/DC的定義
MC/DC覆蓋測(cè)試,由波音公司提出,并被RTAC/DO-178B(機(jī)載系統(tǒng)和設(shè)備合格審定中的軟件考慮)所采納。對(duì)于關(guān)鍵性的實(shí)時(shí)程序而言,超過(guò)半數(shù)的可執(zhí)行代碼可能都與布爾運(yùn)算表達(dá)式有關(guān),表達(dá)式實(shí)現(xiàn)的正確性直接關(guān)系到程序的可靠性和安全性。采用MC/DC可以有效的發(fā)現(xiàn)布爾表達(dá)式中的錯(cuò)誤,并防止測(cè)試用例呈指數(shù)上升趨勢(shì),對(duì)它的定義為:
Condition —— a Boolean expression containing no Boolean operators;
Decision —— a Boolean expression composed of conditions and zero or more Boolean operators;
Modified Condition/Decision Coverage —— every point of entry and exit in the program has been invoked at least once,every condition in the program has taken all possible outcomes at least once,and each condition in a decision has been shown to independently affect a decision S outcome by varying just that condition while holding fixed all other possible conditions.[1]
由上可知,在MC/DC的定義中要求:
1)程序中每一個(gè)入口和出口至少被執(zhí)行一次;
2)程序中的每一個(gè)條件和所有可能的結(jié)果至少出現(xiàn)一次;
3)每個(gè)判定中的每個(gè)條件必須能夠獨(dú)立影響判定的結(jié)果,即在其它條件不變的情況下,僅改變這個(gè)條件的值,可使得判定結(jié)果改變[2]。
這里條件是指由關(guān)系操作符構(gòu)成,不包含任何邏輯操作符的布爾表達(dá)式;判定是指包含邏輯操作符的布爾表達(dá)式。如果同一個(gè)布爾表達(dá)式在一個(gè)判定中出現(xiàn)多次,則該表達(dá)式也應(yīng)算作多個(gè)條件。
MC/DC的計(jì)算方法:
MC/DC用例數(shù)=被證明獨(dú)立影響判定結(jié)果的布爾操作數(shù)的數(shù)量÷布爾操作數(shù)的總數(shù)。
1.2 MC/DC應(yīng)用的范圍
MC/DC用在采用高級(jí)語(yǔ)言開(kāi)發(fā)的具有關(guān)鍵高安全等級(jí)的軟件測(cè)試過(guò)程中,它可以有效地發(fā)現(xiàn)布爾表達(dá)式中存在的缺陷,主要發(fā)現(xiàn)的軟件問(wèn)題包括:
1) 操作符使用缺陷,如“與”被誤寫(xiě)為“或”;
2) 變量被誤寫(xiě)為它的否定所導(dǎo)致的錯(cuò)誤操作;
3) 表達(dá)式被誤寫(xiě)為它的否定所導(dǎo)致的錯(cuò)誤操作等。
采用MC/DC測(cè)試時(shí),首先確定獨(dú)立影響判定結(jié)果的條件,也就是說(shuō)如果一個(gè)條件能單獨(dú)確定判定的輸出值(判定中的其它條件保持不變),則稱(chēng)該條件獨(dú)立地影響判定結(jié)果。表明條件獨(dú)立影響判定結(jié)果的兩組測(cè)試用例稱(chēng)為獨(dú)立影響對(duì)。其次,通過(guò)真值表進(jìn)行分析,獲取獨(dú)立影響結(jié)構(gòu)的的最小子集即可得到MC/DC的最小用例集。設(shè)計(jì)獨(dú)立影響結(jié)果的最小測(cè)試用例集一般有2種方法:唯一原因法和屏蔽法。
2.1 唯一原因法
在唯一原因法中,只有關(guān)心的條件值和判定結(jié)果可以改變,而其他所有可能的條件必須保持固定。固定其他所有可能的條件是為了確保只有該條件能獨(dú)立影響判定結(jié)果。舉例說(shuō)明真值表的用法,表1是判定“Z=(A∨B)∧(C∨D)”的唯一原因法示例。
表1 唯一原因法真值表
從真值表中可以看出:
1)(2 ,10),(3 ,11),(4 ,12) 表明條件A的獨(dú)立影響;
2)(2 , 6),(3 , 7),(4 , 8) 表明條件B的獨(dú)立影響;
3)(5 , 7),(9 ,11),(13,15) 表明條件C的獨(dú)立影響;
4)(5 , 6),(9 ,10),(13,14) 表明條件D的獨(dú)立影響。
通過(guò)判定中所有條件的獨(dú)立影響對(duì)的最小組合可生成該判定的最小測(cè)試用例集,因此取交集后可以得到測(cè)試用例組(2,5,6,7,10)、(3,7,9,10,11)或(4,8,12,13,15)構(gòu)成判定Z的最小測(cè)試用例集。
2.2 屏蔽法
屏蔽法是指對(duì)一個(gè)邏輯操作符的特定輸入能隱藏對(duì)該操作符的其他輸入的影響。如“OR”操作符的“T”輸入可以屏蔽其他所有輸入;對(duì)“AND”操作符的“F”輸入可以屏蔽其他所有輸入;只要對(duì)判定的內(nèi)部邏輯分析表明關(guān)心的條件是唯一影響判定輸出值的條件,那么屏蔽法允許獨(dú)立影響對(duì)中多于一個(gè)輸入值的改變。
對(duì)于例子 Z=(A∨B)∧(C∨D)中為了表明條件A的獨(dú)立影響性,組合條件(Y= (C∨D))必須為“T” ;因?yàn)槿绻鸜為“F”,則判定“Z”的值總為“F”。對(duì)于唯一原因法,在條件A的獨(dú)立影響對(duì)中,條件C和D的值必須是固定的。而在屏蔽法中允許C和D的值變化,只要組合條件Y的結(jié)果為“T”。這樣屏蔽法比唯一原因法會(huì)產(chǎn)生更多的獨(dú)立影響對(duì)。在表1中,測(cè)試用例組2和測(cè)試用例組10~組12都能配對(duì)表明條件A的獨(dú)立性影響。
通過(guò)建立中間變量來(lái)替代所有不關(guān)心的變量,也是檢查條件屏蔽的有效方法,如,在查找上述判定中的A或B的獨(dú)立影響對(duì)時(shí),可用Y替代組合條件(C∨D),這樣便可以利用唯一原因法設(shè)計(jì)條件獨(dú)立影響結(jié)果的最小測(cè)試用例集。采用真值表獲取MC/DC覆蓋的屏蔽法見(jiàn)表2。
表2 屏蔽法真值表
某些特殊條件下,例如((X<2)‖(Y<5))&&((X<2)‖(Y≥5))是一個(gè)判定,可以表示為Z=(A∨B)∧(C∨D),在這個(gè)布爾表達(dá)式中A和C條件是一樣的,B和D是取反的關(guān)系,如果嚴(yán)格按照MC/DC的定義,不考慮條件之間的關(guān)系和邏輯替代,由于A=C,B=!D的關(guān)系存在,實(shí)際上不存在嚴(yán)格意義上的獨(dú)立對(duì),為了處理這類(lèi)情況,可以先進(jìn)行邏輯操作符的短路或布爾表達(dá)式化簡(jiǎn),忽略對(duì)最終結(jié)構(gòu)不產(chǎn)生作用的條件,之后采用真值表進(jìn)行分析,并獲取最小測(cè)試用例集。
目前流行的軟件測(cè)試工具中很多都能夠提供MC/DC覆蓋率度量方法,如Cantata++,LDRA Testbed,下面以LDRA Testbed為例,介紹MC/DC方法在軟件測(cè)試工具中的應(yīng)用。
對(duì)于高級(jí)語(yǔ)言編制的軟件,LDRA Testbed 有3 級(jí)代碼覆蓋指標(biāo),TER1=1 代表100%的語(yǔ)句覆蓋,TER2=1 代表100%的分支覆蓋,TER3=1 代表100%的LCSAJ 覆蓋(最高級(jí)覆蓋指標(biāo)路徑覆蓋的一種),而MC/DC覆蓋是介于分支覆蓋和LCSAJ 覆蓋之間的一種多條件判定覆蓋指標(biāo)。
1)TER1=1 即100%語(yǔ)句覆蓋意味著:代碼包含的每條語(yǔ)句都被使用的測(cè)試數(shù)據(jù)執(zhí)行過(guò),每個(gè)函數(shù)調(diào)用都被執(zhí)行過(guò);
2)TER2=1 即100%分支覆蓋意味著:代碼包含的每條語(yǔ)句都被使用的測(cè)試數(shù)據(jù)執(zhí)行過(guò),程序的每個(gè)判斷至少取真分支和假分支一次,即判斷的真假值均曾滿(mǎn)足;
3)100%的MC/DC 覆蓋除了具有上述的所有特征外,還意味著:所有對(duì)結(jié)果獨(dú)立影響的條件都被執(zhí)行過(guò)。
對(duì)于只有兩三個(gè)分支條件的多條件判定,用戶(hù)可以采用人工的方式設(shè)計(jì)測(cè)試用例達(dá)到100%的MC/DC 覆蓋,但是隨著分支條件數(shù)目的增大,人工方式設(shè)計(jì)測(cè)試用例條件下就有可能遺漏執(zhí)行某些條件組合或分支,而通過(guò)LDRA Testbed工具的輔助則可以避免這一情況。LDRA Testbed在靜態(tài)分析階段會(huì)通過(guò)語(yǔ)法分析偵測(cè)到程序內(nèi)所有的多條件判定,并且會(huì)產(chǎn)生MC/DC 測(cè)試用例計(jì)劃報(bào)告和動(dòng)態(tài)測(cè)試覆蓋分析報(bào)告,輔助用戶(hù)設(shè)計(jì)適當(dāng)?shù)臏y(cè)試用例滿(mǎn)足100%的MC/DC 覆蓋,如果用戶(hù)在執(zhí)行完已設(shè)計(jì)的用例后,LDRA Testbed會(huì)根據(jù)用例執(zhí)行的覆蓋情況,給出未被覆蓋的獨(dú)立條件或分支分析報(bào)告,用戶(hù)可以根據(jù)實(shí)際運(yùn)行情況適當(dāng)補(bǔ)充用例,達(dá)到測(cè)試覆蓋要求。
使用LDRA Testbed輔助進(jìn)行MC/DC覆蓋測(cè)試用例設(shè)計(jì)和執(zhí)行分析的基本步驟如下:
1)使用LDRA Testbed對(duì)程序進(jìn)行靜態(tài)分析,從程序中抽出布爾表達(dá)式的獨(dú)立影響條件;
2)基于需求設(shè)計(jì)測(cè)試用例,并根據(jù)獨(dú)立影響條件通過(guò)真值表獲取符合MC/DC準(zhǔn)則的測(cè)試用例;
3)結(jié)合源代碼執(zhí)行測(cè)試用例,并分析測(cè)試結(jié)果,如果結(jié)果為“FALSE”,則說(shuō)明軟件存在缺陷;
4)結(jié)合覆蓋分析報(bào)告獲取MC/DC覆蓋的條件,如有條件遺漏,則根據(jù)設(shè)計(jì)方法適當(dāng)補(bǔ)充用例并執(zhí)行。
表3為某飛行控制軟件部分功能模塊的覆蓋率信息,其中最后一列為MC/DC覆蓋率情況。
表3 LDRA Testbed覆蓋率信息
MC/DC覆蓋測(cè)試具有較強(qiáng)的邏輯覆蓋強(qiáng)度,是對(duì)分支條件組合覆蓋的一種非常實(shí)用的折衷,通過(guò)MC/DC覆蓋測(cè)試可以更充分地測(cè)試每個(gè)獨(dú)立的子條件,消除子條件中可能存在的錯(cuò)誤,達(dá)到用戶(hù)的需求和爭(zhēng)取較高的性?xún)r(jià)比。MC/DC覆蓋與分支條件組合覆蓋相比,能夠通過(guò)真值表等合理的用例設(shè)計(jì)方法,在滿(mǎn)足測(cè)試覆蓋指標(biāo)要求的前提下設(shè)計(jì)出具有較少測(cè)試用例的用例集,并有效發(fā)現(xiàn)軟件中存在的邏輯缺陷。由于MC/DC覆蓋具有更強(qiáng)的覆蓋強(qiáng)度,且可有效防止測(cè)試用例隨邏輯復(fù)雜度呈指標(biāo)上升的優(yōu)勢(shì),目前已被廣泛地應(yīng)用到我國(guó)航空航天高級(jí)語(yǔ)言編制的安全苛刻性軟件的測(cè)試中,成為檢出軟件錯(cuò)誤保證軟件質(zhì)量的有效而重要的測(cè)試方法。
[1] 機(jī)載系統(tǒng)和設(shè)備合格審定中的軟件考慮[S].美國(guó)航空無(wú)線(xiàn)電委員會(huì)文件RTAC/DO-178B,1992.
[2] 古樂(lè),史九林,趙斌.軟件測(cè)試技術(shù)概論[M].北京:清華大學(xué)出版社,2004.
The Research on the Method of Software Testing Based on MC/DC
YUE Hai REN Huimin
Beijing Aerospace Automatic Control Institute, Beijing 100854, China
Thedesignandeditingtestcasesarethemostimportantstepintheprocessofsoftwaretesting.Asoftwaretestingmethodbasedonmodifiedcondition/decisioncoveragecriterionispresentedinthispaper.AndanexamplegivenshowstwodifferentMC/DCcasedesignideasforacomplicatedsituation.AreasonabledesignisconcludedforthissituationwhichiscombinedwiththecoverageanalysisresultbyLDRAtest-bed.
Softwaretesting;ModifiedCondition/DecisionCoverage;Minimaltestcasesset
2011-09-26
岳 海(1973-),男,陜西人,高級(jí)工程師,研究方向?yàn)檐浖y(cè)試;任慧敏(1981-),女,內(nèi)蒙古人,工程師,主要從事軟件設(shè)計(jì)與測(cè)試技術(shù)研究。
TP391.9
A
1006-3242(2012)03-0069-04