作者 | 李偉 上??匕舶踩珳y評部總監(jiān)
來源 |鑒源實(shí)驗(yàn)室
社群 | 添加微信號“TICPShanghai”加入“上??匕?1fusa安全社區(qū)”
前兩篇我們介紹了白盒測試中代碼結(jié)構(gòu)覆蓋率測試的語句和分支覆蓋測試,本篇我們介紹MC/DC覆蓋測試。
01
關(guān)于定義
MC/DC的全稱是Modified Condition/Decision Coverage,修正條件判定覆蓋率。很多文章對于定義的解釋都比較專業(yè),通常也會讓人感覺理解困難,本文我們用通俗易懂的說明給大家做介紹。從字面意思看這種覆蓋率是通過對條件覆蓋和判定覆蓋組合后進(jìn)行了一定的修正達(dá)成的。我們都知道窮舉測試是不可取的,所以有等價(jià)類、邊界值等測試方法來選取典型情況做測試設(shè)計(jì)。MC/DC的情況也比較類似,隨著代碼判定條件的增多,判定內(nèi)部每個(gè)條件的取值都會對判定結(jié)果產(chǎn)生作用,所有判定和所有條件的組合如果窮舉的話是不可取的,MC/DC就對組合的方式選擇進(jìn)行了約束。
MC/DC涉及到了條件覆蓋和判定覆蓋,其中判定覆蓋(分支覆蓋)我們在上一篇中已經(jīng)作了比較詳細(xì)的說明。本篇我們就先對條件覆蓋測試做簡單說明。
02
條件覆蓋
條件覆蓋測試要求測試設(shè)計(jì)時(shí)涉及邏輯判定的每個(gè)條件均要考慮到真假兩種情況。覆蓋時(shí)通常不考慮每個(gè)條件測試取值對整體判定路徑覆蓋的影響,也不考慮條件間的組合,只考慮每個(gè)條件要設(shè)計(jì)真假兩種情況。理論上在一次邏輯判定的路徑選擇由兩個(gè)及以上條件組合決定時(shí),條件覆蓋的測試用例數(shù)要多于分支覆蓋測試。
2.1 條件覆蓋測試的舉例
我們繼續(xù)使用上篇中的一段簡單代碼來舉例說明:
這段代碼有一個(gè)邏輯判定,x < 10 && y > 10的結(jié)果是否為假,對應(yīng)判定的兩個(gè)分支。這樣設(shè)計(jì)測試用例對應(yīng)判定是基于分支覆蓋來進(jìn)行的,可以用如下表進(jìn)行條件取值來做到分支判定100%覆蓋率。
基于條件覆蓋做測試設(shè)計(jì)時(shí),我們測試用例應(yīng)該要保證每個(gè)條件的真假都被覆蓋到,如下表所示。
我們可以看到判定覆蓋時(shí)條件y并沒有取到假的情況,同樣滿足了判定覆蓋率100%,如果剛好此情景下存在故障,僅執(zhí)行了100%的判定覆蓋是不能發(fā)現(xiàn)這個(gè)故障的。因此通過這個(gè)例子我們可以看到當(dāng)參與路徑判定的條件足夠多時(shí),條件覆蓋的測試充分程度是高于分支覆蓋的。
2.2 條件覆蓋的不足
從定義要求中我們可以看到,條件覆蓋只關(guān)注了每個(gè)條件的真假要覆蓋到,對于條件之間的組合或組合對最終判定的影響是不關(guān)注的,如果使用僅符合于條件覆蓋需要的測試設(shè)計(jì),在某些情況下即使每個(gè)條件都做到了真假的覆蓋,由于條件之間的組合,也可能導(dǎo)致某些路徑不會被覆蓋到。
我們將前例中的判定增加一個(gè)條件,如下表中所示。
例:if (x < 10 && y > 10 && z == 0)
如上表所示我們根據(jù)條件覆蓋的要求,測試設(shè)計(jì)時(shí)考慮到了每個(gè)條件均做了真假兩種情況的取值,但是整體的路徑判定只覆蓋到了為真的情況,分支判定為假的路徑例中的測試設(shè)計(jì)并未覆蓋到。
那我們?yōu)槭裁床粚⒚糠N組合都做設(shè)計(jì)呢,設(shè)想一下如果參與路徑判定的條件有5個(gè)時(shí),測試用例的設(shè)計(jì)將會多達(dá)10余條。程序中的判定越多,參與判定的條件越多,這樣設(shè)計(jì)的測試用例會迅速擴(kuò)大至無法實(shí)際操作。MC/DC覆蓋能夠在兩者之間進(jìn)行一個(gè)很好的平衡,既考慮分支路徑的判斷覆蓋又滿足參與判定的條件取值要求。
03
MC/DC覆蓋
MC/DC的覆蓋要求源于DO 178適航符合性方法。該標(biāo)準(zhǔn)由美國航空無線電技術(shù)委員會(RTCA)編制發(fā)布,并作為民用飛機(jī)機(jī)載軟件開發(fā)和適航認(rèn)證的標(biāo)準(zhǔn)指南文件。由于民航適航認(rèn)證過程的強(qiáng)制性,MC/DC覆蓋率測試也成為民用航空電子軟件適航測試過程的必須執(zhí)行項(xiàng)。
DO 178標(biāo)準(zhǔn)首個(gè)版本于1982年發(fā)布,最新版本為2011年12月發(fā)布的第四版DO 178C。標(biāo)準(zhǔn)對MC/DC覆蓋的定義原文描述如下:
Modified Condition/Decision Coverage: Every point of entry and exit in the program has been invoked at least once, every condition in a decision in the program has taken all possible outcomes at least once, every decision in the program has taken all possible outcomes at least once, and each condition in a decision has been shown to independently affect that decision’s outcome. A condition is shown to independently affect a decision’s outcome by: (1) varying just that condition while holding fixed all other possible conditions, or (2) varying just that condition while holding fixed all other possible conditions that could affect the outcome.
定義要求:程序里的每一個(gè)輸入和輸出點(diǎn)要至少被調(diào)用一次,程序里一個(gè)判定中每個(gè)條件要至少一次考慮達(dá)到所有可能性的結(jié)果,程序里每個(gè)判定至少一次考慮達(dá)到了所有可能性結(jié)果,并且一次判定中的每個(gè)條件已體現(xiàn)獨(dú)立地影響該判定的結(jié)果。一個(gè)條件可以通過以下方式獨(dú)立地影響決策的結(jié)果:(1)只改變該條件,同時(shí)保持所有其他可能的條件不變;或(2)只改變該條件,同時(shí)保持所有其他可能影響結(jié)果的條件不變。
原文的專業(yè)定義大家可能覺得難以理解,我們繼續(xù)使用之前的例子來說明MC/DC的覆蓋設(shè)計(jì)要求。
以SIL A級要求為準(zhǔn),示例代碼的條件判斷組合如下:if (x < 10 && y > 10 && z == 0)
示例中有一次判定,和3個(gè)對結(jié)果有影響的條件。設(shè)計(jì)的測試用例中,查看完整的示例代碼(示例代碼沒有補(bǔ)充輸入變量z)所有輸入輸出都做了考慮,每個(gè)條件的可能情況均做了取值,判定的兩種結(jié)果都做到了測試覆蓋,某條件取值變化時(shí)都保持了所有其他條件的不變。
04
MC/DC覆蓋測試的設(shè)計(jì)取值模型
通常根據(jù)安全要求的等級不同,覆蓋率設(shè)計(jì)要求也不同,下面我們簡單對不同情況下判定和條件測試設(shè)計(jì)考慮情況進(jìn)行舉例。
4.1 MC/DC 測試設(shè)計(jì) (SIL A)
其他SIL等級下的DC和SC測試設(shè)計(jì)時(shí)的情況組合我們就不列舉了,前篇文檔我們已做了說明,具體使用時(shí)大家也可以查閱相關(guān)的專業(yè)文檔和測試設(shè)計(jì)要求文檔。
05
測試小結(jié)
在執(zhí)行MC/DC覆蓋測試時(shí)我們有以下建議供大家參考。
1.MC/DC覆蓋測試的條件取值組合有比較詳細(xì)的要求,不能簡單認(rèn)為已完成分支的覆蓋率100%和某些條件的設(shè)計(jì)取值,就已經(jīng)完成了MC/DC覆蓋率的設(shè)計(jì)要求。需要根據(jù)上一章節(jié)中的標(biāo)準(zhǔn)設(shè)計(jì)取值模型或?qū)嶋H項(xiàng)目中要求的標(biāo)準(zhǔn),對所有條件的可能情況和分支覆蓋情況做整體考慮。
2.MC/DC覆蓋測試比其他結(jié)構(gòu)的覆蓋測試復(fù)雜,測試設(shè)計(jì)時(shí)可以使用輔助工具來演算每個(gè)條件對判定的影響情況,從而更全面的完成用例編寫。
3.提高代碼的編寫和閱讀能力對測試會有很大的幫助,同樣此類測試執(zhí)行多了對代碼編寫質(zhì)量的提升也會有很大幫助。
參考文獻(xiàn):
[1] RTCA DO-178C, “Software Considerations in Airborne Systems and Equipment Certification,” December 2011
審核編輯 黃宇
-
軟件
+關(guān)注
關(guān)注
69文章
4944瀏覽量
87491 -
軟件代碼
+關(guān)注
關(guān)注
0文章
9瀏覽量
6344 -
結(jié)構(gòu)化
+關(guān)注
關(guān)注
0文章
27瀏覽量
10308 -
覆蓋測試
+關(guān)注
關(guān)注
0文章
4瀏覽量
1119
發(fā)布評論請先 登錄
相關(guān)推薦
評論