Le point sur la gestion de configuration - miniwebpage T. Jgenti
Transcription
Le point sur la gestion de configuration - miniwebpage T. Jgenti
Conservatoire National des Arts et Métiers, Paris Informatique, Réseaux, Systèmes et Multimédia Le point sur la gestion de configuration Mémoire d’examen probatoire, mai 2005 Thomas JGENTI Soutenance du Lundi 30 mai 2005 Jury Président : M. PRINTZ – Professeur ; Membres : Le point sur la gestion de configuration Table de matières Introduction............................................................................................................................... - 2 Définition ................................................................................................................................... - 3 Partie I – Problématique.......................................................................................................... - 4 Cycle de vie du logiciel..................................................................................................... - 4 Problèmes liés à la gestion de configuration................................................................ - 4 Partie II - Concepts et principes ............................................................................................ - 8 Contrôle du partage de données..................................................................................... - 9 Contrôle de version ......................................................................................................... - 13 Contrôle de configuration .............................................................................................. - 15 Contrôle de processus ..................................................................................................... - 16 Partie III - Outils logiciels ..................................................................................................... - 18 Marché des logiciels spécialisés .................................................................................... - 18 Outils commerciaux......................................................................................................... - 18 Outils du domaine public................................................................................................ - 22 Synthèse comparative ..................................................................................................... - 26 Partie IV - Mise en œuvre ..................................................................................................... - 27 Standards et recommandations..................................................................................... - 27 Bonnes pratiques.............................................................................................................. - 27 Exemple de mise en œuvre............................................................................................ - 28 Conclusion................................................................................................................................ - 30 Bibliographie ........................................................................................................................... - 31 Glossaire................................................................................................................................... - 32 Annexe I – Comparatif des logiciels dédiés à la GCL ....................................................... - 33 Annexe II – Liste de logiciels dédiés à la GCL.................................................................... - 34 - -1- Le point sur la gestion de configuration Introduction La gestion de configuration n’est pas un domaine nouveau, il existe depuis les débuts de l’informatique. Pourtant c’est une discipline trop souvent négligée ou mal connue. Destinée à améliorer l’efficacité et la qualité, en particulier au sein des projets logiciels, elle est parfois mise au second plan derrière les méthodes de gestion traditionnelles et les considérations purement techniques. Pourtant la gestion de configuration est le pont qui lie la gestion de projet avec les biens essentiels du projet – ses données. Loin d’être un fardeau, elle permet de garder la maîtrise et la trace de tous les changements survenus ou à venir durant tout le cycle de vie du projet. L’objectif de ce document est d’expliquer l’intérêt de cette gestion, de décrire ses principes, de comparer les solutions existantes et de montrer sa mise en œuvre. La première partie de ce document démontre l’intérêt de la gestion de configuration en étudiant les problèmes qu’elle permet de résoudre. En prenant le cas particulier de la gestion de configuration logicielle, des exemples concrets montrent que chaque projet, tôt ou tard, est amené à gérer ces problèmes, tels que les modifications simultanées, les développements multi plateforme, duplications de données et la double maintenance. La seconde partie introduit les notions propres à la gestion de configuration logicielle et définit ses aspects essentiels. Elle illustre les principes de gestion de ces différents aspects, tels que le contrôle de versions, le contrôle de configurations, le partage de données et le contrôle de processus. La troisième partie décrit et compare les outils logiciels dédiés à la gestion de configuration. L’étude porte sur les outils du commerce, tels que ClearCase ou Telelogic Synergy et les outils libres, comme CVS, Ant ou encore Bugzilla. Enfin, la dernière partie présente les recommandations issues des standards industriels, les bonnes pratiques et un exemple synthétique de la mise en œuvre de la gestion de configuration et de ses outils. -2- Le point sur la gestion de configuration Définition Tous les acteurs du domaine informatique ont leur propre définition de la gestion de configuration, qui n’est jamais réellement la même. En voici une donnée par l’auteur de ce document : La gestion de configuration est un ensemble de procédés qui permettent le contrôle de tout changement passé, présent ou à venir dans un système logiciel ou matériel. Cette définition très générale mérite quelques précisions car la gestion de configuration peut être vue sous plusieurs aspects. Ce document évoquera plus particulièrement la gestion de configuration logicielle (Software Configuration Management ou SCM en anglais) qu’il est possible de définir comme suit : La gestion de configuration, nommée GCL dans le cadre du développement "Logiciel", permet de connaître à tout moment l'état de l'ensemble des composants d'un projet en contrôlant les évolutions du logiciel durant la totalité de son cycle de vie. Cette définition à la fois concise et juste est une citation du site Internet dicodunet.com. Plus loin dans ce document le terme de gestion de configuration logicielle sera parfois présent sous forme abrégée : GCL. Bien que la gestion de configuration dépasse le seul cadre du développement logiciel, ce dernier permet de faire une analyse complète de ces aspects. Parmi les autres domaines d’application on peut citer la gestion de contenus (Content Management) ou encore l’élaboration de sites Internet, qui tend à rejoindre le développement logiciel. Enfin, il est possible de définir la GCL par ses principaux objectifs : • • • • • Contrôle des versions de données ; Partage et sécurité des données ; Contrôle des configurations des distributions de produits ; Traçabilité des problèmes et des modifications ; Gestion de tous ces points au sein d’un processus ; -3- Le point sur la gestion de configuration Partie I – Problématique Cycle de vie du logiciel L’objectif de cette partie est de démonter l’intérêt de la gestion de configuration en partant des problèmes qu’elle permet de résoudre. En effet, dans le cycle de vie d’un projet logiciel les premières phases sont loin des préoccupations de configurations ou de versions et concernent les spécifications du produit, la conception, les choix technologiques et l’organisation des ressources humaines. Figure 1 Recette Spécifications des besoins Conception générale Tests d’intégration Conception détaillée Codage Tests des modules Tests unitaires Figure 1 – Cycle de vie itératif du développement logiciel. Les étapes les plus concernées par la GCL sont en jaune En pratique la gestion de configuration touche surtout les développeurs, plutôt que les responsables. Si les premiers sont conscients d’un besoin latent de cette gestion, en règle générale ils favorisent néanmoins les aspects de conception et de codage au détriment des taches organisationnelles. Par conséquent, le rôle du responsable du projet est de mettre en place une politique de gestion de configuration avec les méthodes et les outils appropriés. La nécessité de la gestion de configuration se dévoile surtout dans les phases du milieu et de fin du cycle de vie logiciel et c’est pour cette raison elle se trouve souvent négligée par les décideurs. Pourtant, chaque projet logiciel, tôt ou tard, est amené à cette gestion, qu’elle soit planifiée ou non. Les chapitres suivants identifient les problèmes courants qui nécessitent cette gestion et ainsi démontrent son importance. Problèmes liés à la gestion de configuration Afin de mieux comprendre l’enjeu de la GCL il faut imaginer un projet contre-exemple : -4- Le point sur la gestion de configuration • • • • Où les fichiers se trouvent à un seul endroit et peuvent être accédés par tout le monde ; Qui n’est jamais sauvegardé et où tout changement est définitif ; Qui ne garde pas la trace des changements apportés et n’identifie pas leurs auteurs ; Qui ne possède pas de moyen de distinguer les versions du logiciel et leurs différences ; Un bon nombre de projets n’ayant pas planifié une gestion de configuration adéquate débute dans cet état et se heurte à des problèmes obligeant de mettre en place des solutions plus ou moins efficaces et à retarder le projet. Parmi ces aspects on peut citer : • • • • • Partage et modifications simultanées de données par plusieurs intervenants ; Double maintenance des ramifications de données ; Besoin de retour à un état antérieur stable du logiciel suite à une erreur ; Besoin de garder un historique des développements ; Contrôle et validation des ajouts et des corrections ; Les quatre premiers points sont des aspects bien connus et constituent ce que l’on pourrait appeler la gestion de configuration « traditionnelle ». Quant au dernier, il s’inscrit dans une logique orientée vers la gestion de processus ou de tâches qui complète la vision traditionnelle de la GCL et constitue la gestion de configuration au sens actuel de ce terme. Les paragraphes suivants détaillent ces problèmes que l’on rencontre dans tous les projets logiciels. Partage et modifications simultanées Le partage de données et la gestion des accès concurrents sont des problèmes bien connus dans les domaines tels que les bases de données ou les réseaux. Il en est de même dans le domaine du développement logiciel, où l’on parle plutôt de développement parallèle ou asynchrone. En effet rares sont les projets industriels ayant un seul développeur et dans l’immense majorité des cas plusieurs développeurs travaillent sur le même code source. Bien que leur travail est défini à l’avance en tant que tâches distinctes, les développeurs sont souvent amenés à intervenir sur les mêmes fichiers que leurs collègues. Ainsi des modifications simultanées peuvent-elles survenir sur deux copies du même fichier et il deviendra nécessaire de les fusionner lors de leur intégration dans le projet. Figure 2 Modification 1 Original Résultat Fusion Modification 2 -5- Le point sur la gestion de configuration Figure 2 – Exemple de fusion de modifications simultanées Pour cet aspect, le rôle d’un système de gestion approprié est avant tout de préserver la cohérence des données et de vérifier si un changement concurrent a eu lieu. La vérification et le cas échéant la fusion des cas simples peuvent être automatisées. Si une fusion automatique n’est pas possible, le système doit signaler un conflit qui devra être réglé manuellement. Les techniques employées par les systèmes de GCL sont détaillées dans la section Techniques de fusion des changements concurrents. Double maintenance Cette fois le problème est inverse : il ne s’agit plus d’apporter deux modifications différentes à la même donnée, mais d’apporter la même modification à plusieurs copies de la donnée. Les raisons de multiplier les copies des données du projet sont nombreuses : • Création d’une copie du projet correspondant à une version ; • Développements multi plate-forme avec des configurations spécifiques ; • Création d’une copie en vue de modifications spécifiques ne devant pas perturber le projet principal, etc. Ainsi chaque copie est faite en raison d’une spécificité et constitue une configuration différente. Pourtant si l’on considère l’ensemble des données dupliquées, ces copies sont fortement redondantes. V1.0.1 V1.0 figée Double correction ! Copie V1.0 V1.1 Dév. V1.1.1 Dév. Figure 3 – Double maintenance des ramifications Exemple : Une version du logiciel vient d’être terminée et une copie du projet est faite afin de figer cette version dans l’état. Les développements d’une prochaine version sont en cours lorsqu’un grave problème de fonctionnement vient d’être signalé par les utilisateurs de la version livrée. Une correction doit être apportée à la version qui venait d’être figée, mais aussi à la version en préparation ! Figure 3 Afin d’éviter la perte de temps et tout risque d’erreur induits par la double maintenance, un système de GCL doit gérer les ramifications, que l’on appelle des branches. Dans le cas de développement multi plate-forme le problème est similaire, car même si le code source est entièrement portable, la construction du fichier binaire exécutable est spécifique à chaque plate-forme. Ces spécificités sont aussi des configurations dont il faut gérer les redondances. Figure 4 -6- Le point sur la gestion de configuration Debug Debug WinXP Debug WinXP WinXP Source Debug SunOS Produit Linux Produit WinXP Produit SunOS Figure 4 – Configurations différentes pour le même code source, selon les plates-formes et les paramètres. Historique des versions Nous venons de voir le problème que pose une copie des données afin de protéger l’état d’une version. Pourtant l’intérêt d’une telle copie est de pouvoir revenir à un état stable. Il n’est pas rare dans un projet de devoir revenir à un état antérieur au développement courant, que ce soit pour intervenir sur une version précédente, mais aussi pour défaire un développement qui s’est avéré erroné et bloquant. Aussi, une simple copie figée d’une version antérieure ne suffit pas dans ce dernier cas. Idéalement il faut pouvoir défaire tous les changements apportés un par un et pour ce faire il est nécessaire d’archiver chaque modification et pourvoir retracer ces modification grâce à un historique explicite. En résumé, dans ce cas les besoins sont : • Archiver les versions majeures du logiciel ; • Archiver toutes les versions des sources intermédiaires, chaque version étant un changement dû à une fonctionnalité ; • Garder un historique de ces versions et pouvoir retracer tous les changements ; Souvent le terme de gestion de configuration est confondu avec celui de gestion de versions, car il s’agit d’un principe essentiel. Pourtant la GCL ne doit pas être réduite à ce seul aspect. Contrôle et validation des modifications Si la gestion de configuration aide à résoudre certains problèmes courants du développement logiciel, il s’agit également d’une méthode de travail qui s’inscrit pleinement dans le cycle de vie d’un projet. Ainsi un système de GCL peut non seulement archiver les modifications, mais également permettre leur planification et contrôler le processus entier de développement. L’organisation et la planification du projet doivent concorder avec les modifications apportées. Le responsable du projet doit pouvoir les affecter aux développeurs suivant une priorité, contrôler leur exécution et les valider. -7- Le point sur la gestion de configuration Partie II - Concepts et principes Avant de détailler les différentes techniques utilisées dans la gestion de configuration, il faut connaître certaines notions et termes consacrés à ce domaine : Anglais : Français : Description : Workspace Espace de travail Espace local où le développeur travaille sur une copie privée du projet. On parle également de « espace de travail privé » car il existe autant d’espaces que de développeurs. Repository Dépôt Espace sécurisé et commun au projet, où sont archivées toutes les données gérées par le système de gestion de configuration. Le terme anglais repository est le plus souvent utilisé. Ligne de développement représente les états successifs du Ligne de Line of development ; développement projet dans le temps. Codeline Branch Branche Les branches sont les ramifications des lignes de développement du projet. Exemple : branche principale de développement et branche test d’une version. Check-out ; Export Export Il s’agit d’exporter les données du projet depuis le repository vers un espace de travail. Le plus souvent ce terme désigne la création de l’espace de travail privé qui est ensuite mis à jour. Update Mise à jour Mise à jour de l’espace de travail privé avec le repository. Il s’agit de récupérer les modifications apportées par les autres développeurs. Check-in ; Commit ; Import Import Import des modifications apportées localement dans un espace de travail dans le repository, par opposition à update. Le terme anglais commit est généralement utilisé. Merge Fusion Fusion de la donnée de référence contenue dans le repository avec une modification locale en vue d’un commit. Conflict Conflit Conflit engendré par l’impossibilité d’une fusion automatique. Les conflits doivent être résolus avant d’effectuer un commit. Version ; Revision Version Le terme version ou révision est souvent appliqué à chaque entité individuelle du repository et non seulement au projet dans son ensemble. -8- Le point sur la gestion de configuration Contrôle du partage de données Principe du Repository La notion de dépôt, plus couramment appelé repository, est essentielle dans un système de gestion de configuration, car il s’agit de l’emplacement où le système archive toutes les données du projet. Lors de la mise en place du système de GCL le repository est initialisé à partir d’une version initiale du projet importée depuis un espace de travail. Les données du repository peuvent ensuite être exportées vers les espaces de travail d’autres développeurs. Ainsi se met en place un partage de données du projet avec le dépôt commun. Architectures de partage de données Le repository se trouve de manière générale sur un disque ou un serveur ayant un accès sécurisé et doit être sauvegardé régulièrement. Le partage doit être possible via le réseau afin de permettre aux personnes éloignées géographiquement de travailler sur le même projet. Le repository peut être centralisé ou distribué sur plusieurs serveurs. Dans ce dernier cas le système doit assurer la synchronisation de toutes les copies du repository. L’avantage des dépôts distribués est d’éviter le risque de perte de données grâce à la duplication, mais l’inconvénient est d’exiger un système plus complexe à concevoir. Serveur Serveur Local repository 0 B workspace 1 C Réseau repository Réseau Réseau repository 1 repository 2 repository 3 workspace 2 workspace 3 workspace 1 repository 2 repository 3 workspace 2 workspace 3 local Local A repository 1 workspace 2 workspace 3 workspace 1 Figure 5 – Exemple de topologies mises en œuvre pour le partage des données. La Figure 5 illustre trois stratégies de mise en œuvre de repository partagé : A. repository centralisé avec l’architecture client/serveur. C’est une technique classique que l’on retrouve dans la plupart des systèmes, exemple : système de gestion de version open source CVS ; B. repository distribué avec l’architecture client/serveur ; C. repository distribué avec l’architecture peer-to-peer (P2P), architecture plus récemment adoptée par quelques systèmes open source, tels que Monotone ou Darcs ; -9- Le point sur la gestion de configuration Prise en compte des changements Pour qu’un changement fait dans un espace de travail local soit pris en compte par le projet, il doit être importé dans le repository. Idéalement les imports et les mises à jour doivent rendre la fusion des modifications transparente et ne demander une fusion manuelle que dans des cas de conflits. Il ne s’agit pas uniquement d’un confort d’utilisation, mais d’une garantie de la préservation des changements. En effet avec certains systèmes l’utilisateur doit mettre à jour son espace de travail avant d’importer ses changements, faute de quoi les modifications contenues dans les repository peuvent être écrasées ! Par conséquent, il est important de connaître le comportement exact d’un outil de gestion de changements. Lors d’une synchronisation de l’espace de travail avec la base commune, le système de gestion compare les fichiers locaux avec leurs versions de référence contenues dans le repository. Les quatre cas suivants peuvent alors survenir : Résultat de comparaison : Action à entreprendre : • Les deux fichiers sont identiques Aucune Aucun changement à importer. • Le fichier du repository est une version plus récente que le fichier local Mise à jour Le fichier local peut être mis à jour avec les modifications contenues dans le repository. • Le fichier local est plus récent que celui du repository Import Les modifications locales doivent être importées. • Le fichier local a été modifié, mais celui du repository est une version plus récente. Mise à jour (selon les outils) Fusion Import Avec certains outils, tels que CVS, le fichier local doit d’abord être mis à jour, puis les modifications contenues dans les deux fichiers doivent être fusionnées avant d’être réimportées dans le repository. D’autres outils importent et fusionnent les changements de manière transparente et ne signalent que des conflits survenus. Figure 6 illustre ces différents cas de synchronisation avec le repository. A noter que le système doit gérer les accès concurrents en lecture et en écriture et bloquer l’accès à une ressource durant sa mise à jour. Il doit également permettre un retour en arrière en cas d’échec d’une mise à jour du repository suite à un import. - 10 - Le point sur la gestion de configuration Local = Repository Local = Local Mise à jour Repository Repository Local = Import Repository Repository Local = Import Fusion Repository Repository Local Synchronisation : Mise à jour Fusion Import Repository Figure 6 - Prise en compte des changements entre l'espace de travail local et le repository Techniques de fusion des changements concurrents Le système de gestion doit identifier les différences entre deux fichiers afin de pouvoir les comparer et les fusionner. Il existe plusieurs algorithmes de différentiation de fichiers texte (la fusion des fichiers binaires n’a souvent pas de sens). L’un des algorithmes les plus répandus est celui de la commande UNIX diff qui compare deux fichiers ligne par ligne et donne les indications sur les lignes qui diffèrent. Une variante de cet algorithme est diff3, capable de différencier trois fichiers : fichier du repository avant changement, fichier du repository modifié et le fichier local. La fusion utilisant ces trois versions de fichiers est appelée « 3-way merge ». L’avantage de 3-way merge est de prendre en compte la version de référence avant changement, ce qui permet de vérifier si une même ligne ou un bloc de lignes a été modifié des deux côtés, dans quel cas il s’agit d’un conflit, ou bien si une fusion automatique est possible. La fusion automatique n’est sure que lorsque les deux modifications concernent deux parties complètement différentes du fichier, or comment un système automatisé peut-il détecter cela ? Les algorithmes utilisent les techniques suivantes, de la plus prudente à la plus optimiste : • Comparaison ligne par ligne et détection de blocs de lignes différents (diff, diff3) ; • Comparaison de lignes ou de caractères avec une analyse sémantique du fichier ; • Comparaison caractère par caractère et détection de blocs de caractères différents (kdiff3) ; - 11 - Le point sur la gestion de configuration Bien que la dernière technique soit assez simple et permet une fusion automatique plus souple, celle-ci peut générer un résultat sémantiquement absurde et devra supporter une correction manuelle. Version de référence Modification 1 Modifications 2 Le résultat de fusion automatique : incohérence sémantique !!! Figure 7 - Pièges de la fusion automatique (l’illustration utilise le logiciel kdiff3) La figure ci-dessus illustre un piège de la fusion automatique « optimiste » : bien que celle-ci semble réussie, l’algorithme n’a pas été capable de détecter l’appel redondant à la méthode drawCat, ce que les développeurs n’envisageaient visiblement pas. De plus, l’énumération de switch/case est devenue incohérente ! L’analyse sémantique des fichiers demande au système de connaître les spécificités des langages de programmation, ce qui est très difficilement envisageable. De ce fait l’approche de diff3, avec des améliorations parfois apportées, est utilisée dans la plupart des systèmes actuels. Bien que les conflits non résolus automatiquement soient plus nombreux dans ce cas, le contrôle humain des conflits assure la cohérence finale des données. Figure 8 Version de référence Modifications 1 Modifications 2 La fusion automatique n’est pas possible : Conflit de fusion Figure 8 - Exemple de conflit ne pouvant être résolu automatiquement - 12 - Le point sur la gestion de configuration Contrôle de version Les données contenues dans un repository ne sont pas une simple copie des données de l’espace de travail. Il s’agit des archives possédant les informations sur chaque version permettant de recréer dans un espace de travail une image exacte du projet d’une version donnée. Le contrôle de version peut intervenir à plusieurs niveaux : • Fichiers ; • Arborescences ; • Changements de nom de fichiers ou de répertoires ; • Branches ; Versions de fichiers L’archivage des versions de fichiers peut être réalisé de manières suivantes : • Copie intégrale du fichier pour chaque version ; • Incrémentale : où soit la première, soit la dernière version est archivée plus les différences (deltas) dues aux modifications successives, Figure 9 ; L’intérêt de la première méthode est dans sa simplicité, mais la méthode incrémentale est bien plus performante en termes de taille d’archive obtenue. Cette dernière est couramment utilisée dans la plupart des systèmes existants afin de gérer les fichiers de type texte, car la difficulté qui réside dans cette méthode est de détecter les différences entre deux versions de fichiers binaires. Ainsi certains systèmes ne peuvent gérer efficacement les versions des fichiers binaires, ou bien archivent des copies intégrales de ces fichiers, ce qui tend à augmenter la taille du repository à chaque commit de tels fichiers. Archivage intégral Archivage incrémental Version initiale 1.0 b = b++ a = c++ c = 1 ; ; b + c ; ; b = b++ a = c++ c = 1 ; ; b + c ; ; Version 1.1 Ajout à la ligne 4 b = b++ a = b = c++ c = 1 ; ; b + c ; b + a ; ; Ligne4 << b = b + a ; ->> Version 1.2 Suppression à la ligne 2 b = a = b = c++ c = 1 ; b + c ; b + a ; ; Ligne2 << -b++ ; >> Figure 9 - Exemple de méthodes d'archivage de versions : intégral et incrémental. La syntaxe des incréments est similaire à celle de la commande UNIX diff. - 13 - Le point sur la gestion de configuration Par souci de clarté, l’exemple de la figure ci-dessus montre l’archivage incrémental à partir de la version initiale. Cependant afin d’améliorer la performance d’accès aux données, les systèmes privilégient souvent d’archiver la dernière version dans son intégralité et de garder les différences en tant que décréments. Versions des tâches Certains systèmes, orientés vers la gestion de tâches, permettent d’archiver chaque changement apporté de manière atomique et indépendante. Ainsi il est possible non seulement de revenir vers une version dans le temps, mais aussi de retirer un changement particulier sans affecter les changements ultérieurs indépendants. En cas d’interdépendances des changements, toutes les taches dépendantes seront également retirées. Le système peut vérifier les dépendances grâce à une arborescence de changements, appelée également la théorie de patches. Gestion des arborescences et des changements de noms Afin que la configuration d’une version donnée, récupérée depuis le repository, soit fidèle à son état original, il est indispensable que le système de gestion de versions puisse conserver la trace de tous les changements intervenus dans la structure de l’arborescence des fichiers et restituer l’arborescence exacte correspondant à cette version. Ces changements ne concernent pas uniquement des ajouts ou des suppressions, mais aussi les changements des noms de répertoires ou de fichiers. Un bon système doit être capable de garder la trace d’une même entité au cours de toute la ligne du développement, même si celle-ci avait été renommée entre deux versions. Branches Les branches sont des ramifications de la ligne de développement principale (tronc principal) qui sont le plus souvent liées à la livraison d’une version majeure du logiciel. Les méthodes d’archivage des branches sont identiques à celles des versions de fichiers ou d’arborescences. A noter que le système doit également permettre et gérer la fusion d’une branche avec le tronc principal. Figure 10 Branche TEST V1.0 TEST V1.0.1 TEST Fusion Corrections Ligne de dév. V1.0 V1.1 V1.1.1 Figure 10 – Exemple de ramification et de fusion de branche - 14 - Le point sur la gestion de configuration Contrôle de configuration Les configurations qu’un système est amené à gérer ne sont pas uniquement les versions dans une ligne de développement temporelle, mais également toutes les configurations du projet qui peuvent exister en parallèle dans une même version et une même branche. Exemple : configurations liées au plates-formes différentes, ou bien configuration de déboguage et configuration de livraison (release). Les buts d’un système de contrôle de configuration sont : • Contrôler les dépendances entre les données du projet ; • Contrôler les dépendances avec l’environnement de la plate-forme de développement ; • Contrôler les paramètres et le déroulement de la génération automatisée des données : compilation des fichiers sources, génération de la documentation etc. ; • Contrôler les paramètres de l’édition des liens avec les données extérieures au projet ; Dans la majeure partie des cas les outils qui gèrent ces configurations sont spécifiques et différents des gestionnaires de versions. Ainsi, en particulier pour les systèmes UNIX, l’outil Make est souvent utilisé, avec des variantes et améliorations telles que gmake (GNU Make), imake ou encore configure. Construction d’exécutables multi plate-forme Source bl .cpp Configurations : Makefiles, scripts, build.xml, .dsp etc. Plates-formes : SunOS Linux Win32 Figure 11 –Configurations d'un projet multi plate-forme Le principe de fonctionnement de Make illustre bien la technique de construction d’exécutables. Ce principe est basé sur un ensemble de règles qui permettent la compilation, l’édition des liens et d’autres étapes nécessaires à la construction de l’exécutable à partir d’un code source. Ces règles sont contenues dans les fichiers appelés Makefiles. Il existe plusieurs manières possibles afin de construire des programmes exécutables sur des plates-formes différentes : • Placer les paramètres correspondant à ces plates-formes dans des règles séparées du même Makefile ; • Placer ces paramètres dans des Makefiles séparés (Figure 11) ; - 15 - Le point sur la gestion de configuration • Créer une Makefile avec des règles génériques et utiliser des fichiers de configuration séparés ; La première solution a l’inconvénient de devenir peu compréhensible et inutilisable avec un projet de taille importante. La dernière solution a l’avantage de mieux limiter le problème de double maintenance que la seconde, mais peut être plus complexe à mettre en place. Environnements de développement intégrés Les environnements de développement intégrés (Integrated Development Environment ou IDE en anglais), tels que l’environnement open source Eclipse d’IBM (eclipse.org) ou encore Microsoft Visual Studio, proposent également des outils de gestion de ce type de configurations. Leur principe de fonctionnement interne qui reste similaire, sinon identique, à celui des Makefiles. Paramètres de la configuration Debug Configurations : Debug et Release Figure 12 – Exemple d’interface de paramètres du projet de Microsoft Visual C++ 6 L’avantage de ces outils est leur convivialité grâce aux interfaces utilisateur graphiques (Figure 12) qui facilitent le travail des développeurs et limitent le risque d’erreurs. Cependant, comme dans l’exemple de Microsoft Visual Studio, ces outils sont parfois restreints à une seule plateforme de développement. Contrôle de processus Planification et gestion de processus L’approche de gestion de processus tend à concilier la planification du projet avec la gestion de versions et de configurations. Il s’agit de planifier les modifications à apporter au projet, à les identifier clairement en tant que taches du projet et à les assigner aux développeurs concernés. Cette approche rend la gestion de versions plus efficace est plus claire, car elle évite aux membres du projet d’apporter des changements non structurés ou désordonnés. Les points importants de la gestion de processus sont : • Définition et assignation des taches (groupes de modifications) ; • Différentiation des changements planifiés et des requêtes de modification ; • Classement et validation des requêtes de modification ; • Vérification et validation des changements apportés ; - 16 - Le point sur la gestion de configuration • • • Planification et validation des versions majeures (releases) ; Validation des versions de patches correctifs ; Propagation des corrections entre les branches du projet ; Traçabilité de requêtes de modifications Les requêtes de modification se distinguent des taches planifiées, car elles doivent d’abord être traitées : étudiées puis validées ou non. Il s’agit le plus souvent des requêtes de maintenance qui proviennent des utilisateurs ne faisant pas partie du projet. A ce titre elles nécessitent une gestion spécialisée, car constituent des taches parallèles au développement. Cette gestion doit offrir une traçabilité des requêtes aux responsables du projet, mais également aux initiateurs, voire à tous les utilisateurs. La prise en compte des requêtes de maintenance intervient essentiellement dès les premiers tests du produit et ensuite durant tout son cycle de vie. Pour chaque requête l’on doit garder la trace des paramètres suivants : • La version du produit concernée ; • La configuration concernée (plate-forme) ; • Les fonctionnalités concernées ; • La priorité de la modification corrective ; • Le membré du projet chargé d’effectuer la modification ; • Statut de la requête : confirmée, assignée, en cours, résolue, validée (fermée). Figure 13 ; Figure 13 – Cycle de vie d’une requête de maintenance. - 17 - Le point sur la gestion de configuration Partie III - Outils logiciels Marché des logiciels spécialisés L’étendue des solutions logicielles existantes sur le marché actuel est importante. Il n’existe pas moins de huit éditeurs de logiciels proposant des outils commerciaux et une multitude de projets de logiciels libres, dont le très répandu CVS. Si les premiers tendent à fournir des solutions complètes pour des projets de grande envergure, les seconds offrent des outils efficaces et accessibles, mais souvent moins complets ou bien dans des phases de développement prématurées (versions bêta). Le marché professionnel subit d’importants changements liés aux opérations de rachats ou de fusions des sociétés. C’est ainsi que le produit Rational ClearCase est édité aujourd’hui par la société IBM, que le logiciel PVCS de la société Merant est devenu ChangeMan de la société Serena suite à un rachat de même que le logiciel Continuus/CM est devenu Synergy de la société Telelogic. Parmi les projets de logiciels libres, également appelés open-source, CVS reste en tête depuis plus de dix ans d’existence, mais il existe au moins une dizaine d’alternatives sérieuses apparues plus récemment. Aujourd’hui le site Internet des projets open-source sourceforge.net recense près de 500 projets qui touchent de près ou de loin à la gestion de configuration ! Outils commerciaux Les paragraphes suivants présentent les outils commercialisés par quelques acteurs majeurs du domaine de la GCL. Leur étude se base sur des comparatifs et les caractéristiques éditeur. IBM Rational ClearCase Le produit ClearCase, d’abord commercialisé par la société Atria Software, puis par Rational Software racheté en 2003 par IBM se positionne comme une solution de gestion de configuration complète depuis plus de dix ans. Avantages : • Contrôle de version avec gestion complète du renommage et des arborescences ; • Contrôle de configuration intégrant la construction des exécutables ; • Multi plate-forme ; • Produit mature, existe depuis plus de dix ans ; • Interface graphique ; • Intégration dans les IDE : Microsoft .NET, IBM WebSphere et Eclipse (initialement projet opensource d’IBM); Inconvénients : • Exige d’importantes ressources matérielles et une administration accrue ; • Fonctionnalité de travail sur plusieurs sites géographiques est une option : ClearCase MultiSite ; • Exige ClearQuest pour être une solution de GCL réellement complète (gestion d’activité et de traçabilité) ; • Prix de la solution complète ; Ce logiciel propose le contrôle de version et de configuration avec une approche traditionnelle (check-in/check-out). Afin de disposer de fonctionnalités de traçabilité des requêtes et de contrôle de processus, ClearCase doit être complété par un autre outil de la gamme : ClearQuest. - 18 - Le point sur la gestion de configuration ClearCase est basé sur le modèle client/serveur avec un repository unique fonctionnant avec une base de données sur un serveur dédié. Enfin, il est proposé sur la majorité des systèmes Unix (AIX, HP-UX, IRIX, Solaris), Linux et Windows. Serena ChangeMan Anciennement connu sous le nom PVCS de la société Intersolv, puis de la société Merant, rachetée en 2004 par Serena Software, ChangeMan est une gamme de logiciels dédiés à la GCL. Les outils de la gamme : Version Manager (gestion de versions), TeamTrack (traçabilité des changements) et Builder (gestion de configuration) constituent une offre similaire à ClearCase d’IBM. Mais à l’instar de ce dernier, l’offre commerciale de Serena propose des options pour obtenir une solution complète. Ainsi le produit Dimensions est indispensable pour bénéficier d’une approche de gestion de processus. Techniquement il s’agit d’une architecture client/serveur avec un repository sécurisé sur un serveur dédié. Existe pour la plupart des plates-formes UNIX, Linux et Windows (dont les systèmes 64bits). Le repository peut être distribué avec l’intégration de ChangeMan/DS. Avantages : • Contrôle de version complet (renommage, arborescences, fusion améliorée) grâce au module Version Manager; • Contrôle de configuration intégrant la construction des exécutables avec Builder; • Traçabilité des requêtes avec le module TeamTracker ; • Multi plate-forme ; • Technologie mature ; • Interface graphique ; • Intégration dans les IDE : Microsoft .NET et Eclipse ; Inconvénients : • Solution lourde visant des projets d’envergure, qui exige d’importantes ressources matérielles ; • Offre commerciale très complexe et fragmentée, obligeant d’acquérir plusieurs modules séparés afin d’obtenir une solution complète coûteuse ; • Exige un produit complémentaire pour un déploiement distribué (ChangeMan/DS) ; • Exige un produit complémentaire pour la gestion des processus (Dimensions) ; • Prix de la solution complète ; Telelogic Synergy Synergy est également une gamme d’outils destinée à la gestion de configuration, anciennement connue sous le nom de Continuus/CM de la société Continuus, rachetée en 2000 par Telelogic. Contrairement à ClearCase, Synergy utilise directement une approche orientée gestion de processus. Chaque changement est associé à une tache assignée à un développeur. A noter que Synergy propose une intégration avec Microsoft Project. L’architecture est similaire à ChangeMan avec un repository contenu dans une base de donnée et l’approche client/serveur. Tout comme pour ChangeMan/DS, le repository peut être distribué avec l’option Synergy/Distributed CM. - 19 - Le point sur la gestion de configuration Avantages : • Approche orientée gestion de tache et gestion de processus ; • Contrôle de version complet ; • Contrôle de configuration intégrant la construction des exécutables avec le module Synergy/CM Object Make ; • Multi plate-forme ; • Technologie mature, plus de dix ans d’existence ; • Interface graphique ; • Intégration avec : Microsoft .NET, Eclipse, Microsoft Project, Matlab (!) ; Inconvénients : • Offre commerciale fragmentée, avec nombreux modules en option ; • Prix de la solution complète ; Microsoft Visual SourceSafe Visual SourceSafe, ou VSS, est un complément de l’IDE de Microsoft : Visual Studio et .NET. A ce titre il est librement accessible aux développeurs utilisant cet environnement. Il s’agit d’un système de gestion de version et de changements ayant des fonctionnalités minimales, adapté aux projets relativement peu importants. VSS est assez répandu grâce à son disponibilité et facilité d’intégration et malgré ces limitations. Bien entendu ce système n’existe que sur la plate-forme Windows et utilise un repository avec une base de données. Avantages : • Facile installation et intégration avec Visual Studio ; • Disponible librement aux utilisateurs de Visual Studio ou MSDN ; • Interface graphique ; • Intégration avec : Microsoft .NET et Eclipse (plug-in optionnel) ; Inconvénients : • Unique plate-forme : Windows ; • Gestion de changements concurrents simpliste nécessitant une rigueur dans l’utilisation ; • Gestion de version limitée pour les branches ; • Gestion de configuration est laissée à l’IDE ; • Aucune approche de gestion des taches ; Perforce SCM System Perforce est un système de gestion de versions simple, qui fait l’accent sur la performance et le mode de fonctionnement distribué avec un système de proxy appelé P4P. Fonctionnant sur le modèle client/serveur, il dispose d’un repository central sur le serveur appelé P4D contenant une base de donnée dédiée. Le serveur communique avec les clients grâce à TCP/IP et peut être installé sur la plupart des plates-formes Windows, Unix, MacOS et Linux. Le client existe en version ligne de commande et avec une interface graphique, appelé P4V. Perforce utilise l’approche traditionnelle de gestion de configurations, mais dispose d’un système de traçabilité des problèmes intégré et offre l’intégration avec des outils tiers tels que Bugzilla. Avantages : • Fonctionnement distribué avec des caches de Inconvénients : • Aucune approche de gestion des taches ; - 20 - Le point sur la gestion de configuration repository ; Robuste et performant ; Interface graphique P4V ; Multi plate-forme ; Intégration avec IDE : Microsoft .NET, Borland JBuilder ; • Intégration avec des outils tiers tels que : Bugzilla, Araxis Merge etc. ; • Prix de licence non prohibitif ; • • • • • Gestion de changements concurrents simpliste nécessitant une rigueur dans l’utilisation ; BitKeeper PRO BitKeeper de la société américaine BitMover, fondée en 1998, est un outil de gestion de configuration axé, comme la plupart, sur la gestion de versions. Sa particularité réside dans son architecture complètement distribuée peer-to-peer. Les repository compressés sont répliqués sur chaque client correspondant à un espace de travail et qui est également un serveur pour tous les autres clients. A travers cette technique BitKeeper se présente comme un logiciel plus sûr, car exempt de risque de panne du serveur central – il n’en possède pas ! Bien que BitKeeper soit un outil commercial, il est bien connu dans le domaine des logiciels libres. En effet, la société BitMover, dont le fondateur Larry McVoy est issu du monde Linux, rendait son outil disponible pour les projets open-source jusqu’à avril 2005. Sa réputation est d’être un outil fiable et performant, bien que moins complet que les solutions telles que Telelogic Synergy : les fonctionnalités de BitKeeper dans le domaine du contrôle de versions sont plus fournies, mais l’aspect de la gestion de processus est négligé. BitKeeper est disponible sur une large variété de plates-formes Linux, Unix, Windows et MacOS. Avantages : • Fonctionnement totalement distribué avec réplication de repository et P2P ; • Robuste et performant ; • Très largement multi plate-forme ; • Fonctionnalités avancées de contrôle de version : branches dynamiques, fusion des changements améliorée, atomicité des commits ; • Traçabilité de requêtes intégrée ; • Prix de licence non prohibitif ; Inconvénients : • GC limitée à la gestion de versions ; • Aucune approche réelle de gestion de processus ; • Convivialité limitée de l’interface graphique, réalisée avec Tcl/Tk ; • Aucune intégration des IDE connue à ce jour ; Autres outils commerciaux Borland StarTeam est un outil possédant les caractéristiques similaires au système ClearCase, avec une architecture client/serveur et un repository central. StarTeam s’intègre dans les IDE de Borland, comme JBuilder, et dans Eclipse. Anciennement produit de la société StarBase. MKS Source Integrity Enterprise est un outil similaire à ChangeMan de Serena (ex-PVCS) dans les principes du contrôle de versions, avec une orientation gestion de processus et fonctionnement distribué. Commercialisé par la société américaine MKS. - 21 - Le point sur la gestion de configuration Outils du domaine public Devant le nombre important d’outils libres, ne seront présentés ici que les outils les plus répandus ou complémentaires. Leur étude est en partie basée sur une expérience avec des projets professionnels et sur les publications des comparaisons et leurs caractéristiques. CVS Concurrent Versions System ou CVS est l’outil de gestion de versions sans doute le plus répandu dans le monde. Outil libre distribué sous la licence GPL (GNU Public License) commune aux logiciels open-source, il est également l’un des systèmes les plus anciens. En effet CVS est basé sur le système de contrôle de versions RCS (Revision Control System) datant de 1980, qui à son tour est basé sur l’outil Unix SCCS. CVS dispose d’un système de contrôle de versions fiable, bien que limité, et gère les développements concurrents. Son architecture est de type client/serveur avec un unique repository et des espaces de travail clients communicant via TCP/IP par protocoles RSH et SSH. L’utilisation de base se fait via la ligne de commande, bien que de nombreux logiciels libres additionnels proposent une interface graphique (exemples : TortoiseCVS, WinCVS etc.). CVS existe sur de nombreuses plates-formes : Unix/Linux/Windows/MacOS pour les clients, mais Windows n’est pas supporté par le serveur. A noter que de nombreux portails Internet de développement open-source, tels que sourceforge.net ou tigris.org, utilisent CVS pour tous les projets partagés. Avantages : • Standard libre et largement répandu ; • Contrôle de versions et des développements concurrents ; • Mise en œuvre relativement simple ; • Clients largement multi plate-forme ; • Nombreux logiciels additionnels, dont des interfaces graphiques (TortoiseCVS) ; • Intégration dans IDE Eclipse ; • Projet mature ; Inconvénients : • GC limitée à la gestion de versions ; • Aucune approche de gestion de tâches ; • Pas d’interface graphique standard ; • Contrôle de versions limité : mauvaise gestion des renommages, pas d’atomicité des changements, utilisation des branches complexe, algorithme de fusion simpliste ; • Gestion des fichiers binaires approximative ; • Aucune évolution prévue ; • Le serveur ne supporte pas Windows ; Malgré les points faibles, CVS peut et est utilisé avec succès pour des projets de taille raisonnable en associant à l’outil une méthode de travail et une rigueur dans l’utilisation. Cependant, c’est certainement à cause de ces points faibles que de nombreux projets alternatifs ont fleuris récemment. Subversion Subversion se définit comme étant un CVS amélioré. Du fait, leurs architectures sont très similaires et les commandes sont pratiquement identiques. Les améliorations concernent surtout les limitations de CVS liés à la gestion de versions. Ainsi Subversion dispose de la gestion des - 22 - Le point sur la gestion de configuration changements de noms des fichiers et des répertoires, de l’atomicité des changements, d’une fusion des changements améliorée et d’une gestion de fichiers binaires incrémentale. Tout comme avec CVS, le serveur de Subversion ne supporte pas la plate-forme Windows, mais uniquement Linux, Unix et MacOS. En revanche les clients sont totalement multi plate-forme. Avantages : • Proche des standards CVS ; • Contrôle de versions et des développements concurrents complet ; • Différentiation des fichiers binaires ; • Mise en œuvre relativement simple ; • Clients largement multi plate-forme ; • Intégration dans l’explorer de Windows et outil de fusion avec TortoiseSVN ; • Intégration dans IDE Eclipse ; • Projet actif ; Inconvénients : • GC limitée à la gestion de versions ; • Aucune approche de gestion de processus ; • Pas d’interface graphique standard ; • Le serveur ne supporte pas Windows ; Subversion semble être une alternative prometteuse à CVS et s’inscrit dans son continuation. Cependant il s’agit d’un projet récent, débuté en 2003, et qui n’a pas encore fait ces preuves. Ce système est disponible sous licence libre similaire à Apache ou à GPL. Monotone Le projet Monotone, débuté en 2003, a une approche similaire à celle de BitKeeper. Cet outil de gestion de versions privilégie l’intégrité des données et l’environnement distribué. Son architecture est de type peer-to-peer, avec les repository distribués et une protection des données accrue grâce à la cryptographie, notamment à SHA1 et à GPG. La communication réseau se fait via un protocole propre, appelé netsync. Monotone possède sa propre interface graphique (MonotoneViz) et un algorithme de fusion amélioré. En revanche ce système n’attribue pas de numéros de versions aux données, mais se base sur leurs hash code, ce qui est en soi plus sûr, mais confus pour l’utilisateur. Les versions des fichiers binaires sont différentiés et archivés de manière incrémentale, grâce à la technologie xdelta (également un projet libre) Disponible sous licence GPL, Monotone existe en distributions binaires Windows et Linux, ainsi que sous forme de code source. Comme la plupart des outils alternatifs à CVS, il propose un mécanisme de migration de projet depuis ce dernier vers Monotone. Avantages : • Contrôle de versions et des développements concurrents complet ; • Architecture distribuée P2P ; • Accent sur la sécurité des données : cryptographie, réplication ; • Différentiation des fichiers binaires ; • Interface graphique ; • Projet actif ; Inconvénients : • Aucune approche de gestion de processus ; • Pas de distributions binaires UNIX ; • Protocole réseau propriétaire ; • Indentification des versions de fichiers basée sur leurs hash codes et difficilement interprétable par l’utilisateur ; • Pas d’intégrations d’IDE à ce jour ; • Peu répandu, version bêta ; - 23 - Le point sur la gestion de configuration Le projet Monotone est techniquement ambitieux et novateur, mais se trouve sur un stade de développement prématuré et ne propose qu’une version bêta du logiciel. Darcs Darcs est également un système de gestion de versions distribué, basé sur l’architecture peer-topeer. Réputé simple d’utilisation, il dispose d’un contrôle de versions complet. Darcs est disponible sous licence GPL sur la plupart des plates-formes Unix/Linux, MacOS et Windows. Avantages : • Contrôle de versions et des développements concurrents complet ; • Architecture distribuée P2P ; • Sécurité des données : cryptographie, réplication; • Facilité d’utilisation ; • Projet actif ; Inconvénients : • Aucune approche de gestion de processus ; • Manque d’intégrations aux IDE ; • Pas d’interface graphique ; • Encore peu répandu et peu mature ; GNU Make Les outils libres présentés précédemment sont des gestionnaires de versions et non de configurations dans le sens propre du terme. Dans ce domaine, un outil tient une place essentielle : Make. Il s’agit véritablement de l’ancêtre de tous les systèmes de construction de programmes exécutables. GNU Make est une implémentation multi plate-forme de l’outil Make fourni dans les implémentations du système UNIX. Il permet la construction de l’exécutable à partir d’un code source grâce à un ensemble de règles logiques, similaires au langage Prolog. Ces règles sont décrits dans les fichiers de configuration d’un projet logiciel, appelés Makefile, et interprétées par la commande make (ou gmake pour la version GNU) afin de vérifier les dépendances, d’exécuter le compilateur du langage de programmation et de lancer l’édition des liens avec les bibliothèques externes et les composants compilés. Toutes ces étapes sont effectués avec des outils tiers : compilateurs, éditeurs de liens (linkers) etc. Avantages : • Standard incontournable ; • Principe de fonctionnement simple ; • Multi plate-forme (essentiellement UNIX) ; • Intégration dans les IDE ; Inconvénients : • Outil archaïque ; • Aucune d’interface graphique ; • Ecriture des règles laborieuse ; • Gestion de récursivité manuelle ; GNU Configure Les outils configure, autoconf et automake complètent les possibilités de Make. Ils permettent d’ajouter un niveau d’abstraction dans la description des règles et ainsi permettre une utilisation plus générique. Cela est rendu possible en associant des prototypes génériques des Makefiles avec une analyse et un contrôle de l’environnement de la plate-forme de développement – tâche faite manuellement avec Make. - 24 - Le point sur la gestion de configuration La mise en œuvre de Configure est complexe et bien plus laborieuse que celle de Make et est surtout utilisée dans les distributions des sources afin de faciliter leur exploitation par tous les utilisateurs. Configure génère les Makefiles nécessaires à Make et ne remplace pas ce dernier. Avantages : • Facilite l’utilisation de Make ; Inconvénients : • Aucune d’interface graphique ; • Mise en place très laborieuse ; • UNIX et Linux uniquement ; Apache Ant Ant (fourmi en français) est une alternative à Make. Totalement multi plate-forme, car écrit entièrement en Java, cet outil fonctionne à la manière similaire à Make, avec une différence notable : les fichiers de règles ne sont pas des Makefiles standards, mais des règles XML particulières. L’utilisation de Ant est facilitée par son intégration dans les IDE tels que Eclipse. Avantages : • Totalement multi plate-forme, car 100% Java ; • Utilise les standards actuels : XML ; • Intégration dans l’IDE Eclipse ; Inconvénients : • Pas d’interface graphique propre ; • Ecriture des règles non moins laborieuse ; Bugzilla Le logiciel Bugzilla est distribué par l’organisation Mozilla, connue par ces applications Internet libres. Il s’agit d’un système de gestion des requêtes utilisateur liées aux bugs (d’où l’origine du nom). Ce système client/serveur dispose d’une base de données contenant des requêtes d’améliorations et de correction de problèmes d’un produit logiciel. Bugzilla offre les fonctionnalités du monitoring des taches, de contrôle et de validation de changements. Le serveur Bugzilla s’intègre avec un serveur HTTP et le client est simplement un navigateur Internet. Outre Mozilla, Bugzilla est utilisé dans de nombreux projets et en particulier il peut être interfacé avec le logiciel Perforce. Il s’agit d’un outil complémentaire sérieux pour les outils vus précédemment. Avantages : • Utilisation via navigateur Internet ; • Système de contrôle, de validation et de monitoring des taches assez complet ; • Multi plate-forme et multi langue ; • Mozilla est un éditeur de logiciels libres connu et réputé ; • Intégration avec certains outils de GCL tiers ; Inconvénients : • Nécessite un serveur HTTP ; Autres outils libres L’annexe II propose une liste exhaustive des projets de logiciels libres et commerciaux dédiés à la GCL. - 25 - Le point sur la gestion de configuration Synthèse comparative Le tableau ci-dessous présente une comparaison très succincte des caractéristiques majeures des outils cités précédemment. L’annexe I propose une comparaison plus détaillée de leurs fonctionnalités. Contrôle de versions Contrôle de configurations Traçabilité des requêtes Gestion de processus Interface graphique Particularités diverses ClearCase OUI OUI OUI OUI (option) OUI Gamme de produits ChangeMan OUI OUI OUI OUI (option) OUI Gamme de produits Synergy OUI OUI OUI OUI OUI Gamme de produits VSS OUI (limité) NON NON NON OUI MS Windows uniquement Perforce OUI NON OUI NON OUI Performances BitKeeper OUI NON OUI NON OUI P2P, Aucune intégration IDE CVS OUI (limité) NON NON NON NON * Intégré avec IDE Eclipse Subversion OUI NON NON NON NON * CVS amélioré Monotone OUI NON NON NON OUI P2P, Version bêta Darcs OUI NON NON NON NON P2P Make NON OUI (limité) NON NON NON Standard Ant NON OUI (limité) NON NON NON Java, intégré avec Eclipse Bugzilla NON NON OUI OUI (limité) OUI Application web * existe via outils complémentaires ou IDE. - 26 - Le point sur la gestion de configuration Partie IV - Mise en œuvre Standards et recommandations La démarche de la qualité est au cœur de tous les projets industriels et se conforme aux recommandations des standards tels que ISO 9001 : 2000. Ce standard concerne tous les domaines et définit un plan de gestion de la qualité au sein d’une entreprise. Un plan de qualité d’un projet logiciel, conforme à ce standard, définit les procédures de gestion parmi lesquelles en règle générale se trouve la gestion de configuration. Plan de gestion de configuration Le plan de gestion de configuration décrit la mise en place de cette gestion au sein d’un projet. Il existe des recommandations telles que le standard de l’organisme international IEEE : IEEE 8281998. Ce standard définit un plan minimal de GCL comprenant les parties suivantes : • Introduction : présentation succincte du plan ; • Organisation : identification des autorités responsables de GCL ; • Activités : activités de GCL appliquées au projet ; • Agenda : planification des activités de GCL et coordination avec les autres activité du projet ; • Ressources : identification des ressources humaines, matérielles et logicielles nécessaire à l’exécution du plan ; • Maintenance du plan : identifie la procédure du maintien du plan durant tout le cycle de vie du projet ; Comme tous les standards ouverts, IEEE 828 laisse libre choix des méthodes de gestion et indique seulement les points qui doivent être pris en compte. Le plan décrit comment, quand et par qui ces points seront gérés. Il existe également des guides de référence de GCL, dont IEEE/EIA 12207 qui est une implémentation industrielle des standards IEEE en matière de gestion du développement logiciel. Bonnes pratiques Bien qu’il existe aujourd’hui des outils intégrés permettant une mise en place de la GCL, leurs utilisation par les acteurs des projets n’en est pas moins importante au succès et à l’efficacité de ces outils. Ci-après quelques règles et « bonnes pratiques1 » de la gestion de configuration, qui sont particulièrement importantes avec les outils ouverts tels que CVS. Espace de travail • • • • Ne pas partager les espaces de travail ; Ne pas travailler en dehors des espaces de travail gérés ; Mettre à jour régulièrement l’espace de travail ; Archiver régulièrement son travail dans le repository ; 1 Une partie de ces recommandations est issue de l’article « High-level Best Practices in SCM » publié par Laura Wingerd et Christopher Seiwald de Perforce Software. - 27 - Le point sur la gestion de configuration Ligne de développement et branches • • • • Avoir une ligne de développement principale ; Ne pas créer de branches qu’en cas de besoin précis ; Ramifier plutôt que de figer les versions ; Propager et fusionner les modifications entre branches ; Construction de programme exécutable • • • Archiver les éléments d’origine ; Construire régulièrement ; Séparer les objets construits des sources d’origine ; Gestion de processus • • • • • Planifier les modifications et les associer à des taches ; Assigner les taches aux développeurs ; Organiser le suivi des modifications ; Organiser le suivi des demandes de modifications ; La documentation doit être maintenue à jour et archivée au même titre que le code source ; CVS, Subversion, VSS et simili. • Toujours mettre à jour l’espace de travail avant de importer ces changements dans le repository ; Résoudre les conflits éventuels et tester avant d’importer les changements ; Ne pas importer de changements incomplets ; Ne pas importer de changements qui constituent plusieurs taches à la fois ; Toujours écrire un commentaire associé à la tache importée ; Définir une convention de noms des versions et des branches ; • • • • • Exemple de mise en œuvre Afin d’assimiler les concepts présentés dans ce document, prenons un exemple concret de projet imaginaire. La description de la mise en place de GCL pour ce projet dans les paragraphes suivants se conformera au plan exposé plus haut. Bien entendu il sera extrêmement synthétique car il ne s’agit ici que d’un exemple : Introduction Le projet P, qui commencera en juin 2005, consiste à réaliser un logiciel pour plates-formes Windows et Linux. Son équipe se compose de 10 personnes, dont A – le responsable du projet. Le logiciel sera écrit en langage Java avec des extensions natives C++. La première livraison commerciale est prévue en juin 2006. Organisation du projet En tant que chef de projet, A sera le responsable de l’application des méthodes de gestion de configuration. Il sera chargé de valider tous les changements apportés dans le projet. Activités Les activités de la GCL du projet P sont : 1. Gestion de développements parallèles (détail) ; 2. Gestion des versions intermédiaires (détail) ; 3. Gestion des configurations matérielles : Linux et Win32 (détail) ; - 28 - Le point sur la gestion de configuration 4. 5. 6. Mise en places des tests des versions de livraison et gestion des requêtes de corrections (détail) ; Gestion des releases ; Gestion des requêtes des clients et de la maintenance des releases ; Agenda Mai 2005 : démarrage des activités 1, 2, 3 ; Novembre 2005 : tests de la version alpha, mise en place de l’activité 4 ; Avril 2006 : tests de la version bêta, activité 4 ; Juin 2006 : livraison de la version 1.0, activité 5 et 6 ; Ressources Humaines : 9 développeurs sur deux sites différents et 1 chef de projet. Logicielles : • Utilisation de Subversion intégré avec Eclipse pour les activités 1, 2 et 5 ; • Règles d’utilisation du gestionnaire de version avec les conventions de noms ; • Utilisation de Ant intégré avec Eclipse et de Microsoft Visual C++ pour l’activité 3 ; • Utilisation de Bugzilla pour les activités 4 et 6 ; Maintenance du plan B, le responsable qualité extérieur au projet, sera chargé conjointement avec A de réviser le plan de GCL selon les besoins, pendant le déroulement du projet. - 29 - Le point sur la gestion de configuration Conclusion A fil des pages de ce document, la gestion de configuration logicielle se révèle d’être partie intégrante de la gestion du cycle de vie d’un projet. Tous les projets, qu’ils soient de développement logiciel, de gestion de documentation ou de publication électronique sont amenés à rechercher des solutions de gestion de configuration. Les principes de gestion des versions et des changements sont connus depuis des dizaines d’années et aujourd’hui les systèmes logiciels les implémentent de manière optimale. La nouveauté est la généralisation de l’approche de gestion de processus, qui tend à réunir la gestion traditionnelle et ces aspects techniques et ainsi améliore les méthodes et la qualité des projets. Le choix des solutions logicielles spécialisées dans le domaine est très large. Les produits commerciaux sont bien établis sur le marché, mais le nombre croissant des projets de logiciels libres qui y sont présents témoigne de l’intérêt des développeurs pour la gestion de configuration et rend les outils les plus modernes accessibles à tous. Ainsi, bien que ce domaine ne soit pas nouveau, les outils actuels, en particulier CVS, et les outils les plus récents contribuent faire de la gestion de configuration une pratique courante et incontournable. Aussi, afin qu’elle soit efficace, les acteurs et les responsables des projets doivent la planifier et choisir les méthodes et les outils les mieux adaptés à leurs besoins. Les recommandations et les standards industriels existent pour les aider dans cette tache. - 30 - Le point sur la gestion de configuration Bibliographie Publications • Steve Berczuk, Brad Appleton : « Software Configuration Management Patterns », Addison-Wesley, Boston, MA, 2002 • « IEEE Standard for Software Configuration Management Plan : IEEE 828-1990 », IEEE, New York, NY, 1990 • Ueli Wahli, Jennie Brown, Matti Teinonen, Leif Trulsson : « ClearCase Redbook : A Clear Case for IBM Rational ClearCase », IBM Corp. 2004. http://ibm.com/redbooks • Laura Wingerd, Christopher Seiwald : « High-level Best Practices in Software Configuration Management », article, Perforce Software : http://www.perforce.com/perforce/bestpractices.html • Per Cedeqvist : « Version Management with CVS », Free Software Foundation, 19932005 : https://www.cvshome.org/docs/manual Internet • Ressource dédiée à la gestion de configuration : http://www.cmcrossroads.com/ • Site de l’éditeur du logiciel BitKeeper : http://www.bitkeeper.com/ • Site du logiciel Subversion : http://subversion.tigris.org/ • Site de la compagnie Perforce, éditeur du logiciel du même nom : http://www.perforce.com • Site de la compagnie Serena, éditeur de ChangeMan : http://www.serena.com/ • Site du logiciel Monotone : http://www.venge.net/monotone/ • Site du logiciel Aegis : http://aegis.sourceforge.net/index.html • Site du produit Synergy : http://www.telelogic.com/products/synergy/ • Site du logiciel Bugzilla : http://www.bugzilla.org/ • Site de l’outil GNU Make : http://www.gnu.org/software/make/ - 31 - Le point sur la gestion de configuration Glossaire .NET Microsoft Visual .NET : environnement de développement de Microsoft pour la plate-forme Windows ; Client/Serveur Architecture d’application avec en général un programme serveur central et plusieurs programmes clients communicant avec lui ; CVS Concurrent Versions System : logiciel libre de gestion de versions (voir paragraphe consacré : CVS) ; Eclipse Logiciel libre suite à une initiative d’IBM, propose un IDE multi plate-forme pour les développements Java essentiellement ; GCL (SCM) Gestion de Configuration Logiciel (Software Configuration Management) ; GNU GNU = GNU is Not Unix : définition récursive. A l’origine GNU est une organisation proposant des implémentations des outils Unix open-source, indépendants de implémentations Unix propriétaires ; GPG GNU Privacy Guard : Technique de cryptographie similaire au PGP GPL GNU Public License : licence assurant une libre distribution de logiciels opensource ; IDE Integrated Development Environment (Environnement de développement intégré) : application qui intègre tous les outils nécessaires au développement logiciel ; IEEE Institute of Electrical and Electronics Engineers : organisation internationale d’origine américaine qui, entre autres, publie des standards et des recommandations aux industriels du domaine électronique et informatique ; Java Langage de programmation indépendant de plate-forme matérielle, technologie initiée par Sun Microsystems ; Open-source Logiciels libres avec le code source disponible gratuitement, souvent distribués avec une licence GPL ; Peer-to-peer (P2P) De l’anglais : poste à poste : architecture d’application distribuée où chaque programme client est lui-même un serveur (voir client/serveur) ; Release Version d’un logiciel livrée à l’extérieur ; SHA1 Algorithme de calcul de hashcode sécurisé ; SunOS, Solaris Système d’exploitation UNIX de Sun Microsystems ; TCP/IP Protocole de transmission de données Internet : Transmission Control Protocol / Internet Protocol ; Version bêta Version d’un logiciel en phase de test avant sa livraison ; XML eXtended Markup Language : langage de balises descriptif (extension de SGML et du très connu HTML) ; - 32 - Le point sur la gestion de configuration Annexe I – Comparatif des logiciels dédiés à la GCL Caractéristiques générales IBM ClearCase Serena ChangeMan Perforce BitKeeper Telelogic Synergy Microsoft VSS CVS Subversion Monotone AEGIS Darcs ArX ANT GNU Make Bugzilla Type d'application solution intégrée solution intégrée gestion de versions gestion de versions solution intégrée gestion de versions gestion de versions gestion de versions gestion de versions gestion de versions gestion de versions gestion de versions configurations configurations gestion de requêtes Gestion de processus ClearQuest Dimensions NON NON OUI NON NON NON NON NON NON NON N/A N/A OUI GUI OUI OUI OUI OUI OUI OUI NON* NON* OUI NON NON NON NON NON HTML Plate-forme MULTI MULTI MULTI MULTI MULTI Windows MULTI** MULTI** MULTI UNIX/Linux MULTI MULTI JavaVM MULTI MULTI Licence commerciale commerciale commerciale commerciale commerciale commerciale GPL GPL GPL GPL GPL autre GPL GPL MozillaPL * Disponibles sur certaines plates-formes via produits tiers ** Serveur non disponible pour Win32 Caractéristiques techniques IBM ClearCase Serena ChangeMan Perforce BitKeeper Telelogic Synergy Microsoft VSS CVS Subversion Monotone AEGIS Darcs ArX ANT GNU Make Bugzilla Atomicité des commit OUI OUI NON OUI OUI NON NON OUI OUI OUI OUI OUI N/A N/A N/A Fichiers binaires OUI OUI OUI OUI, deltas OUI OUI OUI, deltas OUI, deltas OUI OUI OUI N/A N/A N/A Builds OUI OUI NON NON OUI NON NON NON NON NON NON NON OUI OUI NON Fusion automatique OUI OUI OUI 3WAY OUI SIMPLE SIMPLE DIFF3 3WAY 3WAY 3WAY 3WAY N/A N/A N/A Branches OUI OUI OUI OUI OUI Limité OUI OUI OUI OUI OUI OUI N/A N/A N/A Renom mage OUI OUI OUI OUI OUI NON NON OUI OUI OUI OUI OUI N/A NON N/A Architecture / réseau Client/Serveur Client/Serveur Client/Serveur P2P Client/Serveur Client/Serveur Client/Serveur P2P P2P P2P P2P Local Local Client/Serveur Plate-forme MULTI MULTI MULTI MULTI MULTI Windows MULTI** MULTI** MULTI UNIX/Linux MULTI MULTI JavaVM MULTI MULTI** - 33 - Le point sur la gestion de configuration Annexe II – Liste de logiciels dédiés à la GCL Aegis http://aegis.sourceforge.net/ Apache Ant http://ant.apache.org/ ArX http://www.nongnu.org/arx/ BitKeeper (commercial) http://www.bitkeeper.com/ Bugzilla http://www.bugzilla.org/ ChangeMan (PVCS) (commercial) http://www.serena.com/ ClearCase (commercial) http://www.ibm.com/software/awdtools/clearcase/index.html Code Co-op (commercial) http://www.relisoft.com/co_op/ Codeville http://codeville.org/ CVS https://www.cvshome.org/ Darcs http://abridgegame.org/darcs/ DCVS http://www.elegosoft.com/index_dcvs.html GNU Arch http://www.gnuarch.org/ GNU Make http://www.gnu.org/software/make/ Jedi VCS http://jedivcs.sourceforge.net/ META-CVS http://users.footprints.net/~kaz/mcvs.html MKS (commercial) http://www.mks.com/products/sie Monotone http://www.venge.net/monotone/ OpenCM http://www.opencm.org/ Perforce (commercial) http://www.perforce.com/ PRCS http://prcs.sourceforge.net/ StarTeam (commercial) http://www.borland.com/starteam/ Stellation http://www.eclipse.org/stellation/ Subversion http://subversion.tigris.org/ Superversion http://www.superversion.org/ SVK http://svk.elixus.org/ Synergy (commercial) http://www.telelogic.com/products/synergy/index.cfm TortoiseCVS http://www.tortoisecvs.org/ TortoiseSVN http://tortoisesvn.tigris.org/ Vesta http://www.vestasys.org/ - 34 -