Zyklomatische Komplexität in Codeteilen mit mehreren Austrittspunkten
Ich habe diese Methode, die ein Passwort überprüft:
/**
* 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;
}
Konzentrieren wir uns auf die zyklomatische Komplexitätszahl: Was ist ihr Wert?
Metriken 1.3.6 sagt, es ist 7, aber ich kann nicht wirklich sieben unabhängige Pfade finden: Ich finde nur 5! UndWikipedia hat nicht viel geholfen - wie soll ich diese Formel verwenden?π - s + 2
?
ich habe 2if
's, 1for
und 3 Ausstiegspunkte, aber ich stecke fest: Muss ich den Einstiegspunkt zählen? Soll ich das erste mal zählen?if
da hat es zwei bedingungen?
BEARBEITEN:
Ok, jetzt habe ich herausgefunden, dass die zyklomatische Zahl 7 ist. Dies bedeutet, dass es 7 unabhängige Pfade gibt und ich in der Lage sein sollte, 7 verschiedene Testfälle zu finden, wenn ich 100% des Codes abdecken würde.
Nun, ich kann immer noch nicht den letzten finden! Ich fand diese:
Gültig: asdf1234Zu kurz: asdf123Zu lang: asdfsgihzasweruihioruldhgobaihgfuiosbhrbgtadfhsdrhuorhguozrUngültiges Zeichen: asdf * 123Alle Ziffern: 12345678Keine Ziffern: asdfghjkwtf ???