Les métriques de complexité d'Halstead qui procurent une mesure quantitative de complexité pour des logiciels ont été introduites par l’américain Maurice Halstead. Elles sont basées sur l’interprétation du code comme une séquence de marqueurs, classifiés comme un opérateur ou un opérande.
Calcul
Toutes les métriques d'Halstead sont dérivées du nombre d’opérateurs et d’opérandes :
: nombre total des opérateurs uniques
: nombre total des opérateurs
: nombre total des opérandes uniques
: nombre total des opérandes
Ces chiffres sont la base pour calculer
La Longueur du programme () : .
La Taille du vocabulaire () :
On obtient le Volume du Programme () en multipliant la longueur du programme par le logarithme 2 de la taille du vocabulaire :
Le Niveau de difficulté () ou propension d'erreurs du programme est proportionnel au
nombre d’opérateurs uniques () dans le programme et dépend également du nombre
total d’opérandes () et du nombre d'opérandes uniques (). Si les mêmes opérandes
sont utilisés plusieurs fois dans le programme, il est plus enclin aux erreurs.
Le Niveau de programme () est l’inverse du Niveau de difficulté. Un programme de bas
niveau est plus enclin aux erreurs qu'un programme de haut niveau.
L'Effort à l'implémentation () est proportionnel au volume () et au niveau de difficulté ():
Halstead a découvert que diviser l'effort par 18 donne une approximation pour le Temps
pour implémenter () un programme en secondes:
Il est même possible d’obtenir le « nombre de bugs fournis » () qui est une estimation du
nombre d'erreurs dans le programme. Cette valeur donne une indication pour le nombre
d’erreurs qui devraient être trouvées lors du test de logiciel. Le « nombre de bugs fournis » est
calculé selon la formule suivante:
représente l'habileté du développeur. Au regard de son expérience[1], Halstead a fixé cette valeur à 3000 pour un développeur "standard".
JsComplexity outil de mesure de complexité pour JavaScript
Bibliographie
Maurice Howard Halstead : Elements of software science. Elsevier, New York u.a. 1977. (ISBN0-444-00205-7) (Operating and programming systems series; 2).