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