Checklist activité intégrative
Contraintes
Cette checklist est pour l'itération 1 mais la seule chose qui change au itérations suivantes sont les AI à valider.
Préalablegénérales
Tous ces éléments sont à observer pour que le travail soit évaluable
-
UneLaarchivestructure.zipdesestfichiersdéposécorresponds à celle montréesur Moodle. L'archive comporte un projet eclipse mentionnantdans lenom et le prénom (une infraction de nommage tolérée sur les 3 itérations)PDF- Le projet
respecteutilise lastructureversiondemandée11(présencededes répertoires srcJava ettests,intègrefichiersl'interfacesourcesgraphiquedansSwing -
bonsLepaquetages.projet-0,25est compatible avec la version d'Eclipse de référence (voir ressources informatiques surla note finale par fichier mal placé)Learn) - Les
versionstests unitaires sont effectués à l'aide deJava, Junit et Eclipse sont conformes à celles demandées (une infraction tolérée sur les 3 itérations)JUnit5 -
EclipseLeneprojetmentionneutilisepasle plug-in PMD avec le ruleset donné sur Learn
Acquis d'apprentissages
- Respect des principes de
problèmeladeprogrammationcompilationorientée(sauf problèmes de liaison au JDK, à JUnit 5)objet - 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 carte
- Quand je lance une nouvelle partie, l’application me dit qu’il y a XX trésors à trouver, que le joueur à une bourse de 2*XX
- Quand je lance une nouvelle partie, l’application m’affiche le cout correct de la case active
AI-3 : Revenir au menu principal
En
Acquistant 1que :joueur, Programmerje despeux énoncésabandonner deune conceptionpartie et revenir au menu principal, afin d’en Javarelancer
selonune les principes de la POO
Seuil de réussite (tous sont à valider pour obtenir l'acquis)nouvelle.
-
[Prog.AppuyerProcedurale]surPMDlarelèvetoucheau«plusEsc2»méthodesquandtropunelonguespartieet/ouesttropencomplexescours permet de revenir à l’écran principal. -
[Cohésion] PMD relève au plus 2 classes comportant 5 attributs ou plus. [Cohésion] PMD relève au plus 1 classe divine ouDemander uneclassenouvelle partie relance la création d’une nouvelle partie. En particulier, le rechargement dedonné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 respectentlaloi de Déméter (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'architecturecarte.
AcquisTests 2 : Valider les comportements des objets programmés par des tests unitaires
d’acceptation
Seuil de réussite (tous sont à valider pour obtenir l'acquis)
-
Chaque classe du domaine est validée parSoit uneclassepartie lancée avec une case creusée, quand je reviens au menu principal et que je relance une nouvelle partie, le jeu revient à son état detest. Les classes de test sontdéfinis dans le même package (mais dans le répertoire tests).part. -
L'ensembleSoitdesuneclassespartiedelancée,testquand je change le fichier à charger et que je reviens au menu principal, alors l’application présente la carte dudomainenouveaucouvre au moins 90% des classes du domaine. Tous les tests unitaires des classes du domaine réussissent. (1 test en échec toléré)fichier
Acquis 3 : Documenter son code
générale
SeuilPhase de
réussiteconception(tousetsontproblèmes àvaliderrésoudrepourDiagramme
obtenirdel'acquis)conception
- Les
typesCandidats et lesméthodes publics sont documentéResponsabilitéspar de la javadoc inspirée par lesont énoncésté(cf. PMD, 5 fautes tolérées)identifiées - Les
précartesouCRCpostconditionsetdemandéeslesfigurentliens 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éée dans le package
domains
comme les autres classes et sert à synchroniser le jeu sur les différents superviseurs - La classe de fabrique est passée aux superviseurs au travers d'une interface
- Les superviseurs se synchronise avec la
javadoc,classe de fabrique dansl’en-têles méthodesonEnter
etonLeave
- La classe de fabrique est insanciée dans
Program
et 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ête de la méthode
PlayGameSuperviser.onEnter,PlayGameSupervisor.onEnter
les post-conditions les classesPlayer
,CaseMap
et lesréponsesCase
concernentdelesla3carteclassesdoiventPlayer,respecterCaseMapaprèsetlaCasecréationetdesontlacorrectes.partie pour pouvoir commencer à creuser/jouer. -
La CTT demandée est correctement évaluéeIndiquer danslal'entêteJavadocJavaDoc de la classeTreasureQuestGameFactoryCaseMap
l'interface de collection a été utliisée pour représenter la carte et justifier son choix en expliquant les différentes opérations à y effectuer - Indiquer dans cette même JavaDoc quelle implémentation de la collection a été utilisée pour représenter la carte et justifier son choix en déterminant la CTT des principales opérations utilisées dans l'itération 1
- Indiquer la CTT du placement des trésors sur les cases creusables dans la javadoc en entête de CaseMap (Pour répondre à cette question, examinez la partie de votre code concernée, et identifiez les boucles, les imbrications, mais aussi les collections utilisées et leurs opérations ou les appels de sous-méthodes ou de méthodes d’autres objets. Quand vous répondez, n’oubliez pas d’indiquer à quoi correspondent vos libellés N,M, etc)
- Les Superviseurs collabore avec la fabrique (Factory) de Game au travers d'une interface
AcquisQuestions 4 : Justifier le choix d'une structure de données particulière
POO
Seuil de réussite (tous sont à valider pour obtenir l'acquis)
- Les
choixclasses sont danstreasurequest.domains
et n'ont pas detypelien avec les vues (tout ce qui pourrait être en dehors decollectiondomains
) - L'encapsulation (attributs private) et les copies défencives sont
correctementbiendocumentéseffectuées sur toutes les classes du domains - Ecrire des méthodes courtes et peu complexes (et tenter de respecter la règle de Demeter)
- Ecrire des classes timides (c'est à dire qui font le boulot et qui ne nécessite pas de tout le temps leur demander des choses depuis d'autres classes)
- Bon usage du polymorphisme
- Bonne utilisation des interfaces
- Aucune alerte PMD
- Tests unitaires JUnit5 dans le
codedossierpourtests
lesquicasesdonne un coverage d'au moins 90% sur chaque classe duterraindomains (pour un degré dejeu,maitrisedanssupplémentairela→javadoccoverage dela classe CaseMap. Les choix d'implémentation sont correctement documentés dans le code pour les cases du terrain100% dejeu,cesdans la javadoc de la classe CaseMap.classes)
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 longuePlus de 2 méthodes ou constructeurs appliquent le principes de copies défensives sur les collectionsAu 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 objectLes méthodes ne faisant pas partie du diagramme de classe ou des diagrammes de collaboration sont private (voire protected)Le paquetage domain est couvert à 100% par les classes de tests du même package.La documentation de plusieurs méthodes fait état de précondition et de postcondition correctesLes collections sont utilisées sans réinventer la roue (pas de reprogrammation de méthodes existantes, ou de parcours séquentiel quand l'accès direct est prévu par exemple)