Loading AI tools
来自维基百科,自由的百科全书
修改條件/判斷覆蓋(Modified condition/decision coverage)簡稱MC/DC,在軟件測試中有關代碼覆蓋率的準則。
依照修改條件/判斷覆蓋的準則,測試過程中需要滿足以下所有條件[1]。
各條件的獨立影響可以用每一次只改變一個條件來證明。
飛航軟件開發指南DO-178B及DO-178C中指定會影響飛機起飛及降落安全性的軟件(A等級軟件),需滿足修改條件/判斷覆蓋的代碼覆蓋測試。在功能安全標準IEC 61508 part 3 的附錄B中,有關SIL 4的說明[2],以及汽車安全標準ISO 26262第6章的ASIL D[3],都高度建議使用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)
進行測試,前者會使判斷成立,後者會使判斷不成立,因此判斷的所有可能結果都至少出現一次,滿足判斷覆蓋的條件。foo(1,1)
及foo(0,0)
進行測試,條件A及B的所有結果(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)
測試中的粗體數值表示此數值會影響輸出的結果,每一個數值(對應程式中的條件)都至少有二次機會影響輸出的結果,而且其中至少有一次使條件成立,至少也有一次使條件不成立。
修改條件/判斷覆蓋的準則需證明每個條件都可以獨立影響判斷的結果,此測試方式會比條件/判斷覆蓋要嚴格,也可以找到較多的錯誤。但考慮測試數量,條件/判斷覆蓋只需二項測試,而修改條件/判斷覆蓋需要四項測試,後者的測試成本也比前者要高。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.