SciTools Understand A Source Code Analysis and Metrics Tool Philippe CHARMAN charman@fr.ibm.com 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