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 :

  • n 1 {\displaystyle n_{1}}  : nombre total des opérateurs uniques
  • N 1 {\displaystyle N_{1}}  : nombre total des opérateurs
  • n 2 {\displaystyle n_{2}}  : nombre total des opérandes uniques
  • N 2 {\displaystyle N_{2}}  : nombre total des opérandes

Ces chiffres sont la base pour calculer

  • La Longueur du programme ( N {\displaystyle N} ) : N = N 1 + N 2 {\displaystyle N=N_{1}+N_{2}} .
  • La Taille du vocabulaire ( n {\displaystyle n} ) : n = n 1 + n 2 {\displaystyle n=n_{1}+n_{2}}

On obtient le Volume du Programme ( V {\displaystyle V} ) en multipliant la longueur du programme par le logarithme 2 de la taille du vocabulaire :

V = N × log 2 n {\displaystyle V=N\times \log _{2}n}

Le Niveau de difficulté ( D {\displaystyle D} ) ou propension d'erreurs du programme est proportionnel au nombre d’opérateurs uniques ( n 1 {\displaystyle n_{1}} ) dans le programme et dépend également du nombre total d’opérandes ( N 2 {\displaystyle N_{2}} ) et du nombre d'opérandes uniques ( n 2 {\displaystyle n_{2}} ). Si les mêmes opérandes sont utilisés plusieurs fois dans le programme, il est plus enclin aux erreurs.

D = n 1 2 × N 2 n 2 {\displaystyle D={n_{1} \over 2}\times {N_{2} \over n_{2}}}

Le Niveau de programme ( L {\displaystyle L} ) est l’inverse du Niveau de difficulté. Un programme de bas niveau est plus enclin aux erreurs qu'un programme de haut niveau.

L = 1 D {\displaystyle L={1 \over D}}

L'Effort à l'implémentation ( E {\displaystyle E} ) est proportionnel au volume ( V {\displaystyle V} ) et au niveau de difficulté ( D {\displaystyle D} ):

E = V × D {\displaystyle E=V\times D}

Halstead a découvert que diviser l'effort par 18 donne une approximation pour le Temps pour implémenter ( T {\displaystyle T} ) un programme en secondes:

T = E 18 {\displaystyle T={E \over 18}}

Il est même possible d’obtenir le « nombre de bugs fournis » ( B {\displaystyle B} ) 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:

B = E 2 / 3 S {\displaystyle B={E^{2/3} \over S*}}

S {\displaystyle S*} 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).

Lien externe

  • Calcul des métriques d'Halstead (article dans MSCoder)

Références

  1. A survey on Metric of Software complexity


v · m
Gestion de la qualité logicielle
Indicateurs de qualité (ISO/CEI 9126)
  • Capacité fonctionnelle (réponse aux exigences)
  • Fiabilité
  • Maintenabilité
  • Performance
  • Portabilité
  • Utilisabilité
Compréhension et contrôle du code source
Tests
Métriques
Remaniements
Principes de programmation
SOLID
Mauvaises pratiques
Antipatterns
Code smells
Voir aussi : Génie logiciel, Érosion de l'architecture logicielle
  • icône décorative Portail de l’informatique