Université de la Manouba
ECOLE NATIONALE DES SCIENCES DE L’INFORMATIQUE
RAPPORT
De Mémoire de Fin d’Etudes
Par
SABRI Boubaker
Sujet :
Développement d’une plateforme d’intégration continue évolutive
Encadré par :
M. Sabri MTIBAA
Ingénieur d’application
Organisme :
STMicroelectronics
Cité Technologique La Gazelle 2088 Ariana
Tel :(216) 71 857 750 Fax : (216) 71 857 525
Remerciements
Je remercie encore M. ABOUDA Hechmi, enseignant à l’ ENSI, pour son support pertinent
et fort précieux.
Et finalement, j’adresse mes remerciements aux membres du jury pour m’avoir honoré en
acceptant d’évaluer ce travail.
Table des matières
Introduction générale 1
1 Cadre du projet 3
1.2.1 Problématique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Etude de l’existant 13
2.2.1 Hudson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.2 CruiseControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
TABLE DES MATIÈRES iv
2.3.2 Synthèse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4 Conception 29
5 Réalisation 45
5.3.1 Déploiement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.3.2 Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.3.3 Résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.4 Chronogramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Conclusion générale 58
Netographie 62
A Subversion 64
A.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
A.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
A.3 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
B Web services 66
B.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
B.2 Avantages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
B.3 Inconvénients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Liste des figures
4.4 Dependencies.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.1 Chronogramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Signatures des encadrants
M. SABRI Mtibaa
STMicroelectronics
M. HECHMI Abouda
ENSI
Introduction générale
Améliorer la qualité des logiciels est le désir légitime de toute personne s’intéressant à la pro-
grammation informatique en général et au génie logiciel en particulier. L’adoption de bonnes
pratiques tout au long du développement contribue à la pertinence du produit final. En outre,
l’intégration continue permet de mettre en évidence les anomalies existantes dans un produit
d’une façon continue ou quotidienne afin accélérer le développement en ignorant la phase
d’intégration final classique.
L’intégration continue permet de réduire les coûts liés à la résolution des anomalies, sous
réserve de réaliser des tests. Les changements susceptibles d’avoir apporté une erreur étant
limités, les corrections sont largement facilitées .Il s’ensuit un gain de temps au niveau du
développement par élimination des sessions intensives de déboguage, les problèmes étant
résolus le jour même de leur détection.
C’est dans ce cadre que se situe le sujet de notre projet de fin d’études effectué à STMi-
croelectronics au sein de l’équipe ’Compiler Expertise Center’ (CEC) qui vise à concevoir une
plateforme d’intégration continue évolutive gérant les dépendances entre différents composants
des projets développés dans l’équipe.
A cet effet, il nous a été demandé d’étudier, de modifier et de concevoir les différents com-
posants de cette plateforme en assurant le maintien du contrôle et de la supervision. Le présent
document décrit en détails la progression du projet s’étalant sur cinq chapitres.Le premier cha-
pitre présente le cadre général à savoir le contexte du travail et la problématique du projet. Le
INTRODUCTION GÉNÉRALE 2
second chapitre sera consacré à l’étude de quelques solutions et des outils existants assurant
l’intégration aussi bien que l’évaluation de leur efficacité et conformité à nos besoins.
Le chapitre suivant aborde les spécifications de notre approche dans l’intégration en décelant
ses fonctionnalités. La description des étapes de la conception générale et détaillée relatives à la
nouvelle plateforme d’intégration continue est présentée dans le quatrième chapitre. La partie
réalisation est abordée dans le cinquième chapitre. Le rapport se termine par une conclusion
qui établit le bilan du travail et dresse les perspectives concernant les voies d’amélioration de
l’approche adoptée.
1
CHAPITRE
Cadre du projet
Dans ce chapitre, nous mettons notre projet dans son contexte le plus général. Nous
commençons par présenter l’organisme d’accueil, ensuite nous décrivons brièvement le projet.
Enfin, nous présentons les méthodologies et les technologies suivies.
STMicroelectronics (souvent appelée simplement ST) est une société internationale de droit
hollandais mais d’origine franco-italienne, qui développe, fabrique et commercialise des puces
électroniques (semi-conducteurs). Elle est un des tout premiers acteurs mondiaux du secteur
économique de la production de semi-conducteurs.
La société est née de la fusion en 1987 de la société italienne SGS (Società Generale Se-
miconduttori), alors dirigée par Pasquale Pistorio, et de la société française Thomson Semi-
conducteurs, filiale de Thomson.
Initialement nommée SGS-Thomson, elle a ensuite été renommée STMicroelectronics en 1998
suite au retrait de Thomson du capital.
ST Tunis a été créé en décembre 2001. Il développe des logiciels d’applications électroniques,
des microcontrôleurs et des microprocesseurs informatiques et automobiles. Il contribue au
développement d’un grand nombre de circuits intégrés destinés aux applications grand public,
numérique, tels que les décodeurs, les lecteurs DVD et les appareils photos numériques.
Le site de ST Tunis a commencé avec 9 ingénieurs et continue d’afficher une forte croissance
avec, en avril 2008, 300 ingénieurs répartis dans plusieurs équipes collaborant avec des divisions
dans des sites en France, en Italie et en Angleterre.[4]
L’équipe qui nous a recueilli toute au long la durée de stage est l’équipe de Centre d’Expertise
en Compilation (CEC) qui est implémenté à : Tunis, Grenoble, Bristol et Crolles. Les projets
développés au sein de l’équipe CEC sont des compilateurs C et C++ destinés à la commercia-
lisation et l’utilisation par d’autres divisions de la société, la production et la maintenance des
outils industriels destinés aux applications embarquées au sein de STMicroelectronics :
• Les compilateurs C et C++.
• Les assembleurs et les compresseurs de code.
• Les librairies mathématiques ainsi que les librairies C et C++.
Deux technologies open-source sont utilisées pour développer les compilateurs des projets prin-
cipaux de l’équipe :
• Open64 (http ://www.open64.net) pour les processeurs de la famille ST200 et STxP70.
• GNU gcc (http ://gcc.gnu.org) pour les processeurs de la famille ST40.
D’autres technologies propriétaires sont également utilisées pour le développement des compi-
lateurs de projets de moindre envergure.
Avant de détailler le sujet, une vision générale sur l’intégration continue nous parait indis-
pensable afin de mieux comprendre le cadre général de projet.
CHAPITRE 1. CADRE DU PROJET 6
1.2.1 Problématique
Le développement logiciel au sein d’une équipe composée de plusieurs développeurs est une
tâche qui devient de plus en plus complexe au fur et à mesure de l’importance des projets gérés,
lesquels sont eux-mêmes constitués de composants interdépendants.
Lorsqu’un développeur décide d’appliquer un changement à l’un des composants d’un pro-
jet, il part d’une copie du code de référence. Comme les modifications sont progressivement
ajoutées, cette copie devient de plus en plus incompatible avec les composantes de projet. Le
développeur a alors la responsabilité de synchroniser son travail avec les derniers changements
avant de pouvoir délivrer ses ajouts. Plus il y a de changements, plus le travail d’intégration des
propres changements du développeur sera long et compliqué et susceptible d’entrer en conflit
avec les modifications d’autres développeurs.
Dans la pire des situations, l’intégration devient tellement complexe que sa durée excède le
temps de développement lui-même . D’où le besoin d’un procédé qui gère l’intégration des
différentes composants du projet pour remédier à ces deux problèmes : la complexité et le long
temps d’intégration. Ce procédé est le système d’intégration continue.
L’intégration continue est un principe qui consiste à réaliser le mécanisme d’intégration des
différents composants d’un logiciel aussi souvent que possible c’est-à-dire dès qu’un chan-
gement est validé par un développeur sur l’ensemble des projets gérés par une ou plusieurs
équipes. [RM3]
L’intégration nécessite l’utilisation :
• d’un système de contrôle de version qui centralise toutes les sources des différents pro-
jets et gère les notions liées à l’attribution des versions (branches, différences entre deux
versions d’un même fichier, ...) avec surveillance des changements apportés par chaque
développeur.
• d’un mécanisme de construction des logiciels qui permet de construire le logiciel dans sa
globalité à l’aide d’une simple commande (ant, maven).
• d’un système de tests auto-validants qui s’assure du bon développement de l’application
par rapport à ses besoins.
• d’un système de reporting publiant les résultats de la construction et de l’intégration des
CHAPITRE 1. CADRE DU PROJET 7
différentes composants.
L’un des principaux avantages de l’intégration continue est qu’elle permet de déterminer
l’ensemble des anomalies dans un projet d’une manière continue et à la volée. Sans intégration
continue, les bugs d’intégration sont très difficiles à localiser car le problème ne vient pas d’une
personne en particulier mais de l’interaction du travail de plusieurs personnes provenant par-
fois d’equipes différentes ce qui fait de l’intégration une étape un peu délicate. Les anoma-
lies peuvent souvent avoir été intégrées des semaines, voire des mois, avant d’être détectées
et localisées : ils en deviennent d’autant plus difficiles à retracer et à corriger sans déstabiliser
CHAPITRE 1. CADRE DU PROJET 9
l’ensemble de l’application.
Grâce à l’intégration continue, une grande majorité des anomalies dues à des problèmes d’in-
teraction est résolue le jour même. En outre, nous repérons immédiatement dans la majorité des
cas où l’interaction a eu lieu. Cela réduit considérablement le champ de recherche du bug.
Il nous parait indisponsable de citer d’autres objectifs de l’intégration continue nous paraissent
indispensables de les citer comme :
• La mise à jour permanente, au minimum quotidienne, de l’environnement. De fait, une
version fonctionelle est toujours disponible pour un test, une démonstration ou une distri-
bution.
• La connaissance en temps réel de l’avancement du projet par le responsable du projet.
• La réactivité des équipes de développement en cas de code incompatible ou manquant.
• La réduction des coûts liés à la résolution des bugs, sous réserves de réaliser des tests.
Les changements susceptibles d’avoir apporté une erreur étant limités, les corrections
sont largement facilitées.
• Le gain de temps au niveau du déploiement du développement. Nous éliminons les ses-
sions intensives de débogage, les problèmes étant résolus le jour même.
• La connaissance plus concrète de l’état d’avancement du développement par les membres
de projet.
Les méthodes Agiles sont des procédures de conception de logiciel qui se veulent plus prag-
matiques que les méthodes traditionnelles. En impliquant au maximum le demandeur (client),
ces méthodes permettent une grande réactivité à ses demandes, visent la satisfaction réelle du
besoin du client et non des termes du contrat de développement. La notion de méthode agile a
été officialisée en 2001 par un document Manifeste Agile (Agile Manifesto) signé par 17 per-
sonnalités impliquées dans l’évolution du génie logiciel et généralement auteurs de leur propre
méthode. Parmi les différentes méthodes agiles on peut citer :[6]
La différence entre les méthodes agiles se manifeste juste dans un nombre limité des tech-
niques complémentaires.
Les techniques différenciatrices les plus marquantes sont :
• RAD : recommande la variabilité de la taille et de la maturité des groupes de travail en
CHAPITRE 1. CADRE DU PROJET 11
fonction des phases du projet afin d’optimiser l’engagement des ressources et de préserver
leur intérêt par un travail adapté à leurs préoccupations. L’organisation performante des
réunions est basée sur un mode opératoire des entretiens et sur des techniques de valida-
tion permanente.
• DSDM : la méthode DSDM se particularise par la spécialisation des acteurs du projet
dans une notion de ” rôles ”. Ainsi, l’on trouvera dans les réunions DSDM des sponsors
exécutifs, des ambassadeurs, des utilisateurs visionnaires, des utilisateurs conseillers, sans
oublier l’animateur-facilitateur et des rapporteurs.
• XP : (extrême programming) est très axé sur la partie Construction de l’application.
Une de ses originalités réside dans l’approche de planification qui se matérialise sous
la forme d’un jeu intitulé Planning game et qui implique simultanément les utilisateurs
et les développeurs. On notera aussi des techniques particulières liées à la production du
code comme la programmation en binôme (Pair programming), l’appropriation collective
du code, la refactorisation (refactoring) et l’intégration continue. [7]
• FDD : pour FDD, la particularité nommée Mission Focused réside dans une forte orien-
tation vers un but immédiat mesurable guidé par la notion de valeur métier. C’est en fait
l’ambition globale d’une itération qui se trouve ainsi renforcée. Cet aspect se retrouve
aussi dans la méthode RAD sous la forme des objectifs de Focus ou dans Scrum dans la
notion de Sprint. FDD préconise aussi le Features Driven Development. Cette technique
se caractérise par des notions de Feature et de Features set (fonctionnalités et groupes de
fonctionnalités).[8]
• Scrum : La méthode Scrum affirme sa différence dans des pratiques de courtes réunions
quotidiennes (Stand-Up ou Scrum daily meeting). Ces temps de travail commun ont
pour objectifs d’améliorer la motivation des participants, de synchroniser les tâches, de
débloquer les situations difficiles et d’accroı̂tre le partage de la connaissance.[9]
Le principe de base de Scrum est de focaliser l’équipe de façon itérative sur un ensemble de
fonctionnalités à réaliser, dans des itérations de durée fixe de une à quatre semaines, appelées
CHAPITRE 1. CADRE DU PROJET 12
Sprints. Chaque Sprint possède un but à atteindre, défini par le directeur de produit, à partir
duquel sont choisies les fonctionnalités à implémenter dans ce sprint. Ce que nous a poussé à
choisir cette méthode durant notre stage est le fait qu’un sprint aboutit toujours sur la livraison
d’un produit partiel mais fonctionnel. Cela nous a beaucoup aidé à tester au fur et à mesure la
qualité de nos produits. De plus, cette méthode nécessite une communication permanente avec
le client d’où la livraison des produits valides par rapport aux besoins du client et vérifiés en
terme de qualité à cause du concept de démonstration défini dans Scrum.
Conclusion
Après avoir présenté le cadre général de notre projet, et introduit à notre plateforme
d’intégration continue. Nous allons dans ce qui suit entamer une étude de l’existant pour mieux
comprendre le cadre et l’environnement du projet.
2
CHAPITRE
Etude de l’existant
Afin d’atteindre les objectifs de notre projet, l’étude des solutions existantes et des différents
moyens mis à notre disposition est une étape inévitable. En fait, elle permet d’abord de
décortiquer les fonctionnalités déjà développées et surtout de mettre en relief leurs limites.
Ensuite nous pouvons dégager les solutions envisageables qui peuvent faire face aux problèmes
liées aux solutions existantes.
Au début de notre stage, les développeurs de l’équipe CEC utilisent déjà l’intégration conti-
nue par le biais de l’outil Cruise Control. Le principal inconvénient de cet outil, outre son
affichage lent lors de la présence de nombreux projets, est l’absence de la prise en compte des
dépendances entre composants d’un compilateur. Cette prise en compte est l’objet de ce stage.
exécuter des scripts de construction, plus potentiellement des jeux de tests automatisés, voire
même déployer l’application. L’équipe projet est alors notifiée automatiquement par mail des
problèmes détectés. Il existe un grand nombre d’outils d’intégration continue, avec des fonc-
tionnalités plus ou moins larges. Certains sont payants et un bon nombre est gratuit et/ou open-
source.[5]
2.2.1 Hudson
Hudson est un outil open source d’intégration continue écrit en Java, fonctionnant dans un
conteneur de servlets tels qu’Apache Tomcat, ou en mode autonome avec son propre serveur
Web embarqué.
Il s’interface avec des systèmes de gestion de versions tels que CVS et Subversion, et exécute
des projets basés sur Apache Ant et Apache Maven aussi bien que des scripts arbitraire en shell
unix ou batch Windows.
Les générations de projets peuvent être initiées par différents moyens, tels que des mécanismes
de planification similaires au cron, des systèmes de dépendances entre générations, ou par des
requêtes sur certaines URL spécifiques. L’interface web est simple à utiliser et assez intuitive,
la prise en main est très rapide. On peut réellement configurer l’intégration continue d’un projet
existant en quelques minutes sans connaı̂tre l’outil. [10]
2.2.2 CruiseControl
IBM Rational Build Forge Enterprise Edition est serveur d’intégration continue qui auto-
matise les processus de livraison de logiciels grâce à une structure adaptable de gestion des
générations d’exécutables qui permet aux équipes de développement de normaliser les tâches
répétitives, de gérer la conformité aux réglementations officielles et de partager l’information.
Il s’intègre facilement dans un environnement de travail et appuie les principaux langages de
développement, les scripts et sur différentes plateformes La solution prend en charge les équipes
de développement distribuées via une interface Web centralisée, accessible quasiment partout
et à tout moment.[12]
Pour mieux choisir entre les différents outils d’intégration continue, nous allons présenter
des tableaux des comparaisons dont chacun porte sur un aspect qui nous parait important.
CHAPITRE 2. ETUDE DE L’EXISTANT 16
Informations générales :
La gestion de la compilation :
La sécurité :
L’interface web :
Installation et configuration :
2.3.2 Synthèse
Après une étude fine et prolongée des ces différentes outils d’intégration continue, nous avons
conclu que :
-Pour Rational Build Forge. Le fait qu’il soit payant, qu’il ne gère pas les dépendances inter
projets et même qu’il ne soit pas open source pour que nous puissions le modifier et ajouter
notre propre module de gestion des dépendances nous incite à éliminer cet outil bien qu’il
dispose de nombreuses fonctionnalités dont avons besoin.
-Pour Hudson. Hudson est encore un produit jeune. D’autre part, il ne s’intègre qu’avec CVS
ou Subversion (facteur très limitant car l’outil de controle des versions ClearCase est aussi
utilisé au sein de STMicroelectronics. Ceci fait que nous ne retenons pas cet outil malgré toutes
CHAPITRE 2. ETUDE DE L’EXISTANT 20
ses facilités d’installation et d’emploi. Il apparaı̂t donc que l’outil Cruise Control reste un bon
compromis entre facilité d’utilisation, configuration et évolutivité grâce à :
• sa gestion de nombreux outils de contrôle des versions dont ceux utilisés à STMicroelec-
tronics comme CVS, Subersion ou ClearCase.
• la possibilité de gérer plus types de projets tels que Ant, Maven, C/C++, Shell.
• son support actif (documentation, mailing list).
Nous choisissons CruiseControl pour être un cur de toute une plateforme écrite en java utili-
sant des technologies dérivées du Java comme les services web, la programmation avec l’RMI
(Remote Method Invocation), les technologies du standard MVC (Model, View, Controler)
voire JSF (Java Server Faces) et le traitement des données écrites sous format XML.
Conclusion
Après avoir donné une vision globale sur l’existant et choisi la solution proposée, dans le
chapitre suivant nous allons analyser notre plateforme et détailler les différentes spécifications.
3
CHAPITRE
La réussite d’un projet dépend du soin avec lequel nous avons effectué les phases d’analyse
et de spécification. C’est pourquoi il est fondamental, au cours de ces phases, de déterminer
l’adéquation entre les besoins exprimés des utilisateurs et les traitements envisagés.
Plus l’analyse de cette détermination sera fine, plus grande sera la réussite de l’application et
son utilité future.
Pour assurer cet objectif, il est donc essentiel que nous parvenions à une vue claire des différents
besoins escomptés de notre projet.
Notre système d’intégration permet à un simple utilisateur, qui peut être un chef de projet ou
bien un membre de l’équipe, la possibilité de découvrir l’avancement d’un tel projet et d’obtenir
une vision sur l’impact de ses modifications tout au long du cycle de validation.
Les fonctionnalités permises à un utilisateur par notre système et à travers le dashboard sont :
CHAPITRE 3. SPÉCIFICATION ET ANALYSE DES BESOINS 23
Outre les besoins fonctionnels déjà explicités, la plateforme d’intégration continue doit as-
surer les besoins non fonctionnels suivants :
Dans cette section, nous présenterons les différents cas d’utilisation en détaillant au fur et à
mesure les actions de l’utilisateur de notre plateforme d’intégration continue.
La figure 3.1 montre les différentes tâches que l’administrateur de CruiseControl peut sol-
liciter avant de démarrer la boucle de validation. En effet, il est capable d’ajouter un nouveau
CHAPITRE 3. SPÉCIFICATION ET ANALYSE DES BESOINS 25
La figure 3.2 montre les actions que l’outil RMI (Remonte Méthode Invocation) peut effec-
tuer. En effet, l’administrateur est capable d’invoquer CruiseControl à distance et de manipuler
l’ensemble de tous les composants existants dans la boucle de validation.
Il est capable également de :
Figure 3.3 — Diagramme de cas d’utilisation du dashboard : cas d’un simple utilisateur
D’après le diagramme de la figure 3.3, l’utilisateur du dashboard peut consulter les statuts de
chaque composant existant dans la boucle de la validation et les différents fichiers logs générés
après chaque modification d’un tel projet. Ainsi, l’utilisateur peut avoir les différents artefacts
résultats de la validation et enfin manipuler un projet à travers une interface élégante et facile à
utiliser.
CHAPITRE 3. SPÉCIFICATION ET ANALYSE DES BESOINS 28
Conclusion
Nous avons procédé dans ce chapitre à une analyse des détails relatifs à notre plateforme
d’intégration continue dont la conception des différentes composantes sera présentée dans le
prochain chapitre.
4
CHAPITRE
Conception
Tenant compte des divers besoins fonctionnels déjà explicités dans le chapitre précédant
et comme illustré dans la figure 4.1, nous allons dans ce qui suit présenter l’architecture
générale de notre plateforme d’intégration continue en mettant l’accent sur les relations entre
les différents composants de cette architecture. Nous pouvons distinguer trois tiers qui consti-
tuent notre plateforme.
Le premier tiers désigné par ”Svn Server” est un logiciel de gestion de configuration permet-
tant de stocker des informations pour une ou plusieurs ressources informatiques permettant de
CHAPITRE 4. CONCEPTION 31
récupérer toutes les versions intermédiaires des ressources, ainsi que les différences entre les
versions.Il s’agit du logiciel Subversion.
Le deuxième tiers constitué par le serveur de build (CruiseControl Server) et l’ensemble des
machines d’exécution est le tiers le plus important de notre plateforme. Il est responsable de
l’intégration des différents composants développés par les membres de l’équipe. En effet, le ser-
veur d’intégration continue CruiseControl qui a pour rôle d’automatiser les tâches d’intégration
qui sont : la compilation, le lancement des tests, le déploiement et la génération des artefacts
et des fichiers des résultats (logs) et la distribution de ces tâches sur des machines d’exécution
bien déterminées.
Le troisième tiers est le dashboard (interface de reporting) relatif à la publication des résultats
de l’intégration entre les différents composants développés par les membres de l’équipe. Ces
résultats se trouvent dans le serveur de configuration et sont indexés par le serveur de build.
CHAPITRE 4. CONCEPTION 32
Nous allons dans ce qui suit décrire la répartition logicielle de notre plateforme à l’aide du
diagramme des composants qui permettra de mieux comprendre l’organisation du système (voir
figure 4.2).
Trois principaux composants construisent notre plateforme à savoir :
builds effectués par le ” Build module ” et enfin un moniteur des actions responsable de
la notification de module de build des actions transmises à travers le Dashboard.
• dashboard : une interface web qui respect le patron de conception ” MVC ” responsable de
la visualisation de l’ensemble des fichiers logs, des statistiques sur un projet donné (temps
de build, nombre des tests passés) et qui est également capable d’invoquer CruiseControl
pour compiler, mettre en pause ou stopper un projet. Une interface de configuration de
CruiseControl qui permet l’ajout ou la suppression d’un projet de CruiseControl est aussi
incluse dans ce dashboard.
• DVP : ” Distributed Validation Plateform ” désigne une couche logicielle distribuée qui
permet l’exécution de la tâche de build d’une façon distribuée. Cette couche est com-
posée de deux principaux composants : MDS ” Monitoring and Discovery Service ” est
un service web qui gère et affecte les tâches entre l’ensemble des machines dédiées à
l’intégration ou il est déployé le deuxième composant JES ” Job Execution Service ”
responsable de l’exécution d’une tâche de la compilation.
Cette section sera consacrée à la conception détaillée de notre plateforme. Nous débutons
avec la conception des différents composants vus précédemment (voir paragraphe 4.1). Puis
nous modélisons l’aspect dynamique du système à l’aide des diagrammes des séquence.
Dans cette partie, nous allons détailler la conception du CruiseControl puis du dashboard et
enfin du DVP.
Conception de CruiseControl
CHAPITRE 4. CONCEPTION 34
Module de la compilation
Cette figure représente une ébauche du diagramme de classe de CruiseControl qui contient
les classes indispensables pour le build d’un projet. La classe ” main ” est un point d’entrée au
CruiseControl. Elle crée une instance de CruiseControlController qui gère le processus de build
dans sa globalité ; ainsi elle fait référence au deux classes ProjectDependencies et ProjectsDe-
pendencies pour gèrer les dépendances entre les différents projets.
Le ProjectControllerMBean avec son implémentation le ProjectController désigne le moniteur
des actions qui transmet les requêtes provenant du dashboard au module de build constitué par
ExecBuilder.
CHAPITRE 4. CONCEPTION 35
Principalement, le module de gestion des dépendances est intégré au Cruise Control à travers
un ensemble de classes qui gère les dépendances entre les composants. Les plus importants
sont :
• ProjectDependencies : Cette classe a comme attributs un nom d’un composant et une
structure de données de type List¡String¿ contenant la liste de tous les fournisseurs de ce
composant. Également, elle contient des méthodes pour l’ajout et le retrait d’un fournis-
seur et des méthodes pour la vérification des résultats des builds de ces fournisseurs.
• ProjectsDependencies : Cette Classe contient la liste des composants qui ont chacun des
dépendances avec la liste de ses fournisseurs. Alors, elle contient une structure de données
de type List¡ProjectDependencies¿ et un ensemble de méthodes qui gère cette structure
(ajout/retrait/vérification...).
• DependenciesLoader : Classe responsable du parsing du fichier de définition des
dépendances ”dependencies.xml” pour en extraire les dépendances et charger une ins-
tance de ”ProjectsDependencies”.
Processus de chargement des dépendances :
• Le ”Main” de CruiseControl crée une instance de ”CruiseControlController”.
• A cette instanciation, une instance de ”ProjectsDependencies” va être créé et chargée par
une instance de ”DependenciesLoader”.
• Cette instance est transmise alors a tout les instants qui représentent les composants ou
les projets.
• Ensuite à chaque vérification de la modification et si CruiseControl a trouvé des nouvel-
leaux changements (commits) il va lancer le build de l’instance qui représente le projet
modifié .
• Au début de cette opération (build), une synchronisation de l’instance de ”ProjectsDepen-
dencies” est faite à travers une instance de ”DependenciesLoader” pour vérifier s’il y a
des nouvelles dépendances qui ont été ajoutées pendant le temps d’attente du projet.
• Apres chaque build, l’instance de ”ProjectsDependencies” est mise à jour par les résultats
des builds.
CHAPITRE 4. CONCEPTION 36
Conception du dashboard
Le dashboard est une interface web qui respecte l’architecture ” MVC ” (Model, View,
Contrôler). La partie ” View ” (présentation) est composée d’un ensemble des pages ” JSF
” (Java Server Face) responsable de la présentation des résultats des builds et qui donnent
la possibilité d’invoquer le serveur CruiseControl à distance. La partie ” Contrôler ”
(contrôleur) est celle responsable des différents traitements effectués pour extraire les
informations des fichiers logs .Enfin, la partie ” Model ” (Modèle) est constituée par l’en-
semble des fichiers logs et les artefacts de CruiseControl.
CHAPITRE 4. CONCEPTION 37
La partie présentation
La figure 4.5 représente les différents cas de navigation entre les vues du dashboard.
L’utilisateur choisit un projet dans la liste affichée au niveau de l’index pour qu’il puisse
consulter les résultats de ses derniers builds, voir des graphes illustrant les résultats des
tests unitaires, les résultats des builds supplémentaires et le logfile généré par CruiseCon-
trol. Également, l’utilisateur peut choisir en restant dans le même projet de consulter les
résultats des autres builds en choisissant un autre log.
Si l’utilisateur est un administrateur qui veut configurer un nouveau projet, il doit pas-
ser par la vue login et après une authentification réussite, il peut choisir de l’interface
administration soit de modifier un projet existant soit d’ajouter un nouveau projet.
CHAPITRE 4. CONCEPTION 38
La partie contrôleur
• LogFile : abstraction d’un fichier log de CruiseControl. Elle est constituée d’un en-
semble de méthodes responsables de l’extraction des informations à partir d’un log
XML.
• BuildInfo : elle est responsable de l’extraction des informations depuis le nom d’un
fichier log (date de build, succès/échec).
• Info : c’est la classe la plus importante. Elle est responsable des traitements des infor-
mations qui parviennent à partir de deux autres classes (LogFile et BuildInfo) concer-
nant un build (modifications effectuées, résultats des tests unitaires, information liés au
build).
La partie modèle
La partie modèle de notre dashboard est désigné par l’ensemble des fichiers logs et les ar-
tefacts généré par Cruise Control qui forment au sens large du mot notre base de données
ainsi que l’ensemble des classes responsables aux traitements de ces données (parseur
XML et Servlet pour la lecture des artefacts).
Conception de la DVP
La DVP est une plateforme de validation distribuée. Elle permet l’exécution des tâches de
la validation (appelés ”jobs” dans la terminologie de la DVP) sur les différentes ressources
disponibles tout en permettant la répartition de la charge et une gestion des ressources.
Cette plateforme est conçue avec une architecture distribuée en utilisant la technologie
des web services. Elle est principalement constituée de deux web services [XF2] :
Monitoring and Discovery Service le monitoring and discovery service est un service
web responsable à la découverte, la gestion et la distribution des tâches de build entre des
machines spécifiques à l’exécution où un autre service est déployé : le JobExecutionSer-
vice.
Job Execution Service Ce service assure l’exécution d’une tâche de build et la génération
des rapports d’exécution pour faciliter le suivi.
CHAPITRE 4. CONCEPTION 40
états des composants dans CruiseControl et les résultats des builds pour chaque compo-
sant. Il introduit le nom d’un composants, la classe ” Resultats ” demande les informations
disponibles pour ce composant pendant que la classe Info demande le log file correspon-
dant à ce composant, les traite et les affiche dans la vue correspondant à la classe ” Resultat
”.
Le diagramme de séquence illustré par la figure 4.10 nous montre le processus d’invo-
cation ou de pilotage de CruiseControl à distance. Un simple utilisateur peut lancer un
build automatique pour ce composant pour vérifier le bon déroulement du travail pour un
composant. Cet utilisateur peut également mettre en pause un projet ou le faire sortir de
la boucle de validation.
CHAPITRE 4. CONCEPTION 44
Conclusion
Nous avons décortiqué, dans le présent chapitre, l’application à réaliser progressivement.
Nous avons commencé par décrire la conception générale du système, dévoilée grâce à
un diagramme organisationnel et pour terminer avec la conception détaillée explicitée
à l’aide des diagrammes de classes et des diagrammes de séquences. Dans le chapitre
suivant, nous exposons la réalisation de notre travail ainsi que les résultats obtenus.
5
CHAPITRE
Réalisation
Ce chapitre constitue le dernier volet du rapport ayant pour objectif d’exposer le travail
achevé. Pour ce faire, nous faisons, dans un premier temps, le tour des différents outils et
bibliothèques utilisés pour la mise en place de notre plateforme. Ensuite, nous présentons
quelques captures d’écran de l’application réalisée.
Dans cette section, nous présentons les configurations matérielle et logicielles mises à
notre disposition en justifiant le choix de la plateforme de développement.
Afin de mener à bien ce projet, il a été mis à notre disposition un micro-ordinateur dont
les caractéristiques sont les suivantes :
• Processeur : Pentium 4 à 3 Ghz.
• RAM : 1Go.
• Disque dur : 80 Go. La plateforme a été testée sur des machines dotées du système
d’exploitation Windows (XP 32-bits) et Linux (RedHat 2.4.21 et 64-bits).
Pour le développement du dashboard, nous avions le choix entre la solution .Net de Mi-
crosoft et celle JEE. Cette dernière est adoptée par plusieurs éditeurs informatiques dont
Sun, BEA et IBM. La première solution offre certes des performances optimales et une
CHAPITRE 5. RÉALISATION 46
facilité dans le développement mais son inconvénient majeur est qu’elle nous oblige à
utiliser la gamme de produits Microsoft à savoir Windows comme système d’exploi-
tation et IIS comme serveur web. Ce choix est donc à éliminer pour la cause d’in-
teropérabilité car notre application d’intégration continue doit être multiplateforme.
Nous opterons donc pour la solution JEE. cette solution a le mérite d’être :
• Riche : plusieurs API (Application Programming interface) qui implémentent le pa-
tron de conception le MVC ainsi que de nombreuses autres API que nous avons
utilisée au cours de développement de la couche représentation.
• Indépendante par rapport à la plateforme utilisée, d’où une meilleure intégration.
• Innovante : l’implémentation est libre ce qui favorise la compétition entre éditeurs.
• Soutenue par plusieurs géants de l’informatique (Sun, IBM, BEA...). Concernant les
modifications apportées au CruiseControl qui est un outil écrit en Java, nous n’avons
que Java à utiliser.
- JPA (Java Persistence API) : standard implémenté par TopLink (par défaut dans
GlassFish), Hibernate ou OpenJPA.
- JAX-WS 2.x : nouvelle pile pour les services web .
- JAXB 2.0 : mise en correspondance (mapping) XML/Java utilisée par JAX-WS 2.0.
- JSF (Java Server Faces)
- Framework MVC dont Apache MyFaces et JSF RI sont des implémentations libres.
- JSP 2.1 Servlet 2.5 : pour faire de l’injection de dépendance dans le conteneur web.
- Ajax4Jsf : Ajax4JSF est une librairie open source qui permet de transformer des
composants JSF existants en composants compatibles AJAX. Ainsi nous pouvons
accéder aux objets du serveur sans devoir recharger toute la page web. C’est sur
ce point qu’AJAX (Asynchronous JavaScript And XML) intervient permettant le
rechargement à chaud de la page web.
La page d’accueil représente le point d’entre au dashboard. Elle contient la liste de com-
posants configurés pour être validés automatiquement par CruiseControl ainsi qu’un
certain nombre de caractéristiques indispensables pour avoir une vue globale sur l’état
d’un composant :
• Last user : qui est le dernier modificateur du composant.
CHAPITRE 5. RÉALISATION 49
Cette vue présente la visualisation des différentes informations liées au build d’un com-
posant. Elle contient également des informations générales (nom du composant, date et
temps de build et l’index build) et un tableau des derniers modifications ont contribué
au lancement de ce build, un tableau des résultats des tests unitaires et enfin une vue
CHAPITRE 5. RÉALISATION 51
Un graphe de type ” Pie Chart ” qui représente les nombres des tests réussis et des tests
échoués depuis l’ajout du composant dans notre plateforme.
CHAPITRE 5. RÉALISATION 52
La figure 5.5 est une ébauche du tableau des métriques correspondantes à un compo-
sant. Le tableau récapitule tous les résultats des tests unitaires effectués sur un compo-
sant depuis son ajout au processus d’intégration continue.
Dans ce qui suit nous allons présenter les étapes de déploiement de notre solution au
sein de l’équipe CEC à la fin du notre stage.
5.3.1 Déploiement
Dans ce qui suit nous allons présenter les étapes de déploiement de notre solution au
sien de l’équipe CEC à la fin du notre stage. Pour déployer notre solution nous avons
utilisé :
• Un serveur Subversion fonctionnel implémenté sur le ST Grenoble. Ce serveur
héberge les différents composants des compilateurs : nous avons relevé 120 com-
posants.
• Notre serveur CruiseControl implémenté sur le site ST de Tunis et configuré pour
maintenir l’intégration entre ces 120 composants.
• Une machine qui fait partie de la DVP ou il est déployé le MonitoringAndDiscovery
Service se situe dans le site de Tunis.
5.3.2 Test
Afin de vérifier et de valider notre plateforme d’intégration continue , nous avons confi-
guré CruiseControl d’avoir la capacité de lancer la validation, automatique de 50 com-
posant au même temps. Egalement, nous avons construire un script pour lancer des
commandes en utilisant la DVP dans le but de créer un trafic supplémentaire aux ma-
chines d’exécutions et également au monitoringAnd DiscoveryService machine.
5.3.3 Résultats
Apres lancement, nous avons pu dégager deux familles des résultats en fonction de la
localisations des machines d’exécutions :
• Pour les machines situées à ST Tunis, puisque le trafic est dans le même sous-réseau
de STMicroelectronics et parce que les machines sont géographiquement dans la
CHAPITRE 5. RÉALISATION 56
5.4 Chronogramme
Il est nécessaire de dresser un tableau qui décrit la répartition des taches du projet tout
au long des quatre mois du stage, afin de donner une vue globale de la répartition du
temps par rapport au travail demandé. Ainsi, le tableau 5.1 explicite le déroulement.
CHAPITRE 5. RÉALISATION 57
Conclusion
Nous avons vu dans ce chapitre les environnements logiciel et matériel sur lesquels
s’est basé notre travail. Nous avons justifié les choix considérés pour aboutir à la
réalisation de la nouvelle plateforme d’intégration évolutive. Nous présentons dans ce
qui suit la conclusion générale.
Conclusion générale
Ainsi se termine donc ce rapport au long duquel nous avons cherché à présenter le
projet et à illustrer les différentes étapes de conception et de mise en oeuvre. Nous es-
timons avoir satisfait les objectifs initialement fixés tout en faisant face aux diverses
contraintes et nouvelles requêtes qui se sont révélées durant ce stage. Nous sommes
d’autant plus confiants dans notre jugement que de nombreux utilisateurs de la plate-
forme nous ont exprimé leur satisfaction autant sur le fond que sur la forme de l’outil
final.
Par ailleurs, ces témoignages ne peuvent que nous inciter à penser aux évolutions
qu’ils seraient souhaitables d’apporter à notre plateforme. En particulier, nous pour-
rions définir un ” plugin ” (Module supplémentaire) pour les environnements de
CONCLUSION GÉNÉRALE 59
développement des membres liés à CruiseControl qui permet une auto configuration
d’un composant dès sa création dans l’environnement.
Bibliographie
Bibliographie
[3] R. Mulye, Metero-s process design and development tool, Master of Science, Uni-
versity of Georgia-USA.
Netographie
Subversion
A.1 Définition
A.2 Installation
Installation
L’installation de Subversion sur Debian se fait simplement par la commande :
A.3 Utilisation
La première étape dans l’utilisation de Subversion est de récupérer une copie locale du
dépôt :
svn co file :///var/subversion/depot/nomdemonprojet Si tout c’est
bien déroulé, un répertoire nomdemonprojet a du être créé dans le répertoire courant.
Ce répertoire doit contenir les fichiers de la dernière révision disponible sur le dépôt.
Dans ce répertoire, vous êtes libre de travailler normalement : création de répertoire,
ajout de fichier. L’ajout un nouveau fichier nécessite d’informer Subversion que ce
fichier doit être pris en compte lors de la prochaine publication des modifications sur
le dépôt :
svn add src
La dernière commande n’a fait que mettre une ”étiquette” sur le fichier, mais il n’est
pas encore été envoyé vers le dépôt. Cette action est réalisée via la commande :
svn commit src -m ”Message expliquant le modification effectuées”
B
ANNEXE
Web services
B.1 Définition
B.2 Avantages
• Les services Web fournissent l’interopérabilité entre divers logiciels fonctionnant sur
diverses plates-formes
• Les services Web utilisent des standards et protocoles ouverts.
• Les protocoles et les formats de données sont au format texte dans la mesure du
possible, facilitant ainsi la compréhension du fonctionnement global des échanges.
• Basés sur le protocole HTTP, les services Web peuvent fonctionner au travers de
nombreux pare-feux sans nécessiter des changements sur les règles de filtrage.
• Les outils de développement, s’appuyant sur ces standards, permettent la création
automatique de programmes utilisant les services Web existants.
B.3 Inconvénients
• Les normes de services Web dans certains domaines sont actuellement récentes.
• Les services Web souffrent de performances faibles comparées à d’autres approches
de l’informatique répartie telles que le RMI, CORBA, ou DCOM.
• Par l’utilisation du protocole HTTP, les services Web peuvent contourner les mesures
de sécurité mises en place au travers des pare-feux.