Académique Documents
Professionnel Documents
Culture Documents
Continuous Integration
Presented by Wael ANIBA - UP JEE @ESPRIT - wael.aniba@esprit.tn
Problmatique?
Problmatique?
Imaginez un projet Java avec une quipe de 50 dveloppeurs. Aprs 5 mois de dveloppement sur le projet, lquipe dcide de crer une release (= une version finale de test avant sa livraison au client) pour pouvoir tester lapplication. Mieux vaut tard que jamais comme dit le proverbe, sauf que Aprs 3 tentatives pour faire la release se soldant par des checs, il est dcid de constituer une quipe de 5 personnes pour effectuer cette tche. Et voici le rsultat: 2 ans de retard !
Problmatique?
Le constat indniable quil faut retenir de ces expriences est, plus une erreur est dtecte tard et plus le cot de la correction sera lev !
Les 5% de bogues dcouverts aprs release reprsentent 95% des cots de correction.
Avant CI
Avant CI
Avant CI
Frequent integration
Intgration 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.
Cest Quoi?
"L'intgration continue est un ensemble de pratiques utilises en gnie logiciel. Elles consistent vrifier chaque modification de code source que le rsultat des modifications ne produit pas de rgression de l'application en cours de dveloppement."
Wikipedia
"Une pratique considrant diffremment l'intgration, habituellement connue comme pnible et peu frquente, pour en faire une tche simple faisant partie intgrante de l'activit quotidienne d'un dveloppeur."
Documentation CruiseControl.NET
10
Cest Quoi?
Lintgration continue, dans sa forme la plus simple, consiste un outil qui surveille votre systme de contrle de version pour les changements. Chaque fois qu'un changement est dtect, cet outil compile et teste automatiquement votre application. Si quelque chose va mal, l'outil informe immdiatement les dveloppeurs afin qu'ils puissent rsoudre le problme immdiatement. "
John Furguson Smart Director of Wakaleo Consulting
11
Mentalit
12
13
14
Continious Integration
ES PRATIQUES DU CI
lIntgration Continue est une mthode agile. Elle fait partie des 12 mthodes de lXP. Elle se base sur les principes agiles suivants :
15
XP:Principes
puisque la revue de code est une bonne pratique, elle sera faite en permanence (par un binme) ; puisque les tests sont utiles, ils seront faits systmatiquement 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 comprhension est importante, nous dfinirons et ferons voluer ensemble des mtaphores ; puisque l'intgration des modifications est cruciale, nous l'effectuerons plusieurs fois par jour ; puisque les besoins voluent vite, nous ferons des cycles de dveloppement trs rapides pour nous adapter au changement.
16
Pratiques du CI
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
reproductible
et
automatise,
n'impliquant
aucune
intervention humaine.
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 laisse stagner.
18
Pratiques du CI
d'intgration ;
maintenir une compilation courte ; tester dans un environnement de production clon Dfi lapport des tests dintgration
rendre disponible facilement le dernier excutable. tout le monde doit voir ce qui se passe. automatiser le dploiement. Et puisque la confiance que vous placez dans votre serveur CI
19
Continious Integration
Les Outils du CI
20
Architecure
Gestionnaire de Build
Gestionnaire de tests
CI
Gestionnaire de SCM
Outils dinspection
Gestionnaire de notifications
Gestionnaire de Build
Gestionnaire de tests
SCM
Gestionnaire de SCM
Outils dinspection
Gestionnaire de notifications
Maintenir un dpt contenant le code source de tous les dveloppeurs: repository Ajouter des fichiers ou modifications de fichiers : commit Rcuprer un projet : checkout (ou clone) Rcuprer des modifications d'autres branches et (tenter de) les appliquer: merge (Sauve)garder l'historique d'un projet et y accder facilement. Revenir en arrire : revert Un dveloppement collaboratif en minimisant les conflits entre les modifications de chaque dveloppeur.
Exemples de SCM
CVS,
Utilisez un systme quelconque de SCM Faire du versionning des fichiers, presque par dfinition.
il y a un autre concept moins frquemment utiliss dans la pratique Le branching.
Mais
Le branching
Changes
CHECK OUT
CHECK IN
BRANCH
BRANCHING
MERGE
To release
Repo
CHECK OUT
Changes
Code/build/tests
Changes
26
Repo
CVS/SVN
Repo
Repo
Repo
Local workspace
Local workspace
Local workspace
Local workspace
27
Outils de build
Gestionnaire de Build
Gestionnaire de tests
Outils de BUILD
Gestionnaire de SCM
Outils dinspection
Gestionnaire de notifications
28
Outils de build
Le build au coeur des concepts de lIC, Pas une simple compilation. En ralit, il ny a pas de dfinition prcise! On trouve en gnral les tches suivantes dans un build :
1. 2. 3. 4. 5.
6.
7. 8.
Chargement de la dernire version du projet depuis le SCM; Compilation ; Excution des tests unitaires ; Inspection du code (en vue de gnrer les mtriques de qualit) ; Construction des releases (JAR, WAR, EAR) ; Dploiement de lapplication sur l'environnement de dveloppement Excution des tests d'intgration ; Gnration de la documentation, des rapports, des notes de release (par exemple la Javadoc ou les rapports Maven).
29
Outils de build
Phing
Rake Etc.
30
Outils de Test
Gestionnaire de Build
Gestionnaire de tests
Outils de Test
Gestionnaire de SCM
Outils dinspection
Gestionnaire de notifications
31
Les Tests?
32
Les Tests?
33
Outils de tests
Mock
34
Outils dinspection
Gestionnaire de Build
Gestionnaire de tests
Outils dinspection
Gestionnaire de SCM
Outils dinspection
Gestionnaire de notifications
35
Outils dinspection
Inspecter Quoi?
Taille du code trop grande ; Lisibilit du code (cohrence du style de nommage, organisation des sources : rendre une copie propre) ; Documentation (prsence de la Javadoc) ; Respect des rgles de paquetages, de modularit, de dpendances et darchitecture en couches ;
36
Outils dinspection
37
Couverture de tests: Cobertura : Calcule le pourcentage du code accessible par les tests Clover : Calcule des mtriques 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 dtecte le Copier / Coller FindBugs : effectue une analyse de code source Java pour dtecter les tendances de bugs JDepend : calcule des mtriques 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 jTest
Clover
JCoverage
CodeCover EMMA
Parasoft
Ncover Xdebug
Insure++
Coverage.py
39
Reporting
Code coverage analysis Static analysis (syntax check, code dependencies) Copy/paste detectors
40
Sonar
41
Gestionnaire de Build
Gestionnaire de tests
Gestionnaire de SCM
Outils dinspection
Gestionnaire de notifications
Le chef dorchestre
42
La place du serveur dIC est centrale dans la chane car cest lui qui lancera loutil de build Rendre lIC autonome et indpendante du poste du dveloppeur En entre il pourra par exemple recevoir de la gestion de configuration un vnement indiquant que les sources ont t modifies. Cet vnement pourra alors dclencher les lancement de la chane. Il pourra remplir dautre tches comme envoyer un mail une ou plusieurs personnes pour prvenir au cas o une erreur surviendrait dans le droulement de la chane.
43
CruiseControl
CruiseControl.NET
CruiseControl.rb JetBrains TeamCity Apache Hudson/Jenkins Apache Continuum
Atlassian Bamboo
FinalBuilder
phpUnderControl
XInc
44
45
Cas dutilisation
5 Dploiement
Serveur de test
6 Notification
Serveur dintgration
3 Update 2
Serveur de recette
Postes de dev
1 Commit
Serveur de production
SCM
46
Cas dutilisation
# Cas N2
47
Intgration Continue
SYNTHESE
48
Phases du CI
49
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/ dinspection Tests non intgrations obligatoirs obligatoirs & Notification par mail
50
CONCLUSION
Communication et Stratgie
51
CONCLUSION
Celui qui casse le build de nuit amne les croissants pour lquipe
Les dveloppeurs perdent ou gagnent des points en fonction des rsultats des builds et de lorigine des erreurs.
52
Le CI et un processus et pas un outil. Importance de la communication Un processus sur mesure. Dvelopper mieux, plus rapidement, un cot 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 excuts paralllement au dveloppement, pas la fin. Il ny a plus de point dintgration. La construction dun build ne devient plus un vnement.
On identifie les dfauts en amont. On les rsout quand il cote le moins cher. Le test devient facile et rptable.
Cheaper
53
Rfrences
IC, Amliorer la qualit des logiciels et rduire les risques - By Fabian Piau http://www.scribd.com/doc/445931/Principes-delintegration-Continue http://fr.wikipedia.org/wiki/Intgration_continue
Illustrations
IC, Amliorer la qualit des logiciels et rduire les risques By Fabian Piau http://www.bradapp.com/acme/branching/streamedlines.html
Lintgration continue
Continuous Integration
Presented by Wael ANIBA - UP JEE @ESPRIT - wael.aniba@esprit.tn