Académique Documents
Professionnel Documents
Culture Documents
67-Usine de Developpement
67-Usine de Developpement
67-Usine de Developpement
Usine de développement
Les entreprises industrielles du secteur secondaire (industrie automobile, industrie pétrolière, industrie
sidérurgique, industrie électronique et de matériels informatiques...) ont toutes créé des chaînes de
fabrication pour transformer la matière première en produits finis. À chaque fois, la réussite de ces
industries est passée par l’automatisation des tâches et le contrôle qualité.
Par exemple, la fabrication d’une voiture passe par différentes étapes d’assemblage presque toutes
automatisées. Le crash test fait partie de ces étapes.
a. Définition
"L’intégration continue est un ensemble de bonnes pratiques utilisées en génie logiciel consistant à vérifier
à chaque modification de code source que le résultat des modifications ne produit pas de régression dans
l’application développée [...]." (source : Wikipédia).
Autrement dit, l’intégration continue constitue un sous-ensemble d’une usine de fabrication de logiciel. La
CI est constituée d’outils permettant une automatisation.
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -1-
kokou Agbedanou
b. Les briques de la CI
La CI est composée de plusieurs éléments qu’il convient de mettre en place afin d’apporter une meilleure
qualité de code et une fabrication rapide des versions d’applications (releases mineures et majeures).
L’objectif principal est d’utiliser les éléments pour effectuer une compilation, lancer des tests (unitaires et
fonctionnels, de sécurité et de performance) et lancer une analyse de code. Il s’agit bien d’une intégration
de tout nouveau composant applicatif.
Au départ de toute fabrication de logiciel, il y a le code source qu’un développeur produit. Ce code est
constitué d’une série de lignes de caractères alphanumériques compréhensibles uniquement dans le
langage de programmation qui a servi à l’écrire. Ce code est la transcription informatique d’un besoin
métier (exemple : "Afficher la liste des commandes du mois de mai 2015 pour le produit P, à partir d’une
région saisie en paramètre").
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -2-
kokou Agbedanou
Le développeur a aujourd’hui des outils à sa disposition permettant de lui faciliter le travail : il s’agit des
IDE et des frameworks de développement.
Le développeur stocke le code source sur son PC de développement mais il doit aussi le stocker sur un
dépôt centralisé afin de pouvoir le partager avec d’autres développeurs et/ou faire en sorte que le
gestionnaire d’intégration continue puisse lancer la chaîne.
ˇ
Installation d’un client de gestion de version sur le PC local.
ˇ
Clonage du dépôt central présent sur un serveur vers le dépôt local sur le PC local. À ce stade,
le développeur est autonome et peut développer dans son dépôt local.
ˇ
Partage du code source modifié quotidiennement, à partir du dépôt local, vers le dépôt central.
Les principaux gestionnaires de versions de code source sont : Git, GitLab, GitHub, CVS, Subversion et
Mercurial.
Immédiatement après la phase de codage vient la phase d’initialisation de l’intégration continue à l’aide de
l’orchestrateur central qui permet de lancer les tests unitaires et l’analyse de code, puis de lancer la
compilation et la fabrication d’un build. Le résultat du build est visible via une interface web ; il peut
également être inséré dans un workflow avertissant le développeur du résultat du build. Le job permettant
de lancer le build peut également ne pas aller au bout de la fabrication si la qualité de code n’est pas en
phase avec les critères de qualité de code établis.
Les principaux outils sont Jenkins (fork de Hudson), TeamCity (Microsoft), CruiseControl, Tinderbox
(Mozilla)…
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -3-
kokou Agbedanou
Jenkins est très populaire pour les développements Java. Il peut également être
utilisé pour les développements PHP. Jenkins comporte de nombreux plug-ins
(pipeline pour visualiser le statut des étapes de la chaîne, buildbreaker pour
stopper la fabrication d’un build, gestion de code source, gestion de triggers,
gestion de notification, gestion du monitoring...). Les plug-ins sont disponibles sur
http://wiki.jenkins-ci.org/display/JENKINS/Plugins.
La qualité de code est une étape obligatoire à prendre en compte lors de la fabrication d’une application.
Elle peut être mesurée a priori ou a posteriori. Dans ce dernier cas, quelle que soit la qualité du code, la
fabrication de l’application est toujours effectuée. L’analyse de code sert aux développeurs et aux
managers à des fins d’amélioration continue.
Gestionnaire de tests
Les tests unitaires d’intégration doivent être développés immédiatement après avoir effectué le
développement du code ou pendant l’écriture du code. Ces tests permettent de valider séparément un
composant applicatif sans prendre en compte des relations avec d’autres composants.
Les principaux gestionnaires de tests sont Junit (tests unitaires pour Java), PHPUnit (tests unitaires pour
PHP), Selenium et Behat pour les tests fonctionnels.
La livraison continue concerne toute la chaîne d’intégration continue et son automatisation : à partir du
dépôt des sources, enchaînement automatisé des tests unitaires, des tests d’intégration, des tests métier
mais cela s’arrête là. Le déploiement en production est toujours effectué de façon manuelle.
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -4-
kokou Agbedanou
Le déploiement continu reprend le même chaînage que son petit frère, le développement continu, mais
pousse l’automatisation jusqu’au déploiement automatisé de l’application en production.
En réalité, peu d’entreprises sont dans ce modèle, tant la zone de production est sous contrôle manuel des
OPS et le déploiement continu n’est pas ITIL compliant.
4. Tests
Lorsque le code est produit, il faut le tester ; il existe plusieurs types de tests.
Définition
Les tests unitaires (TU) sont les premiers tests à être effectués sur le code ; il s’agit de tester une partie du
programme ou du module, de façon indépendante du reste du programme ou des autres modules. Les TU
doivent être exécutés durant le développement
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -5-
kokou Agbedanou
La couverture de code permet d’indiquer une mesure de passage des TU sur le code.
Chaque test unitaire doit pouvoir être rejoué après une modification afin de vérifier la non-régression de
l’application.
Le programme Bonjour.php contient une classe Personne qui va permettre d’instancier une personne
(attribut nom et fonctions getName, setName et Bonjour).
<?php
class Personne {
protected $nom;
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -6-
kokou Agbedanou
Le programme BonjourTest.php est le programme qui sera lancé par phpUnit pour effectuer le test
unitaire. Tous les tests sont donc à écrire dans ce programme.
Il faut nécessairement inclure la classe à tester (Bonjour.php) et Autoload.php qui permet de charger les
fonctionnalités de phpUnit. Il faut aussi définir la classe de test BonjourTest avec une option extends
PHPUnit_Framework_TestCase.
<?php
//classe de test unitaire
require_once "PHPUnit/Autoload.php";
require_once "Bonjour.php";
La méthode assertEquals()retourne un résultat binaire : Equal (le test a réussi)/Not Equal (le test
a échoué).
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -7-
kokou Agbedanou
OK (1 test, 1 assertion)
Le test attend "Au revoir" alors que la fonction Bonjour() retourne "Bonjour" ; le test doit en principe
échouer.
6) Lancement du test :
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -8-
kokou Agbedanou
1) BonjourTest::testBonjour
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'Au revoir'
+ 'Bonjour'
/src/BonjourTest.php:16
FAILURES!
Tests: 1 , Assertions: 1 , Failures: 1 .
Afin de réaliser les tests unitaires, il faut installer un framework de test basé sur des outils adéquats par
rapport au langage de programmation.
Langage Outil
PHP PHPUnit
Java JUnit
JavaScript JSUnit
Python PyUnit
Perl Test:More
... ...
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -9-
kokou Agbedanou
Le TDD est une méthode de développement piloté par les tests. Le principe est d’écrire un test qui va
échouer car la fonction n’est pas développée puis ensuite de la développer, de la tester…
4) Exécuter le TU.
5) Refactorer le code.
6) Retourner à l’étape 1.
Un code testé est un code robuste, réutilisable et évolutif car il a été... corrigé (refactoré) après une
succession d’échecs de TU.
Les tests métier ou tests fonctionnels font également partie de la chaîne de développement logiciel et
sont sous la responsabilité de l’équipe de test.
L’objectif ici est de tester et d’automatiser dans son ensemble l’application (souvent difficile à effectuer) en
écrivant des scénarios de tests métier. Il est également possible de tester et d’automatiser des
enchaînements de modules applicatifs.
1) "Je veux passer une commande de produit sur un site web, je vérifie que mon compte est bien créé, que
je reçois un mot de passe de type OTP (One Time Password), je passe la commande, je suis débité...".
2) "Je lance l’application Bonjour.exe, je saisis mon nom, j’obtiens « Bonjour <nom> »".
Plusieurs outils permettent d’effectuer les tests métier. Côté logiciel libre, il y a Selenium
(http://www.seleniumhq.org/), pour les tests côté front office web et Behat (http://docs.behat.org
/en/v2.5/) pour les tests de logique applicative, Cucumber (https://cucumber.io/)...
Il existe également des produits propriétaires : Rational Functional Tester (RFT) d’IBM, QF test
(http://www.qfs.de/en/index.html) de Quality First Software, SilkTest/TestPartner de MicroFocus, Unified
Functionnal Teststing (UFT) et ex-QuickTest Pro de HP, etc.
Pour que les tests puissent être automatisés, il faut que les produits de tests soient "ouverts" via des API
et il faut insérer le lancement des tests dans le pipeline de la chaîne de développement.
À noter que l’automatisation des tests fonctionnels est une opération longue et donc forcément coûteuse
qui intervient après une certaine maturité des équipes en matière d’usine de développement logiciel.
Les métiers exigent sans cesse des business cases nouveaux qui doivent être délivrés le plus rapidement
possible. Pour réussir ce challenge, il faut des processus permettant un delivery automatisé. La chaîne de
développement prend du temps pour être opérationnelle ; elle nécessite des outils indispensables :
ˇ
L’environnement de développement local du développeur (IDE, outils spécifiques...).
ˇ
L’intégration continue.
ˇ
L’analyse de code.
ˇ
Les tests unitaires et fonctionnels.
ˇ
Les tests techniques (intégration, performance et sécurité).
Toute cette chaîne peut être construite avec des outils open source.
Les nouvelles technologies de PaaS avec les containers, s’appuyant sur les IaaS
hybrides, vont bouleverser et encore plus automatiser la production logicielle.