2013-08-28 43 views
1

我知道,如果我有一個if語句是這樣的...分支覆蓋不同類型的循環

if (x == y) { 
    foobar++; 
} else { 
    if (x == z) { 
    foobar++; 
    } 
} 

將會有4個分公司,以獲得100%的分支覆蓋率遍歷。 2從外部if - else,1從內部if語句和另一個來自if語句不進入內部if語句。

然而,對於這樣的事情...

if (x == y) { 
    foobar++; 
} else { 
    while (x < z) { 
    x++; 
    } 
} 

而來,還有4個分公司需要100%的分支覆蓋?也就是說,不會從else語句進入while循環作爲單獨的分支進行計數?

謝謝。

回答

5

首先:沒有if循環。它被稱爲if語句。

至於你的問題:你的第一個例子只有3個分支。第一個if創建兩個分支。在你的else裏面創建了兩個分支,但是這不會增加到4個,因爲它們是你的子分支else

if 
/\ 
1 else 
    | 
    if 
    /\ 
    2 3 

對於while循環的分支覆蓋,它變得有點複雜。從理論上講,一個循環會創建一個可能無限數量的分支,因爲您不知道它將會運行多少次。有幾種實際的方法來衡量循環的覆蓋範圍。最簡單的是有兩個分支。循環塊被執行的地方,不在的地方。在這種情況下,您的例子中仍然會有3個分支。還可以考慮三個分支進行循環:不運行,運行一次並運行多次。如果您使用這種覆蓋率測量,則您的第二個示例中將有4個分支。

+1

@Clay號店覆蓋面在技術上是明確的期限,見http://en.wikipedia.org/wiki/Code_coverage。您對分支機構覆蓋範圍和路徑覆蓋範圍(一個不同的,但也是非常明確的技術術語)感到困惑。它可能不會讓你感到高興,因爲人們已經定義了100多種「覆蓋範圍」,每種「覆蓋範圍」都各不相同,並且可以提供某種優勢而非其他方面的優勢。線路覆蓋在概念上是有用的,因爲即使管理者也可以理解定義。分支機構在實際工具中很常見。我知道的許多工具(無)都不存在路徑覆蓋。 –