Documentation de Développement QuizMaker
- 1. Introduction
- 2. Architecture Générale
- 3. Modélisation Fonctionnelle
- 4. Modélisation Structurelle
- 5. Architecture de Déploiement
- 6. Flux de Données et Algorithmes
- 7. Considérations Techniques
- 8. Glossaire
- 9. Annexes
- 10. Contact et Support
1. Introduction
1.1. Objectif du document
Ce document présente l’architecture et la conception détaillée du système QuizMaker, une plateforme de gestion d’épreuves et de questionnaires en ligne. Il s’adresse aux développeurs, architectes et mainteneurs du système.
1.2. Portée du système
QuizMaker permet aux enseignants de créer des épreuves basées sur des questionnaires prédéfinis, aux étudiants de participer à ces épreuves, et automatise le processus de correction et de publication des notes.
2. Architecture Générale
2.1. Vue d’ensemble
Le système QuizMaker est construit sur une architecture multi-couches comprenant :
-
Couche Présentation : Interfaces web pour enseignants et étudiants
-
Couche Métier : Logique applicative et services
-
Couche Accès aux Données : Gestion de la persistance
-
Couche Infrastructure : Services transversaux (cache, sessions, logs)
3. Modélisation Fonctionnelle
3.1. Diagramme de cas d’utilisation
Le diagramme suivant présente les interactions principales entre les acteurs (Enseignant, Étudiant, Système de notification) et le système QuizMaker.
3.1.1. Acteurs principaux
Enseignant
-
Crée et configure des épreuves
-
Lance la correction des épreuves
-
Publie les notes aux étudiants
-
Consulte les statistiques
Étudiant
-
Participe aux épreuves disponibles
-
Répond aux questions dans le temps imparti
-
Consulte ses notes publiées
Système de notification
-
Envoie des notifications automatiques lors de la publication des notes
3.1.2. Cas d’utilisation détaillés
UC1 : Créer une épreuve
-
Acteur principal : Enseignant
-
Préconditions : L’enseignant est authentifié
-
Description : L’enseignant crée une nouvelle épreuve en sélectionnant un questionnaire existant et en définissant les paramètres temporels
-
Inclusions : UC2 (Sélectionner un questionnaire), UC3 (Définir date et durée), UC11 (Se connecter au système)
UC4 : Participer à une épreuve
-
Acteur principal : Étudiant
-
Préconditions : L’étudiant est authentifié, l’épreuve est active
-
Description : L’étudiant accède à une épreuve, répond aux questions et soumet sa copie
-
Inclusions : UC5 (Répondre aux questions), UC6 (Soumettre la copie), UC11 (Se connecter au système)
3.2. Diagramme de séquence
Le diagramme de séquence suivant illustre les quatre phases principales du processus complet d’une épreuve.
3.2.1. Phase 1 : Création de l’épreuve
L’enseignant se connecte au système, sélectionne un questionnaire dans la banque existante, définit les paramètres temporels (date et durée) et valide la création de l’épreuve. Le système enregistre l’épreuve avec l’état "PLANIFIEE".
Interactions principales :
-
Authentification de l’enseignant
-
Initialisation d’une nouvelle épreuve
-
Récupération du questionnaire depuis la base de données
-
Configuration des paramètres (date, durée)
-
Sauvegarde de l’épreuve
3.2.2. Phase 2 : Participation des étudiants
Les étudiants se connectent, consultent les épreuves disponibles et démarrent leur participation. Le système initialise une copie pour chaque étudiant et enregistre leurs réponses au fur et à mesure. La soumission peut être volontaire ou automatique en cas de dépassement du temps.
Interactions principales :
-
Authentification de l’étudiant
-
Récupération des épreuves actives
-
Initialisation d’une copie d’étudiant
-
Affichage séquentiel des questions
-
Enregistrement des réponses en temps réel
-
Soumission de la copie (manuelle ou automatique)
3.2.3. Phase 3 : Correction et publication
L’enseignant lance le processus de correction automatique. Le système compare les réponses des étudiants avec les réponses correctes, calcule les notes, génère les statistiques et marque les copies comme corrigées. L’enseignant analyse les résultats et publie les notes.
Interactions principales :
-
Ouverture de l’épreuve par l’enseignant
-
Lancement de la correction automatique
-
Récupération des réponses pour chaque copie
-
Comparaison avec les réponses correctes
-
Calcul et enregistrement des notes
-
Génération des statistiques
-
Publication des notes
3.3. Diagramme d’activité
Le diagramme d’activité suivant détaille le flux de travail complet du système, depuis la création d’une épreuve jusqu’à la consultation des notes par les étudiants.
3.3.1. Flux enseignant - Création
-
Connexion au système
-
Création d’une nouvelle épreuve
-
Sélection d’un questionnaire depuis la banque
-
Définition de la date de réalisation
-
Définition de la durée
-
Validation et enregistrement (État : PLANIFIEE)
-
Déconnexion
3.3.2. Flux étudiant - Participation
-
Connexion au système
-
Consultation des épreuves disponibles
-
Démarrage de l’épreuve (initialisation copie, État : EN_COURS)
-
Affichage de la première question
-
Boucle de traitement des questions :
-
Lecture de la question
-
Sélection d’un ou plusieurs choix
-
Enregistrement de la réponse
-
Navigation vers la question suivante ou révision
-
-
Soumission (volontaire ou automatique si durée écoulée)
-
État copie : SOUMISE
-
Réception de la confirmation
-
Déconnexion
3.3.3. Flux système - Correction automatique
-
Attente que toutes les copies soient soumises (État épreuve : TERMINEE)
-
Enseignant lance la correction
-
Pour chaque copie :
-
Récupération des réponses de l’étudiant
-
Pour chaque réponse :
-
Récupération de la réponse correcte
-
Comparaison
-
Attribution des points si correct
-
-
Calcul de la note totale
-
Enregistrement de la note (État copie : CORRIGEE)
-
-
Calcul des statistiques globales (moyenne, écart-type, distribution)
-
État épreuve : CORRIGEE
4. Modélisation Structurelle
4.1. Diagramme de classes
Le diagramme de classes suivant présente le modèle objet complet du système QuizMaker avec tous les concepts du domaine, leurs attributs, méthodes et relations.
4.1.1. Package : Gestion des acteurs
Classe abstraite Utilisateur
Classe de base pour tous les acteurs du système.
-
Attributs :
-
nom: String- Nom complet de l’utilisateur -
login: String- Identifiant de connexion unique -
motDePasse: String- Mot de passe crypté
-
-
Méthodes :
-
seConnecter(): boolean- Établit une session utilisateur -
seDeconnecter(): void- Ferme la session en cours -
authentifier(): boolean- Vérifie les credentials
-
Classe Enseignant (hérite de Utilisateur)
Représente un enseignant du système avec des privilèges de création et de gestion.
-
Attributs :
-
matières: List<String>- Liste des matières enseignées
-
-
Méthodes :
-
créerEpreuve(): Epreuve- Crée une nouvelle épreuve -
sélectionnerQuestionnaire(): Questionnaire- Sélectionne un questionnaire depuis la banque -
corrigerEpreuve(e: Epreuve): void- Lance la correction d’une épreuve -
publierNotes(e: Epreuve): void- Publie les notes aux étudiants -
analyserRésultats(e: Epreuve): Statistiques- Génère les statistiques d’une épreuve
-
Classe Etudiant (hérite de Utilisateur)
Représente un étudiant participant aux épreuves.
-
Attributs :
-
code: String- Code étudiant unique -
niveau: String- Niveau d’études (L1, L2, M1, etc.)
-
-
Méthodes :
-
participerEpreuve(e: Epreuve): Copie- Démarre une épreuve et initialise une copie -
répondreQuestion(q: Question, c: Choix): void- Enregistre une réponse -
soumettreCopieFinie(): void- Soumet volontairement la copie -
consulterNote(): Note- Consulte sa note publiée
-
4.1.2. Package : Gestion des questionnaires
Classe Banque
Conteneur pour la gestion centralisée des questions.
-
Attributs :
-
id: int- Identifiant unique -
nom: String- Nom de la banque de questions
-
-
Méthodes :
-
ajouterQuestion(q: Question): void- Ajoute une question à la banque -
rechercherQuestion(critères): List<Question>- Recherche des questions selon des critères
-
Classe Questionnaire
Ensemble structuré de questions constituant la base d’une épreuve.
-
Attributs :
-
id: int- Identifiant unique -
titre: String- Titre du questionnaire -
dateCreation: Date- Date de création
-
-
Méthodes :
-
ajouterQuestion(q: Question): void- Ajoute une question au questionnaire -
supprimerQuestion(q: Question): void- Retire une question -
obtenirQuestions(): List<Question>- Retourne la liste des questions -
validerCompletude(): boolean- Vérifie que le questionnaire est complet
-
Classe Question
Élément de base d’un questionnaire avec ses choix de réponses.
-
Attributs :
-
etiquette: String- Identifiant court de la question -
intitule: String- Texte complet de la question -
typeScoring: String- Type de notation (binaire, partiel, etc.)
-
-
Méthodes :
-
ajouterChoix(c: Choix): void- Ajoute un choix de réponse -
obtenirChoixCorrects(): List<Choix>- Retourne les réponses correctes -
valider(): boolean- Vérifie la validité de la question
-
-
Contrainte : Une question possède au moins une réponse correcte
Classe Choix
Option de réponse pour une question.
-
Attributs :
-
texte: String- Texte du choix -
estCorrect: boolean- Indique si le choix est correct
-
-
Méthodes :
-
marquerCommeCorrect(): void- Marque le choix comme réponse correcte -
marquerCommeIncorrect(): void- Marque le choix comme incorrect
-
4.1.3. Package : Gestion des épreuves
Classe Epreuve
Instance d’un questionnaire définie dans le temps.
-
Attributs :
-
id: int- Identifiant unique -
dateRealisation: DateTime- Date et heure de début -
duree: int- Durée en minutes -
etat: EtatEpreuve- État actuel de l’épreuve
-
-
Méthodes :
-
planifier(date: DateTime, duree: int): void- Planifie l’épreuve -
démarrer(): void- Active l’épreuve -
terminer(): void- Clôture l’épreuve -
estActive(): boolean- Vérifie si l’épreuve est en cours -
ajouterQuestionnaire(q: Questionnaire): void- Associe un questionnaire
-
Énumération EtatEpreuve
États possibles d’une épreuve :
-
PLANIFIEE- Épreuve créée mais non démarrée -
EN_COURS- Épreuve accessible aux étudiants -
TERMINEE- Tous les étudiants ont soumis ou temps écoulé -
CORRIGEE- Correction effectuée -
PUBLIEE- Notes publiées et visibles
Classe Copie
Ensemble des réponses d’un étudiant pour une épreuve.
-
Attributs :
-
id: int- Identifiant unique -
dateDebut: DateTime- Horodatage du début -
dateFin: DateTime- Horodatage de la soumission -
etatCopie: EtatCopie- État actuel de la copie -
note: float- Note attribuée (0-20)
-
-
Méthodes :
-
initialiser(): void- Initialise une nouvelle copie -
soumettreFinTemps(): void- Soumission automatique (temps écoulé) -
soumettreVolontaire(): void- Soumission manuelle par l’étudiant -
estTerminee(): boolean- Vérifie si la copie est soumise -
calculerNote(): float- Calcule la note finale
-
-
Invariant : Les choix des réponses doivent correspondre aux choix des questions du questionnaire
Énumération EtatCopie
États possibles d’une copie :
-
EN_COURS- L’étudiant répond aux questions -
SOUMISE- Copie remise, en attente de correction -
CORRIGEE- Note calculée et attribuée
Classe Reponse
Réponse d’un étudiant à une question.
-
Attributs :
-
texte: String- Texte de la réponse (si applicable) -
dateReponse: DateTime- Horodatage de la réponse
-
-
Méthodes :
-
enregistrer(): void- Sauvegarde la réponse -
estCorrecte(): boolean- Vérifie la correction de la réponse
-
4.1.4. Package : Gestion de la correction
Classe MoteurCorrection
Service de correction automatique des copies.
-
Méthodes publiques :
-
corrigerCopie(c: Copie): float- Corrige une copie et retourne la note -
corrigerEpreuve(e: Epreuve): void- Corrige toutes les copies d’une épreuve
-
-
Méthodes privées :
-
comparerReponses(r: Reponse, rc: List<Choix>): boolean- Compare réponse étudiant vs correcte -
calculerScore(copie: Copie): float- Calcule le score total
-
-
Note : Calcul automatique basé sur la comparaison entre les réponses de l’étudiant et les réponses correctes
Classe Statistiques
Métriques calculées sur les résultats d’une épreuve.
-
Attributs :
-
moyenne: float- Moyenne arithmétique des notes -
ecartType: float- Écart-type de la distribution -
minimum: float- Note minimale -
maximum: float- Note maximale -
distribution: Map<String, int>- Répartition des notes par tranche
-
-
Méthodes :
-
calculer(notes: List<float>): void- Calcule toutes les statistiques -
genererRapport(): String- Génère un rapport textuel
-
Classe Note
Note attribuée à un étudiant pour une épreuve.
-
Attributs :
-
valeur: float- Valeur numérique (0-20) -
datePublication: DateTime- Date de publication -
estPubliee: boolean- Indicateur de visibilité
-
-
Méthodes :
-
publier(): void- Rend la note visible à l’étudiant -
masquer(): void- Masque la note
-
4.1.5. Relations principales
Héritage
-
EnseignantetEtudianthéritent deUtilisateur(spécialisation)
Composition (diamant noir plein)
-
BanquecomposeQuestion(1 → 0..*) -
QuestioncomposeChoix(1 → 2..*) -
EpreuvecomposeCopie(1 → 0..*) -
CopiecomposeReponse(1 → 0..*)
Agrégation (diamant blanc)
-
QuestionnaireagrègeQuestion(1 → 1..*) -
EpreuveagrègeQuestionnaire(1 → 1..*) -
CopieagrègeQuestionnaire(1 → 1) - référence
Associations simples
-
EnseignantcréeEpreuve(1 → 0..*) -
EnseignantélaboreQuestionnaire(1 → 0..*) -
EnseignantcréeQuestion(1 → 0..*) -
EtudiantproduitCopie(1 → 0..*) -
EtudiantconsulteNote(1 → 0..*) -
ReponsesélectionneChoix(0..* ↔ 1..*) -
CopieobtientNote(1 → 0..1)
Dépendances
-
MoteurCorrectioncorrigeCopie(dépendance) -
MoteurCorrectiongénèreStatistiques(dépendance)
4.2. Diagramme d’états - Cycle de vie d’une copie
Le diagramme d’états suivant modélise les différents états par lesquels passe une copie d’étudiant durant son cycle de vie.
4.2.1. États de la copie
Non Initialisée
-
État initial avant qu’un étudiant ne démarre l’épreuve
-
Aucune copie créée pour cet étudiant
En Cours
-
L’étudiant répond activement aux questions
-
Actions d’entrée :
démarrerChronomètre() -
Actions pendant :
enregistrerRéponses() -
Actions de sortie :
arrêterChronomètre() -
Transitions internes :
-
répondreQuestion(): enregistrement d’une réponse -
naviguerEntreQuestions(): déplacement dans le questionnaire -
modifierRéponse(): modification d’une réponse existante
-
Soumise
-
Copie remise en attente de correction
-
Actions d’entrée :
horodaterSoumission() -
Transition automatique possible si :
-
Durée maximale atteinte
-
Déconnexion intempestive de l’étudiant
-
Correction en cours (état composite)
-
Sous-état : Analyse des réponses
-
Comparaison avec les réponses correctes
-
-
Sous-état : Calcul de la note
-
Calcul du score final
-
Génération des statistiques
-
Corrigée
-
Note attribuée et correction disponible
-
Actions d’entrée :
-
calculerNote() -
horodaterCorrection()
-
-
Note consultable uniquement après publication par l’enseignant
4.2.2. Transitions principales
-
NonInitialisée → EnCours:démarrerEpreuve()[étudiant authentifié] -
EnCours → Soumise:soumettreVolontaire()[étudiant termine] OUsoumettreAutomatique()[durée écoulée] -
Soumise → Correction:lancerCorrection() -
Correction → Corrigée: [correction terminée] -
Corrigée → [fin]:archiverCopie()[après consultation]
4.3. Diagramme de composants
Le diagramme de composants illustre l’architecture logicielle en couches du système QuizMaker.
4.3.1. Couche Présentation
Interface Web Enseignant
-
Création et gestion des épreuves
-
Consultation des statistiques
-
Publication des notes
Interface Web Étudiant
-
Participation aux épreuves
-
Consultation des notes
Gestionnaire d’Authentification
-
Validation des identifiants
-
Gestion des sessions utilisateurs
-
Contrôle d’accès
4.3.2. Couche Métier
Contrôleurs
-
Contrôleur Epreuves: Orchestration du cycle de vie des épreuves -
Contrôleur Questionnaires: Gestion des questionnaires -
Contrôleur Utilisateurs: Gestion des utilisateurs et authentification
Services
-
Service Correction: Service asynchrone pour la correction automatique des copies -
Service Notification: Envoi de notifications aux utilisateurs -
Service Statistiques: Calcul et génération des statistiques
Moteur de Calcul
-
Moteur Calcul Notes: Algorithme de calcul des notes-
Score par question
-
Pondération
-
Note finale sur 20
-
4.3.3. Couche Accès aux Données
Data Access Objects (DAO)
-
DAO Epreuves: CRUD épreuves -
DAO Questionnaires: CRUD questionnaires -
DAO Utilisateurs: CRUD utilisateurs -
DAO Copies: CRUD copies et notes
4.3.4. Couche Persistance
Base de Données QuizMaker
Tables principales :
-
Utilisateurs: Enseignants et étudiants -
Questionnaires: Banque de questionnaires -
Questions: Questions des questionnaires -
Choix: Choix possibles pour chaque question -
Epreuves: Épreuves planifiées et réalisées -
Copies: Copies des étudiants -
Réponses: Réponses des étudiants -
Notes: Notes attribuées
4.3.5. Composants Transversaux
Système de Gestion de Session
-
Gestion du cycle de vie des sessions utilisateurs
-
Lié au gestionnaire d’authentification
Gestionnaire de Cache
-
Cache des questionnaires fréquemment utilisés
-
Cache des requêtes vers les DAO
-
Optimisation des performances
-
TTL (Time To Live) configurable
Logger
-
Traçabilité des actions sur les épreuves
-
Traçabilité des corrections
-
Logs d’audit
5. Architecture de Déploiement
5.1. Diagramme de déploiement
Le diagramme suivant présente l’infrastructure technique du système QuizMaker et la répartition des composants sur les différents nœuds matériels.
5.1.1. Postes Clients
Poste Enseignant
-
Navigateur Web moderne (Chrome, Firefox, Edge, Safari)
-
Interface HTML responsive
-
Connexion HTTPS sécurisée
Poste Étudiant
-
Navigateur Web moderne
-
Interface HTML responsive
-
Connexion HTTPS sécurisée
5.1.2. Infrastructure Serveur
Serveur Web (Apache/Nginx)
-
Port : 443 (HTTPS)
-
Responsabilités :
-
Hébergement de l’interface utilisateur
-
Gestion SSL/TLS pour la sécurisation des communications
-
Compression des ressources (gzip)
-
Équilibrage de charge (Load Balancer)
-
-
Composants :
-
Serveur HTTP
-
Load Balancer
-
Pages statiques
-
Assets (CSS, JavaScript, images)
-
Serveur d’Application (Tomcat/Spring Boot)
-
Port : 8080 (HTTP interne)
-
Responsabilités :
-
Logique métier du système
-
Authentification JWT
-
Validation des données
-
Gestion des sessions utilisateurs
-
-
Composants :
-
API REST
-
Contrôleurs Métier
-
Services
-
Gestionnaire de Sessions
-
Serveur de Correction (Worker Service)
-
Responsabilités :
-
Traitement asynchrone des corrections
-
Correction automatique des copies
-
Calcul des notes
-
Génération des statistiques
-
-
Composants :
-
Moteur de Correction
-
Service de Calcul
-
File d’attente (Message Queue)
-
Serveur de Base de Données (PostgreSQL/MySQL)
-
Port : 5432 (PostgreSQL) ou 3306 (MySQL)
-
Responsabilités :
-
Stockage persistant de toutes les données
-
Transactions ACID
-
Sauvegardes régulières (backup)
-
Réplication possible pour haute disponibilité
-
-
Composant :
-
Système de Gestion de Base de Données (SGBD)
-
QuizMaker DB (tables métier)
-
Serveur de Cache (Redis)
-
Port : 6379 (TCP)
-
Responsabilités :
-
Cache des sessions utilisateurs
-
Cache des questionnaires fréquemment consultés
-
Cache des résultats temporaires
-
Amélioration significative des performances
-
-
Configuration :
-
TTL (Time To Live) configurable par type de donnée
-
Stratégie d’éviction LRU (Least Recently Used)
-
Serveur de Notification
-
Responsabilités :
-
Envoi de notifications aux utilisateurs
-
Support multi-canal
-
-
Composants :
-
Service Email (SMTP)
-
Service SMS (API tierce)
-
Service Push (notifications web/mobile)
-
5.1.3. Protocoles de Communication
-
Client ↔ Serveur Web : HTTPS (Port 443)
-
Serveur Web ↔ Serveur d’Application : HTTP/REST (Port 8080)
-
Serveur d’Application ↔ Base de Données : JDBC (Port 5432)
-
Serveur d’Application ↔ Cache : TCP/Redis Protocol (Port 6379)
-
Serveur d’Application ↔ Serveur de Correction : Message Queue (asynchrone)
-
Serveur de Correction ↔ Base de Données : JDBC (Port 5432)
-
Serveur d’Application → Serveur de Notification : SMTP/API
6. Flux de Données et Algorithmes
6.1. Algorithme de correction automatique
L’algorithme de correction automatique compare les réponses des étudiants avec les réponses correctes du questionnaire.
Pseudo-code :
POUR chaque copie NON corrigée FAIRE
score_total = 0
POUR chaque question du questionnaire FAIRE
réponse_étudiant = récupérer_réponse(copie, question)
réponse_correcte = récupérer_réponse_correcte(question)
points_question = question.points
SI réponse_étudiant == réponse_correcte ALORS
score_total = score_total + points_question
FIN SI
FIN POUR
note_finale = (score_total / score_maximum) * 20
enregistrer_note(copie, note_finale)
marquer_copie_comme(CORRIGEE)
FIN POUR
calculer_statistiques_globales()
Complexité : O(n × m) où n = nombre de copies, m = nombre de questions
6.2. Algorithme de calcul des statistiques
notes[] = récupérer_toutes_les_notes(épreuve)
n = taille(notes)
// Moyenne
somme = 0
POUR chaque note DANS notes FAIRE
somme = somme + note
FIN POUR
moyenne = somme / n
// Écart-type
somme_carrés_écarts = 0
POUR chaque note DANS notes FAIRE
écart = note - moyenne
somme_carrés_écarts = somme_carrés_écarts + (écart * écart)
FIN POUR
variance = somme_carrés_écarts / n
écart_type = racine_carrée(variance)
// Distribution (tranches de notes)
distribution = initialiser_tableau(0..20)
POUR chaque note DANS notes FAIRE
tranche = arrondir_inf(note)
distribution[tranche] = distribution[tranche] + 1
FIN POUR
RETOURNER {moyenne, écart_type, distribution}
7. Considérations Techniques
7.1. Sécurité
Authentification
-
Utilisation de JWT (JSON Web Tokens) pour l’authentification
-
Stockage sécurisé des mots de passe (bcrypt, Argon2)
-
Session timeout configurable
Autorisation
-
Contrôle d’accès basé sur les rôles (RBAC)
-
Enseignants : création/correction/publication
-
Étudiants : participation/consultation limitée
Communication
-
HTTPS obligatoire pour toutes les communications externes
-
Certificats SSL/TLS valides
-
Protection contre les attaques XSS, CSRF, injection SQL
7.2. Performance
Optimisations
-
Cache Redis pour les données fréquemment consultées
-
Pagination des résultats
-
Lazy loading des questions
-
Compression gzip des ressources
Scalabilité
-
Architecture stateless au niveau applicatif
-
Load balancing horizontal
-
Séparation du serveur de correction pour parallélisation
-
File d’attente pour les traitements asynchrones
8. Glossaire
| Terme | Définition |
|---|---|
Épreuve |
Instance d’un questionnaire définie dans le temps, avec une date de début et une durée |
Questionnaire |
Ensemble de questions constituant la base d’une épreuve |
Copie |
Ensemble des réponses d’un étudiant pour une épreuve donnée |
DAO |
Data Access Object - Pattern de conception pour l’accès aux données |
JWT |
JSON Web Token - Standard d’authentification par jeton |
CRUD |
Create, Read, Update, Delete - Opérations de base sur les données |
TTL |
Time To Live - Durée de vie d’une donnée en cache |
RBAC |
Role-Based Access Control - Contrôle d’accès basé sur les rôles |
ACID |
Atomicité, Cohérence, Isolation, Durabilité - Propriétés des transactions |
9. Annexes
9.1. Conventions de nommage
Classes
-
PascalCase :
GestionnaireEpreuve,ServiceCorrection
Méthodes
-
camelCase :
créerEpreuve(),calculerNote()
Variables
-
camelCase :
idEpreuve,noteFinale
Constantes
-
UPPER_SNAKE_CASE :
ETAT_EN_COURS,DUREE_MAX
Tables de base de données
-
PascalCase au singulier :
Utilisateur,Epreuve,Copie
9.2. États des entités
États d’une épreuve :
-
PLANIFIEE: Créée mais pas encore démarrée -
EN_COURS: Accessible aux étudiants -
TERMINEE: Tous les étudiants ont soumis -
CORRIGEE: Correction effectuée -
PUBLIEE: Notes visibles par les étudiants
États d’une copie :
-
NON_INITIALISEE: Pas encore démarrée -
EN_COURS: Étudiant en train de répondre -
SOUMISE: Copie remise -
CORRIGEE: Note calculée
9.3. Technologies recommandées
Frontend
-
HTML5, CSS3, JavaScript (ES6+)
-
Framework : React.js ou Vue.js
-
UI Library : Bootstrap ou Material-UI
Backend
-
Langage : Java 11+ ou Python 3.9+
-
Framework : Spring Boot ou Django
-
API : REST avec JSON
Base de données
-
SGBD relationnel : PostgreSQL 13+ ou MySQL 8+
-
ORM : Hibernate (Java) ou SQLAlchemy (Python)
Cache
-
Redis 6+
Serveur Web
-
Nginx ou Apache HTTP Server
Conteneurisation
-
Docker
-
Orchestration : Kubernetes (optionnel pour haute disponibilité)
10. Contact et Support
Pour toute question concernant cette fonctionnalité :
-
Email technique : cheikh-tidiane.diop1@etu.univ-nantes.fr
Auteur : Cheikh Tidiane DIOP
Institution : Université de Nantes - Master Informatique
Document construit conformément à l’exigence NF-Req-3
Format : Asciidoc
Version : 1.0
Date : 2026-02-16