From e38ae9f58d9c34190ac8c14385e789bf6a331f1c Mon Sep 17 00:00:00 2001 From: Thomas Clavier <tom@tcweb.org> Date: Fri, 16 Feb 2024 00:17:56 +0100 Subject: [PATCH] =?UTF-8?q?=C3=87a=20doit=20=C3=AAtre=20bon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 175 ++++++------------ .../java/fr/univlille/iut/info/r402/.keep | 0 .../fr/univlille/iut/info/r402/Etudiant.java | 15 -- .../java/fr/univlille/iut/info/r402/Jury.java | 8 - .../fr/univlille/iut/info/r402/Semestre.java | 10 - .../iut/info/r402/UEAcquisition.java | 5 - .../iut/info/r402/UniteEnseignement.java | 24 --- .../java/fr/univlille/iut/info/r402/.keep | 0 .../univlille/iut/info/r402/JuryStepdefs.java | 4 - .../fr/univlille/iut/info/r402/.keep | 0 .../iut/info/r402/CasSimples.en.feature | 15 -- 11 files changed, 52 insertions(+), 204 deletions(-) create mode 100644 src/main/java/fr/univlille/iut/info/r402/.keep delete mode 100644 src/main/java/fr/univlille/iut/info/r402/Etudiant.java delete mode 100644 src/main/java/fr/univlille/iut/info/r402/Jury.java delete mode 100644 src/main/java/fr/univlille/iut/info/r402/Semestre.java delete mode 100644 src/main/java/fr/univlille/iut/info/r402/UEAcquisition.java delete mode 100644 src/main/java/fr/univlille/iut/info/r402/UniteEnseignement.java create mode 100644 src/test/java/fr/univlille/iut/info/r402/.keep delete mode 100644 src/test/java/fr/univlille/iut/info/r402/JuryStepdefs.java create mode 100644 src/test/resources/fr/univlille/iut/info/r402/.keep delete mode 100644 src/test/resources/fr/univlille/iut/info/r402/CasSimples.en.feature diff --git a/README.md b/README.md index 598a7c5..44ed6c6 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# TP 3 - Qualité de développement +# TP - Qualité de développement ## Documentation à partir des tests @@ -17,9 +17,7 @@ Il existe différentes façons d'utiliser les tests pour documenter un projet.· * Utiliser du **Gherkin pour décrire les scénarios** de tests * **Générer des fichiers structurés** de documentation depuis les tests -### Retour sur le TP 2 - -Dans le [TP2](../tp2/) nous avons testé la dernière option, dans ce TP nous allons utiliser du **Gherkin**. +Dans ce TP nous allons utiliser du **Gherkin** pour produire la documentation executable. ## Gherkin @@ -70,15 +68,16 @@ Créez un fichier `src/test/resources/fr/univlille/iut/info/r402/CasSimple.en.fe # language: en # https://cucumber.io/docs/gherkin/reference/ Feature: Ma première fonctionalité : - En tant qu'étudiant, - il "suffit" d'avoir la moyenne dans toutes les UE de la formation - afin d'avoir son diplome. - - Scenario: Un élève moyen - Given un élève - And son dossier présente une moyenne de 12 dans l'UE 1 au Semestre 1 - When il passe en jury de Semestre 1 - Then son UE 1 du Semestre 1 est validée + En tant que joueur + je peux préparer une pizza + afin de la vendre + + Scenario: Un pizza reine + Given un four + And un pizzaiolo + And le pizzaiolo prépare une pizza reine + When le pizzaiolo met la pizza reine au four + Then au bout de 30 ticks d'horloge, la pizza est cuite ``` En Gherkin, une "**Feature**" (Fonctionalité en français) correspond à une histoire utilisateur dans le monde de l'agilité. @@ -112,24 +111,27 @@ public class RunCucumberTest { #### Créer un fichier java -Créez un fichier `src/test/java/fr/univlille/iut/info/r402/fr.univlille.iut.info.r402.JuryStepdefs.java` et définissez-y les étapes suivantes : +Créez un fichier `src/test/java/fr/univlille/iut/info/r402/fr.univlille.iut.info.r402.PizzaStepdefs.java` et définissez-y les étapes suivantes : ```java -public class JuryStepdefs { - @Given("^un élève") - public void unEleve() { +public class PizzaStepdefs { + @Given("^un four") + public void unFour() { } - @And("son dossier présente une moyenne de {double} dans l'UE {int} au Semestre {int}") - public void sonDossierPresenteUneMoyenneDeDansLUEAuSemestre(double evaluation, int UEId, int semestreId) { + @And("^un pizzaiolo") + public void unPizzaiolo() { } - @When("^il passe en jury de Semestre (\\d+)$") - public void ilPasseEnJuryDeSemestre(int SemestreId) { + @And("^le pizzaiolo prépare une pizza reine") + public void preparerReine() { + } + @When("^le pizzaiolo met la pizza reine au four$") + public void pizzaAuFour() { } - @Then("son UE {int} du Semestre {int} est validée") - public void sonUEDuSemestreEstValidee(int UEid, int semestreID) { + @Then("au bout de {int} ticks d'horloge, la pizza est cuite") + public void pizzaCuite(int ticks) { } } ``` @@ -143,9 +145,7 @@ En effet, il n'y a aucun assert dans notre code. ## Codons la glue -Dans la méthode `sonUEDuSemestreEstValidee` nous nous attendons à avoir quelques chose qui raconte que : - -* pour l'élève défini en première étape, +Dans la méthode `pizzaCuite` nous nous attendons à avoir quelques chose qui raconte que si l'on interroge * en allant rechercher son semestre 1 * puis l'UE 1 * on peut voir que l'UE 1 est Validée @@ -169,21 +169,6 @@ L'étape `ilPasseEnJuryDeSemestre()` va appeler la méthode `deliberation` du ju Finir le code de glue et l'implémentation minimum pour faire passer ce premier test au vert. -## Nouveau test - -Ajouter le scénario suivant dans le fichier `.feature` - -```gherkin - Scenario: Un mauvais élève - Given un élève - And son dossier présente une moyenne de 8 dans l'UE 1 au Semestre 1 - When il passe en jury de Semestre 1 - Then son UE 1 du Semestre 1 n'est pas validée -``` - -* Ajouter la définition d'étape cucumber correspondante -* Le faire passer au vert. - ## Gherkin en français #### Gherkin @@ -194,92 +179,36 @@ Ajoutez un fichier `src/test/resources/fr/univlille/iut/info/r402/CasSimple.fr.f # language: fr # https://cucumber.io/docs/gherkin/reference/ Fonctionnalité: Ma première fonctionalité : - En tant qu'étudiant, - il "suffit" d'avoir la moyenne dans toutes les UE de la formation - afin d'avoir son diplome. - - Scénario: Un élève moyen - Étant donné un élève - Et que son dossier présente une moyenne de 12 dans l'UE 1 au Semestre 1 - Quand il passe en jury de Semestre 1 - Alors son UE 1 du Semestre 1 est validée - - Scénario: Un mauvais élève - Étant donné un élève - Et que son dossier présente une moyenne de 8 dans l'UE 1 au Semestre 1 - Quand il passe en jury de Semestre 1 - Alors son UE 1 du Semestre 1 n'est pas validée + En tant que joueur + je peux préparer une pizza + afin de la vendre + + Scénario: Un pizza reine + Étant donné un four + Et un pizzaiolo + Et le pizzaiolo prépare une pizza reine + Quand le pizzaiolo met la pizza reine au four + Alors au bout de 30 ticks d'horloge, la pizza est cuite ``` -# Implémentation des règles pour valider son année de BUT - -Écrire et implémenter toutes les règles de validation du BUT en TDD avec les tests rédigés en Gherkin. - -## Règlementation - -Le journal officiel présente les conditions de validation du BUT de la façon suivante : - -### 4.3 Conditions de validation - -```txt -Le bachelor universitaire de technologie s'obtient soit par acquisition de chaque unité d'enseignement constitutive, soit par application des modalités decompensation. - -Le bachelor universitaire de technologie obtenu par l'une ou l'autre voie confère la totalité des 180 crédits européens. - -Une unité d'enseignement est définitivement acquise et capitalisable dès lors que la moyenne obtenue à l’ensemble « pôle ressources » et « SAÉ » est égale ou supérieure à 10. - -L'acquisition de l'unité d'enseignement emporte l'acquisition des crédits européens correspondants. +# Le jeu de pizza -À l'intérieur de chaque unité d'enseignement, le poids relatif des éléments constitutifs, soit des pôles «ressources » et « SAÉ », varie dans un rapport de 40 à 60%. En troisième année ce rapport peut toutefois être apprécié sur l’ensemble des deux unités d’enseignement d’une même compétence. +Ajouter de nouvelles fonctionnalités en ATDD ou BDD. Vous pouvez vérifier le taux de couverture technique en utilisant la commande `mvn install site surefire-report:report` avant d'ouvrir la page `x-www-browser target/site/jacoco/index.html`. -La validation des deux UE du niveau d’une compétence emporte la validation de l’ensemble des UE du niveau inférieur de cette même compétence. -``` - -### 4.4 Compensation -```txt -La compensation s’effectue au sein de chaque unité d’enseignement ainsi qu’au sein de chaque regroupement cohérent d’UE. - -Seules les UE se référant à un même niveau d’une même compétence finale peuvent ensemble constituer un regroupement cohérent. - -Des UE se référant à des niveaux de compétence finales différents ou -à des compétences finales différentes ne peuvent pas appartenir à un même -regroupement cohérent. Aucune UE ne peut appartenir à plus d’un regroupement cohérent. - -Au sein de chaque regroupement cohérent d’UE, la compensation est intégrale. Si une UE n’a pas été acquise en raison d’une moyenne inférieure à 10, cette UE sera acquise par compensation si et seulement si l’étudiant a obtenu la moyenne au regroupement cohérent auquel l’UE appartient. -``` - -### 4.5 Règles de progression -```txt -La poursuite d'études dans un semestre pair d’une même année est de droit pour tout étudiant. - -La poursuite d’études dans un semestre impair est possible si et -seulement si l’étudiant a obtenu : la moyenne à plus de la moitié des -regroupements cohérents d’UE ; et une moyenne égale ou supérieure à 8 sur 20 àchaque regroupement cohérent d’UE. - -La poursuite d'études dans le semestre 5 -nécessite de plus la validation de toutes les UE des semestres 1 et 2 dans les conditions de validation des points 4.3 et 4.4, ou par décision de jury. - -Durant la totalité du cursus conduisant au bachelor universitaire de -technologie, l'étudiant peut être autorisé à redoubler une seule fois chaque -semestre dans la limite de 4 redoublements. - -Le directeur de l'IUT peut autoriser un redoublement supplémentaire en cas de force majeure dûment -justifiée et appréciée par ses soins. - -Tout refus d'autorisation de redoubler est pris après avoir entendu l'étudiant à sa demande. -Il doit être motivé et assorti de conseils d'orientation. -``` - -### 4.6 Jury -```txt -Le jury présidé par le directeur de l’IUT délibère souverainement à partir del'ensemble des résultats obtenus par l'étudiant. - -Il se réunit chaque semestre pour se prononcer sur la progression des étudiants, la validation des unités d’enseignement, l’attribution du diplôme universitaire de technologie au terme de l’acquisition des 120 premiers crédits européens du cursus et l’attribution de la licence professionnelle « bachelor universitaire de technologie ». -``` +Toutes les interactions se ferons au clavier à travers une interface texte avec un prompte comme un shell dans lequel on entrera les commandes d'actions : `cuire pizza reine`, `préparer pizza reine`, `voir four`, etc. -### Références -Les textes de références étants : +Fonctionnalités à ajouter : +* Une pizza est cuite au bout de 30s, ajouter une commande pour voir combien il y a de pizza dans le four +* La capacité du four est limité, il n'est pas possible de mettre plus de 3 pizzas dedans +* Il faut faire une action pour vendre une pizza cuite, ajouter l'action `vendre` +* Ajouter le montant de la caisse +* Une pizza cuite depuis plus de 60s est invendable, ajouter une action mettre à la poubelle +* maintenant que vous avez des sous, il va falloir acheter les ingrédients, ajouter l'achat des ingrédients de base pour faire vos différentes pizzas, il n'est alors possible de faire une pizza que si les ingrédients sont en stock. +* Ajouter l'achat d'un four plus grand +* Ajouter des prix différents en fonction des pizzas, avec des prix différents pour les ingrédients. +* Ajouter le fait que les ingrédients ne peuvent pas se garder indéfiniment. +* etc. -* https://www.enseignementsup-recherche.gouv.fr/fr/bo/21/Special4/ESRS2114777A.htm -* https://cache.media.education.gouv.fr/file/SP4-MESRI-26-5-2022/10/0/spe617_annexe1_1426100.pdf +# Lancer des traitements en tache de fond +Avec la classe `Timer` et la méthode `scheduleAtFixedRate` il est possible de lancer un traitement à interval régulier. Il existe aussi une classe `CountDownLatch` pour gérer les comptes à rebourg diff --git a/src/main/java/fr/univlille/iut/info/r402/.keep b/src/main/java/fr/univlille/iut/info/r402/.keep new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/fr/univlille/iut/info/r402/Etudiant.java b/src/main/java/fr/univlille/iut/info/r402/Etudiant.java deleted file mode 100644 index ce8163d..0000000 --- a/src/main/java/fr/univlille/iut/info/r402/Etudiant.java +++ /dev/null @@ -1,15 +0,0 @@ -package fr.univlille.iut.info.r402; - -public class Etudiant { - - public void ajouteSemestre(Semestre semestre) { - } - - public UniteEnseignement getUEForSemestre(int uEid, int semestreID) { - return null; - } - - public Semestre getSemestre(int semestreId) { - return null; - } -} diff --git a/src/main/java/fr/univlille/iut/info/r402/Jury.java b/src/main/java/fr/univlille/iut/info/r402/Jury.java deleted file mode 100644 index 2288174..0000000 --- a/src/main/java/fr/univlille/iut/info/r402/Jury.java +++ /dev/null @@ -1,8 +0,0 @@ -package fr.univlille.iut.info.r402; - -public class Jury { - - public Semestre deliberation(Semestre semestre) { - return null; - } -} diff --git a/src/main/java/fr/univlille/iut/info/r402/Semestre.java b/src/main/java/fr/univlille/iut/info/r402/Semestre.java deleted file mode 100644 index ec0cda8..0000000 --- a/src/main/java/fr/univlille/iut/info/r402/Semestre.java +++ /dev/null @@ -1,10 +0,0 @@ -package fr.univlille.iut.info.r402; - -public class Semestre { - public Semestre(int id, UniteEnseignement... toutesLesUe) { - } - - public UniteEnseignement getUE(int uEid) { - return null; - } -} diff --git a/src/main/java/fr/univlille/iut/info/r402/UEAcquisition.java b/src/main/java/fr/univlille/iut/info/r402/UEAcquisition.java deleted file mode 100644 index 6a2b2d7..0000000 --- a/src/main/java/fr/univlille/iut/info/r402/UEAcquisition.java +++ /dev/null @@ -1,5 +0,0 @@ -package fr.univlille.iut.info.r402; - -public enum UEAcquisition { - Validee, NonValidee; -} diff --git a/src/main/java/fr/univlille/iut/info/r402/UniteEnseignement.java b/src/main/java/fr/univlille/iut/info/r402/UniteEnseignement.java deleted file mode 100644 index 2c29b91..0000000 --- a/src/main/java/fr/univlille/iut/info/r402/UniteEnseignement.java +++ /dev/null @@ -1,24 +0,0 @@ -package fr.univlille.iut.info.r402; - -public class UniteEnseignement { - private final double note; - private int id = 0; - private UEAcquisition acquisition = UEAcquisition.NonValidee; - - public UniteEnseignement(int id, double note) { - this.id = id; - this.note = note; - } - - public UEAcquisition getAcquisition() { - return this.acquisition; - } - - public void setAcquisition(UEAcquisition acquisition) { - this.acquisition = acquisition; - } - - public double getNote() { - return note; - } -} diff --git a/src/test/java/fr/univlille/iut/info/r402/.keep b/src/test/java/fr/univlille/iut/info/r402/.keep new file mode 100644 index 0000000..e69de29 diff --git a/src/test/java/fr/univlille/iut/info/r402/JuryStepdefs.java b/src/test/java/fr/univlille/iut/info/r402/JuryStepdefs.java deleted file mode 100644 index 751cfb6..0000000 --- a/src/test/java/fr/univlille/iut/info/r402/JuryStepdefs.java +++ /dev/null @@ -1,4 +0,0 @@ -package fr.univlille.iut.info.r402; - -public class JuryStepdefs { -} diff --git a/src/test/resources/fr/univlille/iut/info/r402/.keep b/src/test/resources/fr/univlille/iut/info/r402/.keep new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/fr/univlille/iut/info/r402/CasSimples.en.feature b/src/test/resources/fr/univlille/iut/info/r402/CasSimples.en.feature deleted file mode 100644 index 18b5304..0000000 --- a/src/test/resources/fr/univlille/iut/info/r402/CasSimples.en.feature +++ /dev/null @@ -1,15 +0,0 @@ -# language: en -# https://cucumber.io/docs/gherkin/reference/ -Feature: - - Scenario: Un élève moyen - Given un élève - And son dossier présente une moyenne de 12 dans l'UE 1 au Semestre 1 - When il passe en jury de Semestre 1 - Then son UE 1 du Semestre 1 est validée - - Scenario: Un mauvais élève - Given un élève - And son dossier présente une moyenne de 8 dans l'UE 1 au Semestre 1 - When il passe en jury de Semestre 1 - Then son UE 1 du Semestre 1 n'est pas validée \ No newline at end of file -- GitLab