2012-01-14 38 views
6

比方說,我有這一塊的C/C++代碼:基本塊覆蓋率 - 準確的定義是什麼?

int c = 12; // Should I count this line as basic block? 
if (a != 0 && b > 10) { 
    c += (a + b); 
} else { 
    c += 1; 
} 
printf("%d", c); // Should I count this line as basic block? 

什麼是測試用例a = 1, b = 12基本塊覆蓋

75%還是50%?

我應該把第一行還是最後一行作爲基本塊? 基本塊的準確定義是什麼?

混亂的另一點:

int c = 16; 
d += c; 

它是一個基本塊或2基本塊?每條線都應該算作基本塊嗎?

回答

5

一個基本塊包含所有的指令,這些指令具有如果其中一個被執行,然後同一個基本塊中的所有其他都被執行的屬性。命名基本塊的第一條指令a 組長我們可以得到以下基本塊的定義:一個領導者之後的所有指令的集合,如果領導者被執行,它將被執行。領導者是基本塊的開始。

確定領導找到代碼中的所有跳轉指令。每個跳轉目標和每個跳轉後的指令都是一個領導。方法中的第一條指令也是一個領導者。

要找到基本塊,只需通過從領導到下一個的所有指令。

你的第一個例子:

int c = 12; // Leader 
if (a != 0 && b > 10) { // Jump 
    c += (a + b); // Leader 
} else { 
    c += 1; // Leader 
} 
printf("%d", c); // Leader -- target of jump from the end of the true branch 

你必須有4個基本模塊:一個用於if,一個用於printf的每個分支的if後一個爲c初始化。如果a == 1 && b == 12只執行三個基本塊,則覆蓋率爲75%。

你的第二個例子沒有跳轉指令=>只有一個基本塊。

相關問題