Aller au contenu principal

Projet 1

Description​

  • Mini-Projet par groupe de 2 personnes.
  • Durée d'un sprint : 1 semaine.
  • Programme : Devinette d'un nombre - Faire deviner un nombre en indiquant plus ou moins.
  • Langage : Python.
  • Interfaces : Console.

Semaine 1​

Spécifications & planification​

  • Former les groupes sur Classroom 50.
  • Cloner le dépôt Git sur chaque ordinateur des membres du groupe.
  • Créer un fichier report.md à la racine du dépôt pour décrire le projet.
  • Définir le MVP (Minimum Viable Product) du projet et le documenter dans report.md.
    • Décrire les fonctionnalités minimales du projet.
    • Par exemple, pour un projet Feuille-Caillou-Ciseaux, le MVP pourrait être :
      • Le joueur peut choisir entre feuille, caillou ou ciseaux en tapant 1, 2 ou 3 dans la console.
      • L'ordinateur choisit aléatoirement entre feuille, caillou ou ciseaux.
      • Le programme affiche le résultat du jeu (gagné, perdu ou égalité).
  • Faire un commit avec les changements et pousser le commit sur le dépôt Git.
  • Vérifier que les changements sont bien sur toutes les machines des membres du groupe.
    • git pull pour récupérer les changements sur les autres machines.
  • Définir les tâches à accomplir pour réaliser le MVP et les documenter dans report.md.
    • Décrire les tâches à accomplir pour réaliser le MVP.
    • Par exemple, pour un projet Feuille-Caillou-Ciseaux, les tâches pourraient être :
      • Demander au joueur de choisir entre feuille, caillou ou ciseaux.
      • Générer aléatoirement le choix de l'ordinateur.
      • Comparer les choix du joueur et de l'ordinateur et déterminer le résultat du jeu.
      • Afficher le résultat du jeu dans la console.
  • Pour chaque tâche, estimer le temps nécessaire pour la réaliser et documenter l'estimation dans report.md.
TâcheTemps estiméTemps passéCommentaire
Estimation10m15m...
............
Total2h1h30...
  • Assigner les tâches aux membres du groupe et documenter l'assignation dans report.md.
  • Faire les tâches assignées et faire un commit à la fin de chaque tâche pour documenter l'avancement du projet.

Exemple de report.md​

# Projet 1 - Feuille-Caillou-Ciseaux

Membres : Alice et Bob

## MVP

- Le joueur peut choisir entre feuille, caillou ou ciseaux en tapant 1, 2 ou 3 dans la console.
- L'ordinateur choisit aléatoirement entre feuille, caillou ou ciseaux.
- Le programme affiche le résultat du jeu (gagné, perdu ou égalité).

## Tâches

| Tâche | Assignation | Temps estimé | Temps passé | Commentaire |
| --------------------------------------------------------------------------------- | ----------- | ------------ | ----------- | ----------- |
| Demander au joueur de choisir entre feuille, caillou ou ciseaux. | Alice | 10m | 15m | ... |
| Générer aléatoirement le choix de l'ordinateur. | Alice | 30m | ... | ... |
| Comparer les choix du joueur et de l'ordinateur et déterminer le résultat du jeu. | Bob | 1h | ... | ... |
| Afficher le résultat du jeu dans la console. | Alice | 15m | ... | ... |
| Total | | 1h55 | 2h30 | ... |

Semaine 2​

