Outils de test et débogage en C++

publicité
SciTools Understand
A Source Code Analysis
and Metrics Tool
Philippe CHARMAN
[email protected]
http://users.polytech.unice.fr/~charman/
Last update: 04-10-2013
Prise en mains de l’outil
Understand de SciTools
• Understand outil d’analyse de source code:
– Calcul des métriques qualité
– Vérification des règles de programmation usuelles
• Très nombreux langages supportés: Java, C/C++, Ada,
Pascal, Cobol, Fortran, Python, PHP, Javascript, etc.
Prise en mains de l’outil
Understand de SciTools
• Installer Understand 3.1 à partir de:
– Understand-3.1.658-Windows-32bit.exe
– Understand-3.1.658-Linux-32bit.tgz
• Licence d’évaluation valide pendant 15 jours
• Web site: http://www.scitools.com/
Analyse d’un projet C++
•
Ouvrir le projet fastgrep:
Help > Example Projects > fastgrep
•
Les sources sont dans:
C:\Program Files\SciTools3.0\sample\fastgrep
Analyse d’un projet C++
Regardez comment est configuré le projet:
Project > Configure Projet
Configuration liée au code source:
Langages: C/C++
Files: liste des fichiers du projet
C++: compilateur, etc.
Visual Studio
Includes: fichiers d’include hors ceux du compilateur
Macros:
Configuration liée à d’autres éléments:
File Types: association extension <-> langage
File Options: divers fichiers
Scheduled Activities: programmation des analyses
Metrics: exportation des metriques en CSV
Reports: generation rapports HTML ou texte
Afficher les métriques de base
• Metrics > Metrics Summary
Afficher les métriques de base
• Lines: nombre de toutes les lignes
• Blank Lines: nombre de lignes vides
• Comment Lines: nombre de lignes de commentaires
• Code lines: nombre de lignes contenant du code source
• Inactive Lines: lignes ignorées par le préprocesseur, ie dans le ne
faisant pas partie des #if ou #ifdef
• Pourquoi n’a-t-on pas forcément:
Comment Lines + Blank Lines + Code Lines + Inactives Lines
=
Total Lines
?
Analyse d’un projet C++
• Projects -> Project Overview Charts
Analyse d’un projet C++
•
•
•
•
•
CodeCheck > Open CodeCheck
Files: Select All Files
Checks: select All Checks
Click on Analyse
Different views of results:
– Results by File
– Results by Check
– Result Locator
– Result Treemap
Configuration des règles
• Parametrez certaines règles:
• Magic numbers -> exceptions
• Etc.
• Puis relancer l’analyse
Analyse d’un projet C++
• Bugs potentiels:
–
–
–
–
Test equality for floating point
Virtual Function Call In Constructor/Destructor
Switch Has Default
etc.
Analyse d’un projet C++
• Code inutilisé
– Unused Functions
– Unused Local Variables
– Unused Static Globals
Analyse d’un projet C++
• Pratiques recommandées:
–
–
–
–
–
–
–
–
–
Functions Too Long
Overly Comples Functions
Variables should be commented
Do not use #define to specify types
Use Const whenever possible
Definitions in Header Files
Scope Hiding
Inline Functions have more than X LOC
Etc.
Analyse d’un projet Java
• Ouvrir le projet getopt
Help -> Example Projects -> getopt
• Les sources sont dans:
C:\Program Files\SciTools\sample\fastgrep
Analyse d’un projet Java
Regardez comment est configuré le projet:
Project > Configure Projet
Configuration liée au code source:
Langages: Java
Files: liste des fichiers du projet
Visual Studio: pour spécifier un projet Visual Studio existant
Java: compilateur, etc.
Class path: définir le class path
Configuration liée à d’autres éléments:
File Types: association extension <-> langage
File Options: divers fichiers
Scheduled Activities: programmation des analyses
Metrics: exportation des metriques en CSV
Reports: generation rapports HTML ou texte
Analyse d’un projet Java
• Metrics -> Metrics Summary
– Combien de lignes de code ?
• Project -> Project Overview Chart
– Quelles sont les fonctions les plus complexes
?
– Quelles sont les fonctions les plus longues ?
• CodeCheck -> Open CodeCheck
Exercice sur un des vos projets
• Créez un nouveau projet Understand avec un de vos
projets Java ou C++
• Générez les métriques qualités
• Analysez avec CodeCheck
• Conclusion:
– bugs trouvés ?
– Quels sont les règles qui vous semblent les plus importantes ?
– Celles qui vous semblent les moins importantes ?
Pour aller plus loin …
• Les règles de programmation sont en fait écrites en
script
• Possibilité d’écrire ses propres règles de programmation
Téléchargement