This is an old revision of the document!
Table of Contents
Qualité du logiciel et métriques
Sur la base de l'article Learning Software Engineering Principles Using Open Source Software qui présente cet enseignement au Canada, nous nous proposons d'aborder l'analyse de code.
Nous travaillerons cependant sur un exemple plus simple, les classes de graphes issues des cours en ligne de Polytechnique que nous avons déjà utilisé, mais qui vous sont données ici dans leur ensemble : src.zip.
Ceux qui le veulent peuvent faire le même exercice mais sur les codes de Junit, dans ce cas se reporter à la fin de ce TD pour le téléchargement des codes.
Question :
- Télécharger les codes sur lesquels nous allons faire de l'analyse de code.
Parcourir les codes : premier aperçu
Une fois les codes téléchargés et placés dans Eclipse, nous allons utiliser pour l'instant les outils standard pour parcourir ces codes.
- Placez vous dans une perspective “java”: Window → open perspective → Java …
-
- Quelles sont les sous-classes de la classe Graphe?
- En utilisant “Outline View”, examiner la classe “Arc”. Le code est-il autodescriptif? Pouvez-vous expliquer son intérêt sans trop de difficulté?
- En utilisant “Outline View”, examiner les méthodes non-triviales de la classe Graphe. Le code est-il autodescriptif? Pouvez-vous expliquer son intérêt sans trop de difficulté?
- Faîtes la même chose à partir de la classe
Graphe
pour visualiser tous les appels à son constructeur.
Métriques : utilisation du plugin Metrics de Eclipse
- Placez vous dans une perspective java
- Nous allons ouvrir une autre vue (Extrait de http://metrics.sourceforge.net/).
- Un message vous signale que vous devez calculer les métriques et pour cela “permettre ces calculs”.
- Si l'affichage ne se fait pas, vous devez faire un clean du projet (Projet→ clean/Build).
- Vous pouvez double-cliquer sur les métriques pour les voir en détail en particulier pour visualiser les valeurs maximales. Les éléments enfants à chaque niveau sont triés par ordre décroissant métrique (maximum ).
- Etudiez les valeurs des métriques obtenues.
- Sont-elles dans les limites souhaitées?
- Dans quel cas, ne sont-elles pas dans la limite souhaitée? Qu'en pensez-vous?
- Que pensez-vous de la classe Graphe :
- Nombre de lignes de code des méthodes? Quelle est la méthode qui a le plus de lignes de codes? Qu'en pensez-vous?
- Comparer le nombre de lignes à sa complexité Cyclomatic.
- Que pensez-vous du nombre de méthodes dans cette classe? Est-ce que cela vous gêne?
- Les valeurs seuils ne sont pour la plupart pas définies. Pour les définir, aller dans le menu
Preference
de Eclipse puis sousMetric
, configurer les valeurs seuils à votre convenance et regarder à nouveau les codes.(En savoir plus)
- Regardez vos codes avec cet outil.
Conventions de codage et de style : Utilisation du plugin CheckStyle
Notre objectif dans cette partie est de comprendre
- les notions de normes de codage
- comment préciser vos propres règles de nommage.
Questions
- Et dans vos codes quelles erreurs de style détectez-vous?
- Configurer les règles pour votre projet
- Dans Eclipse → preference → CheckStyle
- Sélectionner la configuration puis faire configure
- Visualisez alors les règles rangées par catégorie.
- Choisissez à présent les règles que vous voulez vérifier dans votre projet.
- la duplication de code
- le nommage des variables
- Visualiser les erreurs sur un graphique
- Prenez le temps d'étudier vos codes de TD, projet méthodologie ou tutoré.
PMD
Pourquoi cet outil ?
On peut en effet se poser la question car il existe beaucoup d'outils similaires. Le choix fait CETTE année dans le cadre de CE module est motivé par :
- Il est reconnu et utilisé par beaucoup de projets Java, et ceci en particulier dans les entreprises qui emploient les étudiants de licence professionnelle;
- Il est simple d'utilisation et se présente comme un plugin pour Eclipse, or nous visons dans le cadre de cet enseignement à minimiser les environnements de programmation.
- “Il couvre un large spectre, en termes de contrôle (de la convention de nommage au calcul de complexité cyclomatique) et il fournit, en standard, près de 300 règles « prêtes à l'emploi » ”
En savoir plus sur le choix : (cf. http://connect.ed-diamond.com/GNU-Linux-Magazine/GLMF-105/Verifier-votre-code-Java-avec-PMD)
Exécuter PMD
1- Fabriquons un exemple pour être sûr d'avoir des erreurs à analyser 1) :
package test.pmd; //PMD Eclipse Tutorial public class PMDTest { public static void main(String args[]) { PMDTest.CALL_METHOD("hello"); PMDTest.CallHello(); } public static void CALL_METHOD(String INPUT_PARAMETER) { System.out.println(INPUT_PARAMETER); } public static void CallHello() { System.out.println("Hello PMD World!"); } }
2- Clique droit sur le projet puis PMD vérifier le projet
3- Pour mieux voir les erreurs, ouvrir une nouvelle vue PMD
5- Etudier les erreurs relevées dans la nouvelle classe, dans les codes existants et dans vos propres codes.
Pour comprendre les erreurs pensez à cliquer sur l'erreur et visualiser la règle
Configurer PMD
Découverte de l'outil sur le code de JUNIT
- Ouvrir la vue Synthese des alertes PMD
- Ne visualiser que les erreurs les plus graves (Ne garder que le petit drapeau rouge sélectionné! cf. figure
- Etudier certaines des erreurs uniquement dans la partie main du code et les comprendre : POURQUOI? (chercher les explications dans http://pmd.sourceforge.net/pmd-5.1.2/rules/index.html#Basic (penser à utiliser la recherche dans la page)), par exemple : AvoidThrowingRawExceptionTypes: Avoid throwing certain exception types. Rather than throw a raw RuntimeException, Throwable,Exception, or Error, use a subclassed exception or et aller plus loin si besoin).
- src/main/java/junit/framework/JUnit4TestAdapterCache.java:15: Variables that are final and static should be all capitals, 'fInstance' is not all capitals.
- Pour s'y retrouver il peut etre utile de générer le rapport d'erreurs.
- voir GodClassPMD (pour comprendre lire : http://pmd.sourceforge.net/pmd-5.1.2/rules/index.html#Basic)
- La classe Theorie.java est notée comme une GOD Class ? Pourquoi ? (trop de méthodes)
Utilisation personnelle de PMD
Appliquer PMD sur vos propres codes.
Allons plus loin, comment PMD fonctionne ?
- Quelles règles? http://pmd.sourceforge.net/pmd-5.1.2/rules/index.html#Basic
Reverse Engineering
Creer un nouveau projet. Limiter l'importation à la partie main du projet
- Generate a package diagram
- Vous aurez besoin de la vue (volet) “Aperçu des diagrammes) pour … y voir quelque chose!
- La vue n'apporte pas vraiment d'information éttant donné la taille du projet… Décevant. Néanmoins ce type de visualisation peut etre utile, surtout sur des projets que l'on maîtrise. Appliquer le sur un de vos projets, s'il contient des packages et faîtes-vous une première idée.
- Generate class diagrams
- Cette visualisation doit se faire sur une sous-partie. Sélectionner quelques classes qu'il vous semble intéressant de visualiser.
- Generate sequence or collaboration diagrams
Récupération des codes à Analyser
Nous allons travailler sur le projet JUNIT comme base pour prendre en main l'environnement et découvrir quelques bases de l'analyse des codes.
Etape 1: Charger les codes à partir du répertoire SVN https://github.com/junit-team/junit
Extrait du tutoriel http://www.ibm.com/developerworks/opensource/library/os-ecl-subversion/
From Eclipse's File menu, choose Import to display the import manager (see Figure X). Choose Checkout Projects from SVN, then click Next.
On the Select/Create Location panel (see Figure 8), we need to create a new location (since we don't have any configured yet), so click Next to continue.
voir figure X
Attention, nous n'avons pas pour objectif dans ce TD de “corriger” les codes de JUnit mais seulement de regarder des codes existants pour apprendre à les analyser.
Selectionner trunk cela est bien suffisant pour nos tests (et déjà très gros!).
Mais on a quand même 14,9Mo…