Analyse de complexité

[English][Deutsch]

CMT++ and CMTJava: Outils de mesure de complexité pour C et C++ / Java

CMT++ (Complexity Measures Tool for C/C++) et CMTJava (Complexity Measures Tool for Java) sont des outils qui mesure la complexité  statique des logiciels écrits en C et C++ / Java.
Le pourcentage d'erreurs et la robustesse du code dépendent de sa complexité. Une application très complexe est difficile à tester. Même après des tests, un code complexe détient probablement plus d'erreurs qu´un code qui est écrit selon les règles de la simplicité.

La part des coûts d'un projet attribuée aux tests et aux corrections est plus importante pour un code qui a une complexité élévée.

CMT++ Quick Overview
Cliquez sur le bouton afin
d´obtenir les points essentiels

   [PDF]  Brochure

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 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 metrics

Des 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 : 

LOCbl Nombre de lignes vides (number of blank lines)
LOCcom Nombre de lignes avec commentaires (number of lines with comments)
LOCphy Nombre de lignes (number of physical lines)
LOCpro Nombre de lignes avec du code programme (number of lines with program code), y compris les lignes de commentaires

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.

V d'un fichier devrait être entre 100 et 8000.

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)

[PDF]  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.