Upgrade to Pro — share decks privately, control downloads, hide ads and more …

De compiletout.bat à l’Usine Logicielle pour Java

grams
March 28, 2013

De compiletout.bat à l’Usine Logicielle pour Java

Support de présentation pour Devoxx France 2013.

Le couple IDE + gestionnaire de sources ne suffit plus à une équipe de développement. Ajoutez maintenant à cela : construction continue, entrepôt d'artefacts, déploiement continu, générateurs et relecteurs de code et vous passez de l'établi à la véritable usine de fabrication logicielle ou "Software Factory".

Cette session vous propose un tour d'horizon de l'outillage actuel du développement Java (les plans de l'usine en quelque sorte).

Chacun des composants recensés sera présenté pour expliquer son utilité, comment il intervient, quels sont les outils qui permettent de le mettre en œuvre et surtout quelques conseils et bonnes questions à se poser.

Et pour finir, nous constaterons l’émergence d'un nouveau profil, voire d'un nouveau métier : Software Factory Manager.

grams

March 28, 2013
Tweet

Other Decks in Programming

Transcript

  1. 15h35 - 16h25 - Salle E. Fitzgerald & L. Armstrong

    De compiletout.bat à l’Usine Logicielle pour Java
  2. 27 au 29 mars 2013 De compiletout.bat à l’Usine Logicielle

    pour Java Guillaume Rams Consultant/Formateur, Oxiane @GuillaumeRams
  3. Guillaume Rams • 15 ans dans le monde Java ›

    SSII, recherche, start-up, éditeur de logiciels, conseil, formation, … • Consultant / Formateur pour Oxiane › Filière Usine Logicielle : Intégration Continue, Qualimétrie, Eclipse, …
  4. 27 au 29 mars 2013 De compiletout.bat à l’Usine Logicielle

    pour Java • Ce que j’entends par Usine Logicielle • Ce que ça contient • Comment l’héberger • Qui est le Responsable d’Usine Logicielle
  5. Plusieurs visions du développement •Classique : une chaîne de fabrication

    du logiciel, depuis les sources jusqu'au livrable •Tendance DevOps : l'ensemble des outils allant des demandes à leur mises en production et leur exploitation •Tendance XP : une équipe qui prend des besoins du client et produit du logiciel fonctionnel
  6. L’Usine Logicielle selon la R.A.C.H.E. • Je partage mes sources

    dans CVS • Je code dans Eclipse • Bouton droit -hop- exporter EAR • La console Websphere, et -hop- c'est déployé • Et la variante : FTP -hop- puis envoi de mail « ça y est j'ai livré l'EAR »
  7. L’Usine Logicielle ou Software Factory •Automatiser et outiller au maximum

    toutes les activités liées au développement (afin de) •Maximiser la quantité de travail à ne pas faire par les développeurs (et enfin faire ce qui aurait été trop pénible manuellement)
  8. Les référentiels transverses Logiciel Idée •Gestion des sources •Référentiels d'artefacts

    •Travail collaboratif (wiki, GED, post-its, ...) •Suivi des demandes, des exigences, défauts… •Utilisateurs, Habilitations
  9. Les gestionnaires de sources Pratiques usuelles Subversion (Apache) Challengers Git

    (git team) Mercurial (mercurial team) … Autres DVCS (si plugin dans l’IDE) Perte de vitesse CVS (CVS team) $$$ Commerciaux
  10. Retour aux sources git or not git ? (← insérer

    son DVCS favori ici)  environnement distribué, difficultés réseau ?  beaucoup de branches de développement ? (beaucoup c'est à partir de 3 branches !)  chaque développeur attaque plusieurs tâches en parallèle ?  est-ce que le Subversion est bien employé et maîtrisé de tous?
  11. Le référentiel d'artefacts type Maven • Pour gérer tous les

    artefacts produits et leurs versions › C’est aux .jar ce que Subversion est aux .java • Pour ne pas dépendre d’internet pour compléter son build • Pour instaurer une gouvernance des dépendances tierces
  12. Les référentiels d’artefacts Pratiques usuelles Artifactory (JFrog) Nexus (Sonatype) Challengers

    Archiva (Apache) Perte de vitesse Répertoire de fichiers partagé
  13. Du bon usage du Wiki • Le wiki est le

    meilleur outil pour la doc *vivante* •Moins pour la doc formelle, versionnée et imprimable • Indispensable : le portail d’accueil du développeur • Carte de l’usine et pointeur vers tous les services • Cartographie des environnements • Conventions, best practices • Base de connaissances des dévs
  14. Conception et génération de code •Attention à ne pas jeter

    le bébé avec l’eau du bain • Du tout-UML à l’absence de toute documentation de conception •La génération de code devrait faire partie de l’usine • Et pas seulement l’archétype initial de démarrage de projet •Mais il reste encore difficile d’atteindre • Le tout-MDA •Le round-trip engineering complet
  15. Le poste de développement C’est : • L'IDE et ses

    plugins • Les outils, par ex : • serveur web local, • SoapUI, SQuirreL SQL, • Selenium, Fiddler, • etc... … et un paramétrage partagé par tous les dév de tout ça Que l’on doit pouvoir : • Installer ou télé-distribuer • Composer avec des politiques de gestion de parc bureautique … et le tout doit fonctionner dans le train ou en télétravail
  16. Les IDE pour Java Pratiques usuelles Eclipse (Eclipse.org) Challengers NetBeans

    (Oracle) IntelliJ IDEA (JetBrains) Rational Application Developer (IBM) Perte de vitesse Visual J++ (Microsoft)
  17. De JavaC à Maven en passant par Ant •Ant permet

    de scripter des constructions complexes •Les apports majeurs de Maven : • Description au lieu de scripts • Conventions et bonnes pratiques d’organisation des sources • Gestion des dépendances • Les référentiels d’artefacts •Souvent très mal maitrisé par les développeurs
  18. Les outils de construction pour Java Pratiques usuelles Maven (Apache)

    Challengers Gradle (Gradleware) Ant + Ivy (Apache) Perte de vitesse Ant (Apache)
  19. Le serveur d’intégration continue •Chef d’orchestre de l’usine •Construit, intègre,

    teste, déploie, … en continu •Exécute en tâche de fond toutes les actions longues • Le développeur n’est pas bloqué • Demande très vite infrastructure puissante
  20. Les serveurs de construction continue Pratiques usuelles Jenkins (CloudBees) Challengers

    Hudson (Oracle/Eclipse) TeamCity (JetBrains) Bamboo (Atlassian) Rational Build Forge (IBM) Perte de vitesse CruiseControl (ThoughtWorks) Continuum (Apache)
  21. Pourquoi inspecter le code source ? • Pour surveiller les

    développeurs ? • Qui pond le plus de lignes ? • Qui néglige le formatage ? • Qui a écrit le plus de tests unitaires ? • On risque d’améliorer l’indicateur, et non la qualité intrinsèque • Ne pas espérer un comportement (nous sommes une équipe) mais récompenser autre chose (statistiques individuelles)
  22. Pourquoi inspecter le code source ? • Pour aider les

    développeurs à améliorer la qualité du code ? • Apprentissage des conventions • Rattrapage des fautes d’inattention • Relecture du code automatisée • Attirer l’attention sur du code louche • Suggérer où porter l’effort de test
  23. Les outils de qualimétrie Java Pratiques usuelles Rien Sonar Checkstyle

    PMD FindBugs JU Cobertura, JaCoCo, Emma Perte de vitesse Ne pas passer par Sonar
  24. – Attention – •Installer ces outils ne suffit pas pour

    obtenir de la qualité •Ne pas se contenter des chartes qualité par défaut • Sinon un million d’avertissements non exploitables • Commencer par un jeu de règle restreint, bien compris de tous
  25. … on ne vous a pas pris en traître •Toute

    validation doit pouvoir être faite à l'identique : • dans l'IDE (plugin Eclipse, plugin NetBeans...) • pour le build (task Ant, plugin Maven, ...) • dans le serveur de construction continue • dans la doc (wiki, normes de codage...) • dans la « definition of done » • …
  26. Automatiser les déploiements •Tâche fastidieuse, répétitive et source d’erreurs •Pour

    tester la « déployabilité » dès les premières itérations •Les scripts de déploiement font partie du livrable •Permet de déployer en continu par l’intégration continue •Et donc d’automatiser les tests sur application déployée •Aller jusqu’aux déploiements périphériques : •Instances de bases de données et jeux de données de test •Raccordements réseau, configuration, …
  27. Les outils de déploiement J2EE Pratiques usuelles Scripts maison Maven

    Cargo (cargo team) Challengers DeployIT (XebiaLabs) Nolio (Noliosoft) … Puppet, Chef, … Perte de vitesse Scripts maison
  28. Automatiser les tests •Tests fonctionnels •Par exemple Selenium pour applis

    web •Tests de performance •Par exemple JMeter pour applis web •« Smoke Tests » : test minimal automatisable « Au moins ça démarre ! »
  29. Rapprocher fabrication et exploitation •Utiliser les mêmes scripts ou outils

    de déploiement •Utiliser un référentiel de livrables commun •Avec traçabilité et liaison avec éventuelle CMDB •Tester déployabilité et exploitabilité au plus tôt •Déploiement et test automatisés en continu •Permettre aux logs de remonter aux études •Enseigner aux développeurs ce que sont des logs utiles •Documentation commune
  30. Et le reste, tout le reste… •Virtualisation de services •Assistance

    à relecture de code •Outillage SGBD •Profiler •Analyse de logs •Obfuscation des classes
  31. Une Usine Logicielle, est-ce de la prod ? Quelle qualité

    de service puis-je garantir aux projets ? L’Usine Logicielle à la maison •Développer mobilise maintenant une flopée de serveurs •Une Usine Logicielle, est-ce de la prod ? • Quelle qualité de service puis-je garantir aux projets ? • Quel est mon bugdet ? •Répartir les responsabilités : • Software Factory Manager • Cellule architectes / normes • Equipe projet
  32. L’Usine Logicielle in-a-box •Une « virtual appliance » autonome contenant

    l’Usine •plutôt une usinette : difficile de tout faire tenir sur un serveur •Dédiée projet, à archiver ou rallumer selon cycle de vie •Référentiels partagés (sources, artefacts, doc…) •Plusieurs projets d’usine prêtes à l’emploi •Démo clinker sur http://live.clinkerhq.com/
  33. L’Usine Logicielle dans le cloud C’est : •Une infrastructure vite

    scalable •A la demande, en self-service •Accessible via internet • donc y compris en télétravail •Paiement à l'usage Attention tout de même : • Pas d'outils maison exotiques • Dépendant de tiers, • Sous quelle(s) juridiction(s) ? • Confidentialité des sources • et données de test ? • Ne pas devenir captif du fournisseur
  34. Assistance au développement… •Impliqué dans tout le cycle de vie

    du logiciel •Mise en place de l'usine Logicielle •Aide au choix des outils •Assistance aux utilisateurs / développeurs •Relation forte entre la fourniture de frameworks ou stacks d’entreprise et l’outillage qui va avec •Amélioration continue des outils et pratiques de dév
  35. …mais aussi administration système •Le Software Factory Manager est également

    Sysadmin : •Installation et mise à disposition de serveurs, •Garantie de disponibilité, •Montage de clusters de build, •Réplication de référentiels, •Déploiement en cloud ou hybride •Si priorité absolue à « réparer » tout build en échec, alors l’Usine Logicielle doit tourner avec la même priorité
  36. Un pour tous ? •La rencontre des études et de

    la prod > DevOps •Pas forcément un plein-temps si nombre de projets réduit •Equipe conjointe Dev/Ops •Jusqu’à des équipes de plusieurs dizaines de personnes pour grosses structures de dév
  37. Et pour les aspirants Artisans du Logiciel Assez parlé d’usine,

    vive l’artisanat ? (c.f. http://manifesto.softwarecraftsmanship.org/) « C’est à la qualité des outils que l’on reconnait le bon ouvrier »
  38. Crédits photos flickr.com/people/… /wiredforsound23 /pasukaru76 /anemoneprojectors /yuyang226 /dicknella /mrpony /passer-by

    /drewmaughan /rufo_83 /bobsfever /rhysasplundh /chiky /minnemom Merci ! Questions ?