CSC 4102 – Introduction au génie logiciel pour applications orientées objet

Portail informatique

Séances 9 (nouvelle version) — TP : Qualité du modèle et patrons de conception

É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,
dans ce qui suit, nous dessinons une vue haut niveau, qui se veut cependant tendre vers la complétude des tâches à effectuer pour l'insertion du patron de conception .
Nous ne nous attendons pas à ce que la modélisation et la programmation soient terminées à la fin de la séance 9. En effet, ce sont les dernières tâches que nous vous demandons et vous avez jusqu'à la fin de la séance 10 pour les réaliser.

É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 seance8.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 est utilisé dans le cas d'utilisation («  ») : lorsqu'un message est posté dans un réseau social par un membre, si le membre n'est pas un modérateur ou une modératrice, les modérateurs et modératrices sont notifiés du nouveau message. 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 demandes de modération des messages postés dans les réseaux sociaux :

  • soit vous commencez par la modélisation :
    • modifiez le diagramme de cas d'utilisation pour la notification du nouveau message posté : d'une part le cas d'utilisation («  ») notifie l'acteur modérateur, et d'autre part, un nouvel argument est ajouté au cas d'utilisation « ajouter un utilisateur » pour donner le consommateur de notifications à utiliser pour être notifié;
    • 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 qui représente un réseau social pour envoyer les notifications, etc. ;
    • modifiez les diagrammes de séquence des cas d'utilisation («  ») et («  ») pour ajouter l'enregistrement du consommateur au SubmissionPublisher du réseau social ;
    • modifiez le diagramme de séquence du cas d'utilisation («  ») pour ajouter la notification vers les modérateurs et modératrices dans le cas où le posteur n'est pas un modérateur (n'hésitez pas à utiliser un ou des fragments ref lorsqu'un diagramme de séquence se complexifie un peu trop) ;
  • soit vous commencez par la programmation :
    • dans la classe qui représente un réseau social, nous proposons d'ajouter un « producteur » (classe SubmissionPublisher) pour les notifications de nouveaux messages postés ;
    • dans la classe Utilisateur, nous proposons d'ajouter un « consommateur » (votre classe de consommation) pour enregistrer le consommateur lorsque l'utilisateur est ajouté à un réseau social (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 nom du réseau social et le contenu du message posté avec son horodatage ;
    • lors du cas d'utilisation («  »), lorsque le posteur est un modérateur, l'objet (de l'intérieur du système) représentant le réseau social concerné par le nouveau message posté utilise la méthode SubmissionPublisher::submit pour envoyer une notification de nouveau message posté dans le réseau social : un appel à SubmissionPublisher::submit donne lieu à terme à un appel à ConsommateurNotification::onNext dans tous les consommateurs précédemment enregistrés. Dans notre étude de cas, nous proposons que onNext affiche le contenu de la publication reçue.
    • les « consommateurs » sont à l'extérieur du logiciel. 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 ;
    • de manière similaire, ajoutez ce qu'il faut pour que le cas d'utilisation « modérer un message » provoque une notification ;
    • enfin, pour que le logiciel soit complet, gérez les différentes stratégies de notification expliquées dans le cahier des charges.

Continuation du développement de l'application

dans cette section, nous présentons les éléments pour la seconde partie du module. Vous êtes en autonomie et devez lisser votre charge de travail sur les dernières séances. En termes de priorité, les remarques faites lors des suivis sont prioritaires.

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 («  »), («  »), et («  ») programmés et testés sans le mécanisme des notifications.

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 :

  • précondition et postcondition de («  ») ;
  • tables de décision des tests de validation de («  ») ;
  • programmation du cas d'utilisation («  ») ;
  • programmation des tests de validation du cas d'utilisation («  »).

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 :

C'est aussi le moment de parcourir la grille d'auto-évaluation de la séance.