PV de livraison - Edu-Kit - Sprint 4

Version : 4.0.0  |  Date de livraison : 17/05/2026  |  Statut : Livraison concluante
Sprint : Sprint 4 (01/05/2026 - 17/05/2026)


Sommaire

  1. Version de l’application
  2. Équipe
  3. Environnement de livraison
  4. Composants techniques livrés
  5. Backlog du Sprint 4
  6. Recette - État final des tests
  7. Bugs connus
  8. Lexique

1. Version de l’application

Champ Valeur
Version 4.0.0
Sprint Sprint 4
Date de livraison 17/05/2026
Période du sprint 01/05/2026 - 17/05/2026

Cette version correspond à la quatrième livraison incrémentale du projet Edu-Kit. Le numéro de version suit la convention [numéro de sprint].0.0, chaque sprint constituant un incrément produit complet. L’ensemble des user stories engagées au Sprint Planning a été livré et validé avant la date de clôture du sprint.


2. Équipe

Membre Rôle
Gabriel ARNAUD Développeur
Adrien LAMBERT Développeur
Leandre MOREAU Développeur
Anthony ARNOUX Ops
Benoit PRONGUE Ops
Lucie BELAIR Ops
Elias MERTZEISEN Ops

3. Environnement de livraison

Composant URL Notes
Application web (front-end) https://app.edu-kit.fr SPA Angular 21 - accessible depuis l’extérieur
OrgService API https://api.edu-kit.fr/organization-service API REST + gRPC
VmService API https://api.edu-kit.fr/vm-service API REST + gRPC
Keycloak (SSO) https://auth.edu-kit.fr Serveur d’authentification
Documentation https://docs.edu-kit.fr Site Jekyll généré depuis Edukit-Documentation
Grafana (monitoring) https://grafana.edu-kit.fr Tableaux de bord Loki, Prometheus, Tempo - à confirmer

4. Composants techniques livrés

4.1 Services applicatifs

Composant Dépôt Technologie Rôle
OrgService Edukit-OrgService .NET 9 / C# - Clean Architecture + CQRS Gestion des organisations, utilisateurs, groupes, environnements et sessions de travail
VmService Edukit-VM .NET 9 / C# - Clean Architecture + CQRS Provisionnement Proxmox, cycle de vie des VMs, distribution de credentials par email
Edukit-Front Edukit-Front Angular 21 / TypeScript Interface utilisateur (SPA) - gestion des séances, VMs, utilisateurs ; temps réel via SignalR

4.2 Infrastructure

Composant Technologie Version Rôle
Base de données PostgreSQL 16 Persistance des données OrgService et VmService
Broker de messages RabbitMQ 3.x Communication asynchrone inter-services (événement VmCredentialIssued)
Authentification Keycloak 26 SSO OIDC/PKCE - 4 rôles : superadmin, admin, teacher, student
Hyperviseur Proxmox VE 8.x Virtualisation des machines étudiantes (KVM)
Métriques Prometheus - Collecte des métriques applicatives et système
Logs Loki - Agrégation des journaux applicatifs
Traces Tempo - Tracing distribué (OpenTelemetry)
Observabilité Grafana - Tableaux de bord métriques, logs et traces
Agent de collecte Grafana Alloy - Collecte et transmission des logs sur chaque nœud
Sécurité réseau CrowdSec - Détection et blocage automatique des intrusions
Chaos engineering Chaos Mesh - Tests de résilience de l’infrastructure
Registry Harbor - Registre privé d’images Docker
CI/CD Azure DevOps - Pipelines de build, test, analyse SonarQube et déploiement

4.3 Nouvelles fonctionnalités livrées dans ce sprint

