MĂ©triques d'Halstead
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".
Dérivés
Les métriques d'Halstead permettent de calculer l'Indice de maintenabilité d'un projet.
Outils
- LDRA Testbed, outil de rÚgles de codage et de qualimétrie pour C, C++, Java et Ada
- GrammaTech CodeSonar, outil de détection de bugs et d'erreurs "RUNTIME" pour C, C++ et Jaba
- Testwell CMT++ outil de mesure de complexité pour C et C++
- Testwell CMTJava outil de mesure de complexité pour Java
- PhpMetrics outil de mesure de complexité pour PHP
- JsComplexity outil de mesure de complexité pour JavaScript
Bibliographie
- Maurice Howard Halstead : Elements of software science. Elsevier, New York u.a. 1977. (ISBN 0-444-00205-7) (Operating and programming systems series; 2).