Fusion de code​

  • Avoir un dépôt Git propre sur toutes les machines des membres du groupe.
    • Vérifier avec git status qu'il n'y a pas de fichiers modifiés ou non suivis.
    • Vérifier qu'on est synchronisé avec le dépôt distant avec git pull.
  • Définir une personne A et une personne B dans le groupe.
  • A : ajouter dans le fichier report.md : Modification par A et faire un commit sans le pousser.
  • B : ajouter dans le fichier report.md : Modification par B, faire un commit et pousser le commit sur le dépôt distant.
  • Vérifier sur github.com que le commit de B est bien présent.
  • A : faire un "Pull (Rebase)" pour récupérer le commit de B et résoudre les conflits éventuels.
    • À côté de "Changes", cliquer sur > Pull, Push > Pull (Rebase).
    • Le fichier report.md est en conflit :
    • Lorsqu'un fichier est en conflit, git ajoute des marqueurs :
      • <<<<<<< HEAD
        Modification par A
        =======
        Modification par B
        >>>>>>> origin/main
      • Les lignes entre <<<<<<< HEAD et ======= sont les modifications locales (Current Change).
      • Les lignes entre ======= et >>>>>>> origin/main sont les modifications distantes (Incoming Change).
    • Résoudre le conflit en choisissant quelle modification garder et supprimer les marqueurs.
    • Modifier pour qu'il reste : Modification par A et B (sans les marqueurs).
    • Sauvegarder et ajouter dans la staging area avec git add --all.
    • Valider avec git rebase --continue.
    • Pousser le commit sur le dépôt distant avec git push et vérifier sur github.com.
  • Refaire le même exercice en inversant les rôles de A et B.

Séparation du code​

  • Créer un fichier main.py à la racine du dépôt pour contenir le code principal du projet.
  • Voici un exemple d'utilisation des fonctions pour séparer le code dans le fichier main.py :
def demander_choix_joueur():
# Demander au joueur de choisir entre feuille, caillou ou ciseaux.
return choix


def generer_choix_ordinateur():
# Générer aléatoirement le choix de l'ordinateur.
return choix


def comparer_choix(joueur, ordinateur):
# Comparer les choix du joueur et de l'ordinateur et déterminer le résultat du jeu
return resultat


def afficher_resultat(resultat):
# Afficher le résultat du jeu dans la console.


if __name__ == "__main__":
joueur = demander_choix_joueur()
ordinateur = generer_choix_ordinateur()
resultat = comparer_choix(joueur, ordinateur)
afficher_resultat(resultat)
  • Répartir le travail entre les membres du groupe pour implémenter les fonctions dans le fichier main.py.
  • S'entraîner à faire des commits pour chaque fonction et à résoudre les conflits éventuels lors de la fusion du code.

Semaine 3​

Instructions​

  • Au début de chaque semaine, commencer par un sprint planning pour définir les tâches à accomplir.
  • Avancer sur les tâches définies dans le sprint planning durant la semaine.
  • À la fin de chaque semaine, faire un sprint review pour présenter le travail accompli et un sprint retrospective pour discuter de ce qui a bien fonctionné et ce qui pourrait être amélioré.

Sprint Planning​

  • Structurer le travail en tâches claires et simples à réaliser.
  • Lister les tâches à accomplir et estimer le temps nécessaire pour chacune.
  • Prioriser les tâches et sélectionner celles qui seront réalisées durant le sprint.

Sprint Review​

Sprint Retrospective​

Méthodologie

Gestion de projet

Méthodologie

  • La méthodologie de projet structure et organise le travail d'un projet.

  • 1970 : Modèle en cascade (Waterfall)

    • Processus linéaire et séquentiel

  • Évolution de la distribution de logiciels

    • Disques (CD/DVD) : années + physique

    • Cloud (dématérialisé) : heures/minutes + téléchargement

  • 2001 : Méthode agile

    • Processus itératif, incrémental et adaptatif

    • Manifeste Agile : 4 valeurs et 12 principes

Waterfall vs Agile

https://cdnb.ganttpro.com/uploads/2016/11/waterfall-and-agile-methods.jpg

https://blog.ganttpro.com/en/waterfall-vs-agile-with-advantages-and-disadvantages/

Waterfall vs Agile

https://powerslides.com/wp-content/uploads/2019/03/Agile-vs-Waterfall-3.png

https://powerslides.com/powerpoint-business/project-management-templates/agile-vs-waterfall/

F pour passer en plein écran ou O pour afficher la vue d'ensemble.
Versions sans animation, plein écran, imprimable.

Références