fbpx
维基百科

修改條件判斷覆蓋

修改條件/判斷覆蓋Modified condition/decision coverage)簡稱MC/DC,在软件测试中有關代碼覆蓋率的準則。

依照修改條件/判斷覆蓋的準則,測試過程中需要滿足以下所有條件[1]

  • 每一個判斷的所有可能結果都出現過
  • 每一個判斷中所有條件的所有可能結果都出現過
  • 每一個進入點及結束點都執行過
  • 判斷中每一個條件都可以獨立影響判斷的結果

各條件的獨立影響可以用每一次只改變一個條件來證明。

飛航軟體開發指南DO-178B英语DO-178BDO-178C英语DO-178C中指定會影響飛機起飛及降落安全性的軟體(A等級軟體),需滿足修改條件/判斷覆蓋的代碼覆蓋測試。在功能安全標準IEC 61508 part 3 的附錄B中,有關SIL 4的說明[2],以及汽車安全標準ISO 26262第6章的ASIL D[3],都高度建議使用MC/DC。

定義 编辑

條件(Condition)
條件是指最小單位的邏輯運算式英语Expression (programming),也就是無法再分解的邏輯運算式。
判斷(Decision)
判斷是指條件及零個至多個邏輯運算子組成的邏輯運算式,一個沒有邏輯運算子的判斷是判斷也是條件。
條件覆蓋(Condition coverage)
程式中每一個判斷的所有條件的所有可能結果都至少出現一次。
判斷覆蓋(Decision coverage)
程式中每一個進入點及結束點都執行過一次,每一個判斷的所有可能結果都至少出現一次。
條件/判斷覆蓋(Condition/decision coverage)
程式中每一個進入點及結束點都執行過一次,每一個判斷的所有條件的所有可能結果都至少出現一次,程式中判斷的所有可能結果都至少出現一次。
修改條件/判斷覆蓋(Modified condition/decision coverage)
程式中每一個進入點及結束點都執行過一次,每一個判斷的所有條件的所有可能結果都至少出現一次,程式中判斷的所有可能結果都至少出現一次,而每一個條件都可以獨立的影響判斷的結果。

說明 编辑

條件/判斷覆蓋 编辑

考慮以下的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)

測試中的粗體數值表示此數值會影響輸出的結果,每一個數值(對應程式中的條件)都至少有二次機會影響輸出的結果,而且其中至少有一次使條件成立,至少也有一次使條件不成立。

修改條件/判斷覆蓋的準則需證明每個條件都可以獨立影響判斷的結果,此測試方式會比條件/判斷覆蓋要嚴格,也可以找到較多的錯誤。但考慮測試數量,條件/判斷覆蓋只需二項測試,而修改條件/判斷覆蓋需要四項測試,後者的測試成本也比前者要高。

外部連結 编辑

  • What is a "Decision" in Application of Modified Condition/Decision Coverage (MC/DC) and Decision Coverage (DC)?(页面存档备份,存于互联网档案馆
  • An Investigation of Three Forms of the Modified Condition Decision Coverage (MCDC) Criterion (页面存档备份,存于互联网档案馆

參考資料 编辑

  1. ^ Hayhurst, Kelly; Veerhusen, Dan; Chilenski, John; Rierson, Leanna. A Practical Tutorial on Modified Condition/ Decision Coverage (PDF). NASA. May 2001 [2012-04-20]. (原始内容 (PDF)于2019-10-15). 
  2. ^ IEC 61508-3:2010
  3. ^ ISO 26262-2011 Part 6 Table 12

修改條件判斷覆蓋, 修改條件, 判斷覆蓋, modified, condition, decision, coverage, 簡稱mc, 在软件测试中有關代碼覆蓋率的準則, 依照修改條件, 判斷覆蓋的準則, 測試過程中需要滿足以下所有條件, 每一個判斷的所有可能結果都出現過, 每一個判斷中所有條件的所有可能結果都出現過, 每一個進入點及結束點都執行過, 判斷中每一個條件都可以獨立影響判斷的結果各條件的獨立影響可以用每一次只改變一個條件來證明, 飛航軟體開發指南do, 178b, 英语, 178b, 及do, 178. 修改條件 判斷覆蓋 Modified condition decision coverage 簡稱MC DC 在软件测试中有關代碼覆蓋率的準則 依照修改條件 判斷覆蓋的準則 測試過程中需要滿足以下所有條件 1 每一個判斷的所有可能結果都出現過 每一個判斷中所有條件的所有可能結果都出現過 每一個進入點及結束點都執行過 判斷中每一個條件都可以獨立影響判斷的結果各條件的獨立影響可以用每一次只改變一個條件來證明 飛航軟體開發指南DO 178B 英语 DO 178B 及DO 178C 英语 DO 178C 中指定會影響飛機起飛及降落安全性的軟體 A等級軟體 需滿足修改條件 判斷覆蓋的代碼覆蓋測試 在功能安全標準IEC 61508 part 3 的附錄B中 有關SIL 4的說明 2 以及汽車安全標準ISO 26262第6章的ASIL D 3 都高度建議使用MC DC 目录 1 定義 2 說明 2 1 條件 判斷覆蓋 2 2 修改條件 判斷覆蓋 3 外部連結 4 參考資料定義 编辑條件 Condition 條件是指最小單位的邏輯運算式 英语 Expression programming 也就是無法再分解的邏輯運算式 判斷 Decision 判斷是指條件及零個至多個邏輯運算子組成的邏輯運算式 一個沒有邏輯運算子的判斷是判斷也是條件 條件覆蓋 Condition coverage 程式中每一個判斷的所有條件的所有可能結果都至少出現一次 判斷覆蓋 Decision coverage 程式中每一個進入點及結束點都執行過一次 每一個判斷的所有可能結果都至少出現一次 條件 判斷覆蓋 Condition decision coverage 程式中每一個進入點及結束點都執行過一次 每一個判斷的所有條件的所有可能結果都至少出現一次 程式中判斷的所有可能結果都至少出現一次 修改條件 判斷覆蓋 Modified condition decision coverage 程式中每一個進入點及結束點都執行過一次 每一個判斷的所有條件的所有可能結果都至少出現一次 程式中判斷的所有可能結果都至少出現一次 而每一個條件都可以獨立的影響判斷的結果 說明 编辑條件 判斷覆蓋 编辑 考慮以下的C 程式 int foo int x int y int z 0 if x gt 0 amp amp y gt 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 gt 0 y gt 0 amp amp z gt 0 a x return a 使用以下的測試 第一個測試會使判斷成立 第二個測試會使判斷不成立 判斷的所有可能結果都至少出現一次 判斷的每一個條件的所有可能結果也至少出現一次 滿足條件 判斷覆蓋的準則 foo 1 1 1 foo 0 0 0 上述的第一個測試中 若將第三個數值由1改為0 判斷由成立改為不成立 因此第三個數值的1可以獨立影響判斷的結果 但若將第一個數值改為0 判斷仍然成立 因此第一個引數無法獨立影響判斷的結果 同理可證第二個數值也無法獨立影響判斷的結果 而第二個測試中 無論哪一個數值由0改為1 判斷都不成立 因此三個數值的0都無法獨立影響判斷的結果 上述的測試無法滿足修改條件 判斷覆蓋的準則 若要滿足修改條件 判斷覆蓋的準則 需使用以下的測試 foo b 0 b b 0 b 1 foo b 1 b 0 b 1 b foo 0 b 1 b b 1 b foo 1 1 b 0 b 測試中的粗體數值表示此數值會影響輸出的結果 每一個數值 對應程式中的條件 都至少有二次機會影響輸出的結果 而且其中至少有一次使條件成立 至少也有一次使條件不成立 修改條件 判斷覆蓋的準則需證明每個條件都可以獨立影響判斷的結果 此測試方式會比條件 判斷覆蓋要嚴格 也可以找到較多的錯誤 但考慮測試數量 條件 判斷覆蓋只需二項測試 而修改條件 判斷覆蓋需要四項測試 後者的測試成本也比前者要高 外部連結 编辑What is a Decision in Application of Modified Condition Decision Coverage MC DC and Decision Coverage DC 页面存档备份 存于互联网档案馆 An Investigation of Three Forms of the Modified Condition Decision Coverage MCDC Criterion 页面存档备份 存于互联网档案馆 參考資料 编辑 Hayhurst Kelly Veerhusen Dan Chilenski John Rierson Leanna A Practical Tutorial on Modified Condition Decision Coverage PDF NASA May 2001 2012 04 20 原始内容存档 PDF 于2019 10 15 IEC 61508 3 2010 ISO 26262 2011 Part 6 Table 12 取自 https zh wikipedia org w index php title 修改條件判斷覆蓋 amp oldid 75442095, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。