pyTkMasterMind

Collaboration

Un développement agile

Motivé par le succès des méthodes de développement des logiciels libres, nous avons adopté un processus de développement qui s'inspire des méthodes « agiles ».

Le développement « agile » est une approche de gestion de projet, principalement utilisée dans le développement logiciel, qui repose sur une organisation itérative, incrémentale et collaborative du travail. Contrairement aux méthodes dites « traditionnelles » (comme le modèle en cascade), l’agilité vise à livrer rapidement des versions fonctionnelles d’un produit, à les améliorer en continu grâce aux retours des utilisateurs et à s’adapter facilement aux changements.

Chaque jour, nous avons fait une rapide revue de code ou avons échangé au sujet du projet. L'adoption de Git nous a permis de partager le développement assez facilement (même si la prise en mains de Git a été compliquée). En quelques jours, nous avons fait plus de 80 commits sur Github. Dès que le jeu est devenu « jouable », nous avons fait en sorte de nous concentrer sur la finalisation de l'interface, la correction de quelques rares bugs et le développement de nouvelles fonctionnalités, comme l'introduction de l'intelligence artificielle.

Copie d'écran du projet Github de pyTkInter

Face aux difficultés de prise en mains de Git, nous avons utilisé les pages HTML du projet comme une source de documentation de Git, en faisant évoluer la documentation au fur et à mesure que nous découvrions Git. Ce qui suit dans cette page a été utilisé comme un pense-bête permettant de partager le code sous Git :

Le système de gestion de versions git

Utilisation de Git : premiers pas

git est un outil de gestion décentralisé de version du code créé par Linus Thorvalds. git est installé en standard sur les systèmes d'exploitation Windows et MacOS. Sous Windows, il faudra télécharger git ici.

Pour participer au projet, il est nécessaire de créer un compte sur Github. Il existe deux manières de communiquer avec le git de Github : via HTTPS et avec mot de passe ou via SSH avec une clé SSH. Les utilisateurs de MacOSX et Linux peuvent privilégier la connexion via SSH. Les utilisateurs de Windows qui ne disposent pas de SSH peuvent privilégier la connexion via HTTPS. Quand on a le choix entre les deux modes de connexion, il vaut mieux privilégier SSH.

Si vous vous connectez à Github via HTTPS, il faudra au préalable configurer un jeton d'accès. Pour des raisons de sécurité, cela revient à créer un mot de passe dédié à l'usage de git, différent du mot de passe utilisé pour votre compte Github.

Si vous vous connectez au serveur Github via SSH, il faudra au préalable créer une clée SSH (bien noter le mot de passe qui vous sera demandé à la création) :

ssh-keygen -t ed25519

Cette commande créer un dossier .ssh (dossier caché) à la racinde de votre dossier utilisateur, contenant la clé privée id_ed25519 et de la clé publique id_ed25519.pub. Le contenu de la clé privée doit rester secrète et ne doit jamais être tranmis. Le contenu de la clé publique pourra transmis à un tiers, par exemple à Github. Sur Github installer la clé SSH publique (contenu du fichier id_ed25519.pub) dans le gestionnaire de clés Github.

Ensuite, sur votre ordinateur, il reste à configurer Git :

git config --global user.name "Nom"	#Définit son nom
git config --global user.email "email@example.com"	#Définit son email
git config -l	#Liste la configuration actuelle

Pour récupérer les sources du projet, créer un dossier projet sur votre ordinateur. Depuis le dossier projet créé localement, cloner le repository (dépôt) Github en HTTPS vers votre ordinateur avec cette commande :

git clone https://github.com/ffries/pytkmastermind.git

En SSH, la ligne de commande permettant de cloner est légèrement différente :

git clone git@github.com:ffries/pytkmastermind.git

Le dossier pytkmastermind contient les fichiers du projet et le dossier docs de l'aborescence du site Internet.

ls -lhR pytkmastermind/
pytkmastermind/:
total 52K
-rw-rw-r-- 1 mario mario   17 19 juin  12:55 bac_a_sable.txt
drwxrwxr-x 2 mario mario 4,0K 20 juin  15:36 html
-rw-rw-r-- 1 mario mario  35K 18 juin  18:44 LICENSE
-rw-rw-r-- 1 mario mario  108 20 juin  15:39 pytkmastermind.py
-rw-rw-r-- 1 mario mario   21 18 juin  18:44 README.md

pytkmastermind/docs:
total 16K
-rw-rw-r-- 1 mario mario 2,6K 20 juin  15:36 index.html
-rw-rw-r-- 1 mario mario  801 20 juin  15:04 styles.css

Utilisation de Git : travail collaboratif

Pour connaître le statut de votre dépôt local :

git status

Pour récupérer et fusionner les changements depuis le repository distant vers votre ordinateur :

git pull

Pour ajouter un nouveau fichier au projet :

git add fichier.py

Pour enregistrer les modifications dans l'historique et publier les modifications depuis votre ordinateur vers le repository distant :

git commit -m "Message de log décrivant brièvement les modifications" monfichier.py
git push -u origin main

Quand on travaille à plusieurs, il faudra parfois résoudre les conflits entre les différentes versions du code. Nous avons utilisé l'un des deux outils disponibles pour faire des diff visuels : Meld (MacOS et Linux) et Kdiff3 (Windows, MacOS et Linux). Tout d'abord il faut indiquer à Git l'outil de réconciliation choisi. Dans cet exemple, on choisit Meld :

git config --global merge.tool meld
git config --global mergetool.prompt false
git config --global mergetool.keepBackup false

Ensuite, en cas de conflit, on lance la commande :

git mergetool

Cela ouvre l'outil de réconciliation avec les 3 versions : la version locale, la version distante du git et l'ancêtre commun.

Encore plus simplement, on peut utiliser l'outil pour faire les diffs entre un fichier1.py et un fichier1_encoursdetravail.py. Si le fichier1.py est versionné sur git, on le laisse inchangé et on fait des git pull réguliers pour récupérer les dernières versions. Il suffit de faire un diff entre les deux fichiers pour faire un commit.

Coding guidelines

Fichiers HTML : indentation 2 caractères.

Fichiers Python : indentation 4 caractères.