聲明範圍被認爲確保代碼中的每個語句至少執行一次。
判定/分支覆蓋範圍被認爲是測試每個分支/決定的輸出被測試,即所有在假/真分支中的語句都將被執行。
但這不一樣嗎?在語句覆蓋範圍內,我需要執行所有語句,所以我猜想只能通過運行所有可能的方式來完成。我知道我失去了一些東西..聲明和決策覆蓋範圍之間的差異
回答
你可能有這樣一種說法:
if(a || b || (c && d && !e)) {
test1 = true;
} else {
test2 = false;
}
如果你的代碼覆蓋率說這兩個測試1和測試2線被擊中,那麼你有語句覆蓋,但要獲得全分支機構的覆蓋範圍,你需要測試何時a是真實的,當a是假的,但b是真的,當a和b是假的,但c和d是真的,e是假的,等等。
分支機構覆蓋涵蓋每個潛在的組合的分支選擇,因此很難實現100%的覆蓋率。
不知道爲什麼這是從來沒有投票答案。很好的解釋! –
這是錯誤的。分支覆蓋僅需要覆蓋控制流程圖中的所有邊。布爾評估分支到兩個邊緣。看看上面的答案是否正確的答案。 – Outlier
@PaulRutland你所描述的是條件覆蓋,而不是分支覆蓋。 –
Paul的回答並不完全正確,至少我認爲是這樣(根據ISTQB的定義)。聲明,決策/分支和條件覆蓋率之間存在相當大的差異。 我將使用來自其他答案的示例,但修改了一下,所以我可以顯示所有三個測試覆蓋範例。這裏寫的測試爲每種類型提供了100%的測試覆蓋率。
if(a || b)) {
test1 = true;
}
else {
if(c) {
test2 = true
}
}
我們有兩種說法在這裏 - 如果(A || B),如果(C),充分說明這些覆蓋面不同的:
- 語句覆蓋必須至少測試每個語句一次,所以我們只需要兩個測試:
- 一個真正= b = false - 也爲我們提供了路徑,如果(A || b)真實 - >測試1 =真
- A =假,b =假和c = true - 這給了我們路徑: if(a || b)false - > else - > if(c) - > test2 = true。
這樣我們就執行了每一條語句。
分支/判定覆蓋需要多一個測試:
- 一個=假,B =假,C =假 - 這使我們認爲第二如果但我們正在執行該聲明中的假分支,但未在語句覆蓋範圍內執行
這樣我們就測試了所有分支,這意味着我們經歷了所有路徑。
條件覆蓋需要另一個測試:
- A =假,B =真 - 通過爲第一個測試相同的路徑通向但在OR語句(A || B)執行其他決定通過它。
我們所有條件測試的方式,這意味着我們通過所有路徑(分支)去與我們所能每個條件觸發了 - 第一個「如果」語句是因爲第一個測試真正= true觸發它並在最後一次測試中因爲b = true觸發了它。當然,有人可能會認爲a = true和b = true的情況也應該進行測試,但是當我們檢查'或'是如何工作的時候,我們可以看到它不是必需的,變量c也可以是任何值在那些測試中沒有評估。
至少我這樣解釋它。如果有人仍有意:)
編輯:在大多數的來源,我發現最近決定/分支覆蓋方面是等同的,我描述爲判定覆蓋術語實際上是在條件覆蓋,因此答案是更新。
我不認爲這是正確的。根據ISTQB詞彙表(http://astqb.org/glossary/):「聲明範圍: 測試套件已執行的可執行語句的百分比。」在您的「聲明範圍」示例中,'test1 = true ;'永遠不會被執行,但它顯然是一個可執行語句。 –
但test1不是聲明,它是可變的,在這種情況下,我們可以達到的邊緣。 '如果'是陳述(條件陳述是確切的)。也許我在這裏錯過了一些東西,但我這樣理解它。 – Faflok
'test1 = true;'是一個變量賦值,因此是一個可執行語句。 –
- 1. 決策/條件覆蓋範圍
- 2. Python的覆蓋範圍和郵差
- 3. 問題與決策和聲明覆蓋率的缺點
- 4. 「流利聲明」和「應聲明庫」之間的差異
- 5. 代碼覆蓋範圍和節點覆蓋範圍
- 6. 差異覆蓋
- 7. 來自表的範圍標識()和範圍標識()之間的性能差異?
- 8. 聲納 - 整體覆蓋範圍
- 9. 覆蓋差異訪問規範C++
- 10. 當覆蓋vs隱藏基類方法時C#範圍差異
- 11. Ruby範圍:MyClass.new和:: MyClass.new之間的差異
- 12. 如何覆蓋Visual Studio代碼覆蓋範圍內的異常
- 13. 聲明範圍
- 14. 聲明變量和範圍
- 15. 在全局/函數範圍中聲明變量。堆棧差異?
- 16. AngularJS - 範圍差異
- 17. 聲明在範圍
- 18. txt文件的值範圍之間的差異
- 19. 循環範圍與循環數組之間的性能差異
- 20. 顏色聲明之間的性能差異?
- 21. 類之間的差異擴展聲明在Javascript中
- 22. 斯卡拉:兩種方法之間的差異聲明函數
- 23. 覆蓋 - 參數差異
- 24. Laravel代碼覆蓋範圍
- 25. Maven代碼覆蓋範圍
- 26. Arquillian + jacoco IT覆蓋範圍
- 27. 使用postgres覆蓋範圍
- 28. W3C通知覆蓋範圍
- 29. MDX範圍覆蓋價值
- 30. BullsEye代碼覆蓋範圍
我想這個問題是更好的Programmers.StackExchange.com。順便說一句,決定和分支機構的報道不是一回事! –
@Adriano是的,wiki這麼說,但很多其他消息來源都說它是一樣的。 – user970696
不只是維基,「決定」的正式定義是進入分支的代碼路徑(然後分支是整個條件)的每個條件。想象一下,例如,C/C++中的短路。您可以_決定將它們作爲同義詞使用。 –