--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes CARA Coding Dojo.
Pour envoyer un message à ce groupe, adressez un e-mail à cara...@googlegroups.com.
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse cara-dojo+...@googlegroups.com.
Pour plus d'options, consultez la page de ce groupe : http://groups.google.com/group/cara-dojo?hl=fr
Bonjour à tous,
Suite au dernier dojo sur Cucumber, et les discussions sur les features, j’ai essayé de définir les features en partant d’une vision PO.
Je suis parti de la définition du mastermind de Wikipedia, ce qui évite toute référence à la technique.
J’ai aussi essayé de respecter la contrainte dont a parlé Rémy : un concept par feature.
J’ai fait 2 étapes :
1. Transformer la définition de wikipedia en features
2. Ne garder que les features essentielles à la mécanique du Mastermind (simulation d’un dialogue PO / équipe développeur)
Je suis intéressé par vos retours sur l’approche, le découpage en features, etc.
Luc
Le résultat final :
Les features :
Feature 09 : Initialiser le code secret
En tant que contrôleur
Afin de permettre de trouver un code secret
Je définit en interne un code secret
Feature 11 : Indiquer le nombre d’éléments de la bonne couleur et bien placés entre la proposition et le code secret
En tant que contrôleur
Afin de permettre de savoir si sa proposition a des éléments de bonne couleur et bien placés par rapport au code secret
J’indique le nombre d’éléments de bonnes couleurs et bien placés
Feature 12 : Indiquer le nombre d’éléments de la bonne couleur et mal placés entre la proposition et le code secret
En tant que contrôleur
Afin de permettre de savoir si sa proposition a des éléments de bonne couleur et mal placés par rapport au code secret
J’indique le nombre d’éléments de bonnes couleurs et mal placés
Feature 13 : Définir un tour de jeu
En tant que tour de jeu
Afin de donner des informations sur la ressemblance entre la proposition et le code secret
J’accepte une proposition
Puis je laisse le contrôleur indiquer la ressemblance entre la proposition et le code secret
Feature 22 : Accepter une proposition
En tant que jeu
Afin de permettre de comparer une proposition au code secret
J’accepte la valeur de cette proposition pour permettre ultérieurement son traitement par le jeu
Feature 23 : Finir la partie en trouvant le code secret
En tant que partie
Afin de déterminer si je me termine à la fin du tour de jeu
Je vérifie que la proposition est identique au code secret
Les scenarii :
Scenario 01 (feature 09) : initialiser le code secret
Given le code secret SECRET
When le jeu commence
Then SECRET a la valeur « RVBJR »
Scenario 02 (feature 11) : tester que la valeur retournée est 2 quand le secret est égal à « RVBJR » et la proposition égale à « RRRRR »
Given le code secret SECRET a pour valeur « RVBJR »
Given la proposition PROPOSITION a pour valeur « RRRRR »
When le test demande le nombre de valeurs bien placées
Then la valeur retournée est 2
Scenario 03 (feature 11) : : tester que la valeur retournée est 1 quand le secret est égal à « RVBJR » et la proposition égale à « RRVVV»
Given le code secret SECRET a pour valeur « RVBJR »
Given la proposition PROPOSITION a pour valeur « RRVVV »
When le test demande le nombre de valeurs bien placées
Then la valeur retournée est 1
Scenario 04 (feature 12) : tester que la valeur retournée est 0 quand le secret est égal à « RVBJR » et la proposition égale à « RRRRR »
Given le code secret SECRET a pour valeur « RVBJR »
Given la proposition PROPOSITION a pour valeur « RRRRR »
When le test demande le nombre de valeurs mal placées
Then la valeur retournée est 0
Scenario 05 (feature 12) : tester que la valeur retournée est 1 quand le secret est égal à « RVBJR » et la proposition égale à « RRVVV»
Given le code secret SECRET a pour valeur « RVBJR »
Given la proposition PROPOSITION a pour valeur « RRVVV »
When le test demande le nombre de valeurs mal placées
Then la valeur retournée est 1
Scenario 06 (feature 13) : tester que le jeu affiche « Bien placés : 2 Mal placés : 0 » quand le secret est égal à « RVBJR » et la proposition égale à « RRRRR »
Given le code secret SECRET a pour valeur « RVBJR »
When la proposition PROPOSITION acceptée a pour valeur « RRRRR »
Then le jeu affiche « Bien placés : 2 Mal placés : 0 »
Scenario 07 (feature 13) : tester que le jeu affiche « Bien placés : 1 Mal placés : 1 » quand le secret est égal à « RVBJR » et la proposition égale à « RRVVV»
Given le code secret SECRET a pour valeur « RVBJR »
When la proposition PROPOSITION acceptée a pour valeur « RRVVV »
Then le jeu affiche « Bien placés : 1 Mal placés : 1 »
Scenario 08 (feature 22) : tester que la valeur retournée est « RRVVV» quand la proposition à accepter est égale à « RRVVV»
Given la proposition à accepter a pour valeur « RRVVV »
When la proposition est acceptée
Then la proposition PROPOSITION est égale à « RRVVV»
Scenario 09 (feature 23) : tester que la partie se termine quand la proposition est identique au code secret
Given le code secret SECRET a pour valeur « RVBJR »
Given la proposition PROPOSITION a pour valeur « RVBJR »
When le test demande à tester si c’est la fin du jeu
Then la valeur retournée est Vrai
Scenario 09 (feature 23) : tester que la partie se termine quand la proposition est identique au code secret
Given le code secret SECRET a pour valeur « RVBJR »
Given la proposition PROPOSITION a pour valeur « RRVVV»
When le test demande à tester si c’est la fin du jeu
Then la valeur retournée est Faux
Note 1 : le test de fin de jeu peut se faire en comparant la taille du mot de passe et le nombre de valeurs bien placées.
Note 2 : dans cette première itération, la notion de perdu n’est pas utile pour tester la mécanique.
Le détail des étapes :
Step 1 : transformation de la définition wikipedia en features => correspond au back-log du PO
PO : « voilà ce que j’attend du projet mastermind »
Définition wikipedia (retrait de la description de la tactique du joueur qui cherche la solution) :
· Présentation
1. Il se présente généralement sous la forme d'un plateau perforé de 10 rangées de quatre trous pouvant accueillir des pions de couleurs.
2. Le nombre de pions de couleurs différentes est de 8 et les huit couleurs sont généralement : rouge ; jaune ; vert ; bleu ; orange ; blanc ; violet ; fuchsia.
3. Il y a également des pions blancs et rouges (ou noirs) utilisés pour donner des indications à chaque étape du jeu.
4. Il existe de nombreuses variantes suivant le nombre de couleurs, de rangées ou de trous.
· Principe
1. Un joueur commence par placer son choix de pions sans qu'ils soient vus de l'autre joueur à l'arrière d'un cache qui les masquera à la vue de celui-ci jusqu'à la fin de la manche.
2. Le joueur qui n'a pas sélectionné les pions doit trouver quels sont les quatre pions, c'est-à-dire leurs couleurs et positions.
3. Pour cela, à chaque tour :
a. le joueur doit se servir de pions pour remplir une rangée selon l'idée qu'il se fait des pions dissimulés.
b. Une fois les pions placés, l'autre joueur indique :
a. le nombre de pions de la bonne couleur bien placés en utilisant le même nombre de pions rouges ;
b. le nombre de pions de la bonne couleur, mais mal placés, avec les pions blancs.
4. Le joueur gagne cette manche s'il donne la bonne combinaison de pions sur la dernière rangée ou avant.
5. Dans tous les cas (de fin de manche), c'est au tour (du joueur qui a cherché le code secret) de choisir les pions à découvrir.
· Variantes
1. Selon le niveau des joueurs, un même jeu peut être rendu plus difficile en autorisant plusieurs pions de la même couleur, voire en autorisant l'absence d'un pion ou de plusieurs.
Traduction en features :
Feature 01 : Définition figée de la taille du code secret (présentation ligne 1)
En tant que tableau de jeu
Afin de définir la taille du code secret
Je suis constitué de rangées de 4 éléments (trous)
Feature 02 : Définition figée du nombre de coups maximal pour trouver le code secret (présentation ligne 1)
En tant que tableau de jeu
Afin de limiter le nombre d’essais pour trouver le code secret
Je limite mon nombre de rangées à 10
Feature 03 : Définition du nombre de valeurs possibles d’un élément (pion) du code secret (présentation ligne 2)
En tant qu’élément du code secret
Afin de définir le nombre de valeurs possibles que je peux prendre
Je limite à 8 possibilités la valeur que je peux prendre
Et les couleurs possibles sont rouge ; jaune ; vert ; bleu ; orange ; blanc ; violet ; fuchsia
Feature 04 : Définition des valeurs possibles d’un élément (pion) du code secret (présentation ligne 2)
En tant qu’élément du code secret
Afin de définir les valeurs possibles que je peux prendre
Je limite les couleurs possibles que je peux prendre à : rouge, jaune, vert, bleu, orange, blanc, violet, fuchsia
Feature 05 : présentation du marquage du nombre de bonnes couleurs bien placées (présentation ligne 3)
En tant que tableau de jeu
Afin de donner au joueur des indications la ressemblance entre sa proposition et le code secret
Je contient un marqueur pouvant indiquer le nombre de bonnes couleurs bien placées par le nombre de pions rouges
Feature 06 : présentation du marquage du nombre de bonnes couleurs mal placées (présentation ligne 3)
En tant que tableau de jeu
Afin de donner au joueur des indications la ressemblance entre sa proposition et le code secret
Je contient un marqueur pouvant indiquer le nombre de bonnes couleurs mal placées par le nombre de pions blancs
Feature 07 : Contrôle des informations retournées par le marqueur (feature définie implicitement, à la limite de la feature technique)
En tant que marqueur
Afin de contrôler la cohérence des indications retournées au joueur
Je vérifie que le total des pions rouges et des pions blancs ne dépasse pas la taille du code secret
Feature 08 : Option : paramétrer la difficulté du jeu (présentation ligne 4)
En tant que tableau de jeu
Afin de changer la difficulté du jeu
Je peux redéfinir les nombres de couleurs, de rangées ou d’éléments du code secret
Note : Feature à redécouper seulement quand cette option est à prendre en compte
Feature 09 : Initialiser le code secret (principe ligne 1)
En tant que contrôleur (joueur qui définit le code secret et qui contrôle sa correspondance avec la proposition du joueur)
Afin de permettre au joueur de trouver un code secret
Je définit, en le cachant, un code secret respectant les règles du jeu
Feature 10 : Faire une proposition (Principe ligne 2)
En tant que joueur
Afin de trouver le code secret
Je fais une proposition de 4 éléments ayant les couleurs possibles du code secret
Feature 11 : Indiquer au joueur le nombre d’éléments de la bonne couleur et bien placés entre sa proposition et le code secret (principe ligne 3ba)
En tant que contrôleur
Afin de permettre au joueur de savoir si sa proposition a des éléments de bonne couleur et bien placés
J’indique dans le marqueur le nombre d’éléments de bonnes couleurs et bien placés par le même nombre de pions rouges
Feature 12 : Indiquer au joueur le nombre d’éléments de la bonne couleur et mal placés entre sa proposition et le code secret (principe ligne 3bb)
En tant que contrôleur
Afin de permettre au joueur de savoir si sa proposition a des éléments de bonne couleur et mal placés
J’indique dans le marqueur le nombre d’éléments de bonnes couleurs et mal placés par le même nombre de pions blancs
Note : les features 11 et 12 (règles du jeu) sont différentes des features 5 et 6 (présentation du résultat)
Feature 13 : Définir un tour de jeu (principe 3)
En tant que règle du jeu
Afin de permettre au joueur de jouer
Je laisse d’abord le joueur faire une proposition,
Puis je laisse le contrôleur indiquer la ressemblance entre la proposition et le code secret
Puis arrêter les tours de jeu si la manche est terminée
Feature 14 : Gagner une manche de jeu (principe ligne 4)
En tant que joueur
Afin de gagner une manche de jeu
Je fais une proposition identique au code secret (chaque élément est de la bonne couleur à la bonne place)
Et au bout de 10 propositions ou moins
Feature 15 : Perdre une manche de jeu (feature définie implicitement à partir de principe ligne 4)
En tant que joueur
Afin de perdre une manche de jeu
Je fais une proposition différente du code secret alors que je suis à ma 10ième proposition
Feature 16 : Définir une fin de manche (feature définie implicitement à partir des features 14 et 15)
En tant que manche
Afin de savoir quand je suis terminée
Je teste si le joueur a gagné ou perdu
Et si le joueur a gagné ou perdu, je m’arrête
Feature 17 : Définir le nombre de propositions par rangée (feature définie implicitement)
En tant que règle du jeu
Afin de limiter le nombre d’essais pour trouver le code secret
Je n’autorise qu’une proposition par rangée
Feature 18 : Garder les propositions précédentes et leurs marqueurs toujours visibles (feature définie implicitement)
En tant que règle du jeu
Afin de permettre au joueur de s’aider de ses propositions précédentes pour trouver le code secret
Je laisse toujours visible les propositions précédentes et leurs marqueurs associés
Feature 19 : Définir une nouvelle manche (Principe ligne 5)
En tant que règle du jeu
Afin de permettre au contrôleur de jouer
Le joueur devient contrôleur
Et le contrôleur devient le joueur
Et quel que soit le résultat de la manche précédente (gagnée ou perdue)
Feature 20 : Option : définir des variantes de règles du jeu (Variantes ligne 1)
En tant que règle du jeu
Afin de changer la difficulté du jeu
Je peux autoriser plusieurs pions de la même couleur, voire autoriser l'absence d'un pion ou de plusieurs.
Note : Feature à redécouper seulement quand cette option est à prendre en compte
Feature 21 : Définir les combinaisons autorisées du code secret (feature définie implicitement par contraposée de Variantes ligne 1)
En tant que règle du jeu
Afin que le joueur puisse trouver le code secret du contrôleur
Je limite les combinaisons du code secret tel que chaque couleur ne peut y être qu’une fois
Et je limite les combinaisons du code secret tel que tous les éléments du code secret a une couleur
Step 2 : Discussion de l’équipe de réalisation avec le PO
Equipe :
Ok, c’est un chouette back-log de production, mais on ne peut pas faire tout cela dans un sprint.
De plus, on a une contrainte technique : le premier sprint sera en mode texte
Quel est le minimum demandé ?
PO : Je veux vérifier au minimum la mécanique du jeu, et donc qu’il y ait :
Un code secret à trouver
Des tours de jeux, tel que :
A une proposition donnée, le programme indique le nombre de pions de bonnes couleurs bien placés et mal placés
Que le jeu s’arrête quand la proposition est identique au code secret
Equipe :
Voici donc les features qui disparaissent pour ce minimum :
Feature 01 : Définition figée de la taille du code secret (présentation ligne 1)
Note : la taille du code secret sera définie lors de la feature 09
Feature 02 : Définition figée du nombre de coups maximal pour trouver le code secret (présentation ligne 1)
Note : le jeu s’arrête quand la proposition est identique au code secret
Feature 03 : Définition du nombre de valeurs possibles d’un élément (pion) du code secret (présentation ligne 2)
Note : cette feature n’est pas nécessaire pour tester la mécanique : la valeur de chaque élément de la proposition est testé avec chaque élément du code secret
Feature 04 : Définition des valeurs possibles d’un élément (pion) du code secret (présentation ligne 2)
Note : cette feature n’est pas nécessaire pour tester la mécanique : la valeur de chaque élément de la proposition est testé avec chaque élément du code secret
Feature 05 : présentation du marquage du nombre de bonnes couleurs bien placées (présentation ligne 3)
Note : l’apparence du marquage n’est pas essentiel. Peut être reporté
Feature 06 : présentation du marquage du nombre de bonnes couleurs mal placées (présentation ligne 3)
Note : l’apparence du marquage n’est pas essentiel. Peut être reporté
Feature 07 : Contrôle des informations retournées par le marqueur (feature définie implicitement)
Note : ce contrôle peut être reporté dans un premier temps
Feature 08 : Option : paramétrer la difficulté du jeu (présentation ligne 4)
Note : c’est une option
Feature 10 : Faire une proposition (Principe ligne 2)
Note : la saisie proprement dite de la proposition n’est pas essentielle pour tester la mécanique, du moment qu’une proposition est fournie aux features 11 et 12.
Feature 14 : Gagner une manche de jeu (principe ligne 4)
Note : remplacée par la feature 22, définie ci-dessous
Feature 15 : Perdre une manche de jeu (feature définie implicitement à partir de principe ligne 4)
Note : la notion de perdu pas nécessaire dans un premier temps.
Feature 16 : Définir une fin de manche (feature définie implicitement à partir des features 14 et 15)
Note : remplacée par la feature 22, définie ci-dessous
Feature 17 : Définir le nombre de propositions par rangée (feature définie implicitement)
Note : il n’y a plus de notion de rangée
Feature 18 : Garder les propositions précédentes et leurs marqueurs toujours visibles (feature définie implicitement)
Note : dans une première version « textuelle », est gérée par défaut par l’affichage, donc pas à gérer explicitement dans le programme
Feature 19 : Définir une nouvelle manche (Principe ligne 5)
Note : remplacée par la feature 22, définie ci-dessous. De plus, le programme est toujours le contrôleur
Feature 20 : Option : définir des variantes de règles du jeu (Variantes ligne 1)
Note : c’est une option
Feature 21 : Définir les combinaisons autorisées du code secret (feature définie implicitement par contraposée de Variantes ligne 1)
Note : ce contrôle n’est pas nécessaire dans une première version
Les features simplifiées à ajouter, pour ce minimum :
Feature 22 : Accepter une proposition
En tant que règle du jeu
Afin de déterminer si la proposition est identique au code secret
Et afin d’indiquer le nombre d’éléments de la bonne couleur bien placés et mal placés de la proposition
J’accepte la valeur d’une proposition pour l’utiliser avec les autres features qui en ont besoin
Feature 23 : Finir la partie en trouvant le code secret (remplace feature 14, 16 et 19)
En tant que partie
Afin de déterminer si je me termine
Je vérifie que la proposition est identique au code secret
Il reste donc les features suivantes :
Feature 09 : Initialiser le code secret (principe ligne 1)
Feature 11 : Indiquer au joueur le nombre d’éléments de la bonne couleur et bien placés entre sa proposition et le code secret (principe ligne 3ba)
Feature 12 : Indiquer au joueur le nombre d’éléments de la bonne couleur et mal placés entre sa proposition et le code secret (principe ligne 3bb)
Feature 13 : Définir un tour de jeu (principe 3)
Feature 22 : Accepter une proposition
Feature 23 : Finir la partie en trouvant le code secret (remplace feature 14, 16 et 19)
Le refactoring des définitions des features est donné en début de mail, ainsi que les scenarii correspondant au features.
De : cara...@googlegroups.com [mailto:cara...@googlegroups.com] De la part de Sébastien Nicouleaud
Envoyé : jeudi 10 mai 2012 14:45
À : cara...@googlegroups.com
Objet : Re: idées pour .features Mastermind