Vous êtes sur la page 1sur 36

Mesure de la qualit du code source

ALGORITHMES ET OUTILS

Introduction

La qualit logicielle dpend de nombreux facteurs :

Ractivit de l'quipe, portabilit, fiabilit, ergonomie, performance, scurit... Qualit du code source : Clart/concision Complexit Couverture par les tests ...

Enjeux

Pourquoi doit-on se soucier de la qualit ?

Notion de "mesure du risque" : vulnrabilit du logiciel aux changements futurs Revues de qualits pour des dveloppements sous-traits Analyse de la capacit maintenir Comparaison du code de logiciels pour dcider duquel choisir

Applications :

Mtriques Approche quantitative de la mesure de la qualit

Approche quantitative

Mtrique logicielle : mesure d'une proprit d'un logiciel (par exemple le nombre de lignes de codes) Approche quantitative : extraire une mesure de la qualit d'un logiciel partir de l'analyse statistique du code source.

Avantage : simplicit de mise en oeuvre. Principal problme : il faut trouver des indicateurs significatifs et les algorithmes correspondants.

Mtriques

Exemples de mtriques :

Lignes de codes Nombre de mthodes par classe Couplage affrent/effrent Niveau d'abstraction Instabilit ....

Pas de mtrique absolue : la pertinence de chaque mtrique dpend du projet et surtout de l'interprtation qui en est faite.

Mtriques courantes

Indice de spcialisation

Se calcule sur une classe entire (puis ventuellement moyenne pour le projet) Dfinition :

Avec

NORM : Number of Overriden Methods DIT : Depth of Inheritance Tree (distance depuis la classe Object) NOM : Number of Methods

Indice de spcialisation - calcul

Indice de spcialisation

Augmente quand

Le nombre de mthodes redfinies ou la profondeur d'hritage augmente Le nombre de mthodes spcifiques la classe augmente. Le nombre de mthodes redfinies diminue.

Diminue quand

Indice de spcialisation - Interprtation

Trop grand : la classe redfinit trop de mthodes dont elle hrite : il faut penser refactoriser en utilisant des interfaces par exemple. Moyenne : 0.05

Indice d'instabilit

Se calcule sur un paquetage ou un ensemble de paquetages. Dfinition :

Avec

Ce (efferent coupling) : le nombre de classes de l'extrieur qui dpendent de classes dans ce paquetage (responsabilit) Ca (afferent coupling) : le nombre de classes de ce paquetage qui dpendent de classes de l'extrieur. (indpendance)

Indice d'instabilit - calcul

Indice d'instabilit - interprtation

Indice compris entre 0 et 1 :


0 : le paquetage est stable. 1 : le paquetage n'est pas stable.

Pour qu'un paquetage soit considr comme stable avec cet indice, il faut qu'il y ait plus de dpendances entrantes que sortantes (la moyenne des dveloppeurs se situant aux alentours de ...)

Niveau d'abstraction

Se calcule sur un paquetage ou un ensemble de paquetages. Dfinition :

Avec

I : Le nombre d'interfaces et de classes abstraites. T : le nombre total de types.

Niveau d'abstraction - calcul

Niveau d'abstraction - Interprtation

S'utilise surtout comme lment de mesure de la normalized distance from the main sequence

Distance from the main sequence

Se calcule sur un paquetage ou un ensemble de paquetages. Dfinition :

Avec

Abstractness : l'indice d'abstraction du paquetage. Instability : l'indice d'instabilit du paquetage.

Distance from the main sequence

Un paquetage est bien conu si ce nombre est proche de zro.

Distance from the main sequence

Complxit cyclomatique

Se calcule sur une mthode Indice trs courant dans les programmes d'analyse de code source C'est le nombre de chemins linairement indpendants qu'il est possible de suivre au sein d'une mthode

Calcul d'une complexit cyclomatique

Complxit cyclomatique - Algorithme

Calcul simple de la complexit cyclomatique :

Il suffit de compter le nombre de points de dcision (if, case, while, ...)

Complxit cyclomatique - Interprtation

Un module avec une haute complexit cyclomatique est plus difficile comprendre. Si une mthode a une complexit cyclomatique trop leve (au del de 30), elle doit tre refactorise. Une complexit cyclomatique infrieure 30 est acceptable si la mthode est suffisament teste.

Complxit cyclomatique - Interprtation

Notion de Code Coverage :

Pourcentage de chemins couvert par les tests. A 100%, le nombre de tests unitaires d'une mthode est gal son indice de complexit cyclomatique.

Autres indicateurs triviaux

Ratio lignes de commentaires/nombre de lignes Pourcentage de mthodes trop longues Nombre de classes par paquetage Nombre de mthodes par classe ...

Outils

Outils

En Java, un grand nombre d'outils libres sont disponibles.


Cobertura Crap4J PMD FindBugs Eclipse Metrics JDepend ....

Crap4J

Utilise une formule spcifique :

Une mthode doit tre refactoris si elle possde un indice de crappiness au dessus de 30.

Crap4J

Crap4J autorise les complexits cyclomatiques leves si le code est bien couvert par les tests.
Complexit Cyclomatique
05 6 - 10 11-15 16-20 21-25 26-30 31+

Pourcentage de couverture par les tests requis


0% 42% 57% 71% 80% 100% -

PMD

Dtection d'un certain nombre d'anti patterns, connus pour poser problme. L'ensemble des rgles que PMD vrifie est disponible l'adresse suivante :
http://pmd.sourceforge.net/rules/index.html

Vrifie normment de choses :


EmptyCatchBlock DontImportSun UnnecessaryParentheses CallSuperInConstructor

FindBugs

Semblable PMD dans le principe : dtection d'anti patterns. Liste des bugs dtects disponible sur le web
http://findbugs.sourceforge.net/bugDescriptions.html

Exemple d'anti-pattern dtect :


Null pointer dereference Method does not check for null argument Read of unwritten field

Eclipse Metrics

Permet de calculer beaucoup de metrics :


Complxit cyclomatique Nombre de ligne de codes Indice de spcialisation Indice d'instabilit Niveau d'abstraction Distance from the main sequence ...

Eclipse Metrics

Graphe des dpendances en 3D

Dmo

Vous aimerez peut-être aussi