UNIVERSITE DE LA MANOUBA -----¤¤¤¤-----
ECOLE NATIONALE DES SCIENCES DE L'INFORMATIQUE
ANNEE UNIVERSITAIRE
2017-2018
EXAMEN – Session Principale-Eléments de réponse
Module : Génie Logiciel 1 Niveau : II2
Date : 02 Janvier 2018 Durée : 2H
Enseignants : R. DRIRA, N. BELLAMINE, C. BEN OTHMEN, N. BEN YAHIA, I. FLISS, M.A. MEZGHICH
Questions de réflexion (6pts)
1. Nous avons vu en cours qu’un processus de développement de logiciel se compose, entre autres, des activités principales suivantes : Analyse, Conception, Test. Décrire pour chacune de ces trois activités la fiche suivante:
Entrées de l’activité (input) Sorties de l’activité (output) Description de l’activité :
i. l’objectif (Quoi) ii. les tâches et les principes à appliquer (Comment).
Analyse (total 1, 25pt)
Input : Cahier des charges du projet (0,25)
Output : Cahier des charges du logiciel (point de vue externe du système), document
d’analyse et de spécification (point de vue interne du système) (0,25)
Quoi : Comprendre
le problème, Eliciter
les besoins, spécifier
les besoins
(Fonctionnels, non fonctionnels (+les métriques), du domaine) (0,25)
Comment : analyser l’existant, faire des entretiens, utiliser des techniques d’analyse
des besoins, écrire le cahier des charges (BF, BNF), élaborer le document d’analyse et
de spécification. Principes : absence d’ambigüité, cohérence des besoins, complétude,
etc. (tâche :0,25, Principes : 0,25)
1/4
Coneption (total 1,25pt)
Input : Cahier des charges du logiciel, document d’analyse et de spécification (0,25)
Output : Document de conception : architectures Physique et Logique + document de
la conception détaillé (0,25)
Quoi : Trouver une solution qui répond aux besoins (0,25)
Comment : élaborer l’architecture logique et celle physique, détailler l’architecture
jusqu’à aboutir une solution bien détaillée. Principes : modularité, faible couplage,
Publicité
forte cohésion, abstraction, réutilisation, réutilisabilité, encapsulation. (tâche :0,25,
Principes : 0,25)
Test (total 1,25pt)
Input : Code à tester, tests à effecuer (0,25)
Output : Document de tests (0,25)
Quoi : Trouver des erreurs (0,25)
Comment : effectuer les tests, comparer les résultats attendus et les résultats obtenus,
effectuer la mise au point. Principes : Tester tôt, Tests planifiés, tests traçables, tests
exhaustifs impossibles. (tâche :0,25, Principes : 0,25)
2. Expliquer pourquoi teste-t-on les logiciels. D’après vous, quand les tests d’un
logiciel s’arrêtent ? (0,25*2)
3. Quelle est la différence entre les styles d’architecture MVC et 3-tiers? Dans quel(s) cas choisit-on le premier et/ou le deuxième style architectural ? Expliquer. (différence : 0,5, choix : 0,5)
4. Considérons le cas de conception d’un logiciel de dessin permettant à son utilisateur de placer des formes géométriques sur un canevas et d’enregistrer le résultat dans un format graphique de son choix. Supposons que l’on veuille autoriser l’édition d’une figure via la collaboration (concurrente) de plusieurs utilisateurs. La figure peut alors être stockée dans une base de données pour autoriser la résolution des modifications concurrentes conflictuelles. D’après vous, quel est le style architectural le plus adéquat permettant d’alerter les utilisateurs lorsqu’une contrainte voulue sur le dessin n’est plus vérifiée ? Justifier. Une solution possible : MVC. Justif : modification des données peut être notifiée aux vues. (style : 0,5+Justif :0,25)
Exercice1 (5pts)
2/4
Cette étude a pour objectif d’automatiser correspondance.
Fonctionnement actuel de la billetterie
la gestion d’une billetterie par
Lorsqu’une personne souhaite acheter des billets pour un spectacle, elle doit transmettre une demande précisant ses nom et prénom, son adresse et son numéro de téléphone. Elle doit également préciser le spectacle choisi et le nombre de billets désiré. Chaque demande doit être accompagnée du paiement correspondant à l’achat souhaité, ce paiement s'effectue toujours par chèque. Les demandes de billets par correspondance doivent être reçues par le service de billetterie avant une date de clôture définie. Si la demande arrive après cette date, le service de billetterie envoie un courrier de refus accompagné du paiement.
A la réception de la demande, le service de billetterie vérifie la demande et si le nombre de places demandé est disponible, il envoie les billets au demandeur. S’il n’y a plus de place, un courrier est transmis au demandeur accompagné du paiement. Si le nombre de place ne peut pas satisfaire la demande, le service de billetterie contacte le demandeur pour savoir s’il accepte un nombre inférieur de billets. Le service précise lors de la demande de modification le nouveau paiement à effectuer :
Si le demandeur accepte la modification du nombre de billets, la réponse doit être accompagnée du nouveau paiement (chèque). Les billets sont envoyés au demandeur accompagnés du chèque correspondant au paiement initial.
Si le demandeur refuse, un courrier est transmis accompagné du paiement initial.
Evolution envisagée : Automatisation de la gestion de la demande
Le service de billetterie décide de mettre en place un site Web pour gérer les demandes de billets. Si la date de clôture est dépassée, il n’est plus possible de réserver des places pour le spectacle. Le site permet à un demandeur de saisir les différentes données nécessaires et de choisir le spectacle et le nombre de places. La demande ne peut être validée si certaines données sont manquantes ou si le nombre de places disponibles est inférieur au nombre de places demandées.
Chaque soir, le site transmet au service de réservation, l'ensemble des demandes faites durant la journée.
Si la demande est validée par le service réservation, un numéro de dossier est transmis au demandeur. Ce dernier doit ensuite payer en ligne ses billets en se servant du numéro de dossier. Des billets électroniques sont ensuite envoyés à la réception du paiement.
Travail à faire
1. Identifier les acteurs. (0,5pt)
Acteurs primaires : Demandeur, service de réservation. Les étudiants peuvent mettre comme acteur secondaire le Réseau bancaire (pour le paiement en ligne)
3/4
2. Ecrire les besoins fonctionnels par acteur. (1,5pt) Le système doit permettre au Demandeur de : BF1 : Demander des billets BF1.1- Saisir informations personnelles
BF1.2- Choisir spectacle BF1.3- Préciser le nombre de billets demandé
BF2 :Payer en ligne Le système doit permettre au Service de réservation de : BF3 : Valider les demandes
Publicité
3. Proposer deux besoins non fonctionnels pertinents bien formulés pour ce
système. (0,5*2) Exemples de BNF : Rapidité : le temps de réponse du système ne doit pas dépasser 2s pour toutes les fonctionnalités. Disponibilité : le système doit être disponible à 99% du temps.
4. Proposer une architecture logique de ce système tout en précisant le(s)
style(s) architectural(aux) utilisé(s). Ils peuvent choisir : MVC, 3-couches, 5-couches (1pt)
5. Proposer une architecture physique de ce système tout en précisant le style
architectural utilisé. Ils peuvent proposer : 3-tiers ou 2 Tiers avec un client léger (1pt)
Exercice 2 (5pts)
1. Pour avoir une cohésion forte, une méthode doit avoir une cohésion
fonctionnelle et une classe doit correspondre à une cohésion modèle.
a. Donner un exemple de code java d’une méthode qui représente la
cohésion fonctionnelle. (0,5pt) Ils doivent donner le code d’une méthode qui fait une tâche unique b. Donner un exemple de code java d’une classe qui représente la
cohésion modèle. (0,5pt) Ils doivent donner un exemple de classe avec des attributs qui caractérisent directement la classe et des méthodes qui manipulent toutes ces attributs.
2. Donner, en java, deux exemples d'instructions impliquant un couplage fort
entres modules. (2* 0,5pt) Exemples de réponse : Déclaration de variables globales avec Static et les méthodes utilisent directement ces variables globales au lieu de recevoir en paramètre les valeurs qui leur sont nécessaires Déclaration d’attributs public et accès directment à ces attributs à partir d’une autre classe
4/4
3. Donner le type de couplage entre les classes A et B et entre les classes C et D.
(2* 0,5pt) public class A extends B { … } couplage d’héritage public class C { .. D d; ..} Couplage de composant
4. D’après vous, laquelle des deux relations suivantes : généralisation (héritage) ou la dépendance (utilisation), se traduit par un couplage plus fort ? Argumenter votre réponse. (0,5 : réponse, 0,5 : Justif) L’héritage se traduit par un couplage plus fort. Dans le cas de la dépendance : une classe possède une référence sur une autre classe et généralement va invoquer les méthodes de la classe référencée. Une mise à jour de la classe référencée ne va pas beaucoup impacter la classe qui la référence par rapport à l’héritage : la structure et les méthodes des sous classes dépendent fortement des super classes.
5. Définir brièvement les métriques LCOM et CBO en expliquant le rôle qu’elles
peuvent jouer dans la conception d’un logiciel. (0,5 *2) LCOM : calculer le manque de cohésion dans une classe+ l’étudiant peut donner la formule et l’expliquer. CBO : calculer le nombre de liens de couplage d’une classe. Ces deux métriques permettent d’aider le concepteur a évaluer la forte cohésion et le faible couplage d’une conception orientée objet : les valeurs de LCOM et CBO donnent juste des indications mais l’interprétation définitive des valeurs trouvées est faite par le concepteur.
Exercice3 (4pts)
On cherche à tester un programme dont on attend le comportement suivant : Le
programme lit un mot à partir du clavier. Si le mot a un nombre pair de lettres, le
programme écrit “L contient un nombre pair de lettres” Sinon le programme écrit “L
contient un nombre impair de lettres”.
1. Définir les classes d'équivalence correspondantes à chaque entrée et proposer
un jeu de test pertinent pour chaque classe. (0,5pt)
Classe1 : mot avec un nombre pair de lettres, JT : mot= « test »
Classe2 : mot avec un nombre impair de lettres, JT : mot= « tests »
2. Enrichir le jeu de test proposé afin de prendre en considération les tests aux
limites. (0,25pt)
Limite1 : mot vide
Limite2 : mot avec un seul caractère
Publicité
5/4
Limite2 : mot avec deux caracatères
3. Soit le code suivant où Mot est une séquence de caractères + marque de fin
rangé dans un tableau de [0..N]
1. M <- LireMot 2. L = 0 3. Tant que M[L] != MarqueDeFin faire 4. L = L + 1 5. Fin tantque 6. Si (L mod 2) = 0 7. Alors Ecrire(“L contient un nombre pair de lettres”) 8. Sinon Ecrire(“L contient un nombre impair”) 9. Ecrire(“de lettres”) 10. FinSi 11. Fin
a. Construire le graphe de flot de contrôle associé à ce code en respectant la
numérotation des instructions. (0,5pt)
1
2
3
4
5
6
7
8
9
10
11
b. Par quelle(s) suite(s) de nœuds faut-il passer pour satisfaire le critère de couverture des instructions. Donner un jeu de test satisfaisant ce critère. (0,5pt) Exemple de Suite de nœuds : Ch1 : 1-2-3-4-5-3-6-7-10-11 JT= « a » Ch2 : 1-2-3-6-8-9-10-11 JT= mot vide
Il faut un JT par suite de nœud proposé
6/4
c. On appelle critère de couverture des i-chemins, le critère qui garantit que l’on passe sur tous les chemins possibles en répétant de 0 à i fois chaque boucle. Par quelle suite de nœuds faut-il passer pour satisfaire le critère de couverture des 2-chemins? Donner un jeu de test qui satisfait ce critère. (0,5 pt) 0-Chemin : Ch2 JT=mot vide 1-Chemin : Ch1+1-2-3-4-5-3-6-8-9-10-11 2-Chemin : 1-2-3-4-5-3-4-5-3-6-8-9-10-11 + 1-2-3-4-5-3-4-5-3-6-7-10-11 JT= « aa» d. Calculer le nombre cyclomatique de McCabe avec deux méthodes différentes
en justifiant la réponse. Que représente ce nombre ?(0,75pt) Nombre cyclomatique= E-N+2=11-12+1=3 Nombre cyclomatique= nombre de régions=3 =Nombre de chemins indépendants = le nombre maximum de tests à effectuer pour s'assurer de l’exécution de toutes les instructions au moins une fois.
e. Répondre par « Vrai » ou « Faux » en justifiant (ou en donnant un contre-
exemple) (0,25*4)
a. La couverture des instructions implique la couverture des arcs. Faux b. La couverture des arcs implique la couverture des instructions. Vrai c. La couverture des chemins implique la couverture des arcs. Vrai d. La couverture des chemins implique la couverture des instructions.
Vrai
Bon travail !
7/4