Mesure Qualite Code
-
Upload
korabika-toto -
Category
Documents
-
view
79 -
download
0
Transcript of Mesure Qualite Code
Mesure de la qualit du code sourceALGORITHMES 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 Cyclomatique05 6 - 10 11-15 16-20 21-25 26-30 31+
Pourcentage de couverture par les tests requis0% 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 webhttp://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