Séances 9 — TP : Qualité du modèle et patrons de conception
(Re-)Positionnement dans le dépôt Git de GitLab
Voici la procédure que nous proposons (dans tous les cas « par défaut »). « En cas de panique », veuillez vous reporter à celle qui suit celle-ci.
-
Procédure
« repositionnement »
-
on repart d'un dépôt mis à jour et on continue dans la
branche develop
-
cd ~/CSC4102
cd csc4102-projet
git fetch # prendre connaissance des nouveautés
git branch # quelle est la branche courante ?
si pas déjà dans la branche develop alors « git checkout develop » # se positionner dans la branche
git pull origin develop # accepter les modifications de la branche
si conflit et besoin d'une fusion, « git mergetool --tool=meld » puis « git commit »
-
cd ~/CSC4102
-
on repart d'un dépôt mis à jour et on continue dans la
branche develop
« En cas de panique », veuillez suivre la procédure qui suit :
-
Procédure « nouveau
clonage »
-
on clone à nouveau le dépôt et on continue dans la
branche develop :
-
cd ~/CSC4102
mv csc4102-projet csc4102-projet_old # garder une copie au cas où du contenu n'ait pas été poussé
git clone URL_DE_VOTRE_PROJET
cd csc4102-projet
git checkout develop # positionnement dans la branche develop
-
cd ~/CSC4102
-
on clone à nouveau le dépôt et on continue dans la
branche develop :
Évaluation de la qualité du modèle
- amélioration de la qualité du modèle de l'application, notamment, vérification de la cohérence entre les diagrammes du modèle ainsi qu'avec le code.
Nous ne vous demandons pas de reprendre la modélisation de votre solution pour par exemple améliorer la cohésion fonctionnelle (comme expliquée dans la section 2.3 des diapositives du cours). Nous nous limitons aux questions de cohérence.
Vérifiez la cohérence entre les diagrammes du modèle, et plus particulièrement entre le diagramme de classes et les diagrammes de séquence : par exemple, vérifiez que les messages utilisent des associations qui existent et qui sont navigables dans le sens traversé.
Vérifiez la cohérence entre les diagrammes du modèle et le code, et plus spécialement entre les diagrammes de classes et de séquence, et le code.
Patrons de conception
-
application du patron de conception
«
» ( ) à l'étude de cas,
Étudiez un exemple JAVA (avec la
bibliothèque Flow) du patron de conception
- dans le projet csc4102-exemples, dans le répertoire du code des exemples, dans le paquetage seance9.patrondeconception.publiersouscrire,
- après compilation du code, exécutez la classe Main,
- et parcourez l'exemple avec les classes Main, Consommateur, et Publication.
Le patron de conception
Nous vous conseillons de lire l'énoncé jusqu'à la fin de la section avant de réaliser l'ajout du patron de conception.
Pour insérer le patron de conception pour la notification des décisions :
-
soit vous commencez par la modélisation :
-
modifiez le diagramme de cas d'utilisation pour la
notification des décisions : d'une part le cas
d'utilisation
(« ») notifie l'acteur auteur, et d'autre part, un nouvel argument est ajouté au cas d'utilisation « ajouter un auteur » pour donner le consommateur de notifications à utiliser lors des notifications ; -
modifiez le diagramme de classes pour insérer le patron de
conception
: un nouvel attribut pour le consommateur dans la classe Utilisateur, un attribut de type SubmissionPublisher dans la classe Présidente pour envoyer les notifications, etc. ; -
(optionnel) réalisez le diagramme de séquence du cas
d'utilisation
(« ») ;
-
modifiez le diagramme de cas d'utilisation pour la
notification des décisions : d'une part le cas
d'utilisation
-
soit vous commencez par la programmation :
- dans la classe qui représente un auteur, nous proposons d'ajouter un « producteur » (classe SubmissionPublisher) pour les notifications des décisions ;
- dans la classe Utilisateur, nous proposons d'ajouter un « consommateur » (votre classe de consommation) ;
- lors de la création d'un objet représentant un auteur, nous proposons de lier le consommateur au producteur (appel de la méthode SubmissionPublisher::subscribe) ;
- concernant le type des « publications » envoyées, nous proposons, dans un premier temps, qu'elles contiennent des chaînes de caractères donnant les informations sur le message à modérer : par exemple, avec le libellé de la communication concaténé avec le libellé de la décision ;
-
dans la programmation du cas d'utilisation
(« »), un appel à SubmissionPublisher::submit est effectué pour tous les auteurs d'une communication. Cet appel donne lieu à terme à un appel à ConsommateurNotification::onNext dans tous les consommateurs des auteurs précédemment enregistrés. Dans notre étude de cas, nous proposons que onNext affiche le contenu de la décision. -
les « consommateurs » sont à l'extérieur du
logiciel, c'est-à-dire qu'ils sont créés à l'extérieur et
passés en argument des cas d'utilisation pour être
enregistrés à l'intérieur du système : le consommateur
d'un auteur est passé en argument du cas d'utilisation
« ajouter un auteur » et est gardé en mémoire dans
l'objet représentant l'auteur dans le système. Par ailleurs,
les notifications sont asynchrones, c'est-à-dire que l'on ne
maîtrise pas l'instant d'appel de la
méthode ConsommateurNotification::onNext.
Donc, dans les méthodes de test, après l'appel de la méthode
du cas d'utilisation
(« »), il faut attendre un peu (par exemple avec Thread.sleep(100)) pour laisser le temps à la machine virtuelle de faire apparaître dans la console les publications reçues affichées par onNext ; - enfin, pour que le logiciel soit complet, gérez les autres notifications indiquées dans le cahier des charges.
Continuation du développement de l'application
Vous devez compléter votre logiciel pour qu'il possède toutes les fonctionnalités présentées dans le cahier des charges (cf. la section « Complétude du logiciel » du cahier des charges). Hormis la notification avec le patron de conception Publier/Souscrire, tout le logiciel peut être développé : pour la partie notification, si vous n'avez pas inséré le patron de conception Publier/Souscrire, utilisez un affichage à la console pour indiquer qu'un acteur est notifié.
Nous conseillons de commencer l'étude de ces éléments une fois les
cas d'utilisation
Comme vous avez gagné en autonomie, nous vous laissons organiser votre travail en présentiel et en hors présentiel tout au long des dernières séances. Bien sûr, n'hésitez pas à discuter de vos tâches et de votre solution avec vos responsables de groupe. Lors des travaux à venir, des modifications peuvent impacter la modélisation existante : diagramme de cas d'utilisation, pré-/post-conditions, tables de décision des tests de validation, diagramme de classes, diagrammes de séquence, etc. Pour les nouveaux cas d'utilisation, nous vous laissons décider ce que vous modélisez, la seule obligation étant de fournir les nouveaux élements suivants :
|
Mise à disposition du travail effectué dans le dépôt Git de GitLab
Systématiquement, avant de terminer une séance de travail, que ce soit en salle TP ou chez vous, mettez à jour votre dépôt local (au cas où vous ayez travaillé en parallèle), validez et poussez votre travail :
-
git fetch # charger les modifications non
encore connues localement
git pull origin develop # mettre à jour votre branche develop
et si conflit et besoin d'une fusion, git mergetool --tool=meld -
git status # connaître l'état de votre
arborescence
selon les besoins, pour préparer la zone de transit pour la validation du prochain instantané, git add, git mv, git checkout --, etc.
git commit -m "je dis ce que contient le nouvel instantané" # valider les modifications de la zone de transit
git push origin develop # pousser pour mettre à disposition - connectez-vous à GitLab et vérifiez que votre travail a été poussé.
À LA FIN DU TP DE LA SÉANCE
Avant de quitter le TP, veuillez s'il vous plaît remplir dans la page Partage de votre groupe le tableau d'avancement de votre binôme-projet :
- page Partage du groupe de TP 1 pour le suivi ;
- page Partage du groupe de TP 2 pour le suivi ;
- page Partage du groupe de TP 3 pour le suivi ;
- page Partage du groupe de TP 4 pour le suivi ;
- page Partage du groupe de TP 5 pour le suivi ;
- page Partage du groupe de TP 6 pour le suivi.
C'est aussi le moment de parcourir la grille d'auto-évaluation de la séance.