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