PV de livraison - Edu-Kit - Sprint 5
Version : 5.0.0 | Date de livraison : 03/06/2026 | Statut : Livraison concluante
Sprint : Sprint 5 (19/05/2026 - 03/06/2026)
Sommaire
- Version de l’application
- Équipe
- Environnement de livraison
- Composants techniques livrés
- Backlog du Sprint 5
- Recette - État final des tests
- Bugs connus
- Lexique
1. Version de l’application
| Champ | Valeur |
|---|---|
| Version | 5.0.0 |
| Sprint | Sprint 5 |
| Date de livraison | 03/06/2026 |
| Période du sprint | 19/05/2026 - 03/06/2026 |
Cette version correspond à la cinquiè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 |
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, sessions de travail et licences |
| VmService | Edukit-VM |
.NET 9 / C# - Clean Architecture + CQRS | Provisionnement Proxmox, cycle de vie des VMs, gestion multi-cluster, arrêt automatique sur licence expirée |
| Edukit-Front | Edukit-Front |
Angular 21 / TypeScript | Interface utilisateur (SPA) — gestion des licences, VMs par étudiant, configuration Proxmox, consommation des ressources |
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 |
| Authentification | Keycloak | 26 | SSO OIDC/PKCE - 4 rôles : superadmin, admin, teacher, student |
| Hyperviseur | Proxmox VE | 8.x | Virtualisation des machines étudiantes (KVM) — architecture multi-cluster (pve4, pve5) |
| 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 |
| Registry | Harbor | - | Registre privé d’images Docker |
| CI/CD | Azure DevOps | - | Pipelines de build, test, analyse SonarQube et déploiement |
| Secrets | Bitnami Sealed Secrets | - | Chiffrement des secrets Kubernetes — SealedSecrets multi-cluster pour les tokens API Proxmox |
| Ingress | Traefik (IngressRoute CRD) | - | Reverse proxy avec sticky sessions SignalR pour le hub Proxmox |
4.3 Nouvelles fonctionnalités livrées dans ce sprint
| Composant | Fonctionnalité livrée |
|---|---|
| OrgService | Système de licences : entité domaine License avec machine d’état à trois statuts (Active, Revoked, Superseded) et gardes du constructeur (établissement, créateur, maxUsers, plages de dates) |
| OrgService | Émission de licence (IssueLicense) avec supersession transactionnelle d’une licence active existante |
| OrgService | Révocation de licence (RevokeLicense) avec raison, horodatage (RevokedAt) et journal d’audit |
| OrgService | Consultation des licences : GetLicenseById, GetLicensesByEstablishment, SearchLicenses (paginée avec filtres) |
| OrgService | Création d’utilisateurs (CreateUser) avec gate de licence, invitation par e-mail (MailKit) et compensation Keycloak si la persistance en base échoue après création du compte OIDC |
| VmService | Provisionnement individuel de VM par étudiant (CreateVmForStudent) avec gate de licence, vérification des préconditions et publication de la saga de provisionnement |
| VmService | Suppression individuelle de VM par étudiant (DeleteVmForStudent) via saga de destruction, avec gate de licence |
| VmService | Liste des étudiants éligibles sans VM dans un environnement (GetEligibleStudents) |
| VmService | Configuration des plafonds de ressources Proxmox par établissement (GetHypervisorLimits / SetHypervisorLimits) — limites RAM % et stockage % |
| VmService | Consultation de l’état des ressources de l’hyperviseur (GetProxmoxStatus) |
| VmService | Service cloud-init (CloudInitBuilder) : génération du YAML cloud-init pour les VMs Debian (user-data, meta-data, network-config DHCP) |
| VmService | Arrêt automatique des VMs sur licence expirée (ExpiredLicenseVmStopper) — service de background périodique avec déduplication des contrôles de licence par établissement |
| Edukit-Front | Onglet « Licence » dans la page de détail d’un établissement (émission, révocation, renouvellement) |
| Edukit-Front | Bannière d’état de licence (expirée, révoquée, quota atteint) affichée aux utilisateurs finaux concernés |
| Edukit-Front | Interface de gestion des VMs par étudiant dans un environnement (provisionnement et suppression individuels) |
| Edukit-Front | Onglet « Proxmox » dans la page de détail d’un établissement (consultation de l’état et configuration) |
| Edukit-Front | Interface de consultation de la consommation des ressources Proxmox d’un établissement |
| Edukit-Front | Modification du mot de passe utilisateur |
| Infrastructure | Migration vers architecture multi-cluster Proxmox (pve4, pve5) avec seed automatique des hypervisor_clusters au démarrage du service |
| Infrastructure | Remplacement de l’Ingress Kubernetes par un IngressRoute Traefik (CRD natif) pour assurer les sticky sessions SignalR avec plusieurs replicas |
| Infrastructure | SealedSecrets multi-cluster : tokens API Proxmox distincts par nœud (pve4 / pve5) avec volumes SSH correctement montés (defaultMode: 0444) |
5. Backlog du Sprint 5
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 |
|---|---|---|---|
| #93 | Définir des limites de ressource pour un établissement | 16 | Terminée |
| #139 | Modifier son mot de passe | 5 | Terminée |
| #771 | Voir la consommation d’un établissement | 7 | Terminée |
| #772 | Alerter sur les ressources de l’établissement | 4 | Terminée |
| #774 | Modifier les limites pour un établissement | 3 | Terminée |
| #790 | Émettre une licence d’établissement | 7 | Terminée |
| #791 | Révoquer une licence émise | 3 | Terminée |
| #792 | Onglet « Licence » dans le détail d’un établissement | 4 | Terminée |
| #793 | Bloquer la création d’utilisateur hors statut Active ou au-delà du quota d’utilisateur | 3 | Terminée |
| #794 | Renouveler une licence | 4 | Terminée |
| #795 | Bloquer l’usage des fonctionnalités lorsque la licence est expirée | 5 | Terminée |
| #796 | Bannière utilisateur final reflétant l’état de la licence | 3 | Terminée |
| #797 | Envoyer les identifiants d’un compte utilisateur par e-mail | 10 | Terminée |
| #798 | Voir les détails du Proxmox d’un établissement | 4 | Terminée |
| #799 | Définir les détails du Proxmox d’un établissement | 7 | Terminée |
| Total | 85 h | 15 / 15 terminées |
Charge du sprint : 85 heures estimées au Sprint Planning — 15 user stories toutes terminées. L’intégralité des user stories a 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 #93 - Définir des limites de ressource pour un établissement
| Composant : VmService / Edukit-Front | Estimation : 16 h | Statut : Terminée |
Description :
En tant qu’administrateur, je veux définir des limites de sécurité pour les ressources d’un établissement afin de maintenir la continuité du serveur.
Critères d’acceptation :
- Les limites sont configurables (RAM, CPU, stockage).
- Les limites sont visibles par les responsables de l’établissement.
- Il est possible d’activer ou de désactiver chaque limite individuellement.
US #139 - Modifier son mot de passe
| Composant : Edukit-Front / Keycloak | Estimation : 5 h | Statut : Terminée |
Description :
En tant qu’utilisateur, je veux changer mon mot de passe afin de sécuriser mon compte, notamment si je pense qu’il a été compromis.
Critères d’acceptation :
- Un utilisateur authentifié peut accéder aux paramètres de son compte et saisir un nouveau mot de passe valide ; le système met à jour son mot de passe avec succès.
- Si le nouveau mot de passe ne respecte pas les règles de sécurité (complexité, longueur minimale) ou que la confirmation est différente, le système refuse la modification et affiche un message explicite.
- Après un changement réussi, le système confirme le changement et invalide les sessions existantes si cette règle de sécurité est activée.
US #771 - Voir la consommation d’un établissement
| Composant : Edukit-Front / VmService | Estimation : 7 h | Statut : Terminée |
Description :
En tant qu’administrateur, je peux consulter la consommation des ressources de mon établissement.
Critères d’acceptation :
- L’administrateur peut ouvrir la section « Consommation des ressources » et visualiser les données disponibles (CPU, RAM, stockage ou autres ressources suivies).
- Les données sont présentées de manière lisible (graphiques, indicateurs ou tableaux avec périodes de référence).
- L’administrateur peut sélectionner une période (jour, semaine, mois) et les données affichées sont mises à jour pour refléter la période choisie.
US #772 - Alerter sur les ressources de l’établissement
| Composant : Edukit-Front / VmService | Estimation : 4 h | Statut : Terminée |
Description :
En tant qu’administrateur, je peux être alerté si les ressources de mon établissement risquent d’être atteintes.
Critères d’acceptation :
- Lorsqu’une ressource atteint ou dépasse un seuil d’alerte configuré (par exemple 80 % de sa capacité), une notification est envoyée à l’administrateur.
- Les ressources à risque sont identifiées dans le tableau de bord avec leur taux d’utilisation et un indicateur de risque.
- L’alerte contient au minimum le nom de la ressource concernée, son niveau d’utilisation actuel et le seuil ayant déclenché l’alerte.
US #774 - Modifier les limites pour un établissement
| Composant : VmService / Edukit-Front | Estimation : 3 h | Statut : Terminée |
Description :
En tant qu’administrateur, je veux définir des limites de ressources par cours afin d’éviter la saturation.
Critères d’acceptation :
- L’administrateur peut définir une limite de ressources pour un cours ; la limite est enregistrée et appliquée au cours concerné.
- Si l’utilisation des ressources atteint ou dépasse la limite, le système empêche toute allocation supplémentaire ou génère un avertissement selon les règles définies.
- La modification d’une limite existante est prise en compte immédiatement pour les contrôles futurs.
US #790 - Émettre une licence d’établissement
| Composant : OrgService / Edukit-Front | Estimation : 7 h | Statut : Terminée |
Description :
En tant que super admin, je veux émettre une licence pour un établissement, pour provisionner manuellement un accès à l’application.
Critères d’acceptation :
- Le super administrateur peut générer une nouvelle licence pour un établissement ; une licence unique est créée et associée à l’établissement.
- Le système valide les paramètres (durée, type de licence, nombre d’utilisateurs, etc.) et empêche l’émission si des données sont manquantes ou invalides.
- Une fois la licence valide émise et activée, l’établissement obtient l’accès provisionné à l’application selon les droits définis par la licence.
US #791 - Révoquer une licence émise
| Composant : OrgService / Edukit-Front | Estimation : 3 h | Statut : Terminée |
Description :
En tant que super admin, je veux marquer une licence comme révoquée, pour couper l’accès de l’établissement sans attendre l’expiration naturelle.
Critères d’acceptation :
- Le statut de la licence passe à « révoquée » et n’est plus considérée comme valide.
- L’accès est refusé immédiatement après révocation, indépendamment de la date d’expiration initiale.
- Le système enregistre la date, l’auteur de la révocation et la licence concernée dans un journal d’audit.
US #792 - Onglet « Licence » dans le détail d’un établissement
| Composant : Edukit-Front / OrgService | Estimation : 4 h | Statut : Terminée |
Description :
En tant que super admin, je veux un onglet « Licence » dans la page de détail d’un établissement, pour gérer la licence de cet établissement (état, émission, renouvellement, révocation).
Critères d’acceptation :
- L’onglet « Licence » est visible et accessible depuis la page de détail d’un établissement.
- Si une licence existe, le système affiche son état (active, expirée, révoquée), ses dates clés et ses caractéristiques principales.
- Les actions de gestion (émission, renouvellement, révocation) sont accessibles depuis l’onglet et mettent à jour l’état de la licence avec confirmation de l’opération.
US #793 - Bloquer la création d’utilisateur hors statut Active ou au-delà du quota d’utilisateur
| Composant : OrgService / Edukit-Front | Estimation : 3 h | Statut : Terminée |
Description :
En tant que super admin, je veux que la création d’utilisateur échoue lorsque la licence est dépassée, pour respecter les règles d’utilisation.
Critères d’acceptation :
- Si la licence de l’établissement est dans un état non actif (révoquée, expirée), toute création d’utilisateur est refusée avec un message indiquant que la licence n’est pas active.
- Si le quota d’utilisateurs autorisé par la licence active est atteint ou dépassé, toute nouvelle création est refusée.
- Un message d’erreur clair précise la cause du blocage (licence inactive ou quota atteint) et empêche la validation de l’opération.
US #794 - Renouveler une licence
| Composant : OrgService / Edukit-Front | Estimation : 4 h | Statut : Terminée |
Description :
En tant que super admin, je veux renouveler une licence à une nouvelle date d’expiration, pour permettre au client de continuer à utiliser le service.
Critères d’acceptation :
- Le super administrateur peut modifier la date d’expiration d’une licence existante ; la licence est mise à jour avec la nouvelle date d’expiration.
- Si la nouvelle date est invalide (antérieure à la date actuelle ou non renseignée), le système refuse le renouvellement et affiche un message d’erreur.
- Une licence expirée ou proche de l’expiration renouvelée avec succès repasse à un état actif et l’accès au service est maintenu sans interruption.
US #795 - Bloquer l’usage des fonctionnalités lorsque la licence est expirée
| Composant : OrgService / VmService | Estimation : 5 h | Statut : Terminée |
Description :
En tant que super admin, je veux que les fonctionnalités (ex. machines virtuelles) cessent de fonctionner une fois la licence expirée, pour respecter les conditions d’utilisation du service.
Critères d’acceptation :
- À l’expiration d’une licence d’établissement, l’accès aux fonctionnalités concernées est automatiquement désactivé.
- Toute tentative d’action sur une ressource (créer, démarrer ou modifier une VM) est refusée si la licence est expirée, sans aucune modification appliquée.
- Un message clair indique que la licence est expirée et que l’accès est suspendu jusqu’au renouvellement.
US #796 - Bannière utilisateur final reflétant l’état de la licence
| Composant : Edukit-Front / OrgService | Estimation : 3 h | Statut : Terminée |
Description :
En tant qu’utilisateur final, je veux voir une bannière claire expliquant l’état de la licence lorsque des restrictions s’appliquent, pour comprendre pourquoi la création ou les fonctionnalités sont indisponibles.
Critères d’acceptation :
- Une bannière d’information est affichée en haut de l’interface lorsque la licence est dans un état restrictif (expirée, révoquée, quota dépassé).
- La bannière indique clairement la cause de la restriction (ex. licence expirée, quota atteint) et l’impact sur les fonctionnalités.
- La bannière est mise à jour ou supprimée dynamiquement si l’état de la licence change (renouvellement, révocation ou retour à l’état actif).
US #797 - Envoyer les identifiants d’un compte utilisateur par e-mail
| Composant : OrgService / Edukit-Front | Estimation : 10 h | Statut : Terminée |
Description :
En tant qu’administrateur, je veux pouvoir envoyer les identifiants d’un compte utilisateur par mail afin que l’utilisateur puisse utiliser son compte.
Critères d’acceptation :
- Lors de la création d’un utilisateur, un e-mail d’invitation est envoyé automatiquement avec les identifiants de connexion.
- Si le service SMTP est indisponible, la création de l’utilisateur réussit tout de même (envoi d’e-mail non bloquant).
- Si la persistance en base de données échoue après la création du compte Keycloak, le compte est désactivé dans Keycloak (compensation) pour éviter un état incohérent entre Keycloak et la base de données.
US #798 - Voir les détails du Proxmox d’un établissement
| Composant : Edukit-Front / VmService | Estimation : 4 h | Statut : Terminée |
Description :
En tant que super admin, je veux un onglet « Proxmox » dans la page de détail d’un établissement, pour voir sa configuration Proxmox.
Critères d’acceptation :
- L’onglet « Proxmox » est visible et accessible depuis la page de détail d’un établissement pour le rôle
superadmin. - L’onglet affiche les informations configurées (URL du serveur, cluster, nœud, statut de connexion, etc.).
- Si aucune configuration Proxmox n’est associée à l’établissement ou que les données sont indisponibles, un message explicite l’indique.
US #799 - Définir les détails du Proxmox d’un établissement
| Composant : Edukit-Front / VmService | Estimation : 7 h | Statut : Terminée |
Description :
En tant que super admin, je veux pouvoir définir les différentes propriétés du Proxmox de l’établissement, pour y accéder lors du provisionnement de VM.
Critères d’acceptation :
- Le super administrateur peut renseigner ou modifier les propriétés Proxmox (URL/API, cluster, nœud, stockage, pool, identifiants techniques) ; les informations sont enregistrées et associées à l’établissement.
- Si une propriété obligatoire est absente ou invalide, le système bloque l’enregistrement et affiche les erreurs de validation correspondantes.
- Lors du provisionnement d’une VM, le système récupère automatiquement les propriétés Proxmox configurées pour l’établissement et les utilise pour exécuter le provisionnement.
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 | 107 | 578 | 578 | 0 | 0 |
| VmService | 92 | 563 | 563 | 0 | 0 |
| Edukit-Front | 2 | 4 | 4 | 0 | 0 |
| Total | 201 | 1 145 | 1 145 | 0 | 0 |
Le Sprint 5 a contribué environ 131 nouveaux tests à la suite cumulée (69 OrgService + 46 VmService unitaires + 16 VmService infrastructure). L’intégralité des 1 145 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, background services) en simulant leurs réponses via des intercepteurs HTTP et des mocks. 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 |
|---|---|---|---|
| 12 | 105 | 105 | 0 |
Ce sprint a ajouté 5 nouveaux tests d’infrastructure :
ExpiredLicenseVmStopperTests(arrêt automatique des VMs sur licence expirée). Les testsVmProvisioningServiceTestsont également été étendus dans ce sprint.
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.
| Fonctionnalité testée | Outil | Résultat | Observations |
|---|---|---|---|
| Émission de licence | Insomnia (collection partagée) | Réussi | Licence créée à l’état Active |
| Émission de licence — supersession | Insomnia (collection partagée) | Réussi | Ancienne licence passée à Superseded, nouvelle créée |
| Révocation de licence | Insomnia (collection partagée) | Réussi | RevokedAt et RevokedBy enregistrés |
| Création utilisateur | Insomnia (collection partagée) + Mailpit | Réussi | E-mail d’invitation reçu avec credentials |
| Création utilisateur — gate licence | Insomnia (collection partagée) | Réussi | 403 retourné avant appel Keycloak |
| CreateVmForStudent | Interface Angular + Insomnia | Réussi | VM passée à Pending puis provisionnée via saga |
| DeleteVmForStudent | Insomnia (collection partagée) | Réussi | VM passée à Destroyed |
| SetHypervisorLimits | Insomnia (collection partagée) | Réussi | Limites sauvegardées, GET retourne les bonnes valeurs |
| SetHypervisorLimits — effacement | Insomnia (collection partagée) | Réussi | Limites supprimées |
| ExpiredLicenseVmStopper | Environnement local + logs | Réussi | VMs arrêtées automatiquement au cycle suivant après révocation de licence |
| CloudInitBuilder — provisionnement VM Debian | Proxmox VE (dev) + Angular | Réussi | VM démarrée, connexion SSH avec le mot de passe généré |
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
maina 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 |
|---|---|---|---|---|
| #738 | Problème de déploiement continu (CD) sur OrgService — pipeline non fonctionnel après modifications de configuration | CI/CD / Azure DevOps | Mineur | Corrigé et livré |
| #744 | Problème de sauvegarde (backup) sur l’hyperviseur Proxmox | Infrastructure | Mineur | Corrigé et livré |
| #827 | Anomalie comportementale sur les environnements de travail détectée en validation | OrgService / Infrastructure | Mineur | Corrigé et livré |
| #830 | Déploiement entièrement non fonctionnel après migration vers l’architecture multi-cluster Proxmox : Proxmox inaccessible (permissions SSH incorrectes 0400 → 0444, variables d’environnement manquantes, tokens API inversés entre pve4 et pve5) et hub SignalR injoignable (sticky sessions Traefik non fonctionnelles avec l’Ingress standard, corrigé par migration vers IngressRoute CRD) |
Infrastructure / VmService / Kubernetes | Majeur | 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. Le Sprint 5 a livré des composants supplémentaires (gestion des licences, VMs par étudiant, configuration hyperviseur) sans nouveau test associé. La dette s’accumule à chaque sprint — à prioriser en Sprint 6. | 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 de travail) | 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 : 12 fichiers). Le Sprint 5 a ajouté des dépendances d’infrastructure côté OrgService (SmtpEmailSender, gate de licence, compensation Keycloak) qui ne sont pas couvertes par des tests d’infrastructure. |
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 | 1 | 1 | 0 | 0 | 0 |
| Mineur | 7 | 3 | 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 les credentials VM entre VmService et OrgService via RabbitMQ |
| 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 |
| Cloud-init | Standard de configuration des VMs au premier démarrage (hostname, utilisateurs, packages, réseau) via des fichiers YAML (user-data, meta-data, network-config) |
| 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 |
| Gate de licence | Contrôle applicatif vérifiant que la licence de l’établissement autorise une fonctionnalité avant d’exécuter une commande |
| 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 |
| IngressRoute | Ressource CRD (Custom Resource Definition) native de Traefik permettant une configuration avancée du routage, notamment les sticky sessions pour SignalR |
| Machine d’état | Modèle de conception représentant les transitions d’un objet entre un ensemble fini d’états (ici : Active → Revoked ou Superseded pour l’entité License) |
| MailKit | Bibliothèque .NET de gestion d’e-mails via SMTP, utilisée pour l’envoi des e-mails d’invitation utilisateur lors de la création de compte |
| 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 |
| Quality Gate | Ensemble de critères de qualité configurés dans SonarQube dont le non-respect bloque automatiquement le merge d’une pull request |
| 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 |
| SealedSecret | Ressource Kubernetes chiffrée (Bitnami Sealed Secrets) permettant de stocker des secrets de façon sécurisée dans le dépôt GitOps |
| 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 |
| Supersession | Mécanisme par lequel l’émission d’une nouvelle licence pour un établissement invalide automatiquement (état Superseded) la licence active précédente, dans la même transaction |
| 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 |