Composant Fonctionnalité livrée
OrgService Cycle de vie complet des sessions de travail (WorkSession) : création, démarrage, pause/reprise, complétion, annulation, consultation et historique des transitions
OrgService Démarrage automatique d’une séance selon planification (Quartz.NET)
OrgService Clôture automatique d’une séance selon planification (Quartz.NET)
OrgService Consommation de l’événement inter-services VmCredentialIssued : décryptage AES-256-GCM + envoi email SMTP via MailKit
OrgService Template d’email d’accès VM bilingue texte/HTML avec commande SSH intégrée et encodage sécurisé anti-XSS
VmService Sagas de cycle de vie des VMs : VmStartSaga, VmStopSaga, VmDestroySaga (via Wolverine)
VmService Opérations batch sur un environnement : démarrage, arrêt et suppression de toutes les VMs
VmService Provisionnement individuel d’une VM pour un étudiant ciblé
VmService Réinitialisation des credentials VM via qemu-guest-agent + re-publication de l’événement VmCredentialIssued
VmService Nouvelle tentative de provisionnement (RetryVmCreation) sur VM en état Failed
VmService Service d’autorisation pour le hub SignalR (VmStatusHubAuthorizationService)
VmService Câblage OpenTelemetry OTLP (traces, métriques, logs)
Edukit-Front Composant UserManagement (liste paginée des utilisateurs) avec test de composant
Edukit-Front Intégration SignalR (VmStatusHubService) - mise à jour temps réel du statut des VMs
Edukit-Front Icône d’erreur sur la grille VM avec message de détail (tooltip)
Edukit-Front Paramétrage de l’automatisation du démarrage et de la fin de séance (case à cocher)
Infrastructure Stack d’observabilité complète : Grafana + Loki + Prometheus + Tempo + OpenTelemetry + Grafana Alloy
Infrastructure Mise en production de la gestion des réseaux par environnement de travail (Mikrotik)
Infrastructure Installation et configuration de CrowdSec (détection d’intrusions)

5. Backlog du Sprint 4

Les estimations sont exprimées en heures et correspondent aux valeurs saisies lors du Sprint Planning dans Azure DevOps. Aucun suivi d’écart post-livraison n’a été formalisé dans les work items ; seule l’estimation initiale est donc reportée ici.

5.1 Tableau récapitulatif

ID User Story Estimation initiale (h) Statut
#79 Se connecter en SSH à une VM 9 Partiellement livrée
#88 Déclencher le reset d’un élève 6 Terminée
#89 Déclencher le reset de toute la classe 6 Terminée
#108 Voir si la machine d’un élève est allumée 2 Terminée
#109 Voir si une machine est en erreur 2 Terminée
#128 Filtrer les séances 3 Terminée
#644 Voir l’état global d’une séance 3 Terminée
#645 Créer les machines pour un seul élève 14 Terminée
#649 Afficher les identifiants de connexion (élève) 3 Terminée
#650 Supprimer les machines pour un seul élève 3 Terminée
#651 Démarrage des VMs lors du démarrage d’une séance 6 Terminée
#652 Démarrage d’une séance automatiquement selon planification 8 Terminée
#653 Clôturer une séance automatiquement selon la planification 8 Terminée
#654 Éteindre les VMs automatiquement lors de la clôture d’une séance 6 Terminée
#678 Paramétrer l’automatisation du démarrage d’une séance 3 Terminée
#679 Paramétrer l’automatisation de la fin d’une séance 3 Terminée
Total   85 h 15 / 16 terminées

Charge du sprint : 85 heures estimées au Sprint Planning - 15 user stories terminées sur 16 (US #79 partiellement livrée). Toutes les user stories terminées ont atteint le statut Done conformément à la Definition of Done avant la date de clôture du sprint.


5.2 Détail des User Stories


US #79 - Se connecter en SSH à une VM

Composant : Edukit-Front / VmService     Estimation : 9 h     Statut : Partiellement livrée

Description :
En tant qu’élève, je veux pouvoir me connecter en SSH à une VM qui m’est attribuée, afin de pouvoir utiliser la machine dans le cadre de mes travaux pratiques.

Critères d’acceptation :

  • L’hôte (adresse IP ou nom DNS) et le port SSH sont affichés clairement pour chaque VM attribuée à l’élève.
  • Les identifiants de connexion (nom d’utilisateur et mot de passe) sont visibles sur demande de l’élève.
  • Un bouton “Copier” est disponible pour copier la commande SSH complète dans le presse-papiers.
  • La commande SSH prête à l’emploi est générée et affichée (ex. : ssh user@host -p port).

Note de livraison : La connexion SSH vers les VMs est fonctionnelle côté infrastructure. L’intégration dans l’interface applicative (accès aux informations de connexion depuis l’espace élève) n’est pas encore finalisée à la date de livraison. Cette US est considérée partiellement livrée et fera l’objet d’une complétion au sprint suivant.


US #88 - Déclencher le reset d’un élève

Composant : Edukit-Front / VmService     Estimation : 6 h     Statut : Terminée

Description :
En tant qu’enseignant, je veux déclencher la réinitialisation (reset) de la VM d’un élève spécifique, afin de résoudre un blocage ou de lui permettre de recommencer son travail sur une machine dans un état connu.

Critères d’acceptation :

  • L’enseignant peut sélectionner un élève dans la liste et déclencher la réinitialisation de sa VM.
  • Une confirmation explicite est demandée avant l’exécution du reset (prévention des actions accidentelles).
  • L’élève est notifié du reset de sa machine (notification ou mise à jour visible dans l’interface).
  • Les nouvelles credentials VM sont régénérées et envoyées à l’élève par email après le reset.
  • L’opération est traçable dans l’historique de la VM.

US #89 - Déclencher le reset de toute la classe

Composant : Edukit-Front / VmService     Estimation : 6 h     Statut : Terminée

Description :
En tant qu’enseignant, je veux déclencher la réinitialisation (reset) des VMs de l’ensemble des élèves d’une séance, afin de permettre à toute la classe de recommencer un TP depuis un état initial connu.

Critères d’acceptation :

  • L’enseignant peut déclencher un reset global depuis la vue de gestion d’une séance.
  • Une confirmation explicite est demandée avant l’exécution du reset collectif.
  • L’opération s’applique à toutes les VMs actives de la séance.
  • Un récapitulatif du résultat (nombre de succès / nombre d’échecs) est affiché à l’issue de l’opération.
  • Les élèves sont notifiés individuellement du reset de leur machine.

US #108 - Voir si la machine d’un élève est allumée

Composant : Edukit-Front / VmService     Estimation : 2 h     Statut : Terminée

Description :
En tant qu’enseignant, je veux voir, pour chaque élève de ma séance, si sa machine virtuelle est allumée ou non, afin de suivre l’état de participation et d’avancement du groupe.

Critères d’acceptation :

  • L’état d’allumage (allumée / éteinte / en cours de démarrage) est visible pour chaque élève dans la vue de la séance.
  • La liste des états se met à jour en temps réel (via SignalR) sans rechargement de page.
  • L’indicateur d’état est clair et lisible (icône ou badge coloré).

US #109 - Voir si une machine est en erreur

Composant : Edukit-Front / VmService     Estimation : 2 h     Statut : Terminée

Description :
En tant qu’enseignant, je veux être informé visuellement si la machine virtuelle d’un élève est en état d’erreur, afin de pouvoir intervenir rapidement et débloquer l’élève concerné.

Critères d’acceptation :

  • Une erreur sur la VM d’un élève est signalée visuellement par une icône distincte (ex. : icône d’erreur rouge) dans la grille de la séance.
  • Le détail de l’erreur est accessible via un tooltip ou un panneau de détail.
  • L’état d’erreur est mis à jour en temps réel (via SignalR).

US #128 - Filtrer les séances

Composant : Edukit-Front / OrgService     Estimation : 3 h     Statut : Terminée

Description :
En tant qu’enseignant, je veux filtrer la liste de mes séances de travail selon plusieurs critères (cours associé, période, statut), afin de retrouver rapidement les séances qui m’intéressent sans avoir à parcourir l’intégralité de la liste.

Critères d’acceptation :

  • Les filtres disponibles sont : cours associé, statut de la séance (planifiée, en cours, terminée), et période (plage de dates).
  • Les filtres sont cumulables : on peut les combiner simultanément.
  • Un bouton « Réinitialiser » permet de revenir à la liste complète en un clic.
  • Le nombre de séances correspondant au filtre actif est affiché (compteur de résultats).
  • Un message explicite est affiché si aucune séance ne correspond aux critères de filtrage.

US #644 - Voir l’état global d’une séance

Composant : Edukit-Front / OrgService / VmService     Estimation : 3 h     Statut : Terminée

Description :
En tant qu’enseignant (ou administrateur/superadministrateur), je veux voir un résumé agrégé de l’état global d’une séance de travail - indiquant le nombre de VMs créées, en cours d’exécution, arrêtées, en erreur ou en cours de création - afin de savoir d’un coup d’œil si tout fonctionne correctement pour l’ensemble de la classe.

Critères d’acceptation :

  • Un tableau de bord affiche, pour la séance sélectionnée, le nombre total d’élèves et le nombre de VMs par statut (Creating, Running, Stopped, Error, Deleted).
  • Un endpoint dédié GET /work-sessions/{id}/status est exposé côté OrgService et retourne l’agrégat.
  • L’accès à cet endpoint est réservé aux rôles teacher, admin et superadmin.
  • L’affichage se met à jour automatiquement (polling ou SignalR) sans rechargement de page.

US #645 - Créer les machines pour un seul élève

Composant : Edukit-Front / OrgService / VmService     Estimation : 14 h     Statut : Terminée

Description :
En tant qu’enseignant (ou administrateur/superadministrateur), je veux créer la machine virtuelle pour un élève spécifique au sein d’un environnement de travail, afin de provisionner ou de re-provisionner individuellement son poste sans affecter les autres élèves.

Critères d’acceptation :

  • L’élève ciblé doit être membre du groupe associé à l’environnement de travail.
  • Si une VM existe déjà pour cet élève avec un statut autre que Deleted ou Error, la requête est rejetée avec un code HTTP 400 (provisionnement doublon interdit).
  • La commande crée un enregistrement VirtualMachine en statut Creating dans la base de données et publie un événement CreateVm sur RabbitMQ.
  • Le provisionnement complet suit le pattern SAGA (via Wolverine) : la VM est créée sur Proxmox, les credentials sont générés puis transmis à OrgService via l’événement VmCredentialIssued.
  • L’élève est notifié par email lorsque sa VM est prête, avec ses identifiants de connexion et la commande SSH.
  • L’opération est idempotente et traçable via OpenTelemetry.

US #649 - Afficher les identifiants de connexion (élève)

Composant : Edukit-Front / VmService     Estimation : 3 h     Statut : Terminée

Description :
En tant qu’élève, je veux pouvoir afficher les identifiants de connexion de la machine virtuelle qui m’est attribuée, afin de pouvoir me connecter à ma machine sans avoir à retrouver un email précédent.

Critères d’acceptation :

  • L’élève peut consulter, depuis son espace, l’adresse IP/hôte, le port SSH, le nom d’utilisateur et le mot de passe de sa VM.
  • Les informations sont uniquement visibles pour les VMs attribuées à l’élève connecté.
  • Un bouton de copie dans le presse-papiers est disponible pour chaque identifiant.
  • L’accès est refusé si aucune VM n’est attribuée à l’élève ou si la VM est dans un état non opérationnel (ex. : Creating, Deleted).

US #650 - Supprimer les machines pour un seul élève

Composant : Edukit-Front / OrgService / VmService     Estimation : 3 h     Statut : Terminée

Description :
En tant qu’enseignant, je veux pouvoir supprimer la machine virtuelle d’un élève spécifique au sein d’un environnement de travail, afin de libérer des ressources sur le serveur Proxmox sans avoir à supprimer les machines de toute la classe.

Critères d’acceptation :

  • L’enseignant peut sélectionner un élève et déclencher la suppression de sa VM depuis l’interface.
  • Une confirmation explicite est demandée avant l’exécution (prévention des suppressions accidentelles).
  • L’opération suit le pattern SAGA (VmDestroySaga) : la VM est détruite sur Proxmox et son enregistrement passe au statut Deleted en base de données.
  • L’espace libéré sur l’hyperviseur Proxmox est récupéré.
  • L’opération est idempotente : si la VM est déjà dans l’état Deleted, aucune erreur n’est levée.

US #651 - Démarrage des VMs lors du démarrage d’une séance

Composant : OrgService / VmService     Estimation : 6 h     Statut : Terminée

Description :
En tant qu’enseignant, je veux que les machines virtuelles des élèves démarrent automatiquement lorsque je démarre une séance de travail, afin que les postes soient opérationnels dès le début du cours sans intervention manuelle.

Critères d’acceptation :

  • Lorsqu’une séance passe au statut « En cours », OrgService appelle VmService via gRPC pour déclencher le démarrage de toutes les VMs de l’environnement.
  • VmService publie les événements StartVm sur RabbitMQ ; les workers consomment ces événements et envoient les commandes de démarrage à Proxmox.
  • L’opération est idempotente : si une VM est déjà en cours d’exécution, aucune erreur n’est levée.
  • Un mécanisme de retry automatique est en place en cas d’échec transitoire.
  • Chaque étape est tracée via OpenTelemetry (traçabilité complète de la chaîne).

US #652 - Démarrage d’une séance automatiquement selon planification

Composant : OrgService     Estimation : 8 h     Statut : Terminée

Description :
En tant qu’enseignant, je veux que ma séance de travail démarre automatiquement à la date et l’heure planifiées, afin d’économiser des ressources serveur (les VMs ne sont allumées que lorsque le cours commence) et de ne pas avoir à intervenir manuellement.

Critères d’acceptation :

  • La séance démarre automatiquement à la valeur date_debut configurée lors de la création.
  • Un job Quartz.NET est planifié au moment de la création de la séance.
  • Au redémarrage de l’application, les jobs sont rechargés depuis la base de données (persistance des jobs Quartz).
  • L’opération est idempotente : si la séance est déjà démarrée, le job ne déclenche pas d’erreur.
  • Si date_debut est dans le passé au moment de la création, la séance démarre immédiatement.
  • Ce comportement ne s’active que si l’option « Démarrage automatique » est activée (voir US #678).

US #653 - Clôturer une séance automatiquement selon la planification

Composant : OrgService     Estimation : 8 h     Statut : Terminée

Description :
En tant qu’enseignant, je veux que ma séance de travail se clôture automatiquement à la date et l’heure de fin planifiées, afin d’économiser des ressources serveur et de ne pas avoir à intervenir manuellement en fin de cours.

Critères d’acceptation :

  • La séance se clôture automatiquement à la valeur date_fin configurée.
  • Un job Quartz.NET est planifié à la création de la séance.
  • Les jobs sont rechargés depuis la base de données au redémarrage de l’application.
  • L’opération est idempotente : si la séance est déjà terminée, le job ne déclenche pas d’erreur.
  • Si une clôture anticipée a été effectuée manuellement, le déclenchement automatique est ignoré.
  • Ce comportement ne s’active que si l’option « Fin automatique » est activée (voir US #679).

US #654 - Éteindre les VMs automatiquement lors de la clôture d’une séance

Composant : OrgService / VmService     Estimation : 6 h     Statut : Terminée

Description :
En tant qu’enseignant, je veux que les machines virtuelles des élèves s’éteignent automatiquement lorsque la séance se clôture, afin d’économiser des ressources serveur sans avoir à intervenir manuellement en fin de cours.

Critères d’acceptation :

  • Lorsqu’une séance passe au statut « Terminée », OrgService appelle VmService via gRPC pour déclencher l’arrêt de toutes les VMs de l’environnement.
  • VmService publie les événements StopVm (et/ou DestroyVm selon la configuration) sur RabbitMQ ; les workers envoient les commandes correspondantes à Proxmox.
  • L’opération est idempotente : si une VM est déjà éteinte ou supprimée, aucune erreur n’est levée.
  • Un mécanisme de retry automatique est en place en cas d’échec transitoire.
  • Chaque étape est tracée via OpenTelemetry.

US #678 - Paramétrer l’automatisation du démarrage d’une séance

Composant : Edukit-Front / OrgService     Estimation : 3 h     Statut : Terminée

Description :
En tant qu’enseignant, je veux choisir si le démarrage d’une séance doit se faire automatiquement ou manuellement, afin d’avoir la flexibilité d’adapter le comportement à chaque cours.

Critères d’acceptation :

  • Le formulaire de création/édition d’une séance inclut une case à cocher « Démarrage automatique ».
  • La case est décochée par défaut (démarrage manuel par défaut).
  • La valeur est persistée en base de données avec la séance.
  • Si la case est cochée (ON) : un job Quartz.NET est planifié pour déclencher le démarrage à date_debut.
  • Si la case est décochée (OFF) : aucun job n’est créé pour le démarrage.
  • Modifier le paramètre après création (ON → OFF ou OFF → ON) crée ou supprime le job en conséquence.
  • L’opération est idempotente et les jobs sont rechargés au redémarrage de l’application.

US #679 - Paramétrer l’automatisation de la fin d’une séance

Composant : Edukit-Front / OrgService     Estimation : 3 h     Statut : Terminée

Description :
En tant qu’enseignant, je veux choisir si la clôture d’une séance doit se faire automatiquement ou manuellement, afin d’avoir la flexibilité d’adapter le comportement à chaque cours.

Critères d’acceptation :

  • Le formulaire de création/édition d’une séance inclut une case à cocher « Fin automatique ».
  • La case est décochée par défaut (clôture manuelle par défaut).
  • La valeur est persistée en base de données avec la séance.
  • Si la case est cochée (ON) : un job Quartz.NET est planifié pour déclencher la clôture à date_fin.
  • Si la case est décochée (OFF) : aucun job n’est créé pour la clôture automatique.
  • Modifier le paramètre après création (ON → OFF ou OFF → ON) crée ou supprime le job en conséquence.
  • L’opération est idempotente et les jobs sont rechargés au redémarrage de l’application.

6. Recette - État final des tests

6.1 Tests unitaires

Les tests unitaires s’exécutent entièrement en mémoire, sans aucune dépendance externe (pas de Docker, pas de base de données réelle). Toutes les dépendances sont substituées par des mocks (bibliothèque Moq).

Composant Fichiers de test Tests exécutés Réussis Échoués Ignorés
OrgService 97 509 509 0 0
VmService 85 517 517 0 0
Edukit-Front 2 4 4 0 0
Total 184 1 030 1 030 0 0

Le Sprint 4 a contribué environ 252 nouveaux tests à la suite cumulée (153 OrgService + 98 VmService + 1 front). L’intégralité des 1 030 tests unitaires est en succès à la date de livraison.

6.2 Tests d’infrastructure (VmService)

Les tests d’infrastructure vérifient les adaptateurs vers les systèmes externes (Proxmox HTTP, gRPC) en simulant leurs réponses via des intercepteurs HTTP et des mocks gRPC. Aucune connexion réseau réelle n’est établie lors de l’exécution.

Fichiers de test Tests exécutés Réussis Échoués
11 89 89 0

Ce sprint a ajouté 11 nouveaux tests d’infrastructure : VmLifecycleServiceTests (démarrage via Proxmox) et VmLifecycleServiceDestroyTests (destruction via Proxmox).

6.3 Tests manuels

La validation manuelle est réalisée sur l’environnement de développement local avant l’ouverture de chaque pull request. Les résultats sont consignés dans la section « Testing Notes » de chaque PR sur Azure DevOps.

Fonctionnalité testée Outil Résultat Observations
Session de travail - cycle complet (création → démarrage → complétion) Insomnia (collection partagée) (:5100) Réussi Transitions d’état validées
Session de travail - annulation Insomnia (collection partagée) (:5100) Réussi  
Envoi d’email de credentials VM Interface Angular + Mailpit Réussi Email reçu avec commande SSH et mot de passe
Réinitialisation credential VM Insomnia (collection partagée) (:5200) Réussi Compteur CredentialResetCount incrémenté
Démarrage batch d’un environnement Insomnia (collection partagée) Réussi Mises à jour temps réel visibles via SignalR
Arrêt batch d’un environnement Insomnia (collection partagée) Réussi  
Destruction batch d’un environnement Insomnia (collection partagée) Réussi VMs passées à l’état Destroyed
Retry provisionnement sur VM en échec Insomnia (collection partagée) + Angular Réussi VM repassée à Pending puis reprovisionnée
Affichage de la liste des utilisateurs Interface Angular (:4200) Réussi Tableau paginé affiché correctement
Temps réel SignalR - mise à jour statut VM Interface Angular Réussi Statut mis à jour sans rechargement de page

6.4 Analyse statique - SonarQube

Critère Résultat Seuil Statut
Quality Gate global Grade A Grade A Réussi
Couverture de code - OrgService ≥ 60 % ≥ 60 % Réussi
Couverture de code - VmService ≥ 60 % ≥ 60 % Réussi
Couverture de code - Edukit-Front < 40 % ≥ 40 % (objectif) Non atteint - non bloquant
Nouvelles violations sécurité 0 0 Réussi
Nouvelles violations fiabilité 0 0 Réussi
Nouvelles violations maintenabilité Informatif - Informatif
Commentaires SonarQube sur PR traités Oui Oui Réussi

6.5 Pipeline CI/CD - Azure DevOps

Étape Statut
Build - OrgService + VmService + Edukit-Front Réussi
Tests unitaires (dotnet test) Réussi
Tests d’infrastructure (dotnet test) Réussi
Tests frontend (npx ng test - Vitest + jsdom) Réussi
Collecte couverture (coverlet → SonarQube Cloud) Réussi
Analyse SonarQube - Quality Gate Réussi

L’ensemble du pipeline est au vert. Chaque pull request fusionnée dans main a reçu au minimum une approbation de reviewer et a satisfait l’intégralité des critères de livraison définis dans la stratégie de test.


7. Bugs connus

7.1 Bugs corrigés et livrés dans ce sprint

ID Description Composant Criticité Statut
#694 Nom de l’utilisateur non affiché lors d’une modification automatique de séance OrgService / Front Mineur Corrigé et livré
#696 Nom de l’utilisateur non affiché lors d’une modification automatique de séance (doublon) OrgService / Front Mineur Corrigé et livré
#697 Statut de création incorrect dans l’historique d’une session OrgService Mineur Corrigé et livré
#718 Absence de limite maximale sur les ressources d’un OsTemplate - un utilisateur pouvait saisir des valeurs arbitraires VmService Mineur Corrigé et livré
#738 Libellé de message incorrect lors d’une modification automatique de séance OrgService / Front Mineur Corrigé et livré
#744 Problème de sauvegarde (backup) sur l’hyperviseur Proxmox Infrastructure Mineur Corrigé et livré

7.2 Bugs ouverts (non résolus à la livraison)

Aucun bug fonctionnel ouvert à la date de livraison.

7.3 Anomalies qualité persistantes

Ces anomalies sont issues du rapport de test qualité et font l’objet d’un suivi dans la feuille de route qualité.

ID Description Composant Criticité Statut
AN-001 Couverture de test frontend insuffisante : 4 tests pour l’ensemble du projet Angular (guards, services et composants non couverts) Edukit-Front Mineur Ouvert - extension Vitest planifiée à court terme
AN-002 Absence de tests end-to-end : aucun parcours utilisateur complet automatisé (connexion Keycloak → provisionnement VM → session) Tous Mineur Ouvert - Playwright planifié à moyen terme
AN-003 Keycloak non couvert par des tests automatisés - pannes d’authentification détectées uniquement en validation manuelle Tous Mineur Ouvert - infrastructure externe, validation manuelle systématique
AN-004 Asymétrie InfrastructureTests : OrgService ne dispose pas de projet de tests d’infrastructure (vs. VmService : 11 fichiers) OrgService Mineur Ouvert - ajout planifié à court terme

7.4 Récapitulatif

Criticité Total Corrigés et livrés En cours Non analysés Ouverts (qualité)
Bloquant 0 0 0 0 0
Critique 0 0 0 0 0
Majeur 0 0 0 0 0
Mineur 10 6 0 0 4

Aucune anomalie bloquante ou critique n’est ouverte à la date de livraison. La livraison est concluante.


8. Lexique

Terme Définition
AES-256-GCM Algorithme de chiffrement symétrique authentifié utilisé pour transporter de façon sécurisée le credential VM entre VmService et OrgService via RabbitMQ
Batch Traitement groupé - opération appliquée simultanément à l’ensemble des ressources d’un périmètre (ex. : démarrer toutes les VMs d’un environnement)
BDD Behavior-Driven Development - approche de développement consistant à décrire le comportement attendu du logiciel sous forme de scénarios (Gherkin : Given / When / Then) avant d’implémenter la fonctionnalité
CI/CD Continuous Integration / Continuous Delivery - automatisation du build, des tests et du déploiement à chaque modification de code
Clean Architecture Architecture logicielle organisant le code en couches concentriques (Domain → Application → Infrastructure → API) avec des dépendances orientées vers le centre
CQRS Command Query Responsibility Segregation - pattern séparant les opérations d’écriture (Commands) des opérations de lecture (Queries)
E2E End-to-End - test automatisé du parcours complet d’un utilisateur à travers toutes les couches du système
gRPC Protocole d’appel de procédure à distance haute performance basé sur HTTP/2 et Protocol Buffers, utilisé pour la communication synchrone entre OrgService et VmService
Idempotence Propriété d’une opération produisant le même résultat qu’elle soit exécutée une ou plusieurs fois, garantissant la sécurité des rejeux en cas de retry
Mock Objet simulé remplaçant une dépendance réelle lors d’un test, permettant de contrôler son comportement et de vérifier les interactions
OIDC / PKCE OpenID Connect / Proof Key for Code Exchange - flux d’authentification sécurisé utilisé par Keycloak pour émettre des tokens JWT
OpenTelemetry Standard open-source pour la collecte de métriques, logs et traces distribués, utilisé pour l’observabilité de l’ensemble de la plateforme
Proxmox VE Hyperviseur open-source de virtualisation (VMs KVM) sur lequel sont déployées les machines étudiantes
qemu-guest-agent Agent s’exécutant à l’intérieur de la VM permettant à l’hyperviseur Proxmox d’y envoyer des commandes (notamment set-user-password pour la réinitialisation des credentials)
Quality Gate Ensemble de critères de qualité configurés dans SonarQube dont le non-respect bloque automatiquement le merge d’une pull request
Quartz.NET Bibliothèque .NET de planification de tâches (scheduler) utilisée pour les démarrages et clôtures automatiques de séances
RabbitMQ Broker de messages open-source utilisé pour la communication asynchrone entre OrgService et VmService
Saga Pattern de gestion de processus longs et distribués via une séquence d’étapes avec mécanisme de compensation en cas d’échec
SignalR Bibliothèque ASP.NET Core permettant des communications temps réel entre le serveur et les clients via WebSocket
SPA Single Page Application - application web dont le rendu est géré côté client ; Edukit-Front est une SPA Angular
Estimation en heures Unité d’estimation utilisée par l’équipe pour chiffrer la charge de travail d’une user story lors du Sprint Planning, exprimée en heures et saisie dans le champ Story Points d’Azure DevOps
SSO Single Sign-On - mécanisme d’authentification centralisée permettant à un utilisateur de se connecter une seule fois pour accéder à plusieurs services
User Story Fonctionnalité décrite du point de vue de l’utilisateur final (format : En tant que… je veux… afin de…), servant d’unité de planification et de livraison dans la méthode Scrum
Wolverine Bibliothèque .NET de messaging (RabbitMQ) et d’implémentation de sagas, utilisée dans OrgService et VmService

Retour en haut