パスワードを検証する次のメソッドがあります。
/**
* 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だと言っていますが、7つの独立したパスを見つけることはできません。5つしか見つかりません。そして、ウィキペディアはあまり役に立ちませんでした。この式をどのように使用すると思いますπ - s + 2
か?
2つif
の出口点、1つfor
および3つの出口点がありますが、行き詰まっています。入口点を数える必要がありますか?if
2つの条件があるので、最初に2回カウントする必要がありますか?
編集:
さて、Cyclomatic Numberが7であることがわかりました。これは、7つの独立したパスがあることを意味します。したがって、コードの100%をカバーする場合、7つの異なるテストケースを見つけることができるはずです。
さて、まだ最後のものが見つかりません!私はこれらを見つけました:
- 有効:asdf1234
- 短すぎる:asdf123
- 長すぎる:asdfsgihzasweruihioruldhgobaihgfuiosbhrbgtadfhsdrhuorhguozr
- 無効な文字:asdf * 123
- 全桁:12345678
- 数字なし:asdfghjk
- wtf ???