De l’atelier à l’usine logicielle Enjeux et Retour d’expérience d’Orange Labs Emmanuel Hugonnet Architecture J2EE Silverpe...
Introduction
Pourquoi des outils d’ingénierie logicielle à Orange Labs Services 2006 1982 Infrastructure 2001 1994 1988 Professionnalis...
De l’atelier à l’usine logicielle Professionnalisation du développement : une nouvelle révolution industrielle ? Reproduct...
Build
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...
Build - Problématique <ul><li>Reproductibilité  dans le  temps  et dans  l’espace  (sans modification du source…) </li></u...
Build - Problématique <ul><li>Reproductibilité  dans le  temps  et dans  l’espace  (sans modification du source…) </li></u...
Intégration Continue
L’Intégration Continue …  une pratique de développement logiciel où les membres d’une équipe intègrent leur travail fréque...
Intégration Continue - Problématique Module1 Module2 Modulei Développement Intégration Source:  http://www.agitar.com/solu...
Intégration Continue - Problématique Détecter au plus tôt les problèmes pour les corriger au plus tôt Intégration Continue...
Reproductibilité
Usine Logicielle : Reproductibilité gestion des dépendances Nightly Build Avoir un logiciel (toujours) prêt à être déployé...
Productivité
Usine Logicielle : Productivité Comment concilier complétude (source et build) et temps d'exécution ? productivité détecti...
Usine Logicielle : Productivité complétude vs temps d'exécution Développeur Outils de build Intégration Continue Configura...
Usine Logicielle : Productivité complétude vs temps d'exécution Outils de build Intégration Continue Développeur Développe...
Usine Logicielle : Productivité complétude vs temps d'exécution Développeur Outils de build Intégration Continue 2' 4' 1' ...
Usine Logicielle : Productivité complétude vs temps d'exécution Développeur Outils de build productivité complétude 2' 4' ...
Usine Logicielle : Productivité Détecter et corriger les bugs au plus tôt  S’assurer que l’intégration de code ‘nouveau’ n...
Usine Logicielle : Productivité Outils de build Améliorer la qualité du code et la cohérence de l’équipe  Toute l’équipe a...
Traçabilité
Usine Logicielle : Traçabilité SCM Outils de build Savoir ce qui a été fait et pourquoi Développeur Intégration Continue T...
Qualité
Usine Logicielle : Qualité Voir en ‘temps réel’ l’état du projet  En produisant des rapports régulièrement toute l’équipe ...
Usine Logicielle : Qualité Voir en ‘temps réel’ l’état du projet  En produisant des rapports régulièrement toute l’équipe ...
Usine Logicielle : Qualité SCM Outils de build Voir en ‘temps réel’ l’état du projet  analyse statique couverture de code ...
Méthodologie
Usine Logicielle : Méthodologie Il ne suffit pas de disposer d'outils très performants pour savoir les  utiliser Communiqu...
Usine Logicielle : Bonnes Pratiques <ul><li>Assurer la reproductibilité </li></ul><ul><ul><li>La référence est la machine ...
Travaux en cours
Usine Logicielle : Productivité Faciliter l'instanciation et la configuration des environnements Industrialiser l'instanci...
Usine Logicielle : Forge Logicielle Forge Logicielle Développeur Tracker SCM Intégration Continue Outils de build Développ...
Usine Logicielle : Forge Logicielle Décrire le quoi (ce que l'on souhaite faire) plutôt que le comment niveau réalisation ...
Usine Logicielle : Forge Logicielle Préparer la livraison pour la version souhaitée Décrire le quoi (ce que l'on souhaite ...
Usine Logicielle : Forge Logicielle Fabriquer le livrable pour la version souhaitée Préparer la livraison pour la version ...
Usine Logicielle : Forge Logicielle Initialisation de la maintenance pour la version qui vient d'être créée Préparer la li...
Usine Logicielle : Forge Logicielle Initialisation de l'espace de travail pour la nouvelle version souhaitée Préparer la l...
Usine Logicielle : Forge Logicielle Décrire le quoi (ce que l'on souhaite faire) plutôt que le comment Exemple : que signi...
Bilan et Perspectives
Bilan – Orange Labs <ul><li>Industrialisation d’outils d’ingénierie logicielle (build, intégration continue, gestion de co...
Bilan – Orange Labs <ul><li>Beaucoup de travaux à mener en parallèle et à coordonner (Build, Intégration Continue, Analyse...
Perspectives Forge Logicielle Développeur Tracker SCM Intégration Continue Outils de build Développeur Suivi de Projet Coc...
Perspectives Prendre en compte le cycle de vie complet Développement MOA Soigner   sa   schizophrénie   projet  MOA / MOE ...
Questions?
Prochain SlideShare
Chargement dans…5
×

Usine logicielle à Orange Labs

7 552 vues

Publié le

Présentation sur l'avancée de l'usine logicielle chez Orange Labs

Publié dans : Technologie
1 commentaire
6 j’aime
Statistiques
Remarques
Aucun téléchargement
Vues
Nombre de vues
7 552
Sur SlideShare
0
Issues des intégrations
0
Intégrations
160
Actions
Partages
0
Téléchargements
327
Commentaires
1
J’aime
6
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • Usine logicielle à Orange Labs

    1. 1. De l’atelier à l’usine logicielle Enjeux et Retour d’expérience d’Orange Labs Emmanuel Hugonnet Architecture J2EE Silverpeas [email_address] +33-(0)476248658 Rémy Sanlaville Expert Senior en Ingénierie Logicielle   Orange Labs [email_address]
    2. 2. Introduction
    3. 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. 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)
    5. 5. Build
    6. 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
    7. 7. Build - Problématique <ul><li>Reproductibilité dans le temps et dans l’espace (sans modification du source…) </li></ul>Il faut aussi définir ce que veut dire identique… Les builds aux temps t0, t1, ti… doivent être identiques Par exemple, il faut pouvoir à tout moment reproduire le build d’une version taggée Les builds sur les postes p0, p1, pj, pic… doivent être identiques Par exemple, il faut pouvoir reproduire le build sur l’ensemble des postes de l’équipe, du serveur d’intégration continue… dans le temps t1 ti t0 p0 dans l’espace p1 pj pic
    8. 8. Build - Problématique <ul><li>Reproductibilité dans le temps et dans l’espace (sans modification du source…) </li></ul>Cela paraît simple mais dans les faits c’est une problématique compliquée et nous ne disposons toujours pas de solution qui permette d’assurer cela… Qu’est-ce qui influence le build ? … Dépendances Outils de build options de compilation compilateur… Plateforme d’exécution OS Variables d’environnement Ressources externes xml schéma… wsdl Repositories maven Base de données… Fichiers sources code source ressources artefacts build Facteurs humains
    9. 9. Intégration Continue
    10. 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. 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. 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
    13. 13. Reproductibilité
    14. 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
    15. 15. Productivité
    16. 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. 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 &quot;globale&quot; 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 &quot;locale&quot; temps d'exécution complétude
    18. 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. 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. 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. 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. 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
    23. 23. Traçabilité
    24. 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
    25. 25. Qualité
    26. 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. 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. 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
    29. 29. Méthodologie
    30. 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
    31. 31. Usine Logicielle : Bonnes Pratiques <ul><li>Assurer la reproductibilité </li></ul><ul><ul><li>La référence est la machine d’intégration : plus de « ça marche chez moi » !!! </li></ul></ul><ul><ul><li>Mise en place d'un &quot; Nightly Build&quot; qui repart de zéro (checkout complet du SCM, suppression du repository local de maven 2…) </li></ul></ul><ul><li>Avoir le souci du produit fini et de qualité </li></ul><ul><ul><li>Intégration continue = Stop the Line du logiciel </li></ul></ul><ul><ul><li>Valoriser les rapports et intégrer la qualité dans la notion de &quot;terminé&quot; </li></ul></ul><ul><ul><li>Artéfacts prêts à être déployés et validés sur l(es)'environnement(s) cible(s) </li></ul></ul><ul><ul><li>Disposer d'une version de démonstration la plus à jour possible </li></ul></ul><ul><li>Assurer la traçabilité </li></ul><ul><ul><li>Lancer le build à chaque modification du SCM pour savoir quel est le commit qui a posé problème </li></ul></ul><ul><ul><li>Commiter très fréquemment (une modification = un commit) pour identifier quelle modification, quel(s) fichier(s) sont à l'origine du problème </li></ul></ul><ul><ul><li>Disposer de builds rapides (max 15 minutes) </li></ul></ul><ul><ul><li>Disposer d'un serveur puissant : gains partagés par l’ensemble de l’équipe </li></ul></ul>
    32. 32. Travaux en cours
    33. 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 …
    34. 34. Usine Logicielle : Forge Logicielle Forge Logicielle Développeur Tracker SCM Intégration Continue Outils de build Développeur Coclico Tableau de bord
    35. 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. 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. 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. 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. 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. 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…)
    41. 41. Bilan et Perspectives
    42. 42. Bilan – Orange Labs <ul><li>Industrialisation d’outils d’ingénierie logicielle (build, intégration continue, gestion de configuration…) réussie </li></ul><ul><li>Recommandation au niveau du groupe France Télécom (Orange Labs, DDSI, Orange Business Services…) </li></ul><ul><li>Mise en place de bonnes pratiques qui sont suivies et qui ont une influence bénéfique sur les projets </li></ul><ul><li>Les projets sont demandeurs pour utiliser ce qui a été mis en place et souhaitent aller plus loin </li></ul><ul><li>Initialisation d'une chaîne globale d’outils d’ingénierie logicielle 1 outil + 1 outil > 2 outils </li></ul><ul><li>L’ingénierie logicielle se renforce dans la culture d’entreprise </li></ul>Aspects positifs
    43. 43. Bilan – Orange Labs <ul><li>Beaucoup de travaux à mener en parallèle et à coordonner (Build, Intégration Continue, Analyse statique de code, Gestion de configuration, Virtualisation, Tests, Gestion des exigences….) </li></ul><ul><li>Certains sujets comme les rapports/métriques sont difficiles à conceptualiser et demandent beaucoup de temps et d’expériences </li></ul><ul><li>Industrialiser un outil demande un travail important et beaucoup de compétences </li></ul><ul><li>Prise en compte de l’ensemble des contraintes de la taille d'un groupe comme France Télécom </li></ul>Difficultés rencontrées
    44. 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. 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…
    46. 46. Questions?

    ×