-
修改條件判斷覆蓋
鎖定
修改條件/判斷覆蓋(Modified condition/decisioncoverage)簡稱MC/DC,是用在飛航安全軟件文件DO-178B的白箱測試方式,可以判斷A等級的軟件是否有經過適當的軟件測試。
- 中文名
- 修改條件判斷覆蓋
- 外文名
- Modified condition/decision coverage
- 簡 稱
- MC/DC
- 領 域
- 計算機
修改條件判斷覆蓋簡介
依照修改條件/判斷覆蓋的準則,測試過程中以下條件至少需成立一次。
每一個判斷的所有可能結果都出現過;
每一個判斷中所有條件的所有可能結果都出現過;
每一個進入點及結束點都執行過;
判斷中每一個條件都可以獨立的影響判斷的結果。
修改條件判斷覆蓋定義
- 條件條件是指最小單位的邏輯運算式,也就是無法再分解的邏輯運算式。
- 判斷判斷是指條件及零個至多個邏輯運算子組成的邏輯運算式,一個沒有邏輯運算子的判斷是判斷也是條件。
- 條件覆蓋程式中每一個判斷的所有條件的所有可能結果都至少出現一次。
- 判斷覆蓋程式中每一個進入點及結束點都執行過一次,每一個判斷的所有可能結果都至少出現一次。
- 條件/判斷覆蓋程式中每一個進入點及結束點都執行過一次,每一個判斷的所有條件的所有可能結果都至少出現一次,程式中判斷的所有可能結果都至少出現一次。
修改條件判斷覆蓋説明
修改條件判斷覆蓋條件/判斷覆蓋
考慮以下的C++程式
int foo (int x, int y){ int z = 0; if ((x>0) && (y>0)) { z = x; } return z;}
- 用foo(1,1)及foo(0,1)進行測試,前者會使判斷成立,後者會使判斷不成立,因此判斷的所有可能結果都至少出現一次,滿足判斷覆蓋的條件。
修改條件判斷覆蓋修改條件/判斷覆蓋
修改條件/判斷覆蓋的準則比條件/判斷覆蓋要嚴格,除上述準則外,還需要證明每一個條件都可以獨立影響判斷的結果,是指當一判斷中固定其他條件,只改變一條件時,結果會隨之改變。
考慮以下的C++程式
int foo (int x, int y, int z){ int a = 0; if (((x>0) || (y>0)) && (z>0)) { a = x; } return a;}
使用以下的測試,第一個測試會使判斷成立,第二個測試會使判斷不成立,判斷的所有可能結果都至少出現一次,判斷的每一個條件的所有可能結果也至少出現一次,滿足條件/判斷覆蓋的準則。
- foo(1,1,1)
- foo(0,0,0)
上述的第一個測試中,若將第三個數值由1改為0,判斷由成立改為不成立,因此第三個數值的1可以獨立影響判斷的結果,但若將第一個數值改為0,判斷仍然成立,因此第一個引數無法獨立影響判斷的結果,同理可證第二個數值也無法獨立影響判斷的結果。
而第二個測試中,無論哪一個數值由0改為1,判斷都不成立,因此三個數值的0都無法獨立影響判斷的結果。上述的測試無法滿足修改條件/判斷覆蓋的準則。
若要滿足修改條件/判斷覆蓋的準則,需使用以下的測試:
- foo(0,0,1)
- foo(1,0,1)
- foo(0,1,1)
- foo(1,1,0)
測試中的粗體數值表示此數值會影響輸出的結果,每一個數值(對應程式中的條件)都至少有二次機會影響輸出的結果,而且其中至少有一次使條件成立,至少也有一次使條件不成立。
修改條件/判斷覆蓋的準則需證明每個條件都可以獨立影響判斷的結果,此測試方式會比條件/判斷覆蓋要嚴格,也可以找到較多的錯誤。但考慮測試數量,條件/判斷覆蓋只需二項測試,而修改條件/判斷覆蓋需要四項測試,後者的測試成本也比前者要高。
[2]
- 參考資料
-
- 1. [編輯] 跳轉 ^ Hayhurst, Kelly; Veerhusen, Dan; Chilenski, John; Rierson, Leanna. A Practical Tutorial on Modified Condition/ Decision Coverage (PDF). NASA. May 2001.
- 2. Rajan, Ajitha; Heimdahl, Mats; Whalen, Michael (March 2003). "The Effect of Program and Model Structure on MC⁄DC Test Adequacy Coverage"
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:6次歷史版本
- 最近更新: 水你喝不喝