Pré-requis : Découvrir les outils

Temps de lecture20 min

Versionnage de fichiers

Pensez à n’importe quel projet que vous avez déjà réalisé dans lequel vous avez un rapport à rédiger. Au bout d’un certain temps, votre dossier de projet ressemblait probablement à ceci :

  • Rapport.docx
  • Rapport_FINAL.docx
  • Rapport_FINAL_REEL.docx
  • Rapport_FINAL_2024-03-10.docx

Et vous avez fait cela probablement parce que vous vouliez pouvoir revenir à une version antérieure si nécessaire, ou retracer l’historique des modifications pour comprendre comment les choses en sont arrivées à ce point. Cela peut être crucial lorsqu’on travaille sur quelque chose qui prend beaucoup de temps pour atteindre un état final.

Imaginez maintenant que vous travaillez à plusieurs sur le même rapport ou que vous travaillez en groupe sur un projet où vous devez produire du code, sa documentation et un rapport sur le déroulement du projet. Le nombre de versions peut très vite devenir ingérable et peut conduire à des situations où un membre de l’équipe écrase (par mégarde) le travail d’un autre.

Ce désordre est ce qu’on appelle le versionnage de fichiers. Il s’agit d’un système manuel et ad-hoc pour gérer différentes versions de différents fichiers (document, code…) modifiés par des contributeurs différents et qui s’effondre sous le poids de la complexité du travail. En tant qu’ingénieurs, ce type de solutions ad-hoc et source d’erreur n’est pas envisageable. Au contraire, il est essentiel de mettre en place des solutions qui soient capables de répondre à trois questions fondamentales pour chaque fichier manipulé :

  • Qu’est-ce qui a changé ? (Les modifications spécifiques apportées à un fichier)
  • Pourquoi a-t-il changé ? (La raison ou l’« exigence » à laquelle il répondait)
  • Qui l’a modifié ? (Responsabilité et traçabilité)

Si avec la méthode ou l’outil utilisé vous ne pouvez pas répondre à ces questions sur l’évolution de votre projet (des fichiers qui constituent votre projet), vous ne faites pas de l’ingénierie, vous vous contentez d’espérer …

Les outils de contrôle de versions

La solution que l’ingénierie apporte au versionnage de fichiers est le contrôle de versions (de fichiers). Fondamentalement, les systèmes de contrôle de versions répondent aux trois questions précédentes en fournissant trois briques de base pour gérer le travail collaboratif :

  • Branchement : vous pouvez diviser le projet en lignes de développement parallèles. Le contributeur A travaille sur le code d’un algorithme de parcours de graphes dans sa « branche », tandis que le contributeur B travaille sur les tests dans la sienne. Ils travaillent de manière isolée, sans conflit.

  • Fusion : lorsqu’ils ont terminé, le système de contrôle de versions les aide à combiner intelligemment leur travail dans un projet principal unifié.

  • Résolution des conflits : si deux contributeurs ont travaillé sur la même partie (par ex. ils ont modifié l’implémentation de l’algorithme), le système met en évidence le conflit afin qu’ils le résolvent ensemble, de manière logique, au lieu que le travail d’une personne soit silencieusement écrasé.

Gardez à l’esprit que ce sont des briques de base, qui sont utilisées dans le cadre d’un flux de travail discipliné rigoureux, systématique et collaboratif. Il s’agit de remplacer le chaos par le contrôle.

Il existe de nombreux outils de contrôle de versions, mais nous nous concentrerons sur git, qui est aujourd’hui la norme dans l’industrie.

Les plateformes de développement collaboratif

Lorsqu’on travaille à plusieurs sur le même projet, il est nécessaire de partager les productions pour que tous les membres puissent y contribuer. Jusqu’à aujourd’hui, il y a des fortes chances que vous ayez utilisé pour cela un outil comme Google Drive, DropBox (ou équivalent). Vous y déposez vos fichiers et vous utilisez Google Docs, Google Sheets ou autre pour les modifier et bien que ce soit effectivement possible, il n’est pas adapté lorsqu’on travaille sur des projets d’ingénierie et ce pour deux raisons principales :

  • Google Drive (ou équivalent) modifie en direct. Sur Google Drive (ou équivalent) tout le monde modifie le même document en direct. Si deux personnes modifient le même paragraphe en même temps, vous obtenez un mélange confus de modifications. C’est collaboratif, mais chaotique.

  • Google Drive (ou équivalent) enregistre les fichiers. Sur Google Drive (ou équivalent) vous pouvez voir la version actuelle et peut-être certaines versions antérieures si vous avez de la chance. Mais vous ne pouvez pas voir facilement ce qu’un contributeur a exactement modifié entre la v3 et la v4, ni pourquoi il l’a modifié.

Bien que ce type d’outils soit peut être intéressant pour le partage de fichiers, ils ne facilitent pas le contrôle de versions de fichiers et s’avèrent donc insuffisants pour des projets d’ingénierie. L’alternative est l’utilisation d’une plateforme de développement collaboratif qui intègre un outil de contrôle de versions. Vous pouvez voir ces plateformes comme des serveurs qui hébergent des projets gérés avec des outils de contrôle de versions.

Il existe plusieurs plateformes de ce type qui supportent Git. Vous avez peut être entendu parler de GitHub. Elle est gérée par la société GitHub Inc., acquise par Microsoft en 2018. Lorsque vous créez un projet sur cette plateforme, vous le déposez sur un serveur Microsoft, il est donc important de savoir vers qui vous déposez votre travail.

Dans cette session et pour toute l’UE vous travaillerez sur une plateforme GitLab qui est hébergée par l’école. En plus de serveur Git, GitLab offre plusieurs fonctionnalités telles qu’un wiki, un espace Web, etc. utiles pour le développement logiciel collaboratif.