🧪 TP3 – QUIZ
Le TP doit être développé à l'aide du logiciel Git. Vous devrez créer un nouveau dépôt dans GitHub et inviter votre professeur en tant que collaborateur.
Voici le format du dépôt exigé: H26-2P6-TP3-MATRICULE
- Créer des commits réguliers et des messages de commit clairs et correctes
- Évitez de faire un seul commit à la fin du projet.
- Tout travail sans dépôt GitHub ou avec un dépôt inaccessible entraînera une note de 0 pour l'ensemble du TP3.
- Un projet sans historique Git ou avec un historique non représentatif du travail pourra être pénalisé.
La qualité du français fait partie de l’évaluation.
Elle sera évaluée principalement dans :
- la documentation du projet ;
- les messages de commit Git.
Des fautes fréquentes ou un manque de clarté pourront entraîner une pénalité.
🎯 Objectifs
Ce travail a pour objectif de vous permettre de :
- appliquer les principes de la programmation orientée objet (héritage, polymorphisme, encapsulation, interfaces) ;
- manipuler des collections (
List<T>) ; - écrire des tests unitaires pour valider le comportement d’une classe ;
- développer une application WinForms
- utiliser les exceptions;
- utiliser Git et GitHub pour le suivi d’un projet.
Télécharger la solution contenant le projet de départ.
Disponible ici 👉 TP3
Télécharger la démonstration
Une démonstration de l’application (exécutable de la solution) est fournie.
Vous pouvez l’utiliser pour mieux comprendre le fonctionnement attendu et les différentes fonctionnalités à implémenter.
Disponible ici 👉 Démonstration TP3 (nouvelle version)
Contexte
Un de vos collègues a commencé à développer une application de quiz. Il a entamé la conception du modèle de classes représentant les différentes questions du système, puis a mystérieusement disparu 🕵️♂️ juste avant de faire son dernier commit et de pousser son code 😄.
L’application doit permettre de générer un quiz à la demande à partir d’une banque de questions. L’utilisateur peut ensuite naviguer entre les questions, répondre à chacune d’elles et obtenir un résultat immédiat pour chaque réponse. Le score total est mis à jour au fur et à mesure de la progression dans le quiz.
En analysant son travail, vous constatez que certaines parties fonctionnent, mais que plusieurs éléments pourraient être améliorés afin de rendre le modèle plus clair, plus cohérent et plus facile à faire évoluer.
Votre mission est de reprendre ce diagramme et de proposer une version améliorée en appliquant les principes de la programmation orientée objet.
Le système doit supporter plusieurs types de questions :
- Vrai/Faux
- Choix unique
- Choix multiples
- Réponse courte
- Réponse numérique
Chaque type de question possède un comportement spécifique pour valider et corriger une réponse.
🧭 Sommaire des tâches et évaluation
- Partie 1 : Utiliser un dépôt GitHub (10%)
- Partie 2 : Améliorer le diagramme de classes (20%)
- Partie 3 : Implémenter le diagramme de classes (20%)
- Partie 4 : Ajouter des questions à la banque (10%)
- Partie 5 : Compléter la classe
Quizfournie (10%) - Partie 6 : Écrire des tests unitaires pour la classe
Quiz(15%) - Partie 7 : Compléter le formulaire (15%)
- Qualité du français : Le travail est noté sur 100 points. Toutefois, jusqu’à 10 points peuvent être retirés pour la qualité du français.
Pour la partie implémentation, vous avez deux possibilités :
- utiliser le diagramme fourni tel quel ;
- ou adapter votre implémentation à partir de votre diagramme amélioré.
Le diagramme fourni est suffisant pour compléter l’application.
👉 Important :
La partie 2 n’est pas bloquante. Elle permet d’améliorer le modèle proposé afin d’obtenir tous les points.
Vous pouvez réaliser les autres parties du travail sans avoir complété cette section.
Faites un commit après chaque étape importante (diagramme, classes, formulaire, etc.).
- Créer des commits réguliers et des messages de commit clairs et correctes
- Évitez de faire un seul commit à la fin du projet.
- Assurez-vous que toutes les classes respectent les interfaces et les relations du diagramme.
- Tout projet sans historique Git pourrait être pénalisé.
- Ne modifiez pas les signatures des méthodes déjà fournies.
📐 Diagramme de classes de départ




L’interface IQuestion ainsi que la classe QuestionVraiFaux sont déjà implémentées.
Cela permet :
- de vous donner une idée sur le travail demandé
- de vous permettre de tester votre application ;
- d’écrire les tests unitaires de la classe
Quiz.
Vous devez compléter le reste du modèle afin de supporter les autres types de questions.
🔧 Partie 1 – Utiliser un dépôt GitHub (10%)
Vous devez créer et utiliser un dépôt GitHub pour le suivi de votre projet.
Vous devez :
- créer un dépôt GitHub pour le projet ;
- y déposer votre code ;
- effectuer des commits réguliers tout au long du développement ;
- rédiger des messages de commit clairs et explicites.
Créez votre dépôt dès le début du projet et faites un commit après chaque étape importante.
Évitez de faire un seul commit à la fin du projet.
Tout travail sans dépôt GitHub ou avec un dépôt inaccessible entraînera une note de 0 pour l'ensemble du TP3.
Un projet sans historique Git ou avec un historique non représentatif du travail pourra être pénalisé.
🧱 Partie 2 : Améliorer le diagramme de classes (20%)
À partir du diagramme fourni et de la description des classes, proposez une version améliorée du diagramme de classes.
Vous devez réaliser un diagramme de classe UML avec visio et le remettre avec votre projet.
Votre solution doit notamment :
- réduire les répétitions entre les classes;
- placer les éléments communs au bon endroit;
- améliorer la structure générale du modèle;
- utiliser l’interface
IReponseAvecIndicedans les classes concernées :QuestionReponseCourte;QuestionNumerique.
Vous devez conserver les comportements propres à chaque type de question.
Votre proposition doit respecter les principes de la programmation orientée objet, notamment l’h éritage, le polymorphisme et l’utilisation appropriée des interfaces.
Vous devez fournir :
- un diagramme de classes UML amélioré (réalisé avec visio);
- une courte justification de vos choix (5 à 10 lignes).
Remarque : Une amélioration mineure ou non justifiée ne permettra pas d’obtenir tous les points.
💻 Partie 3 – Implémentation du diagramme (20%)
Dans cette partie, vous devez implémenter les classes du modèle en respectant les relations et les comportements définis dans le diagramme de classes.
Deux approches sont possibles :
- Implémentation à partir du diagramme fourni
- Implémentation à partir de votre diagramme amélioré
Votre implémentation doit être fonctionnelle, compilable et permettre de créer les différents types de questions prévus dans le modèle.
Elle doit notamment permettre :
- la création de questions de différents types ;
- la validation des réponses selon le type de question ;
- le calcul du score obtenu ;
- la gestion d’un indice pour les types de questions qui le permettent ;
- le mélange des options pour les questions qui possèdent des choix.
Votre implémentation doit être cohérente avec le diagramme utilisé, qu’il s’agisse du diagramme fourni ou de votre diagramme amélioré.
🔥 Validations à implémenter dans les classes
🟦 Énoncé d’une question (Enonce)
- Règle : doit être non
null, non vide, non composé uniquement d’espaces - Exception :
ArgumentException
🟦 Points d’une question (Points)
- Règle : doit être strictement supérieur à 0
- Exception :
ArgumentOutOfRangeException
🟦 Options d’une question à choix multiples (Options)
- Règles :
- ne peut pas être
null - doit contenir au moins 2 éléments
- ne peut pas être
- Exceptions :
ArgumentNullException(si null)ArgumentException(si < 2 éléments)
🟦 Bonne réponse (Question à réponse unique)
- Règles :
- ne peut pas être
null, vide ou espaces - doit être présente dans
Options
- ne peut pas être
- Exception :
ArgumentException
🟦 Bonne réponse (Question à réponses multiples)
- Règles :
- ne peut pas être
null - ne peut pas être vide
- chaque réponse doit être contenue dans
Options
- ne peut pas être
- Exceptions :
ArgumentNullException(si nulll)ArgumentException(si vide ou au moins une bonne reponse n'est pas dans les options)
🟦 Réponse utilisateur (reponse)
- Règles :
- ne peut pas être
null - si format incorrect → considéré comme faux (pas d’exception)
- peut contenir des espaces ou casse différente selon type de question
- ne peut pas être
- Exception : aucune
🟦 Indice (Indice)
- Règle : doit être non
null, non vide, non espaces - Exception :
ArgumentException
🟦 Pénalité d’indice (PenaliteIndice)
- Règle : doit être compris entre 0 et 1 inclus
- Exception :
ArgumentOutOfRangeException
Vous pouvez utiliser les méthodes de la classe OutilsQuiz pour effectuer certaines validations (ex : vérification d’appartenance, inclusion de listes, etc.).
🗂️ Partie 4 - Ajouter des questions à la banque (10%)
Dans cette partie, vous devez compléter la classe BanqueQuestions en y ajoutant plusieurs questions.
Les questions doivent être variées et couvrir différents types définis dans le modèle (ex : numérique, vrai/faux, choix unique, choix multiples, réponse courte, etc.).
Vous devez également :
- utiliser différentes catégories de questions ;
- varier le nombre de points associés aux questions ;
- respecter les contraintes propres à chaque type de question ;
- intégrer un indice pour les questions qui le permettent.
Cette banque de questions sera utilisée pour générer des quiz de manière aléatoire.
Essayez de proposer des questions pertinentes et diversifiées.