Mesure de la qualité du code source - Algorithmes et outils
Indice d'instabilité
Définition
L'indice d'instabilité d'un paquetage est défini par la formule suivante :
Avec :
- Ca : Couplage afferent, le nombre de classes en dehors du paquetage qui dépendent de classes de ce paquetage.
- Ce : Couplage efferent, le nombre de classes de ce paquetage qui dépendent de classes en dehors de ce paquetage.
Interprétation
Cet indice est toujours compris entre 0 et 1. Un score proche de 0 signifie que le paquetage peut être considéré comme "stable", alors qu'un score proche de 1 indique un paquetage potentiellement à risque.
Cet indice va faire ressortir les paquetages qui dépendent plus des autres que les autres ne dépendent d'eux. Ces paquetages peuvent être dangereux, puisqu'une modification dans un des paquetages dont ils dépendent impacte potentiellement leur fonctionnement.
Il n'y a pas de bonne valeur pour cette indice : dans une architecture logicielle, certains paquetages doivent être instables. Cependant, lorsqu'un paquetage instable est détecté, il faut alors considérer un autre indicateur : c'est la "distance from the main sequence".
Exemple d'utilisation
Soit le diagramme de classes suivant :
Dans cette configuration simpliste, chaque classe du paquetage instable dépend d'une autre classe du paquetage stable. Nous allons calculer l'indice d'instabilité du paquetage instable.
Pour le paquetage instable, on a :
- Ca = 0, puisqu'aucune classe ne dépend de ce paquetage.
- Ce = 3, puisque ce paquetage dépend de trois classes du paquetage stable.
Pour cet exemple, l'indice d'instabilité vaut 1/(1+0) = 1, ce qui représente la valeur maximale de l'indice d'instabilité.
Voyons maintenant l'indice d'instabilité du paquetage stable :
- Ca = 3, puisque trois classes du paquetage instable dépendent de ce paquetage.
- Ce = 0, puisque ce paquetage ne dépend d'aucun autre.
Cette fois, on obtient un indice d'instabilité de 0/(0+1) = 0.
Tout ceci est cohérent : en effet, on voit bien que changer le comportement du paquetage stable pourrait gêner le bon fonctionnement du paquetage instable. L'inverse n'est pas possible.