Cyclomatic Сложность в куске кода с несколькими точками выхода
У меня есть этот метод, который проверяет пароль:
/**
* 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 говорит, что это 7, но я не могу найти семь независимых путей: я нахожу только 5! А такжеВикипедия не очень помогли - как я могу использовать эту формулуπ - s + 2
?
у меня есть 2if
х, 1for
и 3 точки выхода, но я застрял: нужно ли считать точку входа? Должен ли я считать дважды первыйif
sinc, у него есть два условия?
РЕДАКТИРОВАТЬ:
Хорошо, теперь я обнаружил, что Cyclomatic Number равно 7. Это означает, что существует 7 независимых путей, и поэтому я должен быть в состоянии найти 7 различных тестовых случаев, если бы я покрыл 100% кода, я прав?
Ну, я до сих пор не могу найти последний! Я нашел это:
Действительно: asdf1234Слишком коротко: asdf123Слишком долго: asdfsgihzasweruihioruldhgobaihgfuiosbhrbgtadfhsdrhuorhguozrНеверный символ: asdf * 123Все цифры: 12345678Без цифр: asdfghjkWTF ???