Complexité NPath

Définition, exemples et bonnes pratiques

À retenir

  • Elle mesure la combinatoire totale des chemins dans un code.
  • Elle augmente beaucoup plus vite que la complexité cyclomatique.
  • Un score élevé indique un code difficile à maintenir et à tester sans oublier de cas particuliers.

La complexité NPath est une mesure qui compte le nombre total de chemins d'exécution uniques à travers une fonction ou un morceau de code. Imaginez un labyrinthe avec plusieurs carrefours : cette métrique calcule combien de trajets différents permettent d'aller de l'entrée jusqu'à la sortie en tenant compte de toutes les combinaisons possibles de virages.

Étymologie

Le terme vient de l'anglais Number of Paths (nombre de chemins). Il a été introduit par Brian Nejmeh en 1988 pour offrir une vision plus fine de la complexité logicielle que la complexité cyclomatique classique, en se concentrant sur l'explosion combinatoire des branchements.

Exemples d'usage

  • Une fonction contenant trois blocs if consécutifs et indépendants : chaque bloc offre 2 choix, la complexité NPath est donc de 2 × 2 × 2 = 8 chemins possibles.
  • Un bloc switch avec 5 options différentes générera une complexité de 5 pour cette section.

Cas d'usage

Ce concept est utilisé en qualité logicielle et en tests unitaires. Il permet d'évaluer l'effort nécessaire pour tester intégralement une fonction : plus le score est élevé, plus il faudra de cas de tests différents pour couvrir chaque scénario possible.

Bonnes pratiques

Il est recommandé de maintenir le score NPath d'une fonction sous un certain seuil (souvent fixé à 200). Si le chiffre explose, c'est le signe qu'il faut refactoriser le code, c'est-à-dire le découper en plusieurs petites fonctions plus simples et plus faciles à tester.

Synonymes

complexité de chemin nombre de chemins d'exécution

Antonymes

linéarité simplicité structurelle

Conseil

Si vous débutez, ne calculez pas ce score à la main. Utilisez des outils d'analyse statique de code (comme SonarQube, ESLint ou PHPStan) qui le feront pour vous et vous alerteront quand vos fonctions deviennent trop complexes.

Questions fréquentes

Quelle est la différence avec la complexité cyclomatique ?

La complexité cyclomatique additionne les points de décision, tandis que la complexité NPath les multiplie. NPath est donc beaucoup plus sensible à l'imbrication des conditions.

Un score NPath élevé est-il toujours mauvais ?

Pas forcément, mais cela signifie que la fonction est très 'dense' logiquement. C'est un signal d'alerte pour les développeurs sur les risques de bugs cachés.