2015_2016:s3:concprogobjet:td:td8
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
2015_2016:s3:concprogobjet:td:td8 [2015/10/27 10:02] – created blay | 2015_2016:s3:concprogobjet:td:td8 [2015/11/21 20:58] (current) – [Allons plus loin, comment PMD fonctionne ?] blay | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Qualité du logiciel et métriques ====== | ||
- | Ajouter | + | Sur la base de l' |
+ | ]]// qui présente cet enseignement au Canada, nous nous proposons d' | ||
+ | |||
+ | Nous travaillerons cependant sur un exemple plus simple, les classes de graphes issues des [[https:// | ||
+ | |||
+ | 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' | ||
+ | ===== Parcourir les codes : premier aperçu ===== | ||
+ | |||
+ | Une fois les codes téléchargés et placés dans Eclipse, nous allons utiliser pour l' | ||
+ | |||
+ | - Placez vous dans une **perspective** " | ||
+ | - Comprenez les hiérarchies des classes en utilisant la vue dédiée {{ : | ||
+ | * Quelles sont les sous-classes de la classe Graphe? | ||
+ | - En utilisant la vue //package explorer//, regarder les classes du package '' | ||
+ | - En utilisant " | ||
+ | - En utilisant " | ||
+ | - Retrouver les méthodes qui appelent la méthode '' | ||
+ | - Faîtes la même chose à partir de la classe '' | ||
+ | |||
+ | < | ||
+ | <!-- | ||
+ | Répondez aux questions suivantes: | ||
+ | * Quelle est la structure générale de l' | ||
+ | *< | ||
+ | * Browse the classes within a package using the Package Explorer. Based on the class names and the documentation in the source code, can you tell what the overall purpose of the package is? (Rep: je dois donner une selection de package à regarder, c'est pas facile) | ||
+ | * Select any package and one of its classes. Using the Hierarchy View (clique droit -> Open Type Hierarchy), list all the ancestral classes of the class. Likewise, list all classes that are derived from your chosen class (cf. TypeHierarchy). | ||
+ | * In the Outline View, examine a non-trivial method of a class. Is the code self-describing? | ||
+ | code? Are the provided comments useful and seem adequate? | ||
+ | * Sélectionner une méthode et identifier les méthodes appelantes (cf. MethodesAppelantes). | ||
+ | --!> | ||
+ | </ | ||
+ | ===== Métriques : utilisation du plugin Metrics de Eclipse ===== | ||
+ | - Placez vous dans une perspective java | ||
+ | - Nous allons ouvrir une autre **vue** (Extrait de http:// | ||
+ | * To start using the Metrics View, use Windows -> Show View -> Other and navigate to the Metrics View, as shown in the next image. {{ : | ||
+ | * Un message vous signale que vous devez calculer les métriques et pour cela " | ||
+ | - Clique droit sur le projet, puis Properties -> Metrics -> utiliser les métriques (cf. Figure EnableMetrics) -> Apply {{ : | ||
+ | - Si l' | ||
+ | - 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é | ||
+ | * 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 '' | ||
+ | - Regardez vos codes avec cet outil. | ||
+ | |||
+ | |||
+ | < | ||
+ | <!-- | ||
+ | (Extrait de http:// | ||
+ | |||
+ | |||
+ | * If the metric is outside | ||
+ | the desired range, suggest what actions (possible refactoring | ||
+ | actions) need to be taken. A sample listing of metrics | ||
+ | computed using the chosen metrics plug-in is shown below: | ||
+ | • McCabe' | ||
+ | • Efferent Coupling | ||
+ | • Afferent Coupling | ||
+ | • Lack of Cohesion in Methods | ||
+ | • Total Lines of Code | ||
+ | • Number of Fields | ||
+ | • Number of Levels | ||
+ | • Number of Parameters | ||
+ | • Number of Statements in Method | ||
+ | • Weighted Methods per Class | ||
+ | • Number of Methods | ||
+ | • Number of Static Methods | ||
+ | • Number of Classes | ||
+ | • Number of Children | ||
+ | • Number of Interfaces | ||
+ | • Depth of Inheritance Tree | ||
+ | • Number of Overridden Methods | ||
+ | • Specialization Index | ||
+ | • Instability | ||
+ | • Abstractness | ||
+ | |||
+ | |||
+ | Répondez aux questions suivantes: | ||
+ | * How many packages does your application contain? (Rep : 72) | ||
+ | * Visualiser les dépendances pour cela dans la vue métric sélectionner l' | ||
+ | {{ : | ||
+ | * NE PAS FAIRE, ON MANQUE D EXPLICATIONS LA DESSUS : Visualiser les couches de packages pour le programme principal (attention, il peut etre nécéesaire de faire un " | ||
+ | {{ : | ||
+ | --!> | ||
+ | </ | ||
+ | |||
+ | ===== 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. | ||
+ | |||
+ | < | ||
+ | <!-- | ||
+ | http:// | ||
+ | |||
+ | {{ : | ||
+ | --!> | ||
+ | </ | ||
+ | |||
+ | **Questions** | ||
+ | |||
+ | - Activer CheckStyle dans le projet {{ : | ||
+ | - Afficher la vue " | ||
+ | - Et dans vos codes quelles erreurs de style détectez-vous? | ||
+ | - Configurer les règles pour votre projet | ||
+ | - Dans Eclipse -> preference -> CheckStyle | ||
+ | - Vous visualisez alors les règles par défaut de tous les projets. Prenez le temps de les regarder et d'en comprendre certaines. {{ : | ||
+ | - Nous allons définir nos propres règles, donc nous commençons par définir votre propre configuration : sélection du projet -> properties, puis checkstyle {{ : | ||
+ | - Sélectionner Local Check Configuration -> New {{ : | ||
+ | - 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 | ||
+ | * le nommage des packages, mais vous le modifiez pour forcer le nom des packages à se terminer par " | ||
+ | - Effacer les violations précédentes (projet -> checkstyle -> clear checkstyle violation. {{ : | ||
+ | - Visualiser les erreurs sur un graphique | ||
+ | - Sélectionner juste à côté de la vue Checkstyle la visualisation graphique (les 4 couleurs) {{ : | ||
+ | - Prenez le temps d' | ||
+ | |||
+ | < | ||
+ | <!-- | ||
+ | **Questions sur vos propres codes** | ||
+ | - Consider the coding conventions for line length in the Sun document. Browse your application source code and determine if this coding convention has been consistently followed. | ||
+ | * Consider the coding conventions for line wrapping in the Sun document. Browse your application source code and determine if this coding convention has been consistently followed. | ||
+ | * Consider the coding conventions for various types of | ||
+ | comments – block, single line, trailing, end-of-line, | ||
+ | documentation – in the Sun document. Browse your | ||
+ | Session application source code and determine if this coding | ||
+ | convention has been consistently followed. | ||
+ | * Consider the coding conventions for declarations – number per line, placement, and initialization – in the | ||
+ | Sun document. Browse your application source code | ||
+ | and determine if this coding convention has been | ||
+ | consistently followed. | ||
+ | * Consider the coding conventions for statements – while, | ||
+ | switch, and try-catch – in the Sun document. Browse | ||
+ | your application source code and determine if this | ||
+ | coding convention has been consistently followed. | ||
+ | * Pour cela vous limitez à la partie source du code (dans la vue Problems-> | ||
+ | {{ : | ||
+ | * puis Error/ | ||
+ | {{ : | ||
+ | After answering the above questions qualitatively, | ||
+ | project teams ran Checkstyle plug-in on their source | ||
+ | code base. Next, they carefully interpreted the results | ||
+ | produced by the plug-in with their qualitative | ||
+ | assessment of the source code base by visual | ||
+ | examination. | ||
+ | |||
+ | Attention c'est des recommandations seulement. Par exemple, dans les tests certaines valeurs ne doivent évidemment pas être définies comme des constantes. | ||
+ | !--> | ||
+ | </ | ||
+ | |||
+ | ===== Couverture des codes ===== | ||
+ | |||
+ | Si le système local de l'IUT le permet. | ||
+ | Ceux qui ont leur propre machine peuvent avantageusement l' | ||
http:// | http:// | ||
+ | - Installer le plugin http:// | ||
+ | - Utiliser le plugin pour vérifier la couverture du code. | ||
+ | |||
+ | ===== PMD ===== | ||
+ | |||
+ | |||
+ | ==== Pourquoi cet outil ? ==== | ||
+ | On peut en effet se poser la question car il existe beaucoup d' | ||
+ | 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' | ||
+ | * //"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' | ||
+ | En savoir plus sur le choix : (cf. [[http:// | ||
+ | |||
+ | |||
+ | |||
+ | ==== Exécuter PMD ==== | ||
+ | |||
+ | **Questions :** | ||
+ | - Sélectionner le projet -> propriétés -> PMD -> activer PMD | ||
+ | - Clique droit sur le projet puis PMD vérifier le projet {{ : | ||
+ | - Pour mieux voir les erreurs, ouvrir une nouvelle vue PMD {{ : | ||
+ | - Etudier les erreurs relevées Pour comprendre les erreurs pensez à cliquer sur l' | ||
+ | - Rechercher les codes dupliqués et étudier les duplications... et sur vos propres codes. {{ : | ||
+ | - Générer le rapport PMD {{ : | ||
+ | - Etudier les erreurs relevées dans vos propres codes. | ||
+ | |||
+ | < | ||
+ | <!-- | ||
+ | 1- Fabriquons un exemple pour être sûr d' | ||
+ | |||
+ | <code java> | ||
+ | package test.pmd; | ||
+ | |||
+ | //PMD Eclipse Tutorial | ||
+ | public class PMDTest { | ||
+ | public static void main(String args[]) { | ||
+ | PMDTest.CALL_METHOD(" | ||
+ | PMDTest.CallHello(); | ||
+ | } | ||
+ | |||
+ | public static void CALL_METHOD(String INPUT_PARAMETER) { | ||
+ | System.out.println(INPUT_PARAMETER); | ||
+ | } | ||
+ | |||
+ | public static void CallHello() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | !--> | ||
+ | </ | ||
+ | ==== Configurer PMD ==== | ||
+ | 1- Sélectionner eclipse -> Preferences -> PMD | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 2- Visualiser les règles associées au nommage. | ||
+ | {{ : | ||
+ | |||
+ | ==== Allons plus loin, comment PMD fonctionne ? ==== | ||
+ | |||
+ | * http:// | ||
+ | * http:// | ||
+ | * Quelles règles? http:// | ||
+ | < | ||
+ | <!-- | ||
+ | |||
+ | ==== Découverte de l' | ||
+ | |||
+ | * 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:// | ||
+ | * src/ | ||
+ | * Pour s'y retrouver il peut etre utile de générer le rapport d' | ||
+ | * | ||
+ | * voir GodClassPMD (pour comprendre lire : http:// | ||
+ | * La classe Theorie.java est notée comme une GOD Class ? Pourquoi ? (trop de méthodes) | ||
+ | {{ : | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Reverse Engineering ===== | ||
+ | |||
+ | Creer un nouveau projet. | ||
+ | Limiter l' | ||
+ | |||
+ | |||
+ | - Generate a package diagram | ||
+ | * Vous aurez besoin de la vue (volet) " | ||
+ | * La vue n' | ||
+ | * | ||
+ | - 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' | ||
+ | |||
+ | < | ||
+ | A priori ce TD vient avant le cours. On devrait pouvoir mettre en place une sorte de classe inversée sur cette base dans le module " | ||
+ | </ | ||
+ | |||
+ | |||
+ | Etape 1: Charger les codes à partir du répertoire SVN | ||
+ | https:// | ||
+ | |||
+ | Extrait du tutoriel http:// | ||
+ | |||
+ | From Eclipse' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | {{ : | ||
+ | On the Select/ | ||
+ | |||
+ | voir figure X | ||
+ | |||
+ | Attention, nous n' | ||
+ | |||
+ | Selectionner trunk cela est bien suffisant pour nos tests (et déjà très gros!). | ||
+ | |||
+ | Mais on a quand même 14,9Mo... | ||
+ | |||
+ | !--> | ||
+ | </ | ||
- | [[2014_2015: |
2015_2016/s3/concprogobjet/td/td8.1445940157.txt.gz · Last modified: 2015/10/27 10:02 (external edit)