Mesure de la qualité du code source - Algorithmes et outils

Indice de spécialisation

Définition

L'indice de spécialisation d'une classe est défini par la formule suivante :

NORM*DIT/NOM

Avec :

Il est ensuite possible d'effectuer des moyennes pour un paquetage, un ensemble de paquetages, ou un projet.

Interprétation

Cet indice augmente quand :

Il diminue quand :

Cet indice peut-être considéré comme trop élevé lorsqu'il est supérieur à 1.5. Il faut alors penser à refactoriser en utilisant des interfaces. En effet, cela signifie souvent qu'un objet hérite d'un autre en redéfinissant beaucoup de ses méthodes : il utilise donc l'héritage alors qu'il s'agit d'un objet très spécialisé. L'utilisation des interfaces et de la délégation est plus appropriée, pour clarifier le code et éviter les problèmes de maintenance.

Exemple d'utilisation

Considérons le diagramme de classes suivant :

Exemple -
        indice de specialisation

La classe 1 hérite de la classe Object. Sur ce diagramme, la classe 2 hérite de la classe 1 mais ne redéfinit aucune méthode. La classe 3 hérite de la classe 2 et redéfinit les méthodes 1, 2 et 3.

Calcul de l'indice

Pour la classe 3 de cet exemple, on a donc :

Dans cet exemple, l'indice de spécialisation vaut donc (3*3/3) = 3.

Il s'agit d'un indice de spécialisation élevé et cette classe gagnerait à être refactorisée.

Refactorisation

Ci-dessous un exemple de refactorisation de l'exemple considéré, en introduisant une interface . La classe 3 implémente maintenant la même interface que la classe 1, plutôt que de redéfinir toutes ses méthodes. Pour les quelques méthodes qui restent les mêmes (les méthodes 4 et 5), la classe 3 délègue les traitements à la classe 1.

Exemple -
        indice de specialisation après refactorisation

<<< Indicateurs "triviaux"

Indice d'instabilité >>>