L’intégration continue
Continuous Integration Presented by Wael ANIBA - UP JEE @ESPRIT -
[email protected]
2
Problématique?
Une histoire de déjà-vu ? Le syndrome du “Je comprends pas, ça marche sur mon poste !”. Les symptômes : o Commit partiels ; o Fichiers de configuration dépendants du poste de travail. Résultat :
équipe régulièrement bloquée une demi-journée.
3
Problématique?
Imaginez un projet Java avec une équipe de 50 développeurs. Après 5 mois de développement sur le projet, l’équipe décide de créer une release (= une version finale de test avant sa livraison au client) pour pouvoir tester l’application. Mieux vaut tard que jamais comme dit le proverbe, sauf que… Après 3 tentatives pour faire la release se soldant par des échecs, il est décidé de constituer une équipe de 5 personnes pour effectuer cette tâche. Et voici le résultat: 2 ans de retard !
4
Problématique?
Le constat indéniable qu’il faut retenir de ces expériences est, plus une erreur est détectée tard et plus le coût de la correction sera élevé !
Les 5% de bogues découverts après release représentent 95% des coûts de correction.
5
Avant CI
The Integration Hell !
6
Avant CI
Big bang integration
7
Avant CI
Frequent integration
8
Intégration continue
Martin Fowler: … team integrate their work frequently, … leading to multiple integrations per day. … this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly. “ Continuous integration involves integrating early and often, so as to avoid the pitfalls of "integration hell". The practice aims to reduce rework and thus reduce cost and time.”
9
C’est Quoi?
"L'intégration continue est un ensemble de pratiques utilisées en génie logiciel. Elles consistent à vérifier à chaque modification de code source que le résultat des modifications ne produit pas de régression de l'application en cours de développement." Wikipedia
"Une pratique considérant différemment l'intégration, habituellement connue comme pénible et peu fréquente, pour en faire une tâche simple faisant partie intégrante de l'activité quotidienne d'un développeur." Documentation CruiseControl.NET
10
C’est Quoi?
“L’intégration continue, dans sa forme la plus simple, consiste à un outil qui surveille votre système de contrôle de version pour les changements. Chaque fois qu'un changement est détecté, cet outil compile et teste automatiquement votre application. Si quelque chose va mal, l'outil informe immédiatement les développeurs afin qu'ils puissent résoudre le problème immédiatement. " John Furguson Smart Director of Wakaleo Consulting
… Mais l'intégration continue peut faire beaucoup plus que cela!
11
Comment cela fonctionne?
Mentalité
(ensemble de pratiques agile (ex. XP)) Plus des outils
schéma de développement « classique » : Spécifications
Développem ent
Intégration
schéma de développement « Intégration continue » : Spécifications
Développement Intégration
12
Comment cela fonctionne?
Avant la mise en place de l’intégration continue :
Après la mise en place de l’intégration continue :
13
Comment cela fonctionne?
Avant la mise en place de l’intégration continue :
Après la mise en place de l’intégration continue :
14
L
Continious Integration
ES PRATIQUES DU CI l’Intégration Continue est une méthode agile. Elle fait partie des 12 méthodes de l’XP. Elle se base sur les principes agiles suivants :
Fabriquer souvent (“build”) Tester souvent (“test”) Intégrer souvent (“integrate”)
15
XP:Principes
puisque la revue de code est une bonne pratique, elle sera faite en permanence (par un binôme) ; puisque les tests sont utiles, ils seront faits systématiquement avant chaque mise en œuvre ; puisque la conception est importante, elle sera faite tout au long du projet (refactoring) ; puisque la simplicité permet d'avancer plus vite, nous choisirons toujours la solution la plus simple ; puisque la compréhension est importante, nous définirons et ferons évoluer ensemble des métaphores ; puisque l'intégration des modifications est cruciale, nous l'effectuerons plusieurs fois par jour ; puisque les besoins évoluent vite, nous ferons des cycles de développement très rapides pour nous adapter au changement.
16
Pratiques du CI
Continuous Integration is a mindset as much as a toolset !
L'intégration continue est un pratiques et un ensemble d'outils.
ensemble
de
Pour tirer le meilleur parti de CI, une équipe a besoin d'adopter une mentalité CI.
Cette mentalité CI peut être mise en œuvre à travers les pratiques suivantes:
17
Pratiques du CI
Les projets doivent avoir un processus de construction fiable,
reproductible
et
automatisée,
n'impliquant
aucune
intervention humaine.
Maintenir un dépôt unique de code source versionné .
Automatiser les compilations.
Le processus de déploiement devrait être automatisé, sans étapes manuelles impliquées.
Rendre les compilations auto-testantes.
Tout le monde commit tous les jours.
La fixation des builds qui ont échoué devrait prendre une priorité absolue, et ne pas être laissée à stagner.
18
Pratiques du CI
tout commit doit compiler le tronc (trunk) sur une machine
d'intégration ;
maintenir une compilation courte ;
tester dans un environnement de production cloné Défi l’apport des tests d’intégration
rendre disponible facilement le dernier exécutable.
tout le monde doit voir ce qui se passe.
automatiser le déploiement.
Et puisque la confiance que vous placez dans votre serveur CI
dépend dans une large mesure de la qualité de vos tests, l'équipe a besoin de placer un accent très fort sur les tests de haute qualité et les bonnes pratiques de tests.
19
Continious Integration
Les Outils du CI
Architecure
Architecture d’une chaine d’intégration
20
Gestionnaire de Build
CI
Gestionnaire de tests
Gestionnaire de SCM
Outils d’inspection
Serveur d’intégration continue
Gestionnaire de notifications
Architecture d’une chaine d’intégration
SCM 21 Source control managemet
Gestionnaire de Build
SCM
Gestionnaire de tests
Gestionnaire de SCM
Outils d’inspection
Serveur d’intégration continue
Gestionnaire de notifications
SCM – PRE REQUIS INDISPENSABLE
SCM 22 Source control managemet
Fonctions basiques d'un SCM
Maintenir un dépôt contenant le code source de tous les développeurs: repository Ajouter des fichiers ou modifications de fichiers : commit Récupérer un projet : checkout (ou clone) Récupérer des modifications d'autres branches et (tenter de) les appliquer: merge (Sauve)garder l'historique d'un projet et y accéder facilement. Revenir en arrière : revert Un développement collaboratif en minimisant les conflits entre les modifications de chaque développeur.
SCM 23 Source control managemet
Exemples de SCM CVS,
SVN, GNU Arch …. Git, Mercurial, Bazaar … Etc.
SCM 24 Source control managemet
Utilisez un système quelconque de SCM Faire du versionning des fichiers, presque par définition.
Mais
il y a un autre concept moins fréquemment utilisés dans la pratique Le branching.
SCM 25 Source control managemet
Le branching Changes
CHECK IN
CHECK OUT
BRANCH
BRANCHING
MERGE
Main Line / TRUNK
Repo CHECK OUT
CHECK IN (Commit)
Changes Code/build/tests
UPDATE
Changes
To release
26
Repo
Local workspace
CVS/SVN
Local workspace
SCM Source control managemet Mercurial / Git
Repo
Repo
Repo
Local workspace
Local workspace
Architecture d’une chaine d’intégration
27
Gestionnaire de Build
Outils de BUILD
Outils de build
Gestionnaire de tests
Gestionnaire de SCM
Outils d’inspection
Serveur d’intégration continue
Gestionnaire de notifications
Le “build” au coeur des concepts de l’IC
28
Outils de build
Le “build” au coeur des concepts de l’IC, Pas une simple compilation. En réalité, il n’y a pas de définition précise! On trouve en général les tâches suivantes dans un build : 1. 2. 3. 4. 5.
6. 7. 8.
Chargement de la dernière version du projet depuis le SCM; Compilation ; Exécution des tests unitaires ; Inspection du code (en vue de générer les métriques de qualité) ; Construction des releases (JAR, WAR, EAR…) ; Déploiement de l’application sur l'environnement de développement Exécution des tests d'intégration ; Génération de la documentation, des rapports, des notes de release (par exemple la Javadoc ou les rapports Maven).
29
Outils de build
Ant NAnt Maven Make
Phing Rake Etc.
Architecture d’une chaine d’intégration
30
Gestionnaire de Build
Outils de Test
Outils de Test
Gestionnaire de tests
Gestionnaire de SCM
Outils d’inspection
Serveur d’intégration continue
Gestionnaire de notifications
Le “build” au coeur des concepts de l’IC
31
Les Tests?
Les tests de type « white box » Les tests unitaires Les tests d’intégration Les tests de performance Les tests de qualité
32
Les Tests?
Les tests de type « black box » Les tests fonctionnels Les tests de montée en charge Les tests de non-régression
33
Outils de tests
Arquillian; Jbehave;
Mock
object ; Selenium; Et la Famille Xunit Etc.
Junit NUnit CppUnit PHPUnit SimpleTest JSUnit J3Unit
Outils d’inspection
Architecture d’une chaine d’intégration
34
Gestionnaire de Build
Outils d’inspection
Gestionnaire de tests
Gestionnaire de SCM
Outils d’inspection
Serveur d’intégration continue
Gestionnaire de notifications
Les outils de qualimétrie
Outils d’inspection
35
Inspecter Quoi?
Taille du code trop grande ;
Lisibilité du code (cohérence du style de nommage, organisation des sources : rendre une copie propre) ;
Documentation (présence de la Javadoc) ;
Respect des règles de paquetages, de modularité, de dépendances et d’architecture en couches ;
Test et couverture de test ;
Les copier-coller ;
Respect des règles de programmation.
Etc.
Outils d’inspection
36
Avec ces outils, on cherche à améliorer le code, et plus particulièrement sa : Usabilité
/ Lisibilité ; Maintenabilité ; Efficacité / Performance ; Portabilité ; Fiabilité ; Testabilité.
37
Exemples d’outils de qualimétrie
Couverture de tests: Cobertura : Calcule le pourcentage du code accessible par les tests Clover : Calcule des métriques sur la couverture des tests Etc. Qualité du code: CheckStyle : effectue l'analyse statique de style de code PMD/CPD effectue une analyse du code source Java et détecte le Copier / Coller FindBugs : effectue une analyse de code source Java pour détecter les tendances de bugs JDepend : calcule des métriques de qualité de conception par paquet Taglist : effectue une analyse statique de code pour trouver les balises dans le code, comme @todo ou des étiquettes / / TODO. Etc.
38
Cobertura Atlassian
Clover
jTest
JCoverage CodeCover EMMA
Parasoft
Insure++
Ncover Xdebug Coverage.py
Outils d’inspection couverture des tests
39
Reporting
• Code coverage analysis • Static analysis (syntax check, code dependencies) • Copy/paste detectors
40
Sonar
Serveur d’intégration continue
Architecture d’une chaine d’intégration
41
Gestionnaire de Build
Serveur d’intégration continue
Gestionnaire de tests
Gestionnaire de SCM
Outils d’inspection
Le chef d’orchestre
Serveur d’intégration continue
Gestionnaire de notifications
42
Serveur d’intégration continue
La place du serveur d’IC est centrale dans la chaîne car c’est lui qui lancera l’outil de build Rendre l’IC autonome et indépendante du poste du développeur
En entrée il pourra par exemple recevoir de la gestion de configuration un évènement indiquant que les sources ont été modifiées.
Cet évènement pourra alors déclencher les lancement de la chaîne.
Il pourra remplir d’autre tâches comme envoyer un mail à une ou plusieurs personnes pour prévenir au cas où une erreur surviendrait dans le déroulement de la chaîne.
43
Serveur d’intégration continue
• CruiseControl
• CruiseControl.NET • CruiseControl.rb • JetBrains TeamCity • Apache Hudson/Jenkins • Apache Continuum
• Atlassian Bamboo • FinalBuilder
• phpUnderControl • XInc
44
45
Cas d’utilisation
# Cas N°1 Le développeur soumet une modification 4 Build + Tests 5 Déploiement
$ Gcc –c *.c –o test Compiling… Compilation Sucessfull Testing… Junit tests … OK Integration tests … OK Performance tests … OK Code Inspection … 86% Deploying in test environnement … OK
Serveur de test
6 Notification
Serveur d’intégration 3 Update
Postes de dev
2
Serveur de recette
Vérification des modifs
Serveur de production
1 Commit
SCM
46
# Cas N°2
Cas d’utilisation
47
Intégration Continue
… SYNTHESE
48
Phases du CI
Continuous Integration is not an all-or-nothing affair.
L’intégration continue n'est pas une affaire de tout ou rien .
L'introduction de CI dans une organisation vous emmène sur un chemin qui progresse à travers plusieurs phases distinctes.
Chacune de ces phases implique des améliorations progressives à l'infrastructure technique ainsi que des améliorations dans les pratiques et la culture de l'équipe de développement lui-même .
49
Phase1 No Build Server
Phase 2 Nightly Builds
Phase3 Nightly Builds and Basic Automated Tests
Phase4 Enter the Metrics
Phases du CI Phase6 Automated Phase5 Acceptance Tests Getting More and More Serious About Automated Testing Deployment
SCM Builds planifié Outils Tests TDD Seulement les nuits, unitaires/ d’inspection Tests non intégrations obligatoirs obligatoirs & Notification par mail
ATDD & BDD language Ubiquitaire
Phase7 Continuous Deployment
Déployer les nouvelles modofications dans la production
2
50
CONCLUSION
Communication et Stratégie
Pour que le projet d’intégration continue réussisse, il faudra l’implication de tous.
L’intégration continue est un concept relativement nouveau.
Il faut sensibiliser les membres de l’équipe.
Il ne suffit pas de disposer d’outils très performants pour savoir les utiliser à bon escient.
51
CONCLUSION
Pourquoi ne pas prendre l’intégration continue comme un jeu?
Une sorte de rituel divertissant.
Celui qui casse le build de nuit amène les croissants pour l’équipe…
Les développeurs perdent ou gagnent des points en fonction des résultats des builds et de l’origine des erreurs.
52
Ce qu’il faut retenir !
Le CI et un processus et pas un outil. Importance de la communication Un processus sur mesure. Développer mieux, plus rapidement, à un coût moins élevé et avec plus de confiance : “better, faster, cheaper”.
Better
On construit des builds de meilleure qualité. On teste souvent et en amont (“early & often”). On respecte les bonnes pratiques et les conventions de codage.
Faster
Les tests sont exécutés parallèlement au développement, pas à la fin. Il n’y a plus de point d’intégration. La construction d’un build ne devient plus un “évènement”.
Cheaper
On identifie les défauts en amont. On les résout quand il coûte le moins cher. Le test devient facile et répétable.
53
Références & Illustrations
Références
IC, Améliorer la qualité des logiciels et réduire les risques - By Fabian Piau http://www.scribd.com/doc/445931/Principes-delintegration-Continue http://fr.wikipedia.org/wiki/Intégration_continue
Illustrations
IC, Améliorer la qualité des logiciels et réduire les risques By Fabian Piau http://www.bradapp.com/acme/branching/streamedlines.html
L’intégration continue
Continuous Integration Presented by Wael ANIBA - UP JEE @ESPRIT -
[email protected]