Checklist activité intégrative
ContraintesPréalable
Tous ces éléments sont à observer pour que le travail soit évaluable
-
LaUnestructurearchivedes.zipfichiersestcorresponds à celle montrédéposéedanssur Moodle. - L'archive comporte un projet eclipse mentionnant le
PDFnom et le prénom (une infraction de nommage tolérée sur les 3 itérations) - Le projet
utiliserespecte laversionstructure11demandéede(présenceJavades répertoires src etintègretests,l'interfacefichiersgraphiquesourcesSwingdans - les
Lebonsprojetpaquetages.est-0,25compatible avecsur laversionnoted'Eclipsefinaledeparréférencefichier(voirmalressources informatiques sur Learn)placé) - Les
testsversionsunitairesde Java, Junit et Eclipse sonteffectuésconformes àl'aidecellesdedemandéesJUnit5(une infraction tolérée sur les 3 itérations) -
LeEclipseprojetneutilisementionnele plug-in PMD avec le ruleset donné sur Learn
Acquis d'apprentissages
Respect des principespas delaproblèmeprogrammationdeorientéecompilationobjet(sauf problèmes de liaison au JDK, à JUnit 5)-
Les comportements du programme sont testé à l'aide de tests unitaires Le programme est bien documenté à l'aide de la JavaDoc (et calcul de la CTT si demandée)Les utilisations des interfaces de collections et de ses implémentations sont justifiées
Itération 1
Fonctionalités
AI-1 :1: Créer une partie
En tant que joueur, je souhaite démarrer une nouvelle partie afin de l’afficher à l’écran
L’application démarre en affichant un menu principal composé de deux items : « Nouvelle partie » et « Quitter »-
L’activation de l’item « Nouvelle partie » débute la création d’une partie. La création d’une partie commence par le chargement de la carte depuis le fichier resources/maps/map-sample.txt. Nous vous fournissons à cette fin la classe treasurequest.io.CharArrayFileReader.Une fois la carte chargée, l’application y place des trésors sur les cases creusables. Une case est creusable si elle n’est pas de type Eau.Le nombre de trésors à placer correspond à 10% du nombre de cases creusables, avec au moins 1 trésor à trouver.La valeur d’un trésor est un nombre aléatoire allant de 10 à 20 pièces.Toutes les cases sont non-creusées.Une case active est désignée. Elle correspond à une case du centre de la carte.Le joueur possède une bourse correspondant à 2 fois le nombre de trésors. Cette bourse est exprimée en pièces (s’il y 20 trésors à placer, la bourse de départ du joueur sera de 40 pièces).
Tests d'intégration
Quand je lance l’application, celle-ci me présente le menu principal composé de deux items « Nouvelle partie » et « Quitter »Quand je sélectionne l’item « Quitter », l’application termine son exécution.Quand je sélectionne l’item « Nouvelle partie », l’application change d’écran
AI-2 :2: Voir une partie
En tant que joueur, je souhaite voir l’état d’une partie afin de décider des actions à entreprendre
Une seconde vue présente l’état de la partie.-
Une carte montre les cases. En début de partie, aucune case n’est creusée. La case active de départ est au « centre » de la carte.Un panneau affiche la bourse du joueur, le nombre de trésors à trouver et le cout à payer pour creuser la case active.Creuser une case Sable coute 1 pièce. Le cout des autres types de cases est déduit de cette valeur.
Tests d’acceptation
Important : pour les tests d’acceptation, nous utiliserons des cartes autres que celles fournies.
Quand je lance une nouvelle partie, l’application me présente la carte donnée dans l’exemple.Quand je lance une nouvelle partie, la case active est celle au « centre » de la carteQuand je lance une nouvelle partie, l’application me dit qu’il y a XX trésors à trouver, que le joueur à une bourse de 2*XXQuand je lance une nouvelle partie, l’application m’affiche le cout correct de la case active
AI-3 : Revenir au menu principal
Acquis 1 : Programmer des énoncés de conception en Java selon les principes de la POO
EnSeuiltantdequeréussitejoueur,(tousjesontpeuxàabandonnervaliderunepourpartieobteniretl'acquis)revenir au menu principal, afin d’en relancer une nouvelle.
-
Appuyer[Prog.surProcedurale]laPMDtoucherelève«auEscplus»2quandméthodesunetroppartielonguesestet/ouentropcours permet de revenir à l’écran principal.complexes -
Demander[Cohésion] PMD relève au plus 2 classes comportant 5 attributs ou plus. - [Cohésion] PMD relève au plus 1 classe divine ou une
nouvelleclassepartiederelancedonnées - [Encapsulation] PMD relève au plus 2 attributs d'accès autres que private
- [Encapsulation] Au moins 2 méthodes ou constructeurs respectent le principe de copies défensives pour les collections.
- [Masquage] Les classes métiers respectent la
création d’une nouvelle partie. En particulier, le rechargementloi delaDémétercarte.(2 infractions tolérées) - [RDD] La plupart des types du domaine correspondent aux candidats identifiés pendant l'étape de conception.
- [Polymorphisme] Les paramètres des constructeurs des superviseurs sont des types abstraits (interfaces ou classe abstraite)
- [Polymorphisme] PMD ne lève pas d'alerte LooseCoupling
- [Architecture] Les tests ArchUnit ne révèlent pas de problème d'architecture
TestsAcquis d’acceptation
2 : Valider les comportements des objets programmés par des tests unitaires
Seuil de réussite (tous sont à valider pour obtenir l'acquis)
-
SoitChaque classe du domaine est validée par unepartieclasselancéedeavectest.uneLescaseclassescreusée,dequandtestjesontreviensdéfinisau menu principal et que je relance une nouvelle partie,dans lejeumêmerevientpackageà(maissondansétatlederépertoiredépart.tests). -
SoitL'ensembleunedespartieclasseslancée,dequandtestjeduchangedomainele fichier à charger et que je revienscouvre aumenumoinsprincipal,90%alorsdesl’application présente la carteclasses dunouveaudomaine. - Tous les tests unitaires des classes du domaine réussissent. (1 test en échec toléré)
PhaseAcquis 3 : Documenter son code
Seuil de conceptionréussite et(tous problèmessont à résoudre
valider Seuil de conceptionréussite et(tous problèmessont à résoudre
Diagrammepour deobtenir conceptionl'acquis)
générale
- Les
Candidatstypes et lesResponsabilitéméthodes publics sont documentésontpar de la javadoc inspirée par les éténoncésidentifiées(cf. PMD, 5 fautes tolérées) - Les
cartespréCRCouetpostconditionslesdemandéesliens entre elles ont été faites Le diagramme de séquence/collaboration a été crééLe diagramme de classe a été fait
La classe de fabrique (Factory)
Une classe de fabrique (Factory) est crééefigurent dansle packagedomainscomme les autres classes et sert à synchroniser le jeu sur les différents superviseursLa classe de fabrique est passée aux superviseurs au travers d'une interfaceLes superviseurs se synchronise aveclaclasse de fabriquejavadoc, dansles méthodesonEnteretonLeaveLa classe de fabrique est insanciée dansProgramet est passée au constructeur des superviseurs concernés
La représentation de la carte de cases
Pas de tableau 2D pour preprésenter l'association des coordonnées aux cases et choisir la collection appropriée pour mémoriser la carte et les cases
Questions supplémentaires d'algo et de POO
Questions algorithmiques
Ecrire dans l'entêl’en-tête de la méthodePlayGameSupervisor.onEnterles post-conditions les classesPlayer,
PlayGameSuperviser.onEnter, et lesCaseMapréponses concernent les 3 classes Player, CaseMap et Case
deetlasontcarte doivent respecter après la création de la partie pour pouvoir commencer à creuser/jouer.correctes.-
IndiquerLa CTT demandée est correctement évaluée dansl'entêtelaJavaDocJavadoc de la classe
TreasureQuestGameFactoryCaseMap
Acquis collection4 a: étéJustifier utliisée pour représenter la carte et justifier sonle choix en expliquant les différentes opérations à y effectuer
Questionsdonnées POO
particulière
Seuil de réussite (tous sont à valider pour obtenir l'acquis)
- Les
classeschoix de type de collection sont correctement documentés dans
letreasurequest.domainsetcoden'ontpourpasles cases du terrain delienjeu,avecdansleslavues (tout ce qui pourrait être en dehorsjavadoc dedomains)la classe CaseMap. -
L'encapsulationLes(attributschoixprivate)d'implémentationetsont correctement documentés dans le code pour les cases du terrain de jeu, dans la javadoc de la classe CaseMap. - Degré de maitrise
- Vérifiés SI tous les critères de seuil de réussite ont été observés pour affiner la cote
- PMD ne rélève aucun problème de méthode trop complexe et/ou trop longue
- Plus de 2 méthodes ou constructeurs appliquent le principes de copies dé
fencivesfensives sur les collections - Au moins 2 constructeurs ou méthode de fabrique valident leurs paramètres.
- PMD ne relève aucun problème de type data class ou god object
- Les méthodes ne faisant pas partie du diagramme de classe ou des diagrammes de collaboration sont
bienprivateeffectuées(voiresurprotected) - Le paquetage domain est couvert à 100% par les classes de tests du
domainsmême package. -
EcrireLadesdocumentation de plusieurs méthodescourtesfait état de précondition etpeu complexes (et tenterderespecterpostconditionla règle de Demeter)correctes -
EcrireLesdescollectionsclassessonttimidesutilisées sans réinventer la roue (c'est à dire qui font le boulot et qui ne nécessitepas detout le temps leur demander des choses depuis d'autres classes) Bon usage du polymorphismeBonne utilisation des interfacesAucune alerte PMDTests unitaires JUnit5 dans le dossiertestsqui donne un coverage d'au moins 90% sur chaque classe du domains (pour un degréreprogrammation demaitriseméthodessupplémentaireexistantes,→ coverageou de100%parcoursdeséquentielcesquandclasses)l'accès direct est prévu par exemple)