© OCTO  Technology 2008<br />Maven<br />Paris VI – UPMC<br />Master Science et Technologies du Logiciel<br />Technologies ...
Arnaud Héritier<br />OCTO Technology<br />Expert sénior<br />aheritier AT octo DOT com<br />http://www.octo.com<br />Maven...
© OCTO  Technology 2007<br />© OCTO  Technology 2007<br />OCTO Technology - Fiche d’identité<br /><ul><li>Fondé en 1998, O...
© OCTO  Technology 2007<br />OCTO Technology - Prestations : une offre innovante<br />Le savoir faire d’OCTO couvre tout l...
Agenda<br />Théorie<br />Présentation générale de Maven<br />Maven, les concepts<br />Démarrer un projet avec Maven<br />C...
Présentation générale de Maven<br />Un peu d’archéologie<br />Maven en 3 questions<br />Maven un remède à vos douleurs ?<b...
Un peu d’archéologie<br />© OCTO  Technology 2008<br />7<br />
© OCTO  Technology 2008<br />8<br />Maven en 3 questions<br />C’est quoi ?<br />Un outil de type batch (Windows) / shell (...
Maven, un remède à vos douleurs ?<br />© OCTO  Technology 2008<br />9<br />
Maven, les concepts<br />Descripteurs de projets <br />Cycle de vie et plugins<br />Référentiels de librairies<br />© OCTO...
© OCTO  Technology 2008<br />11<br />Descripteurs de projets (1/5)<br />Descripteurs de projets : Project Object Model (« ...
© OCTO  Technology 2008<br />12<br />Descripteurs de projets (2/5)<br />Le POM minimal<br />La racine du projet (&lt;proje...
© OCTO  Technology 2008<br />13<br />Descripteurs de projets (3/5)<br />Caractéristiques du projet<br />Description du pro...
© OCTO  Technology 2008<br />14<br />Descripteurs de projets (4/5)<br />Phase de construction du projet<br />Description d...
© OCTO  Technology 2008<br />15<br />Descripteurs de projets (5/5)<br />Configuration de l’environnement<br />Configuratio...
© OCTO  Technology 2008<br />16<br />Cycle de vie et plugins (1/3)<br />Cycle de vie et « plugins »<br />Maven est basé su...
© OCTO  Technology 2008<br />17<br />Cycle de vie et plugins(2/3)<br />Cycle de vie commun<br />validate<br />Vérifie que ...
Basé sur le type de projet précisé dans le POM (<packaging>jar, war, ear, pom</packaging>)</li></ul>validate     compile  ...
© OCTO  Technology 2008<br />18<br />Cycle de vie et plugins(3/3)<br />Plugins fréquemment utilisés<br />site : génère un ...
© OCTO  Technology 2008<br />19<br />Référentiels de librairies (1/3)<br />Référentiel de librairies (« Repository »)<br /...
© OCTO  Technology 2008<br />20<br />Référentiels de librairies (2/3)<br />Poste de travail<br />Poste de travail<br />Mav...
© OCTO  Technology 2008<br />21<br />Référentiels de librairies (3/3)<br />L’utilisateur tape la commande « mvn compile »<...
Démarrer un projet avec Maven<br />Projet simple<br />Projet multi-modules<br />Héritage de projets<br />© OCTO  Technolog...
© OCTO  Technology 2008<br />23<br />Démarrer un projet « from scratch » (1/2)<br />Créer le projet à l’aide de Maven<br /...
© OCTO  Technology 2008<br />24<br />Démarrer un projet « from scratch » (2/2)<br />Importer le projet dans Eclipse<br />U...
© OCTO  Technology 2008<br />25<br />Un projet multi-module est un projet composé de plusieurs modules ou projets<br />Per...
© OCTO  Technology 2008<br />26<br />Un projet peut hériter des informations d’un projet parent<br />Le POM du projet fils...
Contrôle qualité<br />Qualité du code source<br />Qualité de l’application<br />Qualité des développements<br />© OCTO  Te...
© OCTO  Technology 2008<br />28<br />Contrôle qualité<br />Qualité de l’application<br />Qualité des développements<br />Q...
© OCTO  Technology 2008<br />29<br />Qualité du code source<br />Qualité du design et du code<br />Vérification de l’archi...
© OCTO  Technology 2008<br />30<br />Indicateurs de qualité<br />
© OCTO  Technology 2008<br />31<br />Qualité du code source et de l’application<br />Qualité des tests (unitaires / foncti...
© OCTO  Technology 2008<br />32<br />Qualité des développements<br />Suivre l’évolution des développements<br />Commit quo...
Indicateurs<br />PMD<br />FindBugs<br />Checkstyle<br />Cobertura<br />© OCTO  Technology 2008<br />33<br />
© OCTO  Technology 2008<br />34<br />Critères analysés<br />Design<br />Analyse des problèmes de conception / d’architectu...
© OCTO  Technology 2008<br />35<br />Critères analysés<br />Performances<br />Analyse statique des problèmes pouvant engen...
© OCTO  Technology 2008<br />36<br />Indicateurs du site<br />Les indicateurs remontés par le site concernent essentiellem...
© OCTO  Technology 2008<br />37<br />Indicateurs du site<br />Tous les indicateurs de qualité du code sont générés par des...
© OCTO  Technology 2008<br />38<br />PMD<br />Détection d’exceptions potentielles<br />NullPointerException<br />Mauvaise ...
© OCTO  Technology 2008<br />39<br />Findbugs<br />Détecte des mauvaises pratiques pouvant engendrer un plantage ou un com...
© OCTO  Technology 2008<br />40<br />Checkstyle<br />Vérifie le style de programmation<br />Détecte la mauvaise lisibilité...
© OCTO  Technology 2008<br />41<br />Surfire-report et Cobertura<br />Surfire-report<br />Résultat de l’exécution des test...
© OCTO  Technology 2008<br />42<br />JXR et Javadoc <br />JXR<br />Génération du code en HTML<br />Facilite le parcours du...
Le projet sous tous ses angles<br />Du point de vue du développeur<br />Du point de vue du responsable qualité<br />Du poi...
Du point de vue du développeur<br />Utilisez maven pour valider vos développement (passage de tous les tests automatisés e...
Du point de vue du responsable qualité<br />Attention a bien sélectionner les indicateurs remontés. Trop d’informations tu...
© OCTO  Technology 2008<br />46<br />Du point de vue du gestonnaire de release<br />Laissez maven faire se travail pour vo...
Conclusion<br />Maven est-il l’outil miracle ?<br />Non, il doit s’inscrire dans une démarche d’industrialisation des déve...
Prochain SlideShare
Chargement dans…5
×

20080311 - Paris Vi Master STL TA - Initiation Maven

2 232 vues

Publié le

Présentation d'une demi journée de Maven en Master à Paris VI

0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
2 232
Sur SlideShare
0
Issues des intégrations
0
Intégrations
10
Actions
Partages
0
Téléchargements
82
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

20080311 - Paris Vi Master STL TA - Initiation Maven

  1. 1. © OCTO Technology 2008<br />Maven<br />Paris VI – UPMC<br />Master Science et Technologies du Logiciel<br />Technologies Applicatives<br />Mardi 11 Mars 2008<br />
  2. 2. Arnaud Héritier<br />OCTO Technology<br />Expert sénior<br />aheritier AT octo DOT com<br />http://www.octo.com<br />Maven<br />Committer depuis 2004 et membre du Project Management Committee depuis 2005 <br />Aheritier AT apache DOT org<br />http://maven.apache.org<br />DESS GLA promo 1999.<br />© OCTO Technology 2008<br />2<br />
  3. 3. © OCTO Technology 2007<br />© OCTO Technology 2007<br />OCTO Technology - Fiche d’identité<br /><ul><li>Fondé en 1998, OCTO est un Cabinet de Conseil en Architecture des Systèmes d'Information.</li></ul>Une communauté de 90 architectes et experts<br />S’enrichissant mutuellement à la fois sur le métier, sur la technique et sur le logiciel<br />Désireux de comprendre le métier de leurs clients<br />Prenant plaisir à travailler ensemble<br />Une croissance organique maîtrisée et continue depuis sa création (+ 30% chaque année)<br />
  4. 4. © OCTO Technology 2007<br />OCTO Technology - Prestations : une offre innovante<br />Le savoir faire d’OCTO couvre tout le cycle de vie d’un Système d’Information :<br />Assister dans le pilotage des Systèmes d’Information<br />Qualité, et pas uniquement coûts et délais<br />Construire et transformer le patrimoine applicatif pour:<br />Tirer le meilleur parti des technologies de l’information <br />Accélérer leur mise en œuvre grâce à une forte expertise technique et méthodologique<br />Industrialiser ces pratiquesau sein des DSI : capitaliser, et rationaliser dans la durée<br />© OCTO Technology 2007<br />
  5. 5. Agenda<br />Théorie<br />Présentation générale de Maven<br />Maven, les concepts<br />Démarrer un projet avec Maven<br />Contrôle qualité<br />Indicateurs de reporting<br />Le projet sous tous ses angles<br />Pratique<br />Questions / Réponses<br />et / ou<br />Exemple live<br />© OCTO Technology 2008<br />5<br />
  6. 6. Présentation générale de Maven<br />Un peu d’archéologie<br />Maven en 3 questions<br />Maven un remède à vos douleurs ?<br />© OCTO Technology 2008<br />6<br />
  7. 7. Un peu d’archéologie<br />© OCTO Technology 2008<br />7<br />
  8. 8. © OCTO Technology 2008<br />8<br />Maven en 3 questions<br />C’est quoi ?<br />Un outil de type batch (Windows) / shell (Unix)<br />Une philosophie<br />Application des bonnes pratiques et patterns de développement Java<br />Ça sert à quoi ?<br />Construire une application<br />Compiler, tester<br />Contrôler et produire des packages livrables<br />Publier les documentations et les rapports sur la qualité<br />Ça apporte quoi ?<br />Simplification du processus de construction d’une application<br />Fournit des bonnes pratiques de développement<br />Tend à uniformiser le processus de construction<br />Vérifie la qualité du code<br />Beaucoup moins de maintenance qu’un script (Ant, shell …)<br />http://maven.apache.org/guides/getting-started/<br />
  9. 9. Maven, un remède à vos douleurs ?<br />© OCTO Technology 2008<br />9<br />
  10. 10. Maven, les concepts<br />Descripteurs de projets <br />Cycle de vie et plugins<br />Référentiels de librairies<br />© OCTO Technology 2008<br />10<br />
  11. 11. © OCTO Technology 2008<br />11<br />Descripteurs de projets (1/5)<br />Descripteurs de projets : Project Object Model (« POM »)<br />Base de travail de Maven<br />Un projet Maven est un module d’une application<br />Équivalent à un projet Eclipse<br />Fichier xml (pom.xml) décrivant le projet Maven<br />Version du projet<br />Description du projet<br />Liste des développeurs<br />…<br />Ce fichier est utilisé par Maven pour construire l’application<br />Dépendances de l’application (librairies jar)<br />Tâches (ou « goals ») à exécuter<br />Fournit des valeurs par défaut (bonnes pratiques)<br />Ex : répertoire des sources « src/main/java »<br />Un seul POM est nécessaire par projet<br />Les commandes Maven sont à exécuter à la racine du projet où se situe le fichier pom.xml<br />http://maven.apache.org/guides/introduction/introduction-to-the-pom.html<br />
  12. 12. © OCTO Technology 2008<br />12<br />Descripteurs de projets (2/5)<br />Le POM minimal<br />La racine du projet (&lt;project&gt;)<br />La version du modèle de POM (&lt;modelVersion&gt;)<br />4.0.0 pour Maven 2.0.x<br />L’identifiant du groupe auquel appartient le projet (&lt;groupId&gt;)<br />Généralement commun à tous les sous projets d’un projet<br />L’identifiant de l’artefact à construire (&lt;artefactId&gt;)<br />Généralement le nom du projet sans espaces (-) en minuscules<br />La version de l’artefact à construire (&lt;version&gt;)<br />Toujours en SNAPSHOT sauf lors de la release<br />Le type d’artefact à construire (&lt;packaging&gt;)<br />pom, jar, war, ear<br />Exemple :<br />http://maven.apache.org/pom.html<br />http://maven.apache.org/ref/2.0.4/maven-model/maven.html<br />
  13. 13. © OCTO Technology 2008<br />13<br />Descripteurs de projets (3/5)<br />Caractéristiques du projet<br />Description du projet<br />Informations diverses sur le projet<br />Dépendances<br />Liste des librairies utilisées<br />Précision du scope de la librairie<br />Exclusion des dépendances transitives<br />
  14. 14. © OCTO Technology 2008<br />14<br />Descripteurs de projets (4/5)<br />Phase de construction du projet<br />Description de la construction<br />Agencement des répertoires<br />Tâches (goals) <br />Gestion des ressources du projet<br />En grande partie configurée par défaut<br />Gestion des plugins (optionnel)<br />Utilisation de plugins existants<br />« Tâches » personnalisées<br />Possibilité de créer des plugins<br />Gestion des rapports (optionnel)<br />Choix des rapports à générer<br />Utilisation de plugins dédiés<br />
  15. 15. © OCTO Technology 2008<br />15<br />Descripteurs de projets (5/5)<br />Configuration de l’environnement<br />Configuration des référentiels (repo)<br />Sélection du ou des repos distants<br />Lien au gestionnaire de sources<br />Possibilité de le piloter<br />Lien au gestionnaire de bugs<br />Essentiellement pour la doc<br />Lien à l’intégration continue<br />Mailing-list<br />
  16. 16. © OCTO Technology 2008<br />16<br />Cycle de vie et plugins (1/3)<br />Cycle de vie et « plugins »<br />Maven est basé sur la notion de cycle de vie de construction (build)<br />Il s’agit du processus mis en œuvre pour construire l’application<br />Processus défini par Maven (bonnes pratiques)<br />Ce processus est basé sur des plugins<br />Les plugins sont des fonctionnalités de l’outil<br />Le noyau de l’outil ne fait que de la gestion des pom, des repos et des settings<br />Chaque plugin apporte de nouvelles commandes exécutables par Maven<br />Les plugins sont des ensembles (fonctionnels) de traitements<br />Ex. : le plugin « compiler » permet de compiler des sources et des tests<br />Chaque traitement peut être associé à une phase du cycle de build<br />À partir d’une commande, Maven déroule toutes les étapes nécessaires pour atteindre la phase du cycle de vie en question<br />Ex. : pour la commande « package », Maven compile, test, et package<br />http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html<br />
  17. 17. © OCTO Technology 2008<br />17<br />Cycle de vie et plugins(2/3)<br />Cycle de vie commun<br />validate<br />Vérifie que le projet est correct et toutes les informations nécessaires présentes<br />compile<br />Compile les sources du projet <br />test<br />Teste les sources compilées à l’aide d’un framework de tests unitaires (ex : JUnit)<br />package<br />Prend les sources compilées et génère un package distribuable (ex : Jar)<br />verify<br />Vérifie que le package généré est correct<br />install<br />Installe le package dans le repo local pour pouvoir être utilisé comme dépendances par d’autre projets locaux<br />deploy<br />Déploie le package dans un repo distant pour pouvoir être utilisé comme dépendances par d’autre projets<br /><ul><li>Commandes communément utilisées
  18. 18. Basé sur le type de projet précisé dans le POM (<packaging>jar, war, ear, pom</packaging>)</li></ul>validate compile test package verify install deploy<br />
  19. 19. © OCTO Technology 2008<br />18<br />Cycle de vie et plugins(3/3)<br />Plugins fréquemment utilisés<br />site : génère un site documentaire pour le projet<br />jar / war /ear : génère un package de l’application (~ package)<br />javadoc : génère la javadoc du projet<br />archetype : génère un projet (arborescence + pom.xml)<br />eclipse : génère les fichiers d’Eclipse (.project, .classpath)<br />antrun : exécute des tâches ant pendant le build<br />checkstyle, pmd… : analysent le code et génèrent un rapport<br />
  20. 20. © OCTO Technology 2008<br />19<br />Référentiels de librairies (1/3)<br />Référentiel de librairies (« Repository »)<br />Espace de stockage et partage des artefacts<br />Descripteurs de projets<br />Gestion des dépendances transitives<br />Les livrables binaires des projets et librairies (API, frameworks…)<br />jar, war, ear,…<br />Remplace les répertoires « lib » des projets<br />Conserve les différentes versions de chaque librairie<br />Documentation<br />Javadoc<br />Utilisé par Maven pour compiler et tester l’application<br />Librairies utilisées par l’application<br />Deux types de référentiels<br />Local : instance mono-utilisateur (Ex. : sur un poste de travail)<br />Distant : instance servant uniquement d’espace de stockage et de diffusion des artefacts entre plusieurs utilisateurs<br />http://maven.apache.org/guides/introduction/introduction-to-repositories.html<br />
  21. 21. © OCTO Technology 2008<br />20<br />Référentiels de librairies (2/3)<br />Poste de travail<br />Poste de travail<br />Maven<br />Maven<br />Maven<br />Référentiel local<br />(librairies + sites)<br />Référentiel de<br />librairies local<br />Référentiel de<br />librairies local<br />Référentiel de<br />librairies distant<br />Référentiels de <br />librairies distant<br />(Maven, Ibiblio, <br />codehaus)<br />Proxy<br />Entreprise<br />INTERNET<br />Usine de <br />développement<br />
  22. 22. © OCTO Technology 2008<br />21<br />Référentiels de librairies (3/3)<br />L’utilisateur tape la commande « mvn compile »<br />Maven lit les dépendances du POM<br />Maven recherche chaque dépendance<br />Dans le référentiel local <br />S’il ne trouve pas en local,<br />Maven recherche dans le référentiel distant<br />Maven télécharge la dépendance et la positionne dans le référentiel local<br />
  23. 23. Démarrer un projet avec Maven<br />Projet simple<br />Projet multi-modules<br />Héritage de projets<br />© OCTO Technology 2008<br />22<br />
  24. 24. © OCTO Technology 2008<br />23<br />Démarrer un projet « from scratch » (1/2)<br />Créer le projet à l’aide de Maven<br />Utiliser le plugin maven-archetype* pour générer l’arborescence et le descripteur de projet pom.xml<br />Ex java : <br />mvnarchetype:create<br />-DgroupId=com.societe.projet<br />-DartifactId=projectSimple<br />Ex application web : <br />mvnarchetype:create<br />-DgroupId=com.societe.projet<br />-DartifactId=projectWeb<br />-DarchetypeArtifactId=maven-archetype-webapp<br />* http://maven.apache.org/plugins/maven-archetype-plugin/<br />
  25. 25. © OCTO Technology 2008<br />24<br />Démarrer un projet « from scratch » (2/2)<br />Importer le projet dans Eclipse<br />Utiliser le plugin maven-eclipse* pour <br /> générer les fichiers nécessaires à l’import <br /> sous eclipse (.classpath, .project)<br />Ex : mvn eclipse:clean eclipse:eclipse<br />Importer le projet sous eclipse<br />File / Import / Existing project <br /> into Workspace<br />* http://maven.apache.org/plugins/maven-eclipse-plugin/<br />
  26. 26. © OCTO Technology 2008<br />25<br />Un projet multi-module est un projet composé de plusieurs modules ou projets<br />Permet depuis le projet « englobant » de compiler, tester packager l’application (l’ensemble des modules) en une seule commande Maven<br />Ex : project est un projet multi-module contenant les projets projectSimple et projectWeb<br />Écriture du POM<br />Intérêts du multi-module<br />Séparation des builds de même qu’on sépare les fonctionnalités en programmation orientée objet (POO)<br />Modularité et réutilisabilité de l’application (certaines parties au moins)<br />&lt;project&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;groupId&gt;com.societe.projet&lt;/groupId&gt; &lt;artifactId&gt;project&lt;/artifactId&gt; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; &lt;name&gt;Main Project&lt;/name&gt; &lt;modules&gt; &lt;module&gt;projectSimple&lt;/module&gt; &lt;module&gt;projectWeb&lt;/module&gt; &lt;/modules&gt; &lt;/project&gt;<br />Agrégation de projets (multi-module)<br />
  27. 27. © OCTO Technology 2008<br />26<br />Un projet peut hériter des informations d’un projet parent<br />Le POM du projet fils hérite du POM du projet père<br />Les dépendances, les plugins, les rapports<br />Ex : projectSimple et projectWeb nécessitent JUnit 3.8.1<br />On fait hériter projectSimple et projectWeb de project<br />On précise dans le POM de project la dépendance<br />Écriture des POM<br />Intérêts de l’héritage<br />Hériter des caractéristiques communes de sous projets de même qu’on hérite d’une classe en POO<br />Centraliser l’information dans un seul descripteur (ex: éviter la montée de version d’une librairie dans 5 projets)<br />Possibilité de coupler héritage et agrégation<br />Le projet parent contient les projets fils et gère les caractéristiques communes des projets fils<br />&lt;project&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;groupId&gt;com.societe.projet&lt;/groupId&gt; &lt;artifactId&gt;project&lt;/artifactId&gt; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;junit&lt;/groupId&gt; &lt;artifactId&gt;junit&lt;/artifactId&gt; &lt;version&gt;3.8.1&lt;/version&gt; &lt;scope&gt;test&lt;/scope&gt; &lt;/dependency&gt; &lt;/dependencies&gt;&lt;/project&gt;<br />&lt;project&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;parent&gt; &lt;groupId&gt;com.societe.projet&lt;/groupId&gt; &lt;artifactId&gt;project&lt;/artifactId&gt; &lt;version&gt;1.0-SNPASHOT&lt;/version&gt; &lt;/parent&gt; &lt;artifactId&gt;projectSimple&lt;/artifactId&gt; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; &lt;packaging&gt;jar&lt;/packaging&gt;&lt;/project&gt;<br />Héritage de projets<br />
  28. 28. Contrôle qualité<br />Qualité du code source<br />Qualité de l’application<br />Qualité des développements<br />© OCTO Technology 2008<br />27<br />
  29. 29. © OCTO Technology 2008<br />28<br />Contrôle qualité<br />Qualité de l’application<br />Qualité des développements<br />Qualité du code source<br />Évolution de l’application<br />Charge de développement<br />Code<br />Tests Unitaires<br />Design<br />Tests Fonc. / non Fonc.<br />Architecture<br />Règles d’écriture<br />Résultats<br />Résultats<br />Suivi de charge<br />Fonctionnalités livrées <br />Complexité<br />Couverture<br />Couverture<br />Anomalies / Bugs<br />Code modifié<br />Pilotage<br />Tableau de bord<br />Publication<br />
  30. 30. © OCTO Technology 2008<br />29<br />Qualité du code source<br />Qualité du design et du code<br />Vérification de l’architecture de l’application<br />Réutilisabilité, extensibilité, maintenabilité<br />Dépendances entre classes / packages<br />Vérification des standards de programmation<br />Convention d’écriture Java1<br />Bonnes pratiques (présence de mauvaises pratiques)<br />Présence de javadoc<br />Vérification de la complexité du code<br />Code non optimal<br />Code dupliqué<br />1 : http://java.sun.com/docs/codeconv/<br />
  31. 31. © OCTO Technology 2008<br />30<br />Indicateurs de qualité<br />
  32. 32. © OCTO Technology 2008<br />31<br />Qualité du code source et de l’application<br />Qualité des tests (unitaires / fonctionnels / performance)<br />Vérification du passage des tests<br />Passage au vert (OK) de tous les tests<br />Vérifier que les tests passent ne suffit pas<br />Présence de tests inutiles<br />Couverture faible ou sur des parties sans intérêt du code<br />Vérifier la couverture des tests<br />Pourcentage du code testé<br />Mettre en relation ces résultats avec le nombre de bugs toujours présents<br />Un code 100 % testé mais avec de nombreux bugs est mal testé<br />
  33. 33. © OCTO Technology 2008<br />32<br />Qualité des développements<br />Suivre l’évolution des développements<br />Commit quotidien ou non<br />A mettre en relation avec les délais d’intégration, la qualité du code et des tests<br />Suivre la cadence des livraisons<br />Nombre de fonctionnalités livrées dans un lot<br />Nombre de bugs corrigés / bugs restants / nouveaux bugs<br />Rapport entre charges des développements et fonctionnalités livrées / anomalies corrigées<br />Utilisation du gestionnaire d’issues et du gestionnaire de versions, CVS pour obtenir les informations<br />Calcul de la vélocité des développements<br />Pour mieux estimer les charges et délais des nouvelles tâches<br />
  34. 34. Indicateurs<br />PMD<br />FindBugs<br />Checkstyle<br />Cobertura<br />© OCTO Technology 2008<br />33<br />
  35. 35. © OCTO Technology 2008<br />34<br />Critères analysés<br />Design<br />Analyse des problèmes de conception / d’architecture de l’application<br />Méthodes / classes trop longues, copiers-collers, …<br />Lisibilité du code<br />Analyse du code et des conventions d’écriture pour éviter des problèmes de maintenabilité<br />Accolades autour des blocs if/while/for, code mort (champs ou méthodes inutilisés), …<br />Robustesse<br />Analyse des problèmes pouvant engendrer un crash de l’application<br />Gestion des Exceptions, gestion des Threads<br />Analyse des problèmes pouvant engendrer un comportement anormal de l’application<br />Comparaisons d’objets ou de chaînes, …<br />
  36. 36. © OCTO Technology 2008<br />35<br />Critères analysés<br />Performances<br />Analyse statique des problèmes pouvant engendrer des mauvaises performances de l’application<br />Threads, mauvaise usage des chaînes, …<br />Sécurité<br />Analyse les problèmes de sécurité du code pouvant engendrer un comportement anormal ou des crashs<br />Problèmes d’introspection, travail en équipe<br />Test<br />Analyse les tests unitaires pour éviter les tests vides ou sans assertions<br />Analyse la présence de tests sur la plus grande partie du code (vérification de la couverture)<br />Documentation<br />Vérifie la présence de documentation complète sur les méthodes et classes<br />
  37. 37. © OCTO Technology 2008<br />36<br />Indicateurs du site<br />Les indicateurs remontés par le site concernent essentiellement la qualité du code source<br />Qualité du code source<br />Code<br />Tests Unitaires<br />Design<br />Surfire<br />PMD / Checkstyle<br />PMD / Findbugs<br />Architecture<br />Règles d’écriture<br />Résultats<br />Cobertura<br />PMD / Findbugs<br />Complexité<br />Couverture<br />
  38. 38. © OCTO Technology 2008<br />37<br />Indicateurs du site<br />Tous les indicateurs de qualité du code sont générés par des plugins Maven de reporting<br />Ces plugins sont généralement utilisés par le plugin « site »<br />mvn site appelle tous les plugins reporting<br />Chaque plugin génère un ou plusieurs fichiers xml de résultat<br />Le plugin site agrège tous les rapports sous forme de site web<br />
  39. 39. © OCTO Technology 2008<br />38<br />PMD<br />Détection d’exceptions potentielles<br />NullPointerException<br />Mauvaise gestion des exceptions<br />Blocs catch vides<br />Remontée de nouvelles exceptions <br />Détection de ressources non fermées<br />Connections à la base<br />Flux de fichiers (Streams)<br />Détection de code mort <br />Méthodes, champs, blocs non utilisés<br /> Détection de code non optimal<br />Expressions trop complexes<br />Mauvaise utilisation des Strings<br />Possibilité de personnaliser les règles à vérifier<br />rulesets.xml<br />Possibilité de faire échouer le build<br />pmd:check<br />http://pmd.sourceforge.net/<br />http://maven.apache.org/plugins/maven-pmd-plugin/<br />
  40. 40. © OCTO Technology 2008<br />39<br />Findbugs<br />Détecte des mauvaises pratiques pouvant engendrer un plantage ou un comportement anormal<br />Oubli d’exception<br />Mauvaise utilisation de equals et hashCode<br />Possibilité de filtrer les règles à vérifier<br />includeFilter (xml)<br />visitors (règles)<br />threshold (criticité)<br />http://findbugs.sourceforge.net/<br />http://mojo.codehaus.org/findbugs-maven-plugin<br />
  41. 41. © OCTO Technology 2008<br />40<br />Checkstyle<br />Vérifie le style de programmation<br />Détecte la mauvaise lisibilité du code<br />Manque d’accolades<br />Méthodes trop longues ou avec trop de paramètres<br />Détecte les copiés collés<br />Vérifie la javadoc<br />Présence de commentaires sur les méthodes et classes<br />Détecte des problèmes possibles de robustesse<br />Détecte la mauvaise utilisation des == et != au lieu de equals<br />Détecte la mauvaise utilisation de this<br />Possibilité de filtrer les règles à vérifier<br />Fichier xml<br />http://checkstyle.sourceforge.net/<br />http://maven.apache.org/plugins/maven-checkstyle-plugin/<br />
  42. 42. © OCTO Technology 2008<br />41<br />Surfire-report et Cobertura<br />Surfire-report<br />Résultat de l’exécution des tests<br />Cobertura<br />Couverture des tests<br />Possibilité de faire échouer le build<br /> si le pourcentage de code couvert<br /> n’est pas suffisant<br />http://cobertura.sourceforge.net/<br />http://mojo.codehaus.org/cobertura-maven-plugin/<br />http://maven.apache.org/plugins/maven-surefire-report-plugin/<br />
  43. 43. © OCTO Technology 2008<br />42<br />JXR et Javadoc <br />JXR<br />Génération du code en HTML<br />Facilite le parcours du code<br />Lié aux autres plugins<br />Affichage rapide des erreurs<br />Possibilité de lier à la doc<br />Javadoc<br />Génération de la javadoc<br />Gère le multi-module<br />
  44. 44. Le projet sous tous ses angles<br />Du point de vue du développeur<br />Du point de vue du responsable qualité<br />Du point de vue du gestionnaire de release<br />© OCTO Technology 2008<br />43<br />
  45. 45. Du point de vue du développeur<br />Utilisez maven pour valider vos développement (passage de tous les tests automatisés et génération du livrable)<br />Le support des IDEs est variable. <br />Bon dans NetBeans<br />Moyen dans Eclipse (projets Q4E, m2eclipse)<br />Les plugins générant la config depuis maven (eclipse:eclipse, …) offrent la plus grande palette de services<br />© OCTO Technology 2008<br />44<br />
  46. 46. Du point de vue du responsable qualité<br />Attention a bien sélectionner les indicateurs remontés. Trop d’informations tue l’information.<br />Utiliser un serveur d’intégration continue pour valider l’ensemble des développements (tests, qualité, …) et générer le reporting.<br />Adosser un système de suivi des indicateurs (Sonar par exemple) pour contrôler leurs évolutions au fur et à mesure.<br />© OCTO Technology 2008<br />45<br />
  47. 47. © OCTO Technology 2008<br />46<br />Du point de vue du gestonnaire de release<br />Laissez maven faire se travail pour vous.<br />Les pré-requis<br />Les binaires SVN<br />Les élements du POM<br />scm<br />distributionManagement (fourni par le pom parent)<br />Les settings du users<br />Le compte pour faire l’upload sur le repo central de l’entreprise<br />Les commandes<br />release:prepare, release:perform, release:rollback, release:cleanup<br />
  48. 48. Conclusion<br />Maven est-il l’outil miracle ?<br />Non, il doit s’inscrire dans une démarche d’industrialisation des développements<br />L’outil n’est pas toujours facile à aborder mais il est lui-même industrialisable<br />C’est un projet OSS avec ses avantages et ses inconvénients<br />Pour en savoir plus<br />Deux livres sont disponibles gratuitement sur sonatype.com et devzuz.com<br />De nombreux bloggeurs donnent leur avis positif ou négatif….. À vous de vous faire le votre désormais.<br />© OCTO Technology 2008<br />47<br />
  49. 49. Et maintenant ?<br />© OCTO Technology 2008<br />48<br />ET<br />OU<br />Questions & Réponses<br />Exemple live<br />

×