0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

軟件代碼結(jié)構(gòu)化覆蓋測試-MC/DC覆蓋

上??匕?/a> ? 來源:鑒源實(shí)驗(yàn)室 ? 作者:鑒源實(shí)驗(yàn)室 ? 2023-12-15 15:22 ? 次閱讀

作者 | 李偉 上??匕舶踩珳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ù)使用上篇中的一段簡單代碼來舉例說明:

wKgZomV7_fGAOG85AAA49-kSd0E902.png

這段代碼有一個(gè)邏輯判定,x < 10 && y > 10的結(jié)果是否為假,對應(yīng)判定的兩個(gè)分支。這樣設(shè)計(jì)測試用例對應(yīng)判定是基于分支覆蓋來進(jìn)行的,可以用如下表進(jìn)行條件取值來做到分支判定100%覆蓋率。

wKgaomV7_fmAf3QjAAAjLoZnn3Q848.png

基于條件覆蓋做測試設(shè)計(jì)時(shí),我們測試用例應(yīng)該要保證每個(gè)條件的真假都被覆蓋到,如下表所示。

wKgZomV7_gCAJ-oeAAAozkymk4w232.png

我們可以看到判定覆蓋時(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)

wKgaomV7_guAPIXfAAAuVqANKYg628.png

如上表所示我們根據(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)

wKgZomV7_hWAP0EqAAA2FA1t0Gc486.png

示例中有一次判定,和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)

wKgaomV7_h2AOscFAAAT2aWXJyw056.pngwKgZomV7_jqASGniAAAS6xbosLo357.pngwKgZomV7_kSAFmhzAAAaWkzOWoM276.pngwKgZomV7_kyAXo1yAAAZruLcZJs535.pngwKgZomV7_lmAKDbjAAAaUtjJklw784.pngwKgZomV7_lmAKDbjAAAaUtjJklw784.pngwKgaomV7_m6AO798AAAiwbukTSQ787.pngwKgZomV7_niASs4DAAAinoiJTvA085.png

其他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

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 軟件
    +關(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
收藏 人收藏

    評論

    相關(guān)推薦

    代碼覆蓋測試工具BullseyeCoverage在嵌入式軟件系統(tǒng)中的應(yīng)用研究

    代碼覆蓋分析是一種白盒測試方法,因?yàn)?b class='flag-5'>覆蓋分析需要訪問測試代碼本身,且經(jīng)常需要重新編譯程序,以程序
    的頭像 發(fā)表于 09-21 17:36 ?3721次閱讀
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>率<b class='flag-5'>測試</b>工具BullseyeCoverage在嵌入式<b class='flag-5'>軟件</b>系統(tǒng)中的應(yīng)用研究

    怎么設(shè)計(jì)基于路徑覆蓋的嵌入式軟件動態(tài)測試?

    測試結(jié)果的有效性;而僅在目標(biāo)機(jī)上進(jìn)行測試,由于軟件運(yùn)行的不可視性,又使得測試者難以知曉程序當(dāng)前運(yùn)行狀態(tài),以及代碼
    發(fā)表于 08-26 07:45

    基于路徑覆蓋的嵌入式軟件動態(tài)該怎么測試?

    測試結(jié)果的有效性;而僅在目標(biāo)機(jī)上進(jìn)行測試,由于軟件運(yùn)行的不可視性,又使得測試者難以知曉程序當(dāng)前運(yùn)行狀態(tài),以及代碼
    發(fā)表于 08-28 07:38

    如何對嵌入式軟件進(jìn)行覆蓋測試

    嵌入式軟件覆蓋測試原理是什么?嵌入式實(shí)時(shí)操作系統(tǒng)的覆蓋測試工具是什么?Logiscope在嵌入式操作系統(tǒng)DeltaCORE
    發(fā)表于 05-13 07:30

    結(jié)構(gòu)化P2P覆蓋網(wǎng)絡(luò)通信協(xié)議研究

    針對各種基于流言機(jī)制的通信協(xié)議在構(gòu)造非結(jié)構(gòu)化P2P覆蓋網(wǎng)絡(luò)中,其適用范圍缺乏廣泛的實(shí)證問題,提出了一個(gè)通用的協(xié)議框架--基于流言機(jī)制的節(jié)點(diǎn)采樣服務(wù),以執(zhí)行高效和可靠的節(jié)
    發(fā)表于 03-22 00:36 ?26次下載

    嵌入式代碼覆蓋率統(tǒng)計(jì)方法和經(jīng)驗(yàn)

    代碼覆蓋率是衡量軟件測試完成情況的指標(biāo),通?;?b class='flag-5'>測試過程中已檢查的程序源代碼比例計(jì)算得出。
    的頭像 發(fā)表于 01-06 15:06 ?3169次閱讀
    嵌入式<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>率統(tǒng)計(jì)方法和經(jīng)驗(yàn)

    統(tǒng)計(jì)嵌入式代碼覆蓋率的方法和經(jīng)驗(yàn)

    代碼覆蓋率是衡量軟件測試完成情況的指標(biāo),通常基于測試過程中已檢查的程序源代碼比例計(jì)算得出。
    的頭像 發(fā)表于 03-29 11:58 ?1954次閱讀
    統(tǒng)計(jì)嵌入式<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>率的方法和經(jīng)驗(yàn)

    如何使用覆蓋率指標(biāo)進(jìn)行更有效的嵌入式軟件測試

      聲明、決策或 MC/DC 覆蓋率等指標(biāo)并不能保證軟件沒有缺陷。如前所述,真正詳盡的測試可能是不可能的,或者至少是不可行的。然而,
    的頭像 發(fā)表于 06-29 10:20 ?1553次閱讀

    選擇代碼覆蓋工具的 10 個(gè)標(biāo)準(zhǔn)

    為了開發(fā)安全可靠的軟件測試是質(zhì)量保證不可或缺的一部分。如果沒有充分的記錄測試,就不可能確定軟件是否安全且功能是否正確。在這種情況下,代碼
    的頭像 發(fā)表于 07-20 18:06 ?1362次閱讀
    選擇<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>工具的 10 個(gè)標(biāo)準(zhǔn)

    代碼覆蓋率工具的重要性

    測試覆蓋率是軟件質(zhì)量的重要指標(biāo),也是軟件維護(hù)的重要組成部分。它通過提供不同承保項(xiàng)目的數(shù)據(jù)來幫助評估測試的有效性。這種洞察力允許通過為未經(jīng)
    的頭像 發(fā)表于 12-08 15:13 ?1467次閱讀
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>率工具的重要性

    代碼覆蓋檢測

    1 代碼覆蓋率概述 覆蓋率(code coverage rate)是反映測試用例對被測軟件覆蓋
    的頭像 發(fā)表于 05-12 22:26 ?2982次閱讀
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>檢測

    MC/DC:與100%覆蓋率的斗爭

    軟件測試領(lǐng)域,MC/DC或許已經(jīng)是一個(gè)耳熟能詳?shù)脑~匯了,但是我們還是要不斷強(qiáng)調(diào)如何正確使用MC/DC
    的頭像 發(fā)表于 11-07 10:11 ?2398次閱讀
    <b class='flag-5'>MC</b>/<b class='flag-5'>DC</b>:與100%<b class='flag-5'>覆蓋</b>率的斗爭

    軟件代碼結(jié)構(gòu)化覆蓋測試-語句覆蓋

    本篇將深入到代碼層面,講解單元測試中的一項(xiàng)重要工作-軟件代碼測試。
    的頭像 發(fā)表于 08-25 11:50 ?648次閱讀
    <b class='flag-5'>軟件</b><b class='flag-5'>代碼</b><b class='flag-5'>結(jié)構(gòu)化</b><b class='flag-5'>覆蓋</b><b class='flag-5'>測試</b>-語句<b class='flag-5'>覆蓋</b>

    軟件代碼結(jié)構(gòu)化覆蓋測試-分支覆蓋

    本篇我們介紹分支覆蓋,從測試技術(shù)對代碼測試程度上來說,在復(fù)雜代碼中,分支覆蓋比語句
    的頭像 發(fā)表于 09-01 11:34 ?677次閱讀
    <b class='flag-5'>軟件</b><b class='flag-5'>代碼</b><b class='flag-5'>結(jié)構(gòu)化</b><b class='flag-5'>覆蓋</b><b class='flag-5'>測試</b>-分支<b class='flag-5'>覆蓋</b>

    代碼覆蓋率記錄

    為確保具體的產(chǎn)品(例如,醫(yī)療或航空電子市場)質(zhì)量合格, 通常需要提供語句覆蓋與判定覆蓋認(rèn)證證明。對于各種嵌 入式系統(tǒng),規(guī)范要求高度優(yōu)化的代碼需要實(shí)時(shí)測試。禁止
    發(fā)表于 11-03 11:02 ?0次下載
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>率記錄