1.0 流程圖示識

1.1 陳述句覆寫法(C0標準)
① 目標
? 程式中的每個可執行陳述句至少被執行一次
后面如未說明那就是還是用的這個樣例
程式源代碼:
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
int a, b;
double c;
Scanner scanner = new Scanner(System.in);
a = scanner.nextInt();
b = scanner.nextInt();
c = scanner.nextDouble();
if (a > 0 && b > 0) {
c = c / a;
} else if (a > 1 || c > 1) {
c = c + 1;
}
c = b + c;
System.out.println("a=" + a);
System.out.println("b=" + b);
System.out.println("c=" + c);
scanner.close();
}
}
畫出流程圖:

② 用例
| 輸入 | 輸出 |
|---|---|
| a = 2 b = 1 c = 6 | a = 2 b = 1 c = 7 |
③ 優缺點
- 陳述句覆寫能發現陳述句錯誤
- 陳述句覆寫不能發現邏輯錯誤
1.2 判定/分支覆寫法(C1標準)
① 目標
? 程式中每個判定的取真分支和取假分支至少執行一次
② 用例
| 輸入 | 輸出 |
|---|---|
| a = 2 b = 1 c = 6 | a = 2 b = 1 c = 5 |
| a = -1 b = 1 c = 1 | a = -1 b = 1 c = 7 |
③ 優缺點
- 判定/分支覆寫能發現邏輯錯誤
- 判定/分支覆寫不能發現組合判斷中的條件錯誤
1.3 條件覆寫法(C2標準)
① 目標
? 程式中每個判定中每個條件的可能取值至少滿足一次
② 用例
? 判定3:(a > 0 && b > 0)
? 判定6:(a > 1 || c > 1)
? 原子條件集:
? a > 0
? b > 0
? a > 1
? c > 1
要求:各原子條件集真偽各取一次
| 輸入 | 原子條件 | 判定條件 |
|---|---|---|
| a = -1 b = 2 c = 3 | a>0取假,b>0取真,a>1取假,c>1取真 | 判定3取假,判定6取真 |
| a = 2 b = -1 c = -2 | a>0取真,b>0取假,a>1取真,c>1取假 | 判定3取假,判定6取真 |
③ 優缺點
- 未必比判定/分支覆寫更全面
- 不能發現邏輯錯誤
1.4 判定條件覆寫法(C1+C2標準)
① 目標
? 每個條件中的所有可能取值至少執行一次,同時,每個判定的可能結果至少執行一次
② 用例
| 輸入 | 原子條件 | 判定條件 |
|---|---|---|
| a = 2 b = 1 c = 4 | a>0取真,b>0取真,a>1取真,c>1取真 | 判定3取真,判定6取真 |
| a = -1 b = -2 c = -3 | a>0取假,b>0取假,a>1取假,c>1取假 | 判定3取假,判定6取假 |
③ 優缺點
- 可能會導致某些條件掩蓋了另一些條件
1.5 條件組合覆寫法(C3標準)
① 目標
? 每個判定中的所有的條件取值組合至少執行一次
② 用例
? 判定3:(a > 0 && b > 0)
? 判定6:(a > 1 || c > 1)
? 原子條件集:
? a > 0 b > 0 a > 1 c > 1
要求:
? a>0時,b>0真偽各一次
? a<=0時,b>0真偽各一次
? a>1時,c>1真偽各一次
? a<=1時,c>1真偽各一次
| 輸入 | 原子條件 | 判定條件 |
|---|---|---|
| a = 2 b = 1 c = 6 | a>0取真,b>0取真,a>1取真,c>1取真 | 判定3取真,判定6取真 |
| a = 2 b = -1 c = -2 | a>0取真,b>0取假,a>1取真,c>1取假 | 判定3取假,判定6取真 |
| a = -1 b = 2 c = 3 | a>0取假,b>0取真,a>1取假,c>1取真 | 判定3取假,判定6取真 |
| a = -1 b = -2 c = -3 | a>0取假,b>0取假,a>1取假,c>1取假 | 判定3取假,判定6取假 |
③ 優缺點
- 比條件覆寫法更全面
1.6 路徑覆寫
① 目標
? 用例覆寫程式中的所有可能的執行路徑
② 用例
| 輸入 | 原子條件 | 判定條件 |
|---|---|---|
| a = 2 b = 1 c = 6 | a>0取真,b>0取真,a>1取真,c>1取真 | 判定3取真,判定6取真 |
| a = 1 b = 1 c = -3 | a>0取真,b>0取真,a>1取假,c>1取假 | 判定3取真,判定6取假 |
| a = -1 b = 2 c = 3 | a>0取假,b>0取真,a>1取假,c>1取真 | 判定3取假,判定6取真 |
| a = -1 b = -2 c = -3 | a>0取假,b>0取假,a>1取假,c>1取假 | 判定3取假,判定6取假 |
③ 優缺點
- 不切實際
- 因為涉及到相關長和幾乎無窮盡的路徑數
- 任何可能的循環在程式段中都被視為是可能的路徑
1.7 基本路徑覆寫法
1)McCabe的基路徑方法

2)從源節點到匯節點的線性獨立路徑數(根據圈復雜度計算)
- V(G) = e - n + 2p = 10 - 7 + 2 = 5
- 當規模很小時,我們可以直觀地標識獨立路徑
3)以下給出的是用節點/邊序串列示的路徑:
- p1:A,B,C,G/1,4,9
- p2:A,B,C,B,C,G/1,4,3,4,9
- p3:A,B,E,F,G/1,5,8,10
- p4:A,D,E,F,G/2,6,8,10
- p5:A,D,F,G/2,7,10
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/524953.html
標籤:其他
