To read the French version of this article click here
Ceci est la deuxième partie d'un article sur les systèmes de contrôle de version. Ici, nous discutons des forces et des faiblesses de divers logiciels de référentiel, et où et comment ils sont le mieux utilisés.
Après avoir discuté de la nécessité des répertoires et du contrôle des versions dans la première partie de cet article, ce document tentera de faire des comparaisons de plusieurs offres de logiciels CI (Continuous Integration). L'intégration continue permet de tester et de consigner immédiatement tout changement fréquent et isolé, lors de la fusion avec un code plus vaste.
Nous utiliserons les critères suivants :
- Prix (Open-source, licences, par siège, par cœur, contrats de support)
- Facteurs environnementaux : serveur, cloud, langage de développement, OS
- Points forts et faibles
- Scénarios d'utilisation optimale
Voici une liste des logiciels CI qui seront examinés :
- CVSNT (Concurrent Version System)
- Git
- Mercurial
- Rational Team Concert
- Subversion
* NB : Git et Mercurial sont pris en charge par leurs développeurs ou mainteneurs, à savoir Junio Hamano et Matt Mackall.
CVSNT
CVSNT est une branche de CVS, un système de gestion de versions open-source développé pour la première fois en 1986, et est considéré comme l'ancêtre d'autres systèmes de contrôle de version. Il est largement utilisé (cet auteur l'a utilisé pour le développement de logiciels d'automatisation) et mature.
Les développeurs ont l'intention d'implémenter des commits atomiques et d'utiliser un backend SQL. CVSNT est également distribué avec TortoiseCVS et WinCVS.
Ses faiblesses sont la dépendance continue aux fichiers plats (qui sont plus facilement corrompus) et sa gestion des longues branches est faible.
GIT
GIT est probablement le système de contrôle de version le plus connu, créé par Linus Torvalds (qui l'a nommé d'après l'argot anglais insulte signifiant «personne déplaisante, idiote, incompétente, ennuyeuse ou enfantine»). Il a été principalement conçu pour accélérer et mettre à l'échelle les correctifs et les métadonnées associées pour le projet Linux. Il a également été spécifiquement conçu pour éviter les pièges de CVS et intégrer des garanties solides contre la corruption des données.
Les inconvénients sont une courbe d'apprentissage abrupte pour ceux qui abandonnent CVS et une prise en charge limitée de Windows. C'est un outil populaire avec de nombreuses offres du serveur Git en tant que service : les exemples incluent GitHub, SourceForge, Bitbucket, et GitLab.
Mercurial
Mercurial est un outil développé pour concurrencer Git pour le développement du noyau Linux. Il est principalement implémenté en Python (la plupart des autres systèmes de contrôle de version sont écrits en C). Il a quelques fonctionnalités partagées avec CVS mais c'est un système entièrement distribué. Il est relativement facile à apprendre et possède une excellente documentation.
Ses principaux défauts sont qu'il n'est pas aussi facile à automatiser que Git et qu'il est moins puissant sans réglage.
Rational Team Concert
Rational Team Concert est l'un des systèmes de contrôle de version d'IBM Rational (les autres sont ClearCase et Synergy). Il dispose d'un ensemble clair de modèles et de fonctions de reporting étendues, ce qui est utile pour la gestion de projet. Il est très flexible, gère bien les fusions complexes et dispose d'un support de premier ordre.
Ses inconvénients sont une interface utilisateur vieillissante et maladroite et la difficulté à l’apprendre. Il est également relativement complexe et bénéficie d'une équipe de support dédiée.
Subversion
Subversion a été créé comme un outil permettant de corriger certains bogues de CVS tout en maintenant une compatibilité de haut niveau avec ce logiciel. Il implémente des opérations atomiques pour minimiser les risques de corruption des données. Il dispose d'une vaste bibliothèque de plug-ins, augmentant ses fonctionnalités et offre une visibilité exemplaire pour tous les changements. Le logiciel est très stable, la résolution des conflits est forte, et il est facilement automatisé et intégré dans une chaîne d'outils existante.
Cependant, les performances ne sont pas bonnes sur les hôtes Windows, étant beaucoup plus rapides sous Linux, et il reste quelques problèmes de manipulation de fichiers (nécessitant parfois un processus en deux étapes).
Conclusion
Le logiciel de gestion de version est la clé de voûte du développement, garantissant moins de conflits lors des fusions, offrant une vue d'ensemble précieuse aux chefs de projet et accélérant le processus de développement. En tant qu'élément essentiel de la chaîne d'outils, ces logiciels ont différents niveaux d'intégration par produit, mais la plupart sont suffisamment flexibles pour permettre une intégration sans trop de problèmes.
La plupart de ces outils nécessiteront un certain niveau de supervision pour garantir les meilleurs résultats, et ils sont mieux mis en œuvre en utilisant un cadre solide, tel que Prince2 au niveau de la gestion de projet et COBIT au niveau du développement. Cela aide énormément à sélectionner un outil qui correspond le mieux à l'expérience et à la culture de l'équipe de développement.
Enfin, il convient de noter que le choix de l'outil dépend des besoins et des préférences de l'équipe de développement, et il n'existe pas de solution «universelle».
Lectures complémentaires :
Dépôt de logiciels et gestion des versions par Andrew Clandillon
Version control system: a non-technical introduction by Andrew Clandillon
Continuous Integration: a non-technical introduction by Andrew Clandillon
Photo credit : maslakhatul via depositphotos.com