的例子我正在研究這些之間的差異,並不能理解差異。這對我來說似乎是一樣的。 Arent他們一樣嗎?風險來自短路,不是嗎?問題與決策和聲明覆蓋率的缺點
語句覆蓋不要求測試邏輯運算符。在C++ 和C中,這些運算符是& &,||和?:。聲明範圍不能由 區分由邏輯運算符分開的代碼與 聲明的其餘部分。在語句中執行代碼的任何部分會導致語句覆蓋率聲明完全覆蓋整個語句。當邏輯運算符避免不必要的評估(通過短路)時, 語句覆蓋給出了誇大的覆蓋率測量。
void function(const char* string1, const char* string2 = NULL);
...
void function(const char* string1, const char* string2)
{
if (condition || strcmp(string1, string2) == 0) // Oops, possible null pointer passed to strcmp
...
}
判定覆蓋 - 的缺點是,此度量忽略由於短路 運營商發生布爾表達式內 分支。例如,請考慮下面的C/C++/Java代碼片斷 :
if (condition1 && (condition2 || function1()))
statement1;
else
statement2;
謝謝。只是爲了分支機構的報道,我不明白四個分支是什麼意思 - 我認爲它總是是真的還是假的。 – user970696 2013-02-21 09:25:16
'if(...)'將評估爲true/false,但有4種情況需要測試,以便完全測試代碼中的所有分支/路徑。即在測試中,我可以執行路徑,使得我訪問了statement1和statement2而不執行function1() - 這是不好的,因爲function1可能有問題,我們不想在生產中找到它。 – 2013-02-21 09:48:58