我有这个验证密码的方法:
/**
* 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;
}
让我们关注圈复杂度数:它的值是多少?
指标1.3.6 http://metrics.sourceforge.net/说是 7,但我无法真正找到 7 条独立路径:我只找到 5 条!和维基百科 http://en.wikipedia.org/wiki/Cyclomatic_complexity没有多大帮助——我该如何使用这个公式π - s + 2
?
我有2个if
's, 1 for
和 3 个出口点,但我被卡住了:我必须计算入口点吗?我应该先数两次吗if
因为它有两个条件?
EDIT:
好吧,现在我发现循环数是 7。这意味着有 7 条独立的路径,所以如果我想覆盖 100% 的代码,我应该能够找到 7 个不同的测试用例,对吗?
好吧,我还是找不到最后一个!
我找到了这些:
- 有效:asdf1234
- 太短:asdf123
- 太长:asdfsgihzasweruihioruldhgobaihgfuiosbhrbgtadfhsdrhuorhguozr
- 无效字符:asdf*123
- 全数字:12345678
- 无数字:asdfghjk
- wtf???
我认为诀窍在于逻辑运算符被计算在内。
基于您的指标链接(http://metrics.sourceforge.net/ http://metrics.sourceforge.net/)在 McCabe 圈复杂度部分下:
1 初始流量
3 个决策点(if、for、if)
3 个条件逻辑运算符 (||,||,||)
total: 7
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)