Mise en place d`un..
Transcription
Mise en place d`un..
SOMMAIRE Introduction ..........................................................................................................................1 Chapitre I : CONTEXTE DU PROJET .............................................................................2 1. Présentation de l’organisme d’accueil ............................................................................3 2. Système intégré de taxation ............................................................................................3 3. Tierce Maintenance Applicative du SIT .........................................................................5 4. Problématique .................................................................................................................6 5. Objectifs du projet ...........................................................................................................7 6. Démarche suivie pour la conduite du projet ...................................................................8 Chapitre II: Spécifications fonctionnelles et conceptuelles de la plateforme IC ..........10 1. Intégration continue : Définition et processus ..............................................................11 1.1. Définition de l’intégration continue .......................................................................11 1.2. Processus d’intégration continue ...........................................................................11 2. Spécifications fonctionnelles et conceptuelles de la plateforme ...................................13 2.1. Spécifications fonctionnelles et conceptuelles de la plateforme ............................13 2.2. Spécifications fonctionnelles et conceptuelles de la plateforme ............................14 2.3. Spécifications fonctionnelles et conceptuelles de la plateforme ............................16 a. Processus de suivi des bugs et qualification des performances ................................17 b. Processus de mise à jour et build de versions de code source ..................................17 c. Processus de réalisation des builds d’intégration ......................................................18 d. Processus global d’intégration continue .................................................................. 19 Chapitre III : Etude des composants de la plateforme et solution composée .............. 21 1. Outils de gestion et contrôle des versions .....................................................................22 2. Outils de tests automatisés et d’exécution des builds ...................................................24 3. Outils de suivi et qualification des performances .........................................................28 4. Outils de gestion de bugs ..............................................................................................30 5. Serveurs d’intégration continue ....................................................................................31 6. Architecture logicielle de la plateforme proposée ........................................................32 Chapitre IV: Implémentation de la plateforme IC ....................................................... 34 1. Configuration de serveur d’intégration Hudson ...........................................................35 2. Configuration et migration vers l’outil de gestion et contrôle de versions SVN ..........35 3. Configuration des tests unitaires,fonctionnels,performances .......................................36 4. Automatisation de la gestion des bugs ..........................................................................42 5. Configuration des outils de suivi et qualification des performances ............................44 Conclusion ...........................................................................................................................51 Bibliographie Annexe A: Standard BPMN Annexe B: Ecrans de configuration de Hudson Annexe C: Scénarios de tests Annexe D : Migrations des outils Introduction 2011/2012 Introduction La méthodologie de développement et de maintenance d’une application a une incidence directe sur sa qualité et sa performance. Dans ce contexte, l’industrialisation des processus métier est aujourd’hui un concept qui permet de garantir un maximum de profit. C’est dans ce cadre que notre projet de fin d’étude vise à mettre en place une plateforme d’intégration continue au sein du service Développement de la Direction générale des impôts, organisme d’accueil. La Direction dispose, en effet, d’un système d’intégration fiscal qui, d’une part, devrait être continuellement amélioré pour répondre aux attentes de la Direction et des contribuables, et d’autre part, pourrait comprendre des anomalies qui devraient être corrigées. Le processus de maintenance actuel s’avère lent et complexe. Le but de notre projet est ainsi d’améliorer la qualité de ce processus et celle du système en question et ce tout en réduisant les coûts en termes de ressources et temps nécessaire pour effectuer les différents tests. Notre mission est d’élaborer un environnement d’intégration continue fondé sur un bechmarking des solutions existantes sur le marché. Le déploiement et le test de la solution proposée par la réalisation d’un exemple de processus de production logicielle figurent aussi comme un objectif de ce travail pour valider cette solution. Le présent rapport comporte quatre chapitres. Le premier chapitre définit le contexte général du projet. Le deuxième chapitre présente une spécification fonctionnelle et conceptuelle de la plateforme mise en jeu. Le troisième chapitre constitue une étude comparative des outils existants sur le marché et qui justifie le choix de ceux s’avérant appropriés pour l’implémentation de la solution proposée. Le quatrième et dernier chapitre concerne la mise en œuvre de la plateforme. Projet de Fin d’Etudes Page 1 Chapitre I : Contexte du Projet 2011/2012 Chapitre I : CONTEXTE DU PROJET Ce chapitre aborde le contexte général du projet. Il présente d’abord l’organisme d’accueil et son système d’intégration de taxation (SIT) dont l’amélioration du processus de maintenance fait l’objet de ce projet. Nous y évoquons par la suite la problématique, la motivation aussi bien que les objectifs de notre travail. Nous terminons par présenter la démarche suivie pour la conduite de ce projet. Projet de Fin d’Etudes Page 2 Chapitre I : Contexte du Projet 2011/2012 1. Présentation de l’organisme d’accueil La Direction Générale des Impôts (DGI) est l’établissement chargé de la mise en oeuvre de la politique fiscale, conformément aux orientations du Ministre de l'Economie et des Finances. Elle a pour missions d’exercer des activités relatives à la détermination de l’assiette de l’impôt (bases sur lesquelles sont prélevés les impôts ainsi que les taxes), le recouvrement (perception des taxes, des impôts et des droits d’enregistrement et de timbre) et le contrôle fiscal (vérification des informations du système déclaratif tout en garantissant les droits des contribuables). L’administration centrale comprend quatre Directions parmi lesquelles la Direction des ressources et du système d’information qui fournit aux différentes entités de la DGI les ressources et l’infrastructure nécessaires au bon déroulement de leurs missions. Elle est composée de plusieurs divisions parmi lesquelles la division du développement. Celle-ci a pour mission d’exploiter les nouvelles technologies dans les processus métiers. Elle est constituée de trois services : le Service de développement de télé service, le service de la maintenance des applications et le service de développement des applications qui accueille le présent projet. Le service de développement des applications est chargé du développement des applications informatiques utilisées par les différents services ainsi que de la gestion moderne de l’information de l’administration fiscale en déployant les dernières technologies informatiques. Ce service fait appel à des prestataires pour mener des projets de grandes envergures et met également en place des applications développées en interne. 2. Système intégré de taxation La supervision du domaine de la fiscalité au Maroc incombe à la DGI qui a pour mission l’imposition et le calcul de l’impôt pour les différents contribuables au niveau du royaume. Dans ce contexte, la DGI a lancé, dans le cadre de la réalisation de son schéma directeur informatique et télécommunication (SDIT), le projet Système Intégré de Taxation (SIT) qui a commencé en 2003. Le but était, d’une part, de mettre en place un système d’information centré sur le contribuable qui, à la fois, assure la célérité des traitements et la cohérence des données et d’autre part, de rapprocher la DGI des usagers et de leur offrir des services de proximité. Projet de Fin d’Etudes Page 3 Chapitre I : Contexte du Projet 2011/2012 SIT constitue, en fait, le résultat du processus d’urbanisation de l’ancien système d’information de la DGI qui avait pour but de le faire évoluer dans son ensemble afin de garantir sa cohérence vis-à-vis des objectifs métier, tout en prenant compte des contraintes externes et internes, et en tirant parti des opportunités en technologies de l’information et de la communication. Comme illustré sur la figure 1.1, il est fondé sur une architecture client/serveur et sur l’utilisation d’une base de données orientée client qui permet la fédération et le partage des données et des dossiers fiscaux des contribuables entre les gestionnaires concernés du système. Figure 1.1 Architecture global du SIT SIT offre une vision d’ensemble de la situation fiscale de chaque contribuable à travers des fonctionnalités relatives au contrôle fiscal, au recouvrement, aux affaires juridiques et à l’assiette considérée comme le montre son architecture fonctionnelle illustrée dans la figure 1.2. En vue d’apporter une aide à l’analyse, la décision et l’action, SIT facilite aussi les contrôles de cohérence des déclarations des contribuables aussi bien que la détection d’éventuelles anomalies. Figure1.2 Architecture fonctionnelle du SIT Projet de Fin d’Etudes Page 4 Chapitre I : Contexte du Projet 2011/2012 3. Tierce Maintenance Applicative du SIT La Tierce Maintenance Applicative (TMA) est la maintenance appliquée à un logiciel qui est assurée par une expertise externe. Dans le cas du SIT, sa maintenance a été confiée à BULL dans le but de le maintenir et l’améliorer tout en préservant son niveau de qualité. Comme illustré à la figure 1.3, le cycle TMA du SIT est un cycle itératif qui permet le maintien sous contrôle du système à travers la détection et la correction de ses défaillances, et ce selon une stratégie de tests. Les utilisateurs du système détectent et signalent notamment toute anomalie au service SDA qui en informe BULL. Le chef de projet concerné assigne, ensuite, les différentes tâches de corrections ou d’amélioration aux développeurs selon leur domaine de compétence. Les corrections ou les améliorations apportées par les développeurs sont par la suite livrées au service SDA. Le bon de livraison, comprenant des informations tels que l’objet d’amélioration ou de correction, les prérequis de déploiement, les scripts de bases de données, la liste des anomalies corrigées et la liste des évolutions traitées, est ensuite communiqué au service d’exploitation qui déploie le produit livré sur l’environnement de production. Après vérification du produit par le responsable du domaine fonctionnel, et sauf en cas de découverte d’éventuelles anomalies (anomalie bloquante, majeure, mineure, régression, etc.) par le service SDA, les améliorations ou corrections sont enfin intégrées par BULL. Ce cycle de maintenance est relativement facilité par l’usage de l’outil de bugtracking Bugzilla qui sert d’interface d’échange entre les différents intervenants. Figure 1.3 Cycle TMA du projet SIT Projet de Fin d’Etudes Page 5 Chapitre I : Contexte du Projet 2011/2012 Les demandes de corrections suivent un cycle de vie fondé sur l’état d’avancement de la demande comme montré dans la figure 1.4. Tout bug est considéré comme ouvert au moment de sa déclaration. Il est ensuite assigné à un développeur par le chef de projet. Après traitement par le développeur, il est considéré comme bug résolu. Selon la décision du responsable fonctionnel chargé de la vérification des corrections, la demande serait considérée comme correctement résolue ou serait ré-ouverte en cas de problème. Quand toutes les étapes de corrections sont accomplies correctement, elle passerait à l’état fermé. Figure 1.4 Cycle de vie d’une demande de bugtracking 4. Problématique Préserver la qualité du SIT et améliorer sa performance et son efficacité est un objectif crucial du service SDA. Toutefois, cet objectif est confronté à des problèmes liés au cycle de maintenance de ce système. Ces problèmes peuvent se résumer dans les suivants : Complexité et la lenteur du processus de maintenance : Les tests actuels sont réalisés de façon manuelle et nécessitent la maîtrise de l’aspect fonctionnel pour comprendre le bug dans un premier temps puis le corriger par la suite. Le cycle de maintenance devient donc lent et complexe. Corriger un bug constitue une charge majeure et coûteuse en termes de temps. A titre d’exemple, 700 bugs ont été déclarés en 2011 et seulement 30 livraisons on été qualifiées. Projet de Fin d’Etudes Page 6 Chapitre I : Contexte du Projet 2011/2012 Nombre élevé d’éventuels bugs et d’itérations à effectuer : Chaque bug risque de susciter de nombreuses itérations. Cela rend cette opération coûteuse en termes de ressources humaines aussi bien que matérielles. Difficulté du suivi du processus de maintenance : Il s’avère notamment difficile d’établir le suivi des anomalies découvertes et corrections et améliorations apportées. Cela rend difficile l’analyse et la prise de décisions relatives au processus de maintenance. 5. Objectifs du projet Pour remédier aux problèmes évoqués auparavant, il était question de penser à industrialiser le processus de maintenance en mettant en place une plateforme d’intégration continue. L’intérêt d’instaurer une telle plateforme au sein du service SDA dérive du besoin d’améliorer le processus de production logicielle, tout en restant dans un contexte d’industrialisation informatique qui permet la bonne gestion des ressources internes du service. Ceci peut être réalisé à travers, notamment, l’automatisation des processus métiers et la réduction par la suite du temps passé sur la phase des tests. Dans le cadre de cette perspective, le présent projet a pour objectifs les suivants : Vérification fréquente du code et de sa bonne compilation : Il s’agit de l’exécution de builds répétitifs pour s’assurer de la cohérence du projet et la disponibilité à tout moment d’un exécutable de l’application en utilisant des outils techniques tel que Ant, Gradle ou encore Hudson. Réalisation automatique des tests unitaires, fonctionnels et des tests de performances avant chaque livraison : L’idée est de concevoir des plans de tests pour les automatiser à l’aide d’outils logiciels tels que JUnit, Sahi, Jmeter. Traçabilité des dernières modifications du code en lien avec l’ensemble des anomalies corrigées : Il est question de garder un suivi des modifications apportées au code par l’utilisation des solutions logicielles comme Hudson, Jira. Suivi de la qualité du code et couverture des tests : Il s’agit de mettre en œuvre des outils logiciels qui vérifient la qualité du code, génèrent des rapports à la demande et proposent une vue globale sur le taux du code testé. On peut citer par exemple Sonar, Corbertura ou encore PMD. Projet de Fin d’Etudes Page 7 Chapitre I : Contexte du Projet 2011/2012 6. Démarche suivie pour la conduite du projet Pour mener à bien la réalisation de notre projet, nous avons adopté une démarche qui consiste à diviser le projet en plusieurs étapes : a. Cadrage du projet et étude préalable : Il s’agit de la première étape qui a consisté à mener une étude détaillée de l’existant. Le but était de pouvoir, d’une part, comprendre le système objet de notre travail et d’autre part, de nous familiariser avec le contexte du projet qu’est l’intégration continue et dont les notions nous étaient floues, voire inconnues. b. Spécifications fonctionnelles et conceptuelles de la plateforme : Nous étions amenés à cette étape à définir une architecture détaillée des différents environnements composant le processus d’intégration et qui sont nécessaires pour aboutir à une solution répondant aux besoins attendus. Nous avons également élaboré les spécifications conceptuelles de notre plateforme à travers un diagramme de cas d’utilisation, qui définit les acteurs de notre plateforme, ainsi qu’une modélisation BPMN des sous-processus métiers faisant partie du processus global d’intégration continue. c. Etude comparative des outils composant la plateforme d’IC : Cette étape a consisté en un survol des outils d’intégration continue existant sur le marché en vue de les comparer et en choisir ceux appropriés pour implémenter la plate-forme à mettre en place. d. Implémentation de la plateforme : Il s’agit de la quatrième étape qui a consisté en l’implémentation de la solution proposée à travers l’installation des outils logiciels et plugins nécessaires, ainsi que la réalisation des configurations permettant l’interfaçage entre les différents outils, puis le déploiement de la plateforme mise en place et la réalisation de tests. La planification d’un projet vise en fait à établir des prévisions raisonnables pour la mise en œuvre des travaux d'ingénierie logicielle et de gestion du projet. Ces prévisions sont indispensables pour une gestion de projet efficace. C’est dans ce sens que nous avons réalisé un diagramme de Gantt illustrant le planning de réalisation de notre projet et que nous représentons dans le tableau 1.1 ci-après pour des raisons de lisibilité. Projet de Fin d’Etudes Page 8 Chapitre I : Contexte du Projet Phase Tâches Cadrage du projet et Etude de l'existant étude préalable Analyse des besoins 2011/2012 Estimation Début Fin 7% Livrable Rapport de cadrage du 07/02/12 16/02/12 projet. 24/02/12 Dossier des Définition des objectifs et motivations Spécification fonctionnelle et conceptuelle de la plateforme Environnements de la plateforme IC Spécifications fonctionnelles de la plateforme 10% 16/02/12 spécifications Spécifications conceptuelles de la plateforme Modélisation BPMN Etude comparative Choix de l'outil SCM des composants de la Choix de l’outil de gestion des builds plateforme Choix des outils de tests Choix des outils de qualimétrie 10% 24/02/12 09/03/12 Choix du serveur d'intégration Rapport de Benshmark des outils Choix de l’outil de Bugtracking Implémentation de la plateforme Mise en Place de Hudson Mise en place de SVN Rapport technique. Mise en place de JIRA Mise en place de SAHI Scripts des tests 73% 09/03/12 Mise en place de JMETER Mise en place des outils 13/05/12 fonctionnels Scripts des tests de performance. (checkstyle, pmd, sonar,cobertura) Tableau 1.1 Planning du projet Dans ce chapitre, nous avons présenté le contexte général de notre projet en mettant l’accent particulièrement sur les besoins fonctionnels qui ont poussé le service SDA à penser de mettre en place une plateforme d’intégration continue. Les spécifications fonctionnelles de cette plateforme, ainsi que les spécifications conceptuelles feront l’objet du chapitre suivant. Projet de Fin d’Etudes Page 9 Chapitre II : Spécifications fonctionnelles et conceptuelles de la plateforme IC 2011/2012 Chapitre II : Spécifications fonctionnelles et conceptuelles de la plateforme IC Ce chapitre et réservé aux détails des spécifications fonctionnelles et conceptuelles de la plateforme IC. Il aborde d’abord le concept d’intégration continue en termes de terminologie et de processus. Nous y présentons ensuite les spécifications fonctionnelles associées en dégageant les fonctionnalités, les acteurs et les cas d’utilisation décrits en UML [1] Nous terminons par la suite par la modélisation du processus d’intégration au moyen du standard BPMN [2]. Projet de Fin d’Etudes Page 10 Chapitre II : Spécifications fonctionnelles et conceptuelles de la plateforme IC 2011/2012 1. Intégration continue : Définition et processus 1.1. Définition de l’intégration continue L'Intégration Continue (IC) est un nom qui a été donné initialement par la communauté d’XP pour désigner la pratique de génie logiciel visant à accélérer la livraison des logiciels en réduisant le temps d'intégration des nouvelles mises à jour des codes sources. Le terme « intégration» englobe un ensemble d’actions que le code subit avant de déclencher une nouvelle tâche. Ces actions comprennent principalement la compilation, le test et le déploiement. Le terme « Continue » est utilisé pour référencer une continuité d’intégration dans un sens de répétition dans des intervalles de temps rapprochés [3]. En résumé, nous pouvons définir L’IC comme étant la pratique qui permet « d’intégrer » tout changement appliqué sur un code avant de commencer une nouvelle tâche. Le but est de connaître à chaque instant l’état du logiciel, d’avoir un exécutable à tout moment et d’améliorer la qualité et la fiabilité du logiciel. 1.2. Processus d’intégration continue L’architecture fonctionnelle d’une plateforme d’IC, est généralement constituée de cinq environnements [4] : L’environnement de dépôt (repository) : Il permet, d’une part, de centraliser tous les codes sources relatifs à une application et créés par différents membres de l’équipe de développement. D’autre part, il assure la gestion et contrôle des différentes versions développées au cours du cycle de vie de l’application, tout en stockant ces sources au niveau d’un serveur de contrôle SCM (Source Control Management). L’environnement de compilation : Cet environnement consistant en une machine virtuelle ou une machine physique dédiée est réservé aux développeurs qui l’utilisent pour compiler ou réaliser ce qu’on appelle build de leurs codes source ou de l’application entière. En intégration, le build dépasse la compilation pour regrouper également des tâches comme la construction des releases (par exemple, les fichiers JAR, WAR, EAR, etc.), l’exécution des tests unitaires et tests d’intégration, le déploiement de l’application sur l'environnement de développement, l’inspection du code (en vue de générer les métriques de qualité) et la génération des documents et rapports correspondants. Il existe plusieurs types de builds : le build privé ou build local créé par le développeur sur sa Projet de Fin d’Etudes Page 11 Chapitre II : Spécifications fonctionnelles et conceptuelles de la plateforme IC 2011/2012 propre machine, le build d’intégration de jour géré par le serveur d’intégration continue pour tester l’intégration de tous les codes des développeurs et le build d’intégration de nuit réalisé pour exécuter tous les tests y compris ceux de performance. L’environnement de tests : Il permet à travers une machine virtuelle ou une machine physique dédiée de déployer toute nouvelle version de l’application issue de l’environnement de développement, en vue de tester ses fonctionnalités par rapport aux spécifications établies. L’environnement de pré-production : Il est utilisé pour tester la version finale de l’application dans un environnement qui doit être le plus possible proche de l’environnement réel utilisé par le client. Cela permet de réaliser les tests de charge et de valider la bonne exécution de l’application lors du passage en production. L’environnement de production : C’est l’environnement final accessible par les clients. Comme illustré dans la figure 2.1, le processus d’intégration continue est effectué à travers ces différents environnements selon les étapes suivantes : 1. Chaque développeur, souhaitant apporter des changements à une partie du code source, doit commencé par importer (effectuer un check out) une copie de la dernière version de l’application à partir du repository. 2. Une fois les changements apportés au code source, le développeur doit lancer un build privé pour s’assurer qu’une une version saine de l’application est conservée. 3. Suite au succès du build privé, le développeur effectue un commit pour exporter la nouvelle version vers le repository. 4. Grâce à un contrôle régulier du repository, le serveur d’IC détecte l’enregistrement de la nouvelle version comprenant les changements effectués et l’importe. 5. L’intégrateur lance ensuite un script pour exécuter un build d’intégration. 6. Des feedbacks sont générés par la suite par le serveur d’IC pour avertir les développeurs du succès ou de l'échec du build. Dans ce dernier cas, ils sont informés des bugs détectés et doivent procéder à leur correction en reprenant les étapes de 1 à 3. 7. Suite au succès du build d’intégration, l’application sera déployée dans l’environnement de pré-production. Projet de Fin d’Etudes Page 12 Chapitre II : Spécifications fonctionnelles et conceptuelles de la plateforme IC 2011/2012 8. Des tests fonctionnels et de charge de l’application seront effectués dans l’environnement de pré-production. 9. L’application pourrait finalement être déployée dans l’environnement de production pour tester aussi bien que qualifier l’application. 10. En cas de détection de bugs ou de problème de performance, une notification sera envoyée aux acteurs de l’environnement de compilation et de test. Figure 2.1 Processus d’intégration continue 2. Spécifications fonctionnelles et conceptuelles de la plateforme : 2.1. Fonctionnalités nécessaires pour l’intégration continue Dans ce paragraphe, nous précisons les fonctionnalités principales que toute plateforme d’intégration continue doit assurer. Conformément aux environnements et processus d’IC expliqué auparavant, ces fonctionnalités sont les suivantes : La gestion et contrôle de versions : Cette fonctionnalité consiste, d’une part, à maintenir l'ensemble des versions d'un projet dans un espace de stockage centralisé (repository), et à gérer, d’autre part, les mises à jour des codes sources effectuées par chacun de l’équipe de développement afin de conserver une trace des changements apportés. La gestion de versions repose sur un modèle de fusion de copies locales et distantes pour remédier à des problèmes d’écrasements des mises à jour et est assuré, généralement, par un logiciel spécifique de gestion de versions. Projet de Fin d’Etudes Page 13 Chapitre II : Spécifications fonctionnelles et conceptuelles de la plateforme IC 2011/2012 L’exécution des builds : Elle désigne la tâche de production de l’application à partir de l'ensemble des fichiers sources. Cela inclut non, seulement la compilation des fichiers sources, éventuellement leur regroupement sous forme de fichiers compressés (Jar, zip, etc.) mais également la production de fichiers d'installation, de mise à jour ou création de bases de données et la réalisation des tests automatiques. Réaliser des tests automatiques a pour but de réduire leur durée d’exécution. Il permet également de garder des détails sur les tests exécutés afin de garantir leur réutilisabilité et faciliter leur maintenance. Toutes les étapes du build sont généralement automatisées à l’aide de scripts spécifiques qui sont lancés une fois qu’un changement apporté au code source est repéré. Par ailleurs, cette fonctionnalité peut être utilisée pour réaliser des builds locaux ou des builds d’intégration. Ces derniers consistent à fusionner les modules de l’application réalisés par différents développeurs. Ils comprennent des tests d’intégration pour garantir la non-régression de l’application et se font au fur et à mesure du développement de l’application afin de corriger les anomalies à temps. Le suivi et qualification des performances : Cette fonctionnalité permet de dégager des métriques concernant l’analyse du code source. Il est possible, par exemple, de vérifier que les lignes n'excèdent pas une certaine longueur, que les standards de nommage sont bien respectés et que le code est bien commenté. Il permet également d’obtenir des rapports d’exécution des tests de performances, des indicateurs sur la couverture du code et même de pouvoir détecter des codes morts (non-utilisés). La gestion des bugs : Elle traduit la possibilité d’enregistrer les bugs détectés et d’obtenir un historique de chaque bug. Cela permet, par exemple, de connaître le nombre de fois que le bug a été reporté, la personne qui a reporté le bug et le programmeur chargé de le résoudre. Cette fonctionnalité assure un suivi des bugs et, par la suite, un gain au niveau de la maintenance. 2.2. Acteurs et cas d’utilisation Notre étude des besoins spécifiques dans le cas d’intégration continue nous a permis de dégager quatre principaux acteurs. Comme illustré dans la figure 2.2, ces acteurs utilisent des cas d’utilisation relatifs à l’ensemble de fonctionnalités que nous avons présenté dans le paragraphe précédent. Il s’agit des suivants : Projet de Fin d’Etudes Page 14 Chapitre II : Spécifications fonctionnelles et conceptuelles de la plateforme IC 2011/2012 Le développeur : Une fois authentifié, il utilise le cas d’utilisation « Gérer les versions du code » pour importer la dernière version du projet mais aussi pour demander sa mise à jour après y avoir apporté des changements. Il peut aussi exécuter un build privé et des tests unitaires tout en ayant la possibilité de consulter les résultats des tests. Il a également le droit de consulter les bugs détectés suite à l’exécution des builds. L’intégrateur : Cet acteur utilise, après authentification, le cas d’utilisation « Exécuter des builds ». Il peut notamment configurer des builds d’intégration, en définissant les paramètres de compilation et d’édition de l’application et aussi les plans et scénarios de test, puis lancer ces builds. Testeur DGI : Il s’agit d’un employé de la DGI qui, après authentification, peut utiliser les cas d’utilisation « Consultation et suivi des bugs » et « Suivi et qualification des performances ». Il a notamment pour mission de consulter et analyser les bugs détectés lors de l’intégration aussi bien que de vérifier et qualifier les performances de l’application produite. Cela permet de découvrir d’éventuelles anomalies ou dégradations de performance et de pouvoir contacter les personnes concernées pour les corriger. L’administrateur : Il utilise le cas d’utilisation « administration du système » pour gérer les comptes des utilisateurs et leurs droits d’accès aux différents modules de l’application. Figure 2.2 Diagramme de cas d’utilisation Projet de Fin d’Etudes Page 15 Chapitre II : Spécifications fonctionnelles et conceptuelles de la plateforme IC 2011/2012 2.3. Modélisation du processus d’intégration continue L’intégration continue constitue un processus métier global qui comporte un ensemble de sous-processus coopératifs qui consistent chacun en un ensemble d’activités. Comme nous pouvons bien le dégager à partir des spécifications fonctionnelles présentées auparavant, ces sous-processus sont principalement : le processus de mise à jour et build de versions de code source, le processus de réalisation des builds d’intégration et le processus de suivi des bugs et qualification des performances [5]. Nous modélisons ci-après chacun de ces processus en utilisant la notation BPMN (voir annexe A). Le choix de BPMN est justifié par le fait qu’il constitue un standard adapté spécifiquement à la modélisation des processus métier. Son avantage est double. Il fournit, d’une part, une notation graphique complète permettant de représenter un processus métier en découplant les informations métiers des informations techniques. Cela constitue un cadre de travail commun aux analystes métiers et aux développeurs. D’autre part, il permet un mapping direct des processus modélisés vers des langages d’exécution. Une fois un processus est modélisé par les analystes métiers et les informations techniques sont renseignées, il est possible de générer automatiquement, et de manière standard, l’exécutable de ce processus. a. Processus de suivi des bugs et qualification des performances Comme illustré dans la figure 2.3, le processus de suivi des bugs et qualification des performances est constitué de deux activités principales effectuées par un testeur de la DGI chargé de cette mission. Quand la DGI dispose d’un projet qui peut faire l’objet d’intégration continue, ce dernier procède en parallèle au test et qualification des performances de l’application en question aussi bien qu’à la consultation des bugs détectés. Ces deux activités peuvent également être effectuées respectivement quand une mise à jour de version de l’application a été faite dans le cadre de son intégration continue ou une notification de bug a été reçue. En cas de détection de bugs ou de dégradation de performance, le testeur DGI en notifie le développeur concerné pour qu’il puisse apporter les corrections nécessaires. Sa mission ne prend fin que quand le test et l’analyse des performances de l’application confirment son efficacité. Projet de Fin d’Etudes Page 16 Chapitre II : Spécifications fonctionnelles et conceptuelles de la plateforme IC 2011/2012 Figure 2.3 Processus de suivi des bugs et qualification des performances b. Processus de mise à jour et build de versions de code source Comme illustré dans la figure 2.4, le processus de mise à jour et build de versions de code source est constitué d’un ensemble d’activités ou de tâches effectuées par le développeur. Quand un besoin de changement au niveau de l’application est exprimé, celui-ci procède à l’import d’une copie de la version du code source, puis le met à jour, exécute les tests unitaires et lance un build privé de façon itérative jusqu’à ce qu’aucun bug n’est détecté. A ce moment, il demande d’enregistrer (commit) la copie réalisée. S’il se trouve qu’une version postérieure a été déjà enregistrée par un autre développeur, il est amené à reprendre toutes les tâches précédentes, sinon la copie réalisée sera enregistrée et le développeur doit en notifier l’intégrateur et attendre les résultats d’intégration. En cas de bugs, il doit les consulter et procéder à nouveau à la mise à jour du code, sinon il doit informer la DGI qu’une nouvelle version du code comprenant les changements demandés est disponible. Aussi, sa mission est-elle partiellement terminée en attente de validation de la DGI. Au cas échéant, il sera appelé à reprendre une autre itération de ce processus pour apporter les changements demandés. Projet de Fin d’Etudes Page 17 Chapitre II : Spécifications fonctionnelles et conceptuelles de la plateforme IC 2011/2012 Figure 2.4 Processus de mise à jour et build de versions de code source c. Processus de réalisation des builds d’intégration Comme illustré dans la figure 2.5, le processus de réalisation des builds d’intégration est constitué de l’activité de paramétrage de builds et la tâche de leur lancement qui sont effectuées par l’intégrateur. Une fois, ce dernier est informé de l’enregistrement d’une nouvelle version de l’application, il réalise d’abord les configurations nécessaires comme la définition des paramètres de compilation et d’édition de liens aussi bien que la définition des plans et scénarios de tests. Enfin, il lance le build d’intégration. Les résultats seront notifiés au développeur et à la DGI une fois le build exécuté. Aussi, sa mission prend-t-elle fin. Projet de Fin d’Etudes Page 18 Chapitre II : Spécifications fonctionnelles et conceptuelles de la plateforme IC 2011/2012 Figure 2.5 Processus de réalisation de build d’intégration d. Processus global d’intégration continue Dans ce paragraphe, nous présentons le processus global d’intégration continue regroupant les trois sous-processus présentés auparavant. Le but est de montrer l’interaction entre ces trois sous-processus. Comme illustré dans la figure 2.6, des messages sont échangés entre les différents acteurs des sous-processus en question. Notamment, le testeur DGI doit notifier des bugs ou dégradation de performances détectées pour qu’il apporte les changements nécessaires. Le développeur doit, de sa part, informer l’intégrateur de la mise à jour du code source et le testeur DGI de la disponibilité d’une nouvelle version testée et intégrée. Quant à l’intégrateur, il doit informer le développeur et le testeur DGI des résultats des builds d’intégration. Projet de Fin d’Etudes Page 19 Chapitre II : Spécifications fonctionnelles et conceptuelles de la plateforme IC 2011/2012 Figure 2.6 Processus global d’intégration continue Dans ce chapitre, nous avons présenté les spécifications fonctionnelles et conceptuelles d’une plateforme d’intégration continue. Dans la suite, nous présentons une solution outillée pour l’intégration continue. Projet de Fin d’Etudes Page 20 Chapitre III : Etude des composants de la plateforme IC et solution proposée 2011/2012 Chapitre III : Etude des composants de la plateforme IC et solution proposée Dans ce chapitre, nous présentons un benchmark des outils qui composent une plateforme d’intégration continue. Ce benchmark est fondé aussi bien sur l’aspect fonctionnel que sur les avantages et inconvénients de ces outils. Le but est de proposer finalement une architecture logicielle globale de notre plateforme d’intégration continue qui prévoit des composants compatibles et coopérants pour réaliser les fonctionnalités attendues. Projet de Fin d’Etudes Page 21 Chapitre III : Etude des composants de la plateforme IC et solution proposée 2011/2012 La mise en place d’une plateforme d'Intégration Continue (I.C) nécessite le déploiement d’un ensemble d’outils nécessaires pour la mise en œuvre du processus d’intégration. Plusieurs outils existent sur le marché. Le choix d’une solution adéquate dépend des critères à prendre en considération. La complexité de liaison et la communication entre ces différents outils sont également prises en compte dans nos choix. Tout au long de ce chapitre, nous présentons un ensemble d’outils selon leurs fonctionnalités et leur utilité dans le processus d’intégration continue, en commençant par ceux de gestion et contrôle de versions, d’exécution des « builds » et tests automatisés, de suivi et qualification des performances et de gestion de bugs, et en finissant par les serveurs d’intégration. La solution logicielle adoptée est présentée à la fin de ce chapitre. 1. Outils de gestion et contrôle des versions 1.1. Présentation des outils existants Le modèle le plus utilisé pour la gestion et contrôle de versions dans des environnements de développement partagés est celui appelé « copier-modifier-fusionner ». Dans ce modèle, chaque développeur importe sur sa machine la dernière version du programme résidant dans le « repository ». Ainsi, chaque développeur peut alors travailler, simultanément et indépendamment, sur une copie privée locale. Le logiciel de gestion de versions est utilisé par la suite pour fusionner toutes les copies privées. Dans cette section, nous présentons deux référentiels de gestion de versions les plus utilisés sur le marché, à savoir SVN et CVS. Ces référentiels utilisent le modèle cité ci-dessus. CVS est un outil qui permet une gestion efficace des différentes versions d’un projet logiciel. Cela consiste notamment en des tâches de suivi de l'ensemble des fichiers du projet, de stockage centralisé du code source sur un serveur et de gestion des accès concurrents. Ce qui distingue CVS d'autres outils est le fait d’offrir aux développeurs la possibilité d'accéder en même temps à un même fichier pour le modifier avec une prise en charge des modifications. Il fonctionne principalement en mode client/serveur. Les données sont centralisées sur le serveur et ordonnées en modules et les développeurs peuvent les importer et demander par la suite de prendre en compte les modifications apportées. L'utilisation de CVS se fait habituellement dans un environnement de type Unix qui permet une installation et un paramétrage faciles du serveur. Du côté Windows, l'interface graphique de CVSNT permet de procéder à quelques réglages et lancer les services. Projet de Fin d’Etudes Page 22 Chapitre III : Etude des composants de la plateforme IC et solution proposée 2011/2012 Par ailleurs, SVN est un successeur de CVS. Il permet de centraliser les sources afin de les rendre disponibles à l'ensemble des développeurs et acteurs d'un projet, et d'assurer un suivi en conservant un historique des différents fichiers. Les avantages de SVN par rapport à CVS se résument dans le fait qu’il permet de tracer les versions de répertoires, de fichiers et des droits sur les fichiers, de renommer un fichier ou un répertoire tout en conservant son historique, de réaliser des validations de versions (commit) atomiques qui ne sont prises en considération que si tous les fichiers d’une version sont correctement validés, d’utiliser des numéros de versions qui concernent une validation et non pas les fichiers eux-mêmes et enfin d’utiliser le protocole HTTP. 1.2. Comparaison et outil adopté Dans cette section, nous présentons une comparaison des deux outils cités auparavant selon un ensemble de critères tirés de la référence [6]. Le résultat de cette comparaison est illustré par le tableau 3.1. Critère License L’atomicité des Commit Préservation de l’historique Fusion intelligente après renommage ou déplacement d’un fichier Copie de fichiers dans d’autres emplacements Propagation du changement d’un répertoire à un autre Documentation CVS GNU GPL (open source) NON NON NON SVN Apache (open source) OUI OUI NON NON OUI NON OUI via svn-push Bonne (livre gratuit sur le net) Facilité d’utilisation Excellente (disponible sur le net ou sur la ligne de commande) OUI Portabilité Bonne Capacité de travailler sur un répertoire du référentiel Suivi des changements non validés Messages de validation par fichier OUI Interfaces Web OUI (WebSVN, ViewSVN, SVNBrowser, insurrectionand perl_svn) Interfaces graphiques OUI mais la plupart sont en cours de développement OUI NON Nécessite un module apache2 si on choisit HTTP comme protocole. Excellente (clients et serveurs tournent sous UNIX, WINDOWS et MAC OS) OUI OUI NON, mais les messages de validations sont envoyés par rapport à chaque changement. OUI (CVSweb,ViewVC, wwCVS) OUI ( WinCVS, Cervisia (for KDE), TortoiseCVS (Windows Explorer plug-in)) Tableau 3.1 Comparatif entre CVS et SVN Projet de Fin d’Etudes Page 23 Chapitre III : Etude des composants de la plateforme IC et solution proposée 2011/2012 Nous constatons que SVN maintient la plupart des conventions de travail de CVS, y compris une grande partie de l’ensemble des commandes. Par contre, les améliorations sont notables par rapport à son prédécesseur. SVN propose, contrairement à CVS, des commits atomiques, ce qui évite de se retrouver dans un état contradictoire si une opération sur le repository est interrompue en plein milieu. Il permet également un déplacement ou renommage de fichiers/répertoires sans en perdre l’historique. Enfin, il donne la possibilité de définir des permissions d’accès aux différentes parties du repository grâce au protocole WebDAV, tandis que CVS ne le permet que d’une façon limitée. De ce fait, nous avons adopté l’outil SVN. 2. Outils de tests automatisés et d’exécution des builds Les tests de logiciels varient entre tests unitaires, fonctionnels et de performance. Les tests unitaires sont réalisés pendant la phase de développement et visent des composants élémentaires du système (appel de méthodes, de services ou de fonctions de base). Les tests fonctionnels permettent de vérifier l'adéquation du logiciel aux contraintes définies dans les spécifications. Ils évaluent la réaction du logiciel par rapport à des données d'entrées représentatives pour vérifier si le programme fait ce qu’il est censé faire. Tandis que les tests de performance mettent l'application dans des conditions d'utilisation réelles avec plusieurs utilisateurs effectuant des actions itératives et simultanées pour "stresser" l'application et déterminer les goulots d'étranglements. Aussi, présentons-nous ci-après les différents outils de test et leur comparaison selon les types de tests cités. 2.1. Outil de test unitaire JUnit Les outils de tests unitaires sont utilisés pour appeler directement les méthodes d'une classe de test stockée dans un fichier de code source. Compte tenu de la nature de code du projet objet de notre travail et qui est écrit en JAVA, l’outil de test disponible sur le marché est JUnit [7]. JUnit est une bibliothèque de test unitaire pour le langage Java. Il est intégré par défaut dans les environnements de développement intégré Java tels que BlueJ, Eclipse et Netbeans. Cet outil définit deux types de fichiers de tests : Les TestCase sont des classes Java héritant de la classe junit.framework. Ils contiennent un certain nombre de méthodes de tests et servent généralement à tester le bon fonctionnement d'une classe. Une TestSuite permet d'exécuter un certain nombre de TestCase déjà définis. Projet de Fin d’Etudes Page 24 Chapitre III : Etude des composants de la plateforme IC et solution proposée 2011/2012 2.2. Présentation et comparaison des outils de test fonctionnel Les solutions de test fonctionnel les plus utilisées sur le marché sont SAHI, SELENIUM et WATIR [8]. Dans cette section, nous présentons ces solutions par leurs avantages et inconvénients comme rapporté dans le tableau 3.2. Le but est de pouvoir les comparer pour en choisir la plus adaptée à notre projet. SAHI 1. Supporte plusieurs navigateurs 2. Comporte son propre IDE 3. Enregistre et réexécute les tests 4. Connexion possible à des bases de données, Excel ou des fichiers CSV 5. Outil de reporting Avantages Inconvénients SELENIUM 1. Supporte plusieurs systèmes d’exploitation 2. Comporte son propre IDE 3. Enregistre et réexécute les tests 4. S’installe en tant que serveur ou comme Add-on du navigateur FireFox. Nécessite un API différent pour chaque langage de test Interface pas très conviviale. WATIR 1. Supporte plusieurs systèmes d’exploitation 2. API très riche 3. Propose WatiJ pour les projets Java et WatiN pour les projets .NET Chaque navigateur nécessite une bibliothèque différente Tableau 3.2 comparatif des outils de tests fonctionnels Pour notre projet, nous adoptons Sahi qui est un outil d'automatisation de tests d’applications Web par injection de javascript dans des pages Web en utilisant un proxy. Sahi fait abstraction de beaucoup de difficultés et offre un outil d’enregistrement. Il est indépendant du navigateur et de la plateforme, un point très important dans notre cas puisque l’application sur la quelle on va tester notre plateforme ne marche que sur le navigateur Internet Explorer. En outre, il assure une interaction forte avec Java ainsi qu’un outil de Reporting. 2.3. Présentation et comparaison des outils de test de performance Les tests de performance peuvent être de plusieurs types, notamment : Test de charge : utilisé pour simuler un nombre d'utilisateurs virtuels prédéfinis et valider l'application pour cette charge. Test de performance : utilisé pour évaluer les temps de réponse utilisateurs et réseau ainsi que les temps de traitement d’une requête sur le(s) serveur(s). Test de dégradations des transactions : utilisé pour simuler l'activité transactionnelle d'un seul scénario fonctionnel pour pouvoir isoler éventuellement les transactions qui dégradent le plus l'ensemble du système. Projet de Fin d’Etudes Page 25 Chapitre III : Etude des composants de la plateforme IC et solution proposée 2011/2012 Test de stress : utilisé pour simuler l'activité maximale attendue en heures de pointe de l'application. Test de capacité et de montée en charge : utilisé pour simuler un nombre d'utilisateurs sans cesse croissant de manière à déterminer quelle charge limite le système est-il capable de supporter. Test aux limites : utilisé pour simuler en général une activité bien supérieure à l'activité normale pour voir comment le système réagit aux limites du modèle d'usage de l'application. Plusieurs outils de test de performance [9] existent, parmi lesquels : TestMaker[10], JMeter[11], Dieseltest [12]et OpenSTA [13] qui sont parmi les plus connus. TestMaker est un outil approprié pour tester les applications Web, les systèmes de courrier électronique (e-mail), les applications basées sur l’architecture SOA (Service Oriented Architecture) et les applications Java. Il supporte de multiples protocoles notamment HTTP, HTTPS, SOAP. JMeter permet de tester les performances (temps de réponse et fiabilité des réponses aux requêtes) de sites Web, de serveurs FTP, TCP/IP et de services Web, de bases de données accessibles via jdbc, de scripts Perl et d’objets JAVA (Applets). Il fait partie de la suite Apache JAKARTA. Il est entièrement écrit en Java, ce qui lui permet d'être utilisé sur tout système d'exploitation supportant une machine virtuelle Java (JVM). Dieseltest est un outil de test de charge permettant de simuler plusieurs utilisateurs sur une application ou un site Web. L'enregistrement des scripts par cet outil est facile et les résultats sont fournis en temps réel. OpenSTA est un logiciel dédié aux tests de performance développé en C++. Il permet de simuler des centaines d'utilisateurs virtuels d’un site ou d’une application Web et de recueillir ensuite des mesures de performance et des analyses fines du système testé. Le tableau 3.3 présente les résultats d’une comparaison des outils cités ci-dessus selon un ensemble de critères liés aux contraintes d’utilisation en termes de simplicité et de richesse ainsi qu’au contexte de test (nombre d’utilisateurs, protocole prévu, langage utilisé…). Notre choix s’est porté sur JMeter qui, d’une part, demeure le plus utilisé sur le marché selon un sondage fait par le site developpez.net [14], et d’autre part, répond à des contraintes spécifiques de notre projet. Il offre, notamment, des avantages qui consistent en particulier en la possibilité de faire des tests multithread. Ceci nous permet, d’une part, Projet de Fin d’Etudes Page 26 Chapitre III : Etude des composants de la plateforme IC et solution proposée 2011/2012 de simuler de lourds tests de montée en charge en termes de nombre d’utilisateurs, et d’autre part, nous offre un mécanisme puissant de génération de résultats sous différentes formes (arbre de résultats, rapports consolidés, graphes, etc.). Critères de comparaison Outil OpenSTA TestMaker JMeter Dieseltest Langage de script Support Max Tests multid’utilisateurs distribués protocoles En fonction SCL (Script HTTP/S de la OUI Control complexité languages)* du script et la mémoire de la machine Jpython HTTP, 300-800 OUI * HTTPS, SOAP JAVA http, FTP En fonction OUI de la complexité du script et la mémoire de la machine Fichier http 200 OUI (format ASCII) * Support technique Génération Pré-requis de rapports Disponible Automatique Windows XP Disponible Automatique JDK 1.6 ou plus Disponible Automatique Moins riche JVM 1.4 Automatique Internet explorer min version 5 IHM Simple et riche en fonctionnalités Simple et riche en fonctionnalités Simple et riche en fonctionnalités Moins riche en fonctionnalités Tableau 3.3 Comparatif des outils de tests de performances 2.4. Présentation et comparaison des outils d’exécution des builds Plusieurs outils d’exécution des Builds existent sur le marché. Parmi lesquels, Maven, Ant, Make/Script, Ivy et Gradle. Nous en présentons et comparons dans cette section Maven et Ant qui sont les plus privilégiés (40,83% et 38,2%) par les développeurs selon un sondage sur le site développez.com [15]. Ant est un projet open-source de la fondation Apache. Il repose sur un fichier XML (build.xml) qui est un ensemble de cibles (ou targets) ayant chacune un rôle bien précis dans la construction du projet (nettoyage de répertoires, initialisation, compilation et transfert de fichiers). Chaque cible est décomposée en un ensemble de tâches destinées à réaliser une opération particulière. Dans le même contexte, Maven permet de gérer les fichiers de ressources, compiler les sources Java, compiler et exécuter les tests unitaires, créer le fichier JAR du projet et déployer le JAR. Toutefois, il n'impose pas de créer un fichier XML décrivant précisément les tâches que l'on doit exécuter pour construire son projet. Il suffit seulement Projet de Fin d’Etudes Page 27 Chapitre III : Etude des composants de la plateforme IC et solution proposée 2011/2012 de décrire son projet dans un fichier pom.xml (Project Object Model) en spécifiant en particulier : l'endroit où se situent le code source et les fichiers de ressources, la version de Java utilisée pour compiler le code source, les dépendances directes du projet, les plugins utilisés et les rapports techniques demandés. Dans la suite, le tableau 3.4 présente les avantages et inconvénients des outils Maven et Ant. Outil Avantages Intégré dans la quasi-totalité des IDE Supporté nativement par les outils d'IC Large communauté d’utilisateurs De nombreuses tâches sont disponibles Facile à prendre en main, relativement intuitif Flexible Ant Maven 2 pom.xml raccourci Gestion des dépendances, en particulier les dépendances transitives Nombreux plugins disponibles Supporté par la majorité des outils d'IC Création facile de nouveaux projets grâce aux archétypes Inconvénients Complexité du script due à l'écriture non standardisée du XML Aucun mécanisme de gestion des dépendances Création complexe et répétitive d'un processus complet de création d'un artefact JAR ou WAR (compilation, tests, package...) Complexité d’utilisation dans d’autres environnements Complexité de définition des dépendances Utilisation excessive de plugins même pour des tâches simples Redondance dans le fichier XML Support des IDE imparfait Manque de souplesse (difficile de sortir du cycle de vie par exemple) Tableau 3.4 Avantages et inconvénients des outils de builds Maven et Ant Maven et Ant sont tous les deux développés par Apache et ne sont en effet pas des concurrents. Bien qu'ils aient des fonctionnalités communes, en se basant sur leurs avantages et inconvénients, nous constatons qu’il est préférable d'utiliser l’un ou l’autre selon le cas à traiter. Dans notre contexte, nous avons opté pour Ant vu qu’il peut facilement intégrer des outils de la plateforme IC dans le serveur d’intégration que nous avons adopté et que nous présentons plus loin. 3. Outils de suivi et qualification des performances La qualité logicielle ne réside pas uniquement dans le fait d’avoir un logiciel opérationnel, mais également dans l’évaluation par rapport à des objectifs mesurables de qualité. Notamment, la qualimétrie logicielle est la discipline qui vise à s’assurer qu’un code informatique est produit selon des normes établies et mesurables, dans l’optique de l’optimisation de la performance, de l’efficacité, de la sécurité et de la maintenabilité. La plupart des outils d’analyse logicielle sont des analyseurs statiques de code qui calculent des métriques pouvant contribuer à évaluer sa qualité. Ces métriques concernent principalement la capacité fonctionnelle (capacité des fonctionnalités à répondre aux Projet de Fin d’Etudes Page 28 Chapitre III : Etude des composants de la plateforme IC et solution proposée 2011/2012 besoins des utilisateurs), la fiabilité (performance des résultats indépendamment des conditions d’exploitation), la facilité d’utilisation, le rendement (rapport entre la quantité des ressources utilisées et la quantité de résultats délivrés), la maintenabilité (effort réduit de correction d’erreurs, de localisation de bugs et de transformation) et la portabilité (facilité de migration vers un nouvel environnement). De nombreux outils de qualimétrie existent sur le marché [16] et peuvent être distingués selon leur objectif spécifique. Nous en citons au niveau des tests unitaires, l’outil Cobertura. Celui-ci permet de vérifier si les tests unitaires établis sont suffisants et couvrent tous les aspects et parties du code. Au niveau d’analyse de code, nous citons Checkstyle, PMD et Findbugs qui peuvent être utilisés dans un contexte Java. Checkstyle permet de faire respecter des standards de codage précis. Il prévoit une liste assez complète de règles paramétrables (environ 130 règles) pour vérifier par exemple que les lignes n'excèdent pas une certaine longueur, que la Javadoc est bien présente et que les standards de nommage sont bien respectés. Il permet aussi d'améliorer l'écriture et la qualité de son propre code, en indiquant par exemple quelles expressions peuvent être simplifiées, quels blocs peuvent être supprimés et quelle classe doit être déclarée finale. Par ailleurs, PMD permet de scanner le code Java à la recherche de problèmes potentiels, tels que : les bogues possibles, les blocs de code vides, le code "mort" (méthodes privées ou paramètres non utilisés), les expressions lourdes, les mauvaises utilisations des opérateurs de boucles et les duplications de code. Quant à Findbugs, il apporte une analyse assez fouillée de programmes Java et permet de détecter des problèmes assez complexes. Il informe sur différents aspects tels que l’utilisation de vulnérabilités de certains bouts de code, la possibilité de perte de performances, la gestion du multithreading et les problèmes de sécurité. Par ailleurs, au niveau du reporting des résultats, l’outil Sonar se présente comme un serveur de contrôle de qualité logicielle, développé par la société Hortis. Il fournit une synthèse des résultats des différents outils de contrôle de qualité et d’analyse de code utilisés et permet d’évaluer la qualité globale du projet. L’ensemble des outils de qualimétrie cités précédemment n’ont pas les mêmes objectifs. Choisir l’un ou l’autre pour notre projet ne serait pas un choix adéquat. Ces outils sont en fait complémentaires et rien n’empêche de les utiliser tous en même temps. Toutefois, l’analyse des rapports générés par chaque outil risque d’être coûteuse en temps mais cela peut être évité par l’utilisation de Sonar qui donne une vue générale sur les différentes composantes du projet. Projet de Fin d’Etudes Page 29 Chapitre III : Etude des composants de la plateforme IC et solution proposée 2011/2012 4. Outils de gestion de bugs Un système de suivi de problèmes (issue tracking system) est un logiciel qui permet d'aider les développeurs à améliorer la qualité d'un logiciel à travers la gestion des bugs techniques, fonctionnels et liés au respect des règles de gestion (réglementation). Un composant majeur d'un tel système est une base de données qui enregistre les caractéristiques des bugs connus. Ces caractéristiques peuvent inclure le nombre de fois que le bug a été reporté, sa rigueur, le comportement problématique, et comment le reproduire ainsi que l'identité de la personne qui a reporté le bug et le programmeur chargé le résoudre. De nombreux outils de gestion de bugs existent sur le marché. Le tableau 3.5 [17] présente les caractéristiques principales de quelques uns parmi les plus connus sur le marché. Nom Éditeur Licence Langage de programmation Base de données Date création Dernière version B-Hive Bee Software Propriétaire PHP MySQL 2008 2012 Bontq Assembla Propriétaire Ruby MySQL 2008 Tuleap Enalean GPLv2 PHP MySQL 2004 2011, v. 4.0.22 Bugzilla Mozilla Foundation MPL Perl MySQL, Oracle, PostgreSQL 1998 2011, v. 4.1.1 Multiples Mantis Bug (Contributions GPLv2 Tracker Open Source) PHP ADOdb (MS SQL Server, MySQL, 2000 PostgreSQL…) 2011, v. 1.2.8 Plain Ticket Turbine interactive Propriétaire Java MySQL 2011 2012, v. 1.8 Redmine Jean-Philippe Lang GPLv2 Ruby on Rails MySQL, PostgreSQL, SQLite 2006 2011, v. 1.2.1 TRAC Edgewall Software BSD Python MySQL, PostgreSQL, SQLite 2006 2010, v. 0.12 Codendi Xerox GPLv2 PHP MySQL 2001 2011, v. 4.3 RC JIRA Atlassian Propriétaire Gratuit pour usage non commercial Java MS SQL Server, MySQL, Oracle,PostgreSQ 2003 L 2010, v. 4.4 Flyspray N.R. LGPL PHP MySQL, PostgreSQL 2003 2009, v. 0.9.9.6 The Bug Genie N.R. MPL 1.1 PHP MySQL, PostgreSQL 2002 2011, v. 3.0.1 Request Tracker Best Practical Solutions, LLC GPL Perl MySQL, Oracle, PostgreSQL, SQL 1999 ite Tableau 3.5 Caractéristiques des outils de gestion de bugs Projet de Fin d’Etudes Page 30 Chapitre III : Etude des composants de la plateforme IC et solution proposée 2011/2012 Pour notre projet, nous avons opté pour Jira. Il prévoit d’abord une licence gratuite. En outre, il peut interagir avec les outils SVN et Hudson qui servent respectivement à la gestion des versions et l’intégration, et ce par le biais du plugin Hudson JIRA qui facilite la communication entre le serveur d’intégration Hudson et l’outil de gestion de bugs JIRA. L’intégration de JIRA est facilitée par les utilitaires d’importation permettant d’effectuer une migration depuis d’autres outils de bugtracking tel que Bugzilla ou Mantis. 5. Serveurs d’intégration continue Il existe plusieurs serveurs d’intégration sur le marché. Toutefois, il n’y a pas de serveurs parfait ni de « meilleur serveur ». Cela dépend de l’environnement d’utilisation et de l’entreprise ou l’organisme cible. Le tableau 3.6 dresse une comparaison des solutions disponibles [18] selon un ensemble de critères particulièrement techniques et qui sont dans notre cas liés aux composants de la plateforme prévue. CruiseContr ol Open Source OUI Gratuit OUI Cruise NON Anthill Professional NON Version d’essai Pour les projets libres - 5 Nombre de développeurs actifs Support SCM : CVS OUI Anthill OUI OUI - Bamboo NON Pour les projets libres 4+ Hudson LuntBuild OUI OUI OUI OUI NON OUI OUI OUI Entre 5 et 10 étendu à 20 (plugins) OUI 3 OUI Support SCM : Subversion Builds parallèles OUI OUI OUI OUI OUI OUI OUI OUI OUI OUI NON OUI OUI OUI Builds distribués OUI via contrib OUI OUI OUI NON OUI OUI NON OUI OUI OUI OUI OUI OUI OUI OUI OUI NON OUI OUI OUI XML XML XML NON NON XML NON OUI OUI OUI OUI via la ligne de commande OUI OUI OUI NON OUI OUI OUI OUI OUI OUI Builds manuels forcés Authentification d’utilisateurs Fichier de configuration Support de ANT Support de MAVEN Tableau 3.6 Comparaison des serveurs d’intégration En se référant au tableau 3.6 et tenant compte des choix de technologies faites dans les chapitres précédents, à savoir l’outil de build Ant et l’outil de contrôle de versions Sahi, en plus du sondage établi par le site www.developpez.com [19] qui montre que Hudson est le plus utilisé parmi les serveurs d’intégration continue avec un pourcentage de 31,91%, nous avons opté pour ce dernier comme serveur d’intégration. En effet, Hudson possède un support pour Sahi et Ant [20] et se distingue par le nombre de développeurs qui peuvent Projet de Fin d’Etudes Page 31 Chapitre III : Etude des composants de la plateforme IC et solution proposée 2011/2012 travailler en parallèle et qui peut s’étendre jusqu’à 20. En plus, ce serveur est gratuit et est utilisé après authentification de ses utilisateurs. 6. Architecture logicielle de la plateforme proposée Dans les paragraphes précédents, nous avons survolé les différents composants d’une plateforme d’IC utilisés dans le marché et qui concernent les serveurs d’intégration et les outils de gestion et contrôle de versions, d’exécution des builds et tests automatisés, de suivi et qualification des performances et de bugtracking. En conclusion de l’étude faite de ces différents composants et compte tenu des choix des outils pour lesquels nous avons opté, nous présentons dans la figure 3.1 l’architecture logicielle globale de la solution proposée. L’orchestre de la plateforme est le serveur d’intégration Hudson qui est en mesure de communiquer avec tous les autres composants. Aussi, peut-il lancer des tests automatisés en appelant l’outil de builds et d’automatisation de tests (Ant), grâce à un ensemble de scripts qui sont configurés dans le serveur d’intégration et qui ont pour rôle de définir les tâches de build ou de test à exécuter. Hudson permet également de lancer les outils de tests (Sahi, JMeter et Junit) et de qualimétrie (Sonar). Il permet aussi d’effectuer un suivi des bugs en assurant la communication avec Jira, et d’assurer le contrôle de versions en faisant appel à SVN. Or la communication entre Jira et SVN est aussi obligatoire, vu que l’outil de gestion de build (Jira) doit avoir une traçabilité concernant les versions des projets. Ceci est dû au fait qu’un bug fait référence à deux versions de code : la première version contenant le bug et la deuxième version où la correction est apportée. Figure 3.1 Architecture de la solution logicielle de la solution proposée Projet de Fin d’Etudes Page 32 Chapitre IV : Implémentation de la plateforme IC 2011/2012 Chapitre IV : Implémentation de la plateforme IC La dernière phase de notre projet consiste en la mise en place de la solution logicielle présentée dans le chapitre précédant. Aussi, ce chapitre présente-il l’implémentation de la plateforme proposée d’intégration continue qui a consisté après installation de ses composants en leur configuration en tenant compte des paramétrages nécessaires et contraintes d’extensions. Nous décrivons ce travail en cinq volets relatifs aux fonctionnalités du processus d’intégration continue, à savoir le serveur d’intégration et les systèmes de gestion de versions, de test, de gestion de bugs et de qualimétrie. Projet de Fin d’Etudes Page 34 2011/2012 Chapitre IV : Implémentation de la plateforme IC 1. Configuration de serveur d’intégration Hudson Pour la configuration du serveur d’intégration Hudson, nous avons suivi trois étapes (voir Annexe B) : L’identification des chemins des composants de la plateforme : Etant donné que Hudson est l’orchestre de la plateforme d’intégration continue devant appeler ses différents composants, il était nécessaire de préciser les chemins de certains composants comme Ant et SVN à travers un écran spécifique et les autres composants à travers des plugins. La création de profils et attribution de rôles : Il était question à cette étape de créer d’abord quatre profils correspondant aux acteurs définis dans notre projet : l’administrateur, le développeur, le testeur et l’utilisateur DGI, ensuite d’autoriser les utilisateurs à s’inscrire et créer leurs propres comptes avant de définir leurs différents rôles. Le tableau 4.1 présente les rôles principaux correspondant à chaque profil. La création de jobs : Il s’agit de créer le nombre de jobs nécessaires correspondant aux différentes fonctionnalités attendues. Chaque job doit être défini principalement par un nom et un URL. Pour la gestion et contrôle de versions, à titre d’exemple, nous avons dû créer un job en précisant l’URL du repository et choisissant la méthode que nous souhaitons adopter pour le déclenchement des builds (périodique ou suite à une scrutation de l’outil de gestion de version par Hudson). Profil Machine esclave Configurer Admin Jobs Supprimer Créer Supprimer Configurer Lire Build Développeur Testeur Utilisateur DGI Consultation Gestion de versions Tableau 4.1 Profils et principaux rôle correspondant 2. Configuration et migration vers l’outil de gestion et contrôle de versions SVN La mise en place de l’outil de gestion et contrôle de versions SVN a consisté en quatre étapes : La migration de CVS vers SVN : Etant donné que le Service de Développement d’Applications au sein de la DGI utilisait avant l’outil CVS qui est une solution moins Projet de Fin d’Etudes Page 35 Chapitre IV : Implémentation de la plateforme IC 2011/2012 performante que SVN, il était nécessaire de migrer d’abord vers SVN au moyen de l’outil cvs2svn (voir Annexe D). La création des utilisateurs : Il s’agit d’enregistrer les utilisateurs concernés ainsi que leurs mots de passe cryptés dans un fichier "passwd" à créer dans le dossier svn. L’attribution des droits d’accès : Il est question de définir pour chaque utilisateur ses droits d’accès (en lecture seule, lecture et écriture, etc.) aux dépôts (repositories), et ce dans un fichier « authz ». La configuration des projets : Il s’agit de fournir dans un fichier de configuration « svnserve.conf » des détails sur le projet (nom de dépôt, utilisation de ssl, fichiers « authz » et « passwd »). 3. Configuration des tests nécessaires Dans cette section, nous donnons les détails de configuration et de réalisation des différents types de test prévus : unitaires, fonctionnels et de performance. 3.1 Automatisation et génération du reporting des tests unitaires La configuration de tests unitaires automatiques a nécessité deux étapes de configuration : la programmation des tâches de test au niveau d’un script Ant avec intégration de la librairie JUnit : Nous avons, notamment, dû programmer les différentes tâches de builds à exécuter tout en programmant également les tâches de tests unitaires nécessaires et en rajoutant la librairie JUnit parmi les librairies de Ant. La figure 4.1 illustre un exemple d’une tâche de test unitaire programmé au niveau d’un script Ant. L’intégration de JUnit au niveau de Hudson : Il s’agit de configurer le projet pour qu’il supporte les tâches Ant à exécuter lors du lancement d’un build et de configurer un plugin « Publish Performance test result report » pour que Hudson puisse localiser le fichier XML ou Html des résultats de JUnit. Suite à ces opérations, Hudson devient capable de lancer des tests unitaires automatiques et d’en générer également le reporting des résultats. La figure 4.2 illustre les résultats d’un exemple de test unitaire. Projet de Fin d’Etudes Page 36 Chapitre IV : Implémentation de la plateforme IC 2011/2012 Figure 4.1 Script d’automatisation d’une tâche de test unitaire Figure 4.2 Exemple d’arbre de résultats d’un test unitaires 3.2 Réalisation des tests fonctionnels a) Configuration des tests fonctionnels automatiques Pour la réalisation des tests fonctionnels, nous étions amenés à suivre deux phases : La configuration des tests au niveau de l’outil Sahi : Il s’agit d’enregistrer le scenario de test en question à travers la fonctionnalité « Record », créer un script (script.sah) qui va balayer les pages et exécuter les actions selon le scénario indiqué, remplacer les Projet de Fin d’Etudes Page 37 Chapitre IV : Implémentation de la plateforme IC 2011/2012 données de ce script par des variables et enfin construire des fichiers CVS contenant les jeux de données à considérer. L’intégration de Sahi avec Hudson : Pour ce faire, nous avons programmé une tâche au niveau de l’outil Ant en précisant l’URL de la liste des scripts Sahi à exécuter et les caractéristiques du navigateur (N° du port et type) et ensuite intégré les tests Sahi dans Hudson en appelant cette tâche. Cette opération permet de déclencher la tâche en question lors de l’exécution du build du code et d’obtenir par la suite le graphe des résultats du test. b) Exemple de test fonctionnel réalisé Dans cette section, nous présentons un cas de test fonctionnel que nous avons réalisé. Ce test concerne le transfert du contribuable. Pour le définir, nous avons respecté le cycle suivant : Analyse du besoin métier : A ce stade, en analysant le fait qu’un contribuable peut changer le lieu de ses activités et donc le secteur fiscal, nous avons conclu la nécessité de créer un acte de transfert lié à la fonction « Mise à jour Référentiel de contribuable » du module de gestion de contribuables. Spécifications fonctionnelles : A ce niveau, nous avons pu dégager le fait qu’un acte de transfert passe par trois étapes : la prise en charge de l’acte de transfert, sa validation et la validation de la réception du dossier physique. Identification des cas d’utilisation : Selon les spécifications fonctionnelles, trois cas ont été identifiés, à savoir : Création d'un acte de transfert, Validation de la réception d’un acte de transfert et Validation de la réception du dossier physique. Production du plan de test : A cette étape, nous avons défini l’ensemble des tests nécessaires tout en précisant les champs d’entrée de tests et le résultat attendu. Identification de l’emplacement du cas cible de test dans la structure fonctionnelle de l’application : suivant un modèle Top-Down dont les détails sont fournis dans l’annexe C, le cas cible de notre exemple de test est « Acte de transfert » qui est un cas d’utilisation de la fonction transfert d’un contribuable du module Gestion de contribuables faisant partie des assiettes traitées au niveau du projet SIT. Automatisation du test à exécuter : Pour pouvoir exécuter automatiquement le test défini, nous avons créé le script correspondant comme illustré dans la figure 4.3. Projet de Fin d’Etudes Page 38 Chapitre IV : Implémentation de la plateforme IC 2011/2012 Figure 4.3 Extrait du script d’un exemple de test fonctionnel 3.3 Réalisation des tests performances a) Configuration des tests de performance Pour définir et réaliser les tests de performance, nous avons suivi deux phases : La définition et configuration des tests au niveau de l’outil Jmeter : Il s’agit de définir la stratégie et plan des tests (identifier les objectifs, les cas d’utilisation ainsi que les métriques à superviser), préparer l’environnement des tests et les scénarios de tests et des données (configurer le plan de charge, développer et variablisier les scénarios de test) et enfin exécuter les tests pour obtenir les résultats et établir un diagnostic. L’intégration de JMeter dans Hudson : Pour ce faire, nous avons d’abord installé un plugin « Performance » disponible dans le gestionnaire de plugins avant d’invoquer une tâche Ant, chargée de corréler Hudson et JMeter, à travers un script. Ce script contient le répertoire de JMeter, la tâche devant déclencher les tests ainsi que le format souhaité des résultats de tests (html). Les rapports de performance (graphiques de temps de réponse et pourcentages d’erreurs) fournis par JMeter sont ainsi obtenus via Hudson. b) Exemple de tests de performance réalisés Dans cette section, nous présentons un exemple de tests que nous avons réalisés. Ce test Projet de Fin d’Etudes Page 39 Chapitre IV : Implémentation de la plateforme IC 2011/2012 concerne le module PVC (Programmation vérification contrôle) du projet SIT. Après avoir défini le périmètre métier de ce module, nous avons procédé à la définition et création des scénarios de tests correspondants avant de lancer leur exécution. Notamment, le module en question prévoit un processus de programmation qui permet de centraliser les demandes de vérification des contribuables. Il a pour objectif de maintenir une homogénéité en matière de gestion, traitement et suivi de la programmation des vérifications et d’offrir un système de sélection des dossiers à soumettre au contrôle fiscal. Pour choisir les scénarios de tests appropriés, nous avons utilisé des statistiques d'utilisation de l'application (voir Annexe C) pour découvrir les fonctions fréquentes ou critiques. La figure 4.4 illustre un exemple de scénarios de tests de performance du suivi de la programmation. La figure 4.5 illustre les résultats obtenus informant sur la moyenne et la valeur minimale et maximale du temps de réponse à l’ensemble des requêtes ainsi que le pourcentage de résultats marquant des erreurs. Figure 4.4 Exemple de scénario de test de performance Projet de Fin d’Etudes Page 40 Chapitre IV : Implémentation de la plateforme IC 2011/2012 Figure 4.5 : Exemple de résultats d’un test de performance 4. Automatisation de la gestion des bugs Pour automatiser la gestion des bugs, quatre étapes de configuration et paramétrage étaient nécessaires : La définition du workflow de résolution de bugs : A ce stade, comme illustré dans la figure 4.6, nous étions amenés à définir au niveau de l’outil Jira le flux de résolution des bugs entre les différents acteurs du processus d’IC, à savoir, l’utilisateur DGI, le testeur et le développeur. Notamment, lorsqu’une anomalie est détectée, l’équipe DGI la décrit précisément en formalisant la démarche à suivre pour reproduire l’anomalie (conditions d’apparition), les résultats constatés et les résultats attendus. Aussi, l’utilisateur DGI peut-il signaler l’anomalie au développeur qui se chargera de la corriger. Une fois le bug résolu, une vérification de la correction apportée sera effectuée Projet de Fin d’Etudes Page 41 2011/2012 Chapitre IV : Implémentation de la plateforme IC par le testeur et la résolution du bug sera clôturée par le développeur s’il y a satisfaction. Enfin, le bug peut être rouvert par l’utilisateur DGI le cas échéant ou s’il réapparaît de nouveau. Un bug passe en effet par quatre états : ouvert, en progrès (quand sa résolution est en cours), résolu et rouvert (si la correction n’est pas satisfaisante ou quand il réapparaît). Un bug résolu se trouve d’abord à l’état fixé (quand le développeur apporte les corrections nécessaires) puis non reproductible (quand le développeur ne peut pas reproduire le bug après les changements effectués) ou dupliqué (si le bug réapparaît après les changements effectués). Par ailleurs, au cours de la résolution des bugs, le développeur peut créer des dépendances entre les anomalies et l’ensemble d’acteurs peut visualiser l’historique des anomalies. Notamment, conserver une vision sur l’avancement du traitement des bugs, permet à l’équipe DGI de disposer d’indicateurs importants comme le nombre d’anomalies relevées (par lot de livraison ou par fonctionnalité) qui renseigne sur la qualité des réalisations, les délais moyens de correction qui donnent une indication sur la réactivité de la maîtrise d’œuvre, et les délais de clôture (mesurés entre la date de livraison de la correction et la clôture de l’anomalie) qui informent sur la réactivité de l’équipe de recette. Figure 4.6 Workflow de résolution des bugs Projet de Fin d’Etudes Page 42 Chapitre IV : Implémentation de la plateforme IC 2011/2012 La création d’un projet de gestion de bugs au niveau de Jira : Cela consiste à introduire un ensemble d’informations : détails du projet, types de demande, workflows définis, autorisations et notifications prévues, etc. Cette opération permet par la suite aux utilisateurs de créer des demandes de gestion des différents bugs. La configuration de communication entre Jira et Hudson : Pour ce faire, il a fallu d’abord introduire l’URL de Jira, l’utilisateur concerné et son mot de passe au niveau de Hudson, et ensuite, activer l’option accepter les appels d’API à distance dans la configuration générale de Jira pour que l’utilisateur désigné puisse se connecter à Jira à travers Hudson. Finalement, la mise à jour des notifications de Bugtracking de Jira devait être activée. La migration de l’outil Bugzila vers Jira : A cette étape, nous avons dû migrer de l’outil utilisé auparavant par la DGI pour la gestion de bug vers l’outil Jira. Plus de détails sur cette opération sont fournis dans l’annexe D). 5. Configuration des outils de suivi et qualification des performances L’audit du projet SIT, visant à relever les non conformités existantes du code, est effectué au sein de la DGI en ciblant deux volets : l’audit par échantillonnage fonctionnel et l’audit par outillage. Le premier type d’audit porte sur un échantillon de fonctionnalités critiques dans le but d’évaluer leur respect des règles métier de gestion et des contrôles de données permettant d’éviter des incohérences de celles-ci, et également la fréquence de leur utilisation qui ne doit par exemple pas déclencher plusieurs transactions quand un appel unique est suffisant. Le deuxième type d’audit procède par l’utilisation d’outils informatiques pour analyser le code en terme de respect de normes de codage, de non redondance, de non complexité, etc. Notre contribution s’inscrit au niveau de ce deuxième type d’audit. Nous avons notamment procédé à la mise place et configuration des différents outils de suivi et qualification de performance nécessaires, à savoir : Corbertura, PMD, Checkstyle et Sonar. Les détails de configuration de chacun de ces outils sont présentés ci-après. 5.1 Configuration de Corbertura pour l’évaluation des tests Corbertura est un outil qui permet d’évaluer un test effectué en terme de pourcentage de code source qu’il couvre. Il détermine quels fragments de code ou quelles méthodes ont été exécutés et fournit une mesure calculée en évaluant le rapport du nombre de lignes de code exécutées sur le nombre de lignes total du code source. Pour le configurer, nous avons procédé à: Projet de Fin d’Etudes Page 43 Chapitre IV : Implémentation de la plateforme IC 2011/2012 La programmation d’une tâche spécifique au niveau de Ant : Cette tâche permet, après instrumentation des classes compilées et exécution des tests unitaires, de générer des rapports sur le pourcentage de couverture de code par les tests effectués. L’intégration de Corbertura et Hudson : Cela a consisté à fournir l’URL de la tâche Ant programmée au niveau de Hudson. La figure 4.7 illustre un exemple de rapport de couverture de code généré suite au lancement d’un build. Figure 4.7 : Rapport de couverture de code source 5.2 Configuration du PMD pour l’évaluation du respect des règles de codage PMD est un outil qui permet de vérifier le respect d’un certain nombre de règles de codage. Pour le configurer, nous avons procédé à : La configuration d’un fichier XML de règles : Ce fichier XML contient un ensemble de règles dont chacune est l’implémentation du contrôle d’une convention. Nous citons par exemple la règle consistant à ce que tous les paquetages du projet commencent par net. Projet de Fin d’Etudes Page 44 Chapitre IV : Implémentation de la plateforme IC 2011/2012 L’intégration du PMD et Hudson : Pour ce faire, nous avons programmé une tâche Ant qui se charge de lancer PMD une fois qu’un Build est exécuté. La figure 4.8 illustre le script de la tâche Ant programmée. Figure 4.8 : Script d’une tâche Ant chargée de lancer PMD 5.3 Configuration de Checkstyle pour l’évaluation du respect de normes de développement Checkstyle est un outil qui permet de vérifier le respect d’un certain nombre de normes de développement. Comme illustré dans la figure 4.9, ces normes concernent la non duplication du code, l’import des classes et paquets, les conventions de nommage, la non complexité du code et sa longueur en terme de lignes. Pour l’intégrer avec Hudson, nous avons programmé une tâche Ant chargée de lancer Checkstyle une fois qu’un build est exécuté. La figure 4.10 illustre le script de la tâche Ant programmée. Figure 4.9 : Normes de développement vérifiées par Checkstyle Projet de Fin d’Etudes Page 45 Chapitre IV : Implémentation de la plateforme IC 2011/2012 Figure 4.10 : Script d’une tâche Ant chargée de lancer Checkstyle 5.4 Configuration de Sonar pour l’assurance qualité Les outils d’analyse statique de code (PMD / Checkstyle / Findbugs, etc.) permettent de contrôler le code source mais pas l’architecture applicative. Sonar s’avère un outil simple permettant de vérifier la qualité d’une application à un haut niveau d’abstraction en couvrant plusieurs aspects illustrés dans la figure 4.10. Il utilise en fait les différents outils d’analyse de code cités précédemment pour extraire les métriques de qualimétrie souhaitées. Figure 4.11 : Aspects vérifiés par Sonar Après son installation, nous avons suivi deux étapes pour le configurer : La programmation d’une tâche spécifique au niveau d’Ant : Cette tâche, dont le script est illustré dans la figure 4.11, permet de lancer Sonar suite à l’exécution d’un build. Projet de Fin d’Etudes Page 46 Chapitre IV : Implémentation de la plateforme IC 2011/2012 La configuration du plugin Sonar au niveau de Hudson : Cela a consisté à fournir les informations suivantes : l’URL du serveur sonar, l’URL de la base de données sonar et le nom et mot de passe de l’administrateur de sonar. Aussi, suite à l’exécution d’un build, serait-il possible de visualiser les résultats de test d’assurance qualité au niveau du tableau de bord de Sonar. Ces résultats, comme illustré dans la figure 4.12, sont représentés sous forme de chiffres et statistiques renseignant sur le nombre de lignes de code, le nombre éventuel de violations relevées, le nombre de duplications ainsi que le niveau de complexité du code. Par ailleurs, la nature des violations mineures ou majeures relevées serait également explicitée plus amplement à travers une section Violations Drilldown. Notamment, certaines erreurs détectées peuvent être visualisées comme illustré dans la figure 4.13. Figure 4.12 : Script d’une tâche Ant de lancement de Sonar Projet de Fin d’Etudes Page 47 Chapitre IV : Implémentation de la plateforme IC 2011/2012 Figure 4.13 : Exemple de statistiques d’assurance qualité générés par Sonar Figure 4.14 : Exemple de violations détectées par Sonar Projet de Fin d’Etudes Page 48 Chapitre IV : Implémentation de la plateforme IC 2011/2012 Ce chapitre rapporte en résumé les différentes étapes que nous avons suivies pour l’implémentation de la plateforme d’intégration continue, en particulier, la configuration des différents outils d’automatisation des tests fonctionnels et de performance, de gestion de bugs et de suivi et qualification des performances aussi bien que du serveur d’intégration. Il expose également des exemples de tests que nous avons réalisés et les résultats obtenus. Nous notons que l’implémentation de la plateforme d’intégration continue a constitué une tâche technique délicate. Sa complexité dérive du nombre et de la diversité des outils déployés. Projet de Fin d’Etudes Page 49 Conclusion 2011/2012 Conclusion et perspectives Une plateforme d’intégration continue peut considérablement contribuer à optimiser la qualité logicielle d’une application en rendant ses fonctionnalités plus fiables et performantes. Grâce à un processus automatique, elle peut également assurer un déploiement rapide et conforme aux délais des applications aussi complexes qu’elles soient. Notre projet de fin d’étude s’inscrit dans cette optique. Au terme de notre travail, nous avons pu définir et mettre en place une plateforme d’intégration continue. Cette plateforme assure des fonctionnalités d’automatisation de tests, de gestion et contrôle de versions, de gestion de bugs et de suivi et qualification des performances. Afin de mettre en place cette plateforme et après avoir établis une étude conceptuelle conforme au mécanisme standard d’intégration continue, nous avons été amenés d’abord à chercher et étudier un ensemble d’outils d’intégration continue existant sur le marché afin d’en choisir ceux adaptés aux besoins et contraintes de notre projet. Notre choix a porté sur les outils suivants : SVN, Ant, JUnit, Sahi, JMeter, Sonar, Jira et Hudson comme serveur d’intégration. Cette opération a été conclue par l’installation de l’ensemble de ces outils mais aussi l’établissement de paramétrages et configurations nécessaires pour assurer la communication entre ces différents outils. Par ailleurs, en vue de valider la performance de la plateforme proposée et mise en place, nous avons également procédé à la réalisation de certains tests. Ces tests ont ciblé un projet de développement réel au sein de la DGI, dans le but de couvrir toutes les phases d’intégration continue. Cependant, vu les délais accordés à notre projet, nous n’avons pas eu la possibilité de poursuivre des tests plus poussés. En conclusion, nous aimerions noter l’intérêt de ce projet qui d’une part, nous était d’une grande importance puisqu’il nous a permis de travailler sur des aspects aussi bien théoriques que techniques de l’assurance qualité et d’approfondir nos connaissances en gestion de projet et de conception de projets réels. D’autre part, nous pensons que ce projet apporte une solution qui contribuerait à l’amélioration de la qualité et la livraison rapide des applications développées au sein de la DGI. En perspective de ce travail, une période d’expérimentation de la plateforme mise en place est envisagée. Notamment, le projet SIT est un projet énorme avec un contexte métier assez complexe. Toute faille technique au niveau de la plateforme surgira des conséquences néfastes, d’où la nécessité de valider sa performance avant de généraliser son utilisation. Projet de Fin d’Etudes Page 50 Bibliographie 2011/2012 Bibliographie [1] Concepts d’UML. http://uml.free.fr/. Consulté le 16/02/2012. [2] Concepts de base du BPMN. http://www.omg.org/news/meetings/workshops/soa-bpmmda-2006/00-T4_White.pdf. Consulté le 18/02/2012. [3] Marc Chatton, « Intégration continue – concepts théoriques », Septembre 2010. [4] Document sur l’intégration continue. http://jfdidgeridoo.wordpress.com/2011/04/04/lintegration-continue/. Consulté le 20/02/2012. [5] Processus d’intégration continue. https://wiki.nci.nih.gov/display/Suite/The+Suite+2.0+Continuous+Integration+Architectu re. Consulté le 23/02/2012. [6] Comparaison entre les outils de gestion et contrôle de versions. http://betterscm.shlomifish.org/comparison/comparison.html. Consulté le 24/02/2012 [7] Pourquoi JUnit. http://www-igm.univ-mlv.fr/~dr/XPOSE2003/JUnit_tour/. Consulté le 26/02/2012. [8] Logiciels de tests fonctionnels. http://stackoverflow.com/questions/606550/watir-vsselenium-vs-sahi. Consulté le 28/02/2012. [9] Outils de tests de performance. http://fr.wikipedia.org/wiki/Test_de_performance#Acteurs_et_outils_du_march.C3.A9. Consulté le 02/03/2012. [10] Présentation de TesMarker. http://sourceforge.net/projects/testmaker/. Consulté le 04/03/2012. [11] Tutoriel d’utilisation de JMeter. http://blog.milamberspace.net/index.php/jmeter-pages. Consulté le 04/03/2012. [12] DieselTest. http://sourceforge.net/projects/dieseltest/. Consulté le 04/03/2012. [13] Lambert M. Surhone sous la direction de Mariam T. Tennoe. OpenSTA : Webserver Benchmarking, Apache Bench, Application Center Test. [14] Comparaison entre des outils d’exécution de tests automatiés. http://www.developpez.net/forums/d944207/java/edi-outils-java/tests-performance/outilstest-analyse-performance-charge-utilisez-pourquoi/. Consulté le 06/03/2012. Projet de Fin d’Etudes Bibliographie 2011/2012 [15] Comparaison entre des outils d’exécution de builds. http://linsolas.developpez.com/articles/java/outils/builds/. Consulté le 07/03/2012. [16] Fabrice Bellingard. Présentation des outils de qualimétrie open source pour Java. Club Qualimétrie. 2007. [17] Comparatif des outils de gestion de bugs. http://www.commentcamarche.net/forum/affich-2510371-outil-de-gestion-de-bugcherche-outil. Consulté le 08/03/2012. [18] Comparatif des serveurs d’intégration. http://confluence.public.thoughtworks.org/display/CC/CI+Feature+Matrix. Consulté le 08/03/2012. [19] Sondage des meilleurs serveurs d’intégration. http://www.developpez.net/forums/f1001/general-developpement/conception/usinelogicielle/integration-continue/. Consulté le 09/03/2012. [20] Hudson. http://linsolas.developpez.com/articles/hudson. Consulté le 09/03/2012. Projet de Fin d’Etudes Annexe A: Standard BPMN 2011/2012 Annexe A : Standard BPMN Un processus métier décrit un ensemble de tâches. Sa modélisation peut être définie comme la suite des activités métiers et du support d’information. Le Business Process Modeling Notation (BPMN) est une notation graphique standardisée pour la modélisation des processus d'affaires dans un workflow. Il constitue un standard récent adapté pour ce faire. Notamment, BPMN présente certains avantages par rapport à UML quand il s’agit de modélisation des processus métier. D’une part, il offre une modélisation technique des flux de processus qui est plus propice. D’autre part, il s'adresse en principe aux analystes business, alors qu'UML s'adresse plutôt aux développeurs pratiquant de la programmation objet. BPMN permet aussi de passer rapidement de la théorie à la pratique. En effet, une fois la modélisation d’un processus est validé par simulation, il est possible de générer l’exécutable opérationnel de ce processus. Nous présentons, dans le tableau ci-après, certaines notations de base utilisées dans BPMN : Type Nomenclature Signe Description Représente une tâche exécutée dans Activité un processus métier. Représente un fait qui peut Flows Evénement se déclencher lors d’un processus métier et qui peut causer un déclenchement Objects d’une autre activité. Passerelle (Gateway) Les passerelles sont des éléments de de contrôle de la séquence de flux d’activités. Sequence Flow Montre l’ordre dans lequel les activités seront menées. Message Flow Représente le flux de messages entre les entités. Association Connecteur s Projet de Fin d’Etudes Permet d’associer les informations et les artefacts avec les « Sequence Flow ». Annexe B: Configuration de Hudson 2011/20 12 Annexe B : Ecrans de configuration de Hudson Configuration d’outils à intégrer à Hudson Autorisation de l’inscription des utilisateurs Projet de Fin d’Etudes Annexe B: Configuration de Hudson Gestion des rôles de l’utilisateur « Admin » Exemple de création du job « projet SIT » Choix de l’option de déclenchement des builds Projet de Fin d’Etudes 2011/20 12 Annexe C: Scénarios de tests 2011/2012 Annexe C : Scénarios de tests 1) Les scénarios de tests fonctionnels du module Assiette : Référence libelle CMJ-CR-01 Création d'un acte de transfert avec toutes les conditions requises CMJ-CR-02 CMJ-CR-03 CMJ-CR-04 CMJ-CR-05 CMJ-VRT-01 CMJ-VRT-02 CMJ-VRDP-01 CMJ-VRDP-02 Création d'un acte de transfert manquant d'un ou plusieurs champs Création d'un acte de transfert en saisissant une date de déclaration antérieure à la date de transfert créer un acte de transfert pour un contribuable ne faisant pas partie des US de restriction du gestionnaire créer un acte de transfert pour un contribuable ayant un acte de transfert prévalidé Validation de la réception du transfert manquant d'un ou de plusieurs champs obligatoires Validation de la réception du transfert réussie Validation de la réception du dossier physique manquant d'un ou de plusieurs champs obligatoires Validation de la réception du dossier physique réussie Projet de Fin d’Etudes pré requis •Gestionnaire assiette •Contribuable faisant partie des US de restriction de l'utilisateur •Gestionnaire assiette •Contribuable faisant partie des US de restriction de l'utilisateur •Gestionnaire assiette •Contribuable faisant partie des US de restriction de l'utilisateur •Gestionnaire assiette •Contribuable ne faisant pas partie des US de restriction de l'utilisateur •Gestionnaire assiette •acte de transfert pré-validé •Contribuable faisant partie des US de restriction de l'utilisateur •Gestionnaire assiette •Acte de transfert pré-validé •Gestionnaire assiette •Acte de transfert pré-validé •Gestionnaire assiette •Réception de l'acte de transfert validé •Gestionnaire assiette •Réception de l'acte de transfert validé Annexe C: Scénarios de tests 2011/2012 2) Les scénarios de tests de performance du module Programmation : Domaines Scénarios Définition scénarios Gestion des propositions PGV-GE-CrP Création d’une proposition PGV-GE-CON Consultation d’une proposition PGV-GE-MODF Modification d’une proposition PGV-GE-TL Transfert d’un lot de proposition PGV-GC-CrC Création d’une connexion PGV-GC-MC-IC Modification des informations de la connexion( nom et description ) PGV-GC-MC-AP Modification de la connexion:Ajout de proposition avec lien de connexion PGV-GC-MC-SP Modification de la connexion: Suppression de proposition avec lien de connexion PGV-GC-CoC Consultation d’une connexion PVC-GM-CrM Création d’une monographie PVC-GM-CoM Consultation d’une monographie PVC-GM-SM Suppression d’une monographie PVC-GM-MM Modification des monographies Gestion des connexions Gestion des monographies Fiche de renseignement Suivi de la programmation Batch de chargement des données de la FR FR-GN Consultation de la fiche de renseignement PVC-SP-GS Génération des statistiques PVC-SP-OVA Ordres de vérification en attente (impression) PVC-SP-DV Dossiers de vérification (impression) Projet de Fin d’Etudes Annexe D: Migration des outils 2011/2012 Annexe D : Migration des outils L’intérêt de pouvoir effectuer la migration et de pouvoir conserver l’historique du travail réalisé sur le projet PVC. Un historique important vu que le projet s’est étalé sur une longue durée. Cette phase de migration doit permettre de conserver l’historique des commits et des versions précédentes du projet et pouvoir ainsi garder une trace exploitable des différentes manœuvres exécutées sur l’application. Le projet PVC dispose initialement du SCM (Source Configuration Management) CVS qui sert de référentiel pour les codes sources et les ressources de l’application. Son utilisation se fait à travers le plugin CVS dans l’IDE RAD. Pour la fonctionnalité de bugtracking, on passera de Bugzilla vers JIRA. Il faudra tenir compte alors de deux contraintes lors de cette migration : Migration CVS SVN : Cette migration doit pouvoir garder l’historique des modifications et les différentes versions stockées sur le référentiel central CVS. Migration Bugzilla JIRA : Pouvoir retrouver les différents compte crées à l’intention des utilisateurs et répertorier l’état et le parcours des bugs. 1. Déroulement de la migration de CVS vers SVN: CVS et SVN sont tous deux des SCM centralisés permettant de partager les sources d’un projet sur un serveur commun. Ces systèmes constituent donc le pilier principal d’un environnement d’intégration continue. La migration signifie donc de redéfinir le dépôt de référence de code source et l’historique des commits du projet d’un environnement vers l’autre. Pour cela nous serons amenés à utiliser l’outil cvs2svn qui permettra d’effectuer cette migration tout en garantissant la cohérence des données et la cohérence des référentiels et en passant par les étapes suivantes : Projet de Fin d’Etudes Annexe D: Migration des outils 2011/2012 1. copie des modules CVS dans un répertoire intermédiaire : $ cd /tmp/cvs $ mkdir newcvsrepo $ mkdir newcvsrepo/CVSROOT $ cp -r /tmp/cvs/oldcvsrepo/projetA newcvsrepo $ sudo svnadmin create --fs-type fsfs /var/svn/myproject 2. Création du fichier dump contenant les référentiel CVS : $ mkdir svndump; cd svndump $ cvs2svn --dump-only /tmp/cvs/newcvsrepo/projetAsudo cvs2svn --existingsvnrepos -s /var/svn/myproject /var/cvs/myproject 3. Créer le répertoire pour le projet : $ svn mkdir file:///home/svn/projetA -m "Ajout répertoire pour projetA" 4. Charger le dumpfile avec svnadmin load : $ cd /tmp/migcvs/svndump $ svnadmin --parent-dir projetA load /home/svn < cvs2svn-dump 2. Déroulement de la migration de Bugzilla vers JIRA: Bugzilla et JIRA sont deux outils de bugtracking. Ils répertorient les demandes sous formes de clés associes au projet. Afin de passer de Bugzilla vers JIRA, nous pourrons utiliser le plugin de migration installé dans JIRA. Il faut cependant respecter plusieurs contraintes pour que la migration puisse s’effectuer avec succès.A titre d’exemple, l’importateur JIRA Plugin nécessite que la base de données Bugzilla soit de type MySQL ou PostgreSQL. a. Avant de commencer, il faut sauvegarder les données JIRA. b. Dans le système Bugzilla, exécuter le bilan de santé de veiller à ce que les données soient sans erreur. c. Se connecter à JIRA en tant qu’ utilisateur avec une autorisation globale d’administration d. Afficher la page d'administration en cliquant sur le lien Administration dans la barre de navigation supérieure. Sur le panneau de navigation de gauche, cliquer sur système d'importation externe, puis sélectionner Bugzilla. e. Suivre les consignes de l’assistant d’importation. Projet de Fin d’Etudes Annexe D: Migration des outils f. Il faut aussi indiquer la connexion 2011/2012 à la base de données Bugzilla jdbc:mysql:host[:port]/databasename?parameters Enfin Après l’import il est possible d’ajouter de nouvelles entrées et informations dans JIRA. Projet de Fin d’Etudes