Partiel GL
Le sujet se présente sous la forme de 3 dossiers indépendants. ... Annexe 4 :
Tableau de la répartition actuelle des tâches de gestion commerciale relatives au
..... Olonzac. MAU. Maubec. SAS. Saint André de Sangonis. SMA. Saint Maximin.
part of the document
M1 : Ingénierie du Logiciel
Université Pierre & Marie Curie (Paris VI)
Examen de décembre 2006 (2 heures avec documents)
Questions de cours [5 Pts]
Q1.1 : Quelles sont les différences entre les dépendances structurelles et les dépendances fonctionnelles ?
Les dépendances fonctionnelles apparaissent entre composants, lorsquun composant fait appel à une opération offerte par un autre composant. Il dépend alors des fonctions fournies par lautre composant. Il na pas besoin par contre de connaître la structure interne de ce composant.
Les dépendances structurelles apparaissent lorsquun lorsquune classe dun composant dépend de la structure dune classe (héritage, association, typage des attributs ou des paramètres) dun autre composant. Le composant a donc besoin de connaître la structure interne de lautre composant (cest interdit en IL).
Barème :
+40% par explication
+20% si précision que les dépendances fonctionnelles sont autorisées entre les composants et pas les dépendances structurelles.
0% sinon
Q1.2 : Peut-on dire quune bonne conception est une conception qui défini une solution répondant aux besoins spécifiés lors de lanalyse (ni plus, ni moins) ?
Non, il faut aussi quelle soit flexible, performante, robuste, efficace
La complétude et la justesse ne sont pas les seuls critères.
Barème :
100% si tout
0% sinon
0% si conception = uniquement la solution dun problème (cela nest alors pas une BONNE conception)
Q1.3 : En conception, est-il possible de résoudre plus de besoins que ceux spécifiés en analyse ?
Oui, il est par exemple possible de réutiliser un composant qui fait bien plus que nécessaire. Dans un des TD par exemple, un des composants utilisait une mémoire cache afin daller plus vite. La mémoire cache nest pas nécessaire et pourtant elle améliore la conception.
Barème :
100% si tout
0% si autre explication peu convaincante.
Q1.4 : Le diagramme de cas dutilisation suivant représente certaines fonctionnalités dun outil UML. En considérant que la vérification du modèle vérifie que le modèle est bien un modèle UML, discutez des relations dinclude.
Ces relations dinclusion sont tout à fait possible car il est fort à parier quune vérification soit faite avant toute génération de code et de documentation. De plus, il est tout à fait envisageable de faire en sorte que lutilisateur bénéficie de cette fonctionnalité.
Barème :
100 % si tout
50 % si explication correcte sur la non nécessité des includes (ceux-ci ne sont en effet pas obligatoire, on peut sen sortir avec des pré-condition).
50 % si explication de ce que veut dire le diagramme sans réelle discussion.
0 % si explication douteuse sur les include (genre, non cest interdit parce que on a dit en cours que cétait interdit).
Q1.5 : Quel est lintérêt de la phase de conception par rapport à la phase de réalisation ? En dautres mots, est-il possible de passer directement de lanalyse à la réalisation ?
La phase de conception permet dêtre indépendant dune plate-forme. Si lindépendance nest pas un objectif, on peut sen passer.
Barème :
100 % si tout.
50% si justification assez précise sur lintérêt dune découpe en composant (dépendance entre composant et vue abstraite)
0 % sinon.
Problème: Conception et Réalisation de eB6 [15 Pts]
Après leur partiel de IL, des étudiants de master ont décidé de réaliser la phase de conception du logiciel eB6. Ils ont décidé de ne pas refaire une analyse et de ne se baser que sur les diagrammes suivants.
Description des cas dutilisation :
Sinscrire comme acheteur : un utilisateur peut sinscrire comme acheteur.
Sinscrire comme vendeur : un utilisateur peut sinscrire comme vendeur.
Regarder les objets mis en vente : un utilisateur ou un acheteur peuvent regarder tous les objets mis en vente.
Poser une enchère sur un objet mis en vente aux enchères : un acheteur peut poser une enchère sur un objet qui a déjà été mis en vente et qui nest pas encore vendu.
Acheter directement un objet mis en vente directement : un acheteur peut acheter directement un objet si celui-ci a été mis en vente directement. Le premier acheteur a acheter directement lobjet peut alors traiter avec le vendeur.
Mettre un objet en vente : un vendeur peut mettre un objet en vente soit aux enchères soit en vente directement.
Diagramme de cas dutilisation danalyse et diagrammes de classes danalyse (ne représentant que les classes métiers):
Les étudiants proposent la découpe en composants suivantes :
Un composant GestionUtilisateur responsable des inscriptions des utilisateurs (en tant quacheteur et vendeur) et responsable de lauthentification des utilisateurs.
Un composant GestionObjet responsable de la gestion des objets mis en vente par les vendeurs. Ce composant est aussi responsable de la recherche des objets en fonction catégories ou de mots clé.
Un composant GestionEnchère responsable de la gestion des enchères. Ce composant enregistre les enchères et sélectionne la meilleure enchère lors de léchéance de la vente.
Un composant IHM qui représente linterface homme machine de lapplication.
Le diagramme suivant ne représente que les interfaces offertes des composants.
Question 2.1 : Spécifiez les opérations des interfaces IObjet et IEnchère.
Dans IObject, il faut voir apparaître une opération pour ajouter un objet et deux opérations pour rechercher les objets (par mots clés et par catégories). Il faut voir les paramètres de ces opérations (pas de dépendance structurelle !)
Dans IEnchère, il faut une opération permettant lajout dune nouvelle enchère et une opération permettant dobtenir la meilleure enchère pour un objet mis en vente. Il faut voir les paramètres de ces opérations (pas de dépendance structurelle !).
Barème :
50% par interface
25% pour les opérations
25% pour les paramètres sans dépendance structurelle
Question 2.2 : Réalisez un diagramme de séquence de conception pour la mise en vente par enchère dun objet par un vendeur ainsi que lachat par deux acheteurs. Il est demandé de ne montrer que les interactions entre composants.
Il faut voir apparaître au moins une instance pour les composants (GestionEnchère,GestionObjet et IHM). 10%
Si lauthentification est traitée il faut voir apparaître une instance de GestionUtilisateur. 10%
Il faut voir apparaître 3 acteurs (un vendeur et deux acheteurs) 10%
Les acteurs ne doivent communiquer quavec linstance de IHM 10%.
Il faut voir apparaître lajout dune nouvelle enchère : communication du vendeur vers linstance IHM puis communication de linstance IHM vers linstance de GestionObject 20%
Il faut voir apparaître les 2 dépôts dune enchère : communication du vendeur vers linstance IHM (pour récupérer lidentification de lobjet puis pour déposer une enchère) communication de linstance IHM vers linstance GestionEnchère (pour le dépôt effectif de lenchère) 20%
Les paramètres doivent être précis 20%
Si lauthentification est pleinement modélisée 20%
Toute faute (responsabilité, paramètre, nom dinstance, oubli de message, message superflu,
) -10%
Question 2.3 : Définissez les interfaces requises des composants et précisez leurs dépendances (justifier vos choix).
Idéalement il faut que IHM dépende des autres composants et cest tout.
Néanmoins, il faut aussi et surtout que les dépendances soit cohérentes avec le diagramme de séquence de la question précédente.
Barème :
100% si que des dépendances de IHM vers les autres et cohérence avec le diagramme de séquence
50% si les dépendances sont cohérentes avec le diagramme de séquence (sans réelle reflexion)
0% sinon, ou si rajout de dépendance structurelle.
Question 2.4 : On considère que le composant GestionEnchère contient une classe représentant les enchères (Enchere) et que le composant GestionUtilisateur contient une classe représentant les acheteurs (Acheteur). Pour gérer la résolution des enchères, c'est-à-dire lélection de lenchère la plus haute, les étudiants proposent la conception suivante :
La classe Juge est la classe qui contient lalgorithme délection des enchères (dans lopération jugerEnchèresCourantes). Cette classe référence un unique chronomètre qui lui permet de connaître le temps écoulé et ainsi délire les enchères dont la date limite de la vente est arrivée à échéance. Une enchère est ouverte tant que la date limite de la vente nest pas arrivée à échéance, après cela le juge ferme lenchère (grâce à lopération fermer). Ensuite, le juge élit uniquement lenchère la plus haute (grâce à lopération elir).
Afin de notifier lacheteur que son enchère a été élue, les étudiants proposent dappliquer le pattern Observer. Lenchère est ainsi considérée comme un sujet alors que lacheteur est considéré comme un observeur.
Expliquez pourquoi cette conception ne suit pas les principes de conception énoncés en cours puis corrigez-la.
Lutilisation de ce pattern est complètement fausse. En effet, il y a ici une confusion entre la classe Acheteur lacteur Acheteur. Le réel besoin est de notifier lacteur Acheteur (et non pas la classe Acheteur).
De plus, ce pattern met en place des dépendances structurelles entre les classes des différents composants (Acheteur et Enchere) !
La meilleure chose à faire est de faire supprimer ce pattern (il ne sert à rien).
Une autre possibilité est de modifier ce pattern pour faire disparaître les dépendances structurelles (il est possible dutiliser des identifiants pour lier les sujets des observateurs (cela laisse néanmoins une double dépendance fonctionnelle entre les composants).
Barème :
100 % si le pattern est supprimé
50 % si les dépendances structurelles sont modifiées en dépendances fonctionnelles.
50 % si identification du problème comme étant une mauvaise application du pattern observer (sans résolution)
25 % si identification du problème comme étant une dépendance structurelle (sans résolution)
Question 2.5 : Les étudiants souhaitent maintenant effectuer la réalisation de la classe Juge sur la plate-forme Java (vous pouvez faire cette question que vous ayez corrigé ou pas la conception lors de la question 2.4). Etant donné que lélection des enchères doit seffectuer tout le temps, les étudiants souhaitent utiliser la classe Java Thread. La classe Thread permet de construire un nouveau processus et de lui affecter un traitement (dans lopération run() de la classe Thread). Les étudiants souhaitent que le juge construise un nouveau Thread (dès linstanciation du juge) et que ce Thread réalise en continu lopération jugerEnchèresCourantes(). De plus, les étudiants souhaitent utiliser la classe Java Calendar qui permet dobtenir, grâce à lopération int getTime(), la date précise du moment (en milliseconde). Proposez un diagramme de classe illustrant la réalisation de la classe Juge (en ajoutant le code Java des méthodes que vous jugerez utiles de préciser).
Juge doit être associé avec une classe (EnchereEngine) qui hérite de Thread (30%)
La méthode run de cette classe doit faire appel à lopération jugerEnchèresCourantes() 20%
Cette classe doit être reliée à la classe Calendar (cest elle qui a besoin du temps pour savoir quelles enchères calculer). 20%
Cette classe doit pouvoir atteindre les enchères gérée par le Juge (association myLord) (30%)
Il y a bien sûr dautres conceptions qui tiennent la route.
Par contre, une conception qui ne fait que lier Juge à Thread et Calendar mérite 0% (il ne suffit pas de recopier lénoncé).
Question 2.6 : Etant donné quune enchère passe par plusieurs états, définissez la machine à état de la classe Enchère puis identifiez une faute et réalisez un diagramme de séquence de test visant à révéler cette faute.
Les états dune enchères sont : ouverte (avec un montant), fermé, élu
La machine à état devrait être celle-ci :
A partir de là, il nest pas très difficile didentifier des fautes. Par exemple, pouvoir pouvoir élir une enchère alors quelle nest pas fermée.
Barème :
40% pour la machine à état
40% pour la faute
20 % pour le cas de test sous forme dun diagramme de séquence.
Maîtrise dInformatique - Module Ingénierie du Logiciel Exam : 21 décembre 2006
Page PAGE 3