Synchroniser son travail
Les groupes dont les membres travaillent individuellement doivent décider comment synchroniser leur travail, c-à-d comment combiner les dernières versions des fichiers écrits par chaque membre pour obtenir un projet complet. Plusieurs solutions à ce problème existent, et nous vous en proposons deux ci-dessous :
- l'utilisation d'un système de partage de fichiers « dans le nuage »,
- l'utilisation d'un système de gestion de versions.
La première solution est plus simple que la seconde, mais aussi plus risquée car la probabilité d'effectuer une fausse manœuvre est plus grande.
Partage des fichiers dans le nuage
De nombreux systèmes de stockage de fichiers « dans le nuage » existent (Dropbox, Google Drive, iCloud Drive, etc.) et permettent à plusieurs utilisateurs de partager un dossier.
Un dossier partagé peut être utilisé par les membres d'un groupe pour synchroniser leur travail. L'idée est simple : chaque membre possède une version « privée » du projet sur son ordinateur, qui ne se trouve pas dans le dossier partagé. La totalité du développement se fait dans ce dossier privé, et lorsqu'un fichier (contenant p.ex. une classe) est terminé et prêt à être partagé, il est copié dans dans le dossier partagé, d'où l'autre membre peut le copier dans son dossier privé.
Avec une telle organisation, il existe à tout moment trois versions, généralement différentes, du projet : une par membre du groupe, stockée dans un dossier privé, et la version commune, stockée dans le dossier partagé.
Il faut bien prendre garde à ne pas faire de fausse manœuvre lors de la copie de fichiers entre ces différentes versions. De manière générale, le propriétaire d'un fichier donné ne devrait copier celui-ci que depuis son répertoire privé vers le répertoire partagé. A l'inverse, il ne devrait copier les fichiers dont il n'est pas propriétaire que depuis le répertoire partagé vers son répertoire privé.
Notez que certains systèmes de partage de fichiers, entre autres Dropbox, permettent d'accéder aux fichiers récemment effacés, ou aux anciennes versions de fichiers existants. Cette fonctionnalité peut être fort utile en cas de mauvaise manipulation.
Système de gestion de version
Une autre solution existe au problème du partage du projet, plus propre et plus sûre, mais aussi considérablement plus difficile à mettre en œuvre : l'utilisation d'un système de gestion de version (version control system en anglais).
Un système de gestion de version est un programme permettant à plusieurs personnes de travailler en commun sur un projet. L'idée de base n'est pas très différente de celle consistant à utiliser un dossier partagé pour communiquer. Toutefois, avec un système de gestion de version, le transfert des fichiers entre les dossiers contenant les différentes versions du projet est faite par le système de gestion de version lui-même, ce qui réduit le risque de fausse manœuvre.
L'utilisation d'un système de gestion de version sort du cadre de ce cours, et aucune instruction détaillée n'est donc fournie ici. De même, aucun soutien n'est offert par l'équipe du cours en cas de problème avec un système de gestion de version, quel qu'il soit.
Néanmoins, nous conseillons aux groupes désireux d'utiliser un système de gestion de version de choisir git. Il s'agit du système de gestion de version le plus en vogue actuellement, ce qui présente plusieurs avantages, en particulier une documentation assez abondante — dont l'excellent livre Pro Git, disponible gratuitement — et plusieurs programmes facilitant son utilisation. Cela dit, il faut noter que l'utilisation de git est généralement complexe, même pour les personnes averties.
A l'EPFL, l'association GNU Generation met à disposition une instance de la plateforme GitLab, qui permet aux membres d'un groupe de partager leur travail. GitLab offre la possibilité d'avoir un entrepôt git privé, c-à-d visible uniquement à certaines personnes. Cela est très important pour ce cours, étant donné que vous ne devez jamais partager publiquement votre travail, sous peine d'être accusé de plagiat.
Notez que cela implique que vous n'avez pas le droit d'utiliser un site de développement collaboratif comme github, bitbucket ou autre, car ils rendent par défaut votre travail accessible au monde entier.