循环复杂路径计数

时间:2015-01-13 10:23:22

标签: javascript cyclomatic-complexity

我正在读一本关于可测试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");
        }
    }
}

2 个答案:

答案 0 :(得分:1)

是的,你计算得当。我认为这就是所有可以说的。

如果你不确定,你可以将你的功能放到http://jshint.com,它会告诉你圈复杂度是什么。

答案 1 :(得分:0)

在第一个例子中,"抛出新的异常"并且RETURN语句导致方法结束,所有变量都超出范围。

第二个和第三个示例中的方法都在代码中的最后一行之后终止。第二种和第三种方法只在一个地方退出代码,即最后一行。

如果在console.log方法之后有一个RETURN语句,那么你就是正确的。

目前,对于示例二和三,Cyclomatic复杂度为1。