2015-01-13 73 views
2

我正在讀一本關於可測試JS的書,並且有一章關於環複雜度,但它並沒有真正說明如何計算它。它只是說圈複雜性路徑計數

循環複雜度是衡量通過您的代碼的獨立路徑的數量。

,並讓這個例子說明它有圈的2複雜性:

function sum(a, b) { 
    if (typeof(a) !== typeof(b)) { 
     throw new Error("Cannot sum different types!"); 
    } else { 
     return a + b; 
    } 
} 

因此,我不知道這是否由例子有3圈複雜度:

function madeup(a) { 
    if (typeof(a) === "string") { 
     if (a === "some") { 
      console.log("is a some"); 
     } else { 
      console.log("not a some"); 
     } 
    } else { 
     console.log("not a string"); 
    } 
} 

而這4:

function madeup(a) { 
    if (typeof(a) === "string") { 
     if (a === "some") { 
      console.log("is a some"); 
     } else { 
      console.log("not a some"); 
     } 
    } else { 
     if (a === 5) { 
      console.log("is a 5"); 
     } else { 
      console.log("not a 5"); 
     } 
    } 
} 

+1

正如你所說,你只是計算路徑。你計算正確。 – AbcAeffchen

回答

1

是的,你計算正確。我認爲這就是所有可以說的。

如果您不確定,可以將函數放入http://jshint.com,它會告訴您圓圈複雜度是多少。

+0

謝謝,是的,我在我的IDE中使用這個jshint的功能來檢查代碼。 –

0

在第一個示例中,「throw new Exception」和RETURN語句導致該方法結束,並且所有變量都超出範圍。

第二個和第三個示例中的方法都在代碼的最後一行之後終止。第二個和第三個方法只在一個地方退出代碼,最後一行。

如果在console.log方法之後有一個RETURN語句,那麼你會是正確的。

就目前來看,例子二和三的圈複雜度爲1。