NPathComplexity

メソッドの実行パスが多すぎる場合に発生します。NPathは各条件の結果の積であり、条件が増えると指数的に増加します。

<?php
public function validate(array $data): bool
{
    if (isset($data['name'])) {           // 2パス
        if (strlen($data['name']) > 0) {   // 2パス
            if (isset($data['email'])) {   // 2パス
                if (filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {  // 2パス
                    if (isset($data['age'])) {  // 2パス
                        if ($data['age'] >= 18) {  // 2パス
                            return true;
                        }
                    }
                }
            }
        }
    }
    return false;
    // NPath = 2 × 2 × 2 × 2 × 2 × 2 = 64パス
}

なぜ問題か

修正方法

早期リターン(ガード句)で構造をフラットにする:

<?php
public function validate(array $data): bool
{
    if (!isset($data['name'])) {
        return false;
    }
    if (strlen($data['name']) === 0) {
        return false;
    }
    if (!isset($data['email'])) {
        return false;
    }
    if (!filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
        return false;
    }
    if (!isset($data['age'])) {
        return false;
    }
    if ($data['age'] < 18) {
        return false;
    }

    return true;
    // NPath = 7パス(指数的ではなく線形)
}

しきい値

レベル NPath値
🍝 Piccolo ≤50
🍝🍝 Medio 51-200
🍝🍝🍝 Grande 201-500
🍝🍝🍝🍝 Mamma Mia! 501+