CMT++ and CMTJava: Outils de mesure de complexité pour C et C++ / Java
CMT++ et CMTJava peuvent être employés pour mesurer la complexité de vos codes C/C++ et Java. Ces outils vous permettent d'améliorer la qualité de vos projets informatiques. Basé sur les propriétés statiques du code, CMT++ et CMTJava livrent des évaluations sur le nombre estimé d'erreurs que contient le code selon sa complexité. L'outil donne également des mesures sur le temps nécessaire pour comprendre un code, sur le volume logique de ce code, etc....
Si l'équipe d'un projet n'a pas la possibilité d'inspecter le code dans sa totalité, CMT++ et CMTJava peuvent aider à désigner les modules qui sont le plus susceptibles de poser des problèmes à l'avenir.
CMT++ et CMTJava calculent les métriques suivants:
- McCabe's cyclomatic number (en savoir plus)
- Lines-of-code metrics (en savoir plus)
- Halstead's metrics (en savoir plus)
- Maintainability Index (en savoir plus)
McCabe cyclomatic number v(G)
Le « McCabe cyclomatic number » v(G) décrit la complexité de l'écoulement de commande (control flow) d'un programme. Pour une fonction simple, v(G) doit être inférieur d'un point au nombre de branchements conditionnels de la fonction. Plus le nombre cyclomatic est grand, plus le code est difficile à comprendre. Le « Cyclomatic number » d'une fonction doit être inférieur à 15. Il est difficile d'identifier et d'examiner plus de 15 chemins. Cependant, les fonctions contenant un rapport de choix avec beaucoup de branches font exception. Un v(G) raisonnable pour un fichier est inférieur à 100.
|
plus d'informations concernant le McCabe Cyclomatic Number
plus d'informations sur les métriques McCabe du "Software Engineering Institute of Carnegie Mellon University" (en anglais)
Lines-of-code metricsDes métriques de ligne de code sont les mesures traditionnelles pour calculer la complexité des logiciels. CMT++ calcule les métriques de lignes de code suivantes :
|
La longueur d'une fonction doit être comprise entre 4 et 40 lignes. Une fonction ayant plus de 40 lignes possède probablement trop d'instructions. Normalement, un fichier devrait comprendre entre 4 et 400 lignes. Un fichier comportant plus de 400 lignes aura du mal à être compris dans son ensemble. Un fichier devrait être composé au minimum de 30 % et au maximum de 75 % de commentaires.
plus d'informations concernant les "lines-of-code" métriques
Halstead's metrics
| B |
B est le nombre estimé d'erreurs dans le logiciel. Le nombre d'erreurs ainsi « livré » par le fichier doit être inférieur à 2. Les expériences ont prouvé qu'en programmant du C ou C++, un fichier source contient presque toujours plus d'erreurs qu'indiqué par B. |
| D | niveau de difficulté, prédisposition d'erreurs |
| E | effort pour implémenter |
| L | niveau du programme (représente le niveau d'abstraction du programme) |
| N | longueur du logiciel |
| N1 | nombre d'opérateurs |
| N2 | nombre d'opérandes |
| n | taille de vocabulaire ou nombre d'opérateurs uniques et d'opérandes uniques |
| n1 | nombre d'opérateurs uniques |
| n2 | nombre d'opérandes uniques |
| T | temps nécessaire pour l'implémentation (temps nécessaire pour comprendre) |
| V |
« volume » ou contenu d'information du programme le volume V de Halstead décrit la taille de l'implémentation d'un algorithme. Le calcul de V est basé sur le nombre d'opérations effectuées et
d'opérandes manipulées dans l'algorithme. V devrait être compris entre
20 et 1000 pour une fonction. Un volume supérieur à 1000 indique
que la fonction fait probablement trop de choses. Ces limites sont basées sur des volumes mesurés dans des fichiers dans lesquels LOCpro et v(G) sont près de leur limite recommandée. |
Il est impossible de donner des limites absolues toujours valables. Les limites données et expliquées sont des suggestions communes qui se basent sur des mesures faites sur un code qui se maintient correctement. Vous pouvez adapter les limites de CMT++ à vos besoins spécifiques en changeant les définitions dans le fichier de configuration.
Évidemment, les modules qui ont un niveau de complexité élevé doivent être inspectés le plus soigneusement possible.
Les plus importantes métriques sont le «cyclomatic number» v(G)
et le «nombre d´erreurs livrées" (B). Puisque le «cyclomatic
number» décrit la complexité d'écoulement (control flow
complexity), il est évident que les modules et les fonctions ayant
une "cyclomatic number" élevé ont besoin de plus de cas
de tests pour être testés que les modules ayant un nombre
cyclomatic
inférieur. Chaque fonction devrait être testée avec autant de cas de
tests que le "cyclomatic number" l´indique. Le "number
of delivered bugs" donne une estimation du nombre d'erreurs dans
le module. L'objectif du test devrait être de trouver autant
d'erreur que B (number of delivered bugs) l´indique.
plus d´informations concernant les métriques Halstead
plus d'informations sur les métriques de Halstead du "Software Engineering Institute of Carnegie Mellon University"
CMT++ est connu pour sa rapidité d'exécution, sa facilité d'utilisation et sa robustesse même avec du code non préprocessé. La taille de CMT++ est de 1-2 Mo.
Intégration dans Visual Studio
Présentation de CMT++ (17 slides)
Comment mesurer la complexité d´un logiciel ? (Article MSCoder) (668 Ko)
les dernières versions de CMT++/CMTJava (en anglais)
plus d'informations concernant CMT++
plus d'informations concernant CMTJava
recevez CMT++ ou CMTJava pour une évaluation gratuite
last updated: 08.10.2007
© 2003-2007 Verifysoft GmbH
CTA++, CTC++, CMT++ and CMTJava are products of Testwell Oy, Tampere (Finland)
all other trademarks of this site are the property of their respective owners.
