3. Pourquoi des outils d’ingénierie logicielle à Orange Labs Services 2006 1982 Infrastructure 2001 1994 1988 Professionnalisation du développement pour offrir des services reconnus, de qualité et répondant aux besoins de nos clients
4. De l’atelier à l’usine logicielle Professionnalisation du développement : une nouvelle révolution industrielle ? Reproductible Formation - Communication … Qualité Réduire les coûts Réduire le temps de production (Time To Market)
6. Build - Définition Le build peut aller de la compilation (incrémentale) à la génération d’un package en passant par la génération de fichiers de source, le lancement de tests (unitaires, d’intégration…), l’analyse du code source, la génération d’un site web et de rapports… D’une certaine manière, le build englobe l’ensemble des actions souhaitées prenant en entrée des fichiers sources pour produire un résultat souhaité. Généralement, nous attendons d’un outil de build qu’il puisse automatiser et optimiser ces actions. Pas de définition précise… build artefacts source
10. L’Intégration Continue … une pratique de développement logiciel où les membres d’une équipe intègrent leur travail fréquemment, habituellement chacun au moins une fois par jour – ce qui entraine plusieurs intégrations par jour. Chaque intégration est validée par un ‘build’ automatique (ce qui inclut les tests) pour détecter les erreurs d’intégration aussi vite que possible ... http://www.martinfowler.com/articles/continuousIntegration.html Martin Fowler
11. Intégration Continue - Problématique Module1 Module2 Modulei Développement Intégration Source: http://www.agitar.com/solutions/why_unit_testing.html Les 5% de bugs découverts après la release représentent 95% des coûts de correction
12. Intégration Continue - Problématique Détecter au plus tôt les problèmes pour les corriger au plus tôt Intégration Continue Module1 Module2 Modulei Intégration Intégration Développement Intégration Intégration Intégration Intégration Les 5% de bugs découverts après la release représentent 95% des coûts de correction Module1 Module2 Modulei Développement Intégration
14. Usine Logicielle : Reproductibilité gestion des dépendances Nightly Build Avoir un logiciel (toujours) prêt à être déployé Obtenir des builds reproductibles dans le temps et l’espace La référence est la machine d’intégration : plus de « ça marche chez moi » !!! build automatisé SCM Développeur Développeur Intégration Continue Outils de build
16. Usine Logicielle : Productivité Comment concilier complétude (source et build) et temps d'exécution ? productivité détection au plus tôt cycle de vie du build compilation tests unitaires packaging tests d'intégration … site web temps d'exécution code source classes modules projet …
17. Usine Logicielle : Productivité complétude vs temps d'exécution Développeur Outils de build Intégration Continue Configurations optimisées pour les tâches d'intégration packaging, tests d'intégration, métriques, site web du projet… Vision "globale" complétude temps d'exécution Configurations optimisées pour les tâches du développeur hot- deploy , tests unitaires, analyse statique de code… Vision "locale" temps d'exécution complétude
18. Usine Logicielle : Productivité complétude vs temps d'exécution Outils de build Intégration Continue Développeur Développeur 2' 4' 1' 10' x' compilation tests unitaires packaging site web 8' tests d'intégration … x 30 x 15 x 5 x 2 x 2 x … 2' 4' 1' 10' x' compilation tests unitaires packaging site web 8' tests d'intégration … x 20 x 20 x 3 x 1 x 4 x …
19. Usine Logicielle : Productivité complétude vs temps d'exécution Développeur Outils de build Intégration Continue 2' 4' 1' 10' x' compilation tests unitaires packaging site web 8' tests d'intégration … x 30 x 15 x 5 x 2 x 2 x … 2' 4' 1' 10' x' compilation tests unitaires packaging site web 8' tests d'intégration … x 20 x 20 x 3 x 1 x 4 x … 2' 4' 1' 10' x' compilation tests unitaires packaging site web 8' tests d'intégration … x 20 x 20 x 15 x 2 x 15 x … Développeur
20. Usine Logicielle : Productivité complétude vs temps d'exécution Développeur Outils de build productivité complétude 2' 4' 1' 10' x' compilation tests unitaires packaging site web 8' tests d'intégration … x 40 x 20 x 1 x 0 x 0 x … 2' 4' 1' 10' x' compilation tests unitaires packaging site web 8' tests d'intégration … x 20 x 20 x 15 x 2 x 15 x … 2' 4' 1' 10' x' compilation tests unitaires packaging site web 8' tests d'intégration … x 25 x 25 x 1 x 1 x 2 x … Intégration Continue Développeur
21. Usine Logicielle : Productivité Détecter et corriger les bugs au plus tôt S’assurer que l’intégration de code ‘nouveau’ ne casse pas le composant logiciel un build partiel à chaque commit un build complet au moins une fois par jour productivité complétude Intégration Continue SCM Outils de build Développeur Développeur
22. Usine Logicielle : Productivité Outils de build Améliorer la qualité du code et la cohérence de l’équipe Toute l’équipe avance en parallèle et chacun suit les apports des autres de la compilation à la synchronisation continue détection au plus tôt Développeur Développeur Intégration Continue SCM
24. Usine Logicielle : Traçabilité SCM Outils de build Savoir ce qui a été fait et pourquoi Développeur Intégration Continue Tracker Commit par issue scmchangelog - maven -plugin bugs
26. Usine Logicielle : Qualité Voir en ‘temps réel’ l’état du projet En produisant des rapports régulièrement toute l’équipe peut suivre l’état d’avancement du projet analyse statique couverture de code duplication de code … Tableau de bord SCM Outils de build Développeur Intégration Continue
27. Usine Logicielle : Qualité Voir en ‘temps réel’ l’état du projet En produisant des rapports régulièrement toute l’équipe peut suivre l’état d’avancement du projet SCM Outils de build analyse statique couverture de code duplication de code … Développeur Intégration Continue Tableau de bord Partage de la configuration des outils (version, fichiers de règles…)
28. Usine Logicielle : Qualité SCM Outils de build Voir en ‘temps réel’ l’état du projet analyse statique couverture de code duplication de code … Développeur Intégration Continue Tableau de bord Où trouver l'information ? SONARPLUGINS-2 MPIR-149
30. Usine Logicielle : Méthodologie Il ne suffit pas de disposer d'outils très performants pour savoir les utiliser Communiquer sur la méthodologie et les bonnes pratiques Accompagner les projets : prise en compte du contexte et de la maturité des équipes , à bon escient Culture d'entreprise sur les outils d'ingénierie logicielle
33. Usine Logicielle : Productivité Faciliter l'instanciation et la configuration des environnements Industrialiser l'instanciation d'un nouveau projet Gérer les utilisateurs et leurs droits d'accès Gérer la cohérence de propriétés/contraintes sur l'ensemble de la chaîne Développeur Tracker SCM Intégration Continue Développeur Tableau de bord intégration QA …
35. Usine Logicielle : Forge Logicielle Décrire le quoi (ce que l'on souhaite faire) plutôt que le comment niveau réalisation pom scripting niveau modélisation
36. Usine Logicielle : Forge Logicielle Préparer la livraison pour la version souhaitée Décrire le quoi (ce que l'on souhaite faire) plutôt que le comment Exemple : que signifie faire une release au niveau d'une usine logicielle ? niveau réalisation niveau modélisation gestion des tickets ouverts pour la version à releaser Tracker gestion des versions dans les pom pour maven 2
37. Usine Logicielle : Forge Logicielle Fabriquer le livrable pour la version souhaitée Préparer la livraison pour la version souhaitée Décrire le quoi (ce que l'on souhaite faire) plutôt que le comment Exemple : que signifie faire une release au niveau d'une usine logicielle ? niveau réalisation niveau modélisation tags sur la gestion de conf SCM changelog de la version mise à disposition de la livraison
38. Usine Logicielle : Forge Logicielle Initialisation de la maintenance pour la version qui vient d'être créée Préparer la livraison pour la version souhaitée Fabriquer le livrable pour la version souhaitée Décrire le quoi (ce que l'on souhaite faire) plutôt que le comment Exemple : que signifie faire une release au niveau d'une usine logicielle ? niveau réalisation niveau modélisation fixer la version au niveau du tracker Tracker [optionel] créer une branche de maintenance SCM [optionel] créer une liste de diffusion pour la branche de maintenance
39. Usine Logicielle : Forge Logicielle Initialisation de l'espace de travail pour la nouvelle version souhaitée Préparer la livraison pour la version souhaitée Fabriquer le livrable pour la version souhaitée Initialisation de la maintenance pour la version qui vient d'être créée Décrire le quoi (ce que l'on souhaite faire) plutôt que le comment Exemple : que signifie faire une release au niveau d'une usine logicielle ? niveau réalisation niveau modélisation ajout de la nouvelle version au niveau du tracker Tracker gestion des versions dans les pom pour maven 2
40. Usine Logicielle : Forge Logicielle Décrire le quoi (ce que l'on souhaite faire) plutôt que le comment Exemple : que signifie faire une release au niveau d'une usine logicielle ? Préparer la livraison pour la version souhaitée niveau réalisation niveau modélisation Fabriquer le livrable pour la version souhaitée Initialisation de la maintenance pour la version qui vient d'être créée Initialisation de l'espace de travail pour la nouvelle version souhaitée Notification Annonce de la disponibilité de la nouvelle version (mail, nouveautés sur la forge logicielle…)
44. Perspectives Forge Logicielle Développeur Tracker SCM Intégration Continue Outils de build Développeur Suivi de Projet Coclico Tableau de bord Gestion de Projet
45. Perspectives Prendre en compte le cycle de vie complet Développement MOA Soigner sa schizophrénie projet MOA / MOE voyage autour des exigences fonctionnelles exécutables Hébergement Virtualisation…