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