2015-01-13 2 views
2

테스트 가능한 JS에 관한 책을 읽었으며 순환 적 복잡성에 대한 장이 있지만 실제 계산 방법은 나와 있지 않습니다. 그냥순환 복잡도 경로 개수

된 Cyclomatic 복잡성이 코드를 통해 독립적 인 경로의 수를 측정이라고 말했다.

그리고 그것은 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 문이 있으면 올바른 것입니다.

예를 들어 2와 3의 경우 Cyclomatic 복잡도는 1입니다.