编程语言
首页 > 编程语言> > java – 具有多个出口点的代码片段中的Cyclomatic Complexity

java – 具有多个出口点的代码片段中的Cyclomatic Complexity

作者:互联网

我有这个验证密码的方法:

/**
 * Checks if the given password is valid.
 * 
 * @param password The password to validate.
 * @return {@code true} if the password is valid, {@code false} otherwise.
 */
public static boolean validatePassword(String password) {
    int len = password.length();
    if (len < 8 || len > 20)
        return false;
    boolean hasLetters = false;
    boolean hasDigits = false;
    for (int i=0; i<len; i++) {
        if (!Character.isLetterOrDigit(password.charAt(i)))
            return false;
        hasDigits = hasDigits || Character.isDigit(password.charAt(i));
        hasLetters = hasLetters || Character.isLetter(password.charAt(i));
    }
    return hasDigits && hasLetters;
}

让我们关注圈复杂度数:它的价值是什么?

Metrics 1.3.6说这是7,但我找不到七条独立的路径:我只找到5条!并且Wikipedia没有多大帮助 – 我想如何使用这个公式π-s 2?

我有2个if,1个和3个退出点,但我被卡住了:我是否必须计算入口点?因为它有两个条件,我应该计算第一个两倍吗?

编辑:

好的,现在我发现Cyclomatic Number是7.这意味着有7个独立的路径,所以如果我要覆盖100%的代码,我应该能够找到7个不同的测试用例,对吗?

好吧,我还是找不到最后一个!
我找到了这些:

>有效:asdf1234
>太短:asdf123
>太长了:asdfsgihzasweruihioruldhgobaihgfuiosbhrbgtadfhsdrhuorhguozr
>无效字符:asdf * 123
>全位数:12345678
>无数字:asdfghjk
> wtf ???

解决方法:

我认为诀窍是逻辑运算符被计算在内.

根据McCabe Cyclomatic Complexity部分下的Metrics链接(http://metrics.sourceforge.net/):

1初始流程

3个决策点(if,for,if)

3个条件逻辑运算符(||,||,||)

总数:7

标签:java,complexity-theory,return,cyclomatic-complexity
来源: https://codeday.me/bug/20190520/1143094.html