PD-54 — Scénarios de tests contractuels¶
1. Références¶
- Spécification : PD-54-specification.md
- Epic : EPIC-189 Crypto
- Rôle QA : Architecte QA senior / auditeur indépendant
2. Matrice de couverture¶
| Référence spec | Type | Test ID | Couvert | Commentaire |
|---|---|---|---|---|
| I1 | Invariant | TC-INV-01 | Oui | Déterminisme strict |
| I2 | Invariant | TC-INV-02 | Oui | Sensibilité aux modifications |
| I3 | Invariant | TC-INV-03 | Oui | Clôture post-racine |
| I4 | Invariant | TC-INV-04 | Oui | Indépendance inter-arbres |
| I5 | Invariant | TC-INV-05 | Oui | Partage de feuilles sans impact |
| 5.0 | Règles | TC-NOM-12 | Oui | Références normatives et identifiants |
| 5.0 (fenêtres) | Règles | TC-NOM-13 | Oui | Attribution [window_start, window_end) |
| R1–R3 | Règles | TC-NOM-01 | Oui | Entrée / validation |
| R4–R5 | Règles | TC-NOM-02 | Oui | Canonicalisation |
| R6–R7 | Règles | TC-NOM-03 | Oui | Construction feuilles |
| R8–R9 | Règles | TC-NOM-04 | Oui | Ordonnancement |
| R10–R12 | Règles | TC-NOM-05 | Oui | Construction arbre |
| R13–R14 | Règles | TC-NOM-06 | Oui | Racine & clôture |
| R15–R16 | Règles | TC-NOM-07 | Oui | Périodicité / indépendance |
| R17 | Règle | TC-NOM-08 | Oui | Persistance logique |
| R18–R19 | Règles | TC-NOM-09 | Oui | Vérifiabilité / usage aval |
| R20 | Règle | TC-NOM-10 | Oui | Algorithme de hash |
| R21–R24 | Règles | TC-NOM-11 | Oui | Merkle DAG |
| E1–E4 | Erreurs | TC-ERR-01 → 04 | Oui | Cas d’erreur / validité 5.0 |
3. Scénarios de test – Flux nominaux¶
TC-NOM-01 — Entrée valide et batch non vide¶
Référence spec : R1, R2, R3
GIVEN - Une liste events[] finie, close et non vide - Tous les événements marqués comme validés
WHEN - La construction d’arbre est déclenchée pour la fenêtre
THEN - Un arbre unique est produit - Une racine unique est calculée - Tous les événements sont inclus exactement une fois
TC-NOM-02 — Canonicalisation déterministe¶
Référence spec : R4, R5
GIVEN - Deux ensembles events[] logiquement identiques mais ordonnés différemment en entrée
WHEN - La canonicalisation est appliquée
THEN - Les représentations canoniques obtenues sont strictement identiques - Les feuilles résultantes sont identiques
TC-NOM-03 — Construction des feuilles¶
Référence spec : R6, R7
GIVEN - Un événement canonique unique
WHEN - Le hash de feuille est calculé
THEN - La valeur leaf = HASH(canonical_event) est déterministe - Cette valeur peut être réutilisée dans plusieurs arbres sans altération
TC-NOM-04 — Ordonnancement canonique des feuilles¶
Référence spec : R8, R9
GIVEN - Un ensemble de feuilles non ordonnées
WHEN - L’ordonnancement canonique est appliqué
THEN - L’ordre final est strictement identique à chaque exécution
TC-NOM-05 — Construction binaire et duplication¶
Référence spec : R10, R11, R12
GIVEN - Un nombre impair de feuilles
WHEN - La construction de l’arbre est effectuée
THEN - Le dernier nœud est dupliqué - Tous les nœuds parents respectent HASH(left || right)
TC-NOM-06 — Racine et clôture¶
Référence spec : R13, R14
GIVEN - Un arbre dont la racine a été calculée
WHEN - Une tentative d’ajout d’événement est effectuée
THEN - L’ajout est rejeté - La racine reste strictement inchangée
TC-NOM-07 — Périodicité et indépendance¶
Référence spec : R15, R16
GIVEN - Deux fenêtres temporelles distinctes
WHEN - Un arbre est construit pour chacune
THEN - Les arbres sont indépendants - Aucun lien n’existe entre leurs racines
TC-NOM-08 — Persistance logique¶
Référence spec : R17
GIVEN - Un arbre valide
WHEN - La persistance logique est effectuée
THEN - La racine, les preuves d’inclusion et les métadonnées sont toutes présentes
TC-NOM-09 — Vérifiabilité indépendante¶
Référence spec : R18, R19
GIVEN - Une feuille, sa preuve d’inclusion et la racine associée
WHEN - La vérification est effectuée hors système émetteur
THEN - La preuve est validée exclusivement à partir des données fournies
TC-NOM-10 — Algorithme de hash figé¶
Référence spec : R20
GIVEN - Une version d’algorithme de hash déclarée
WHEN - Un arbre est construit
THEN - Toutes les feuilles et la racine utilisent cet algorithme
TC-NOM-11 — Merkle DAG à feuilles partagées¶
Référence spec : R21–R24
GIVEN - Deux arbres distincts partageant une feuille identique
WHEN - Les racines sont calculées indépendamment
THEN - Chaque racine reste propre à son arbre - Aucune référence croisée n’est observable
TC-NOM-12 — Références normatives et métadonnées de vérification¶
Référence spec : 5.0
GIVEN - Un arbre construit avec sa racine, ses preuves d’inclusion et ses métadonnées
WHEN - Les métadonnées et la preuve sont inspectées
THEN - canonicalization_id, leaf_ordering_id et hash_algorithm_id/version sont présents - Les définitions normatives associées sont publiques ou fournies avec la preuve - Le format des preuves et des métadonnées est déterminable à partir de ces identifiants
TC-NOM-13 — Attribution des fenêtres [window_start, window_end)¶
Référence spec : 5.0
GIVEN - Deux fenêtres définies avec window_start, window_end, window_timezone - Des événements dont event_time est exprimé dans le même fuseau
WHEN - Un arbre est construit pour la première fenêtre
THEN - Les événements tels que window_start <= event_time < window_end sont inclus - Un événement tel que event_time = window_end est exclu de cette fenêtre et appartient à la suivante
4. Scénarios de test – Cas d’erreur¶
TC-ERR-01 — Batch vide¶
Référence spec : E1
GIVEN events[] vide
WHEN la construction est demandée
THEN aucun arbre n’est produit
TC-ERR-02 — Événement invalide au sens de la spécification¶
Référence spec : E2, 5.0
GIVEN un événement sans identifiant, ou dont event_time ne permet pas une attribution univoque à une fenêtre, ou dont la canonicalisation échoue
WHEN la construction est demandée
THEN l’événement est exclu de l’arbre
TC-ERR-03 — Canonicalisation non déterministe¶
Référence spec : E3
GIVEN deux exécutions produisant des canoniques différents
THEN non-conformité détectée
TC-ERR-04 — Algorithme non conforme¶
Référence spec : E4
GIVEN un algorithme non versionné
THEN la construction est rejetée
5. Tests d’invariants (non négociables)¶
| Invariant | Test | Observable |
|---|---|---|
| I1 | TC-INV-01 | Racine identique |
| I2 | TC-INV-02 | Racine différente |
| I3 | TC-INV-03 | Rejet post-clôture |
| I4 | TC-INV-04 | Absence de référence |
| I5 | TC-INV-05 | Racines inchangées |
6. Tests de non-régression¶
| Test ID | Objet | Observable |
|---|---|---|
| TC-NR-01 | Même entrée / nouvelle version | Racine inchangée |
| TC-NR-02 | Ajout d’un arbre | Arbres existants inchangés |
7. Tests négatifs et adversariaux¶
| Test ID | Abus | Résultat attendu |
|---|---|---|
| TC-NEG-01 | Injection événement post-clôture | Rejet |
| TC-NEG-02 | Collision volontaire entrée | Racine différente |
8. Observabilité requise pour les tests¶
- Racine calculée
- Preuves d’inclusion
- Métadonnées de batch (window_start, window_end, window_timezone)
- canonicalization_id, leaf_ordering_id, hash_algorithm_id/version
9. Règles non testables¶
| Règle | Justification | Impact |
|---|---|---|
| Aucune | — | — |
10. Verdict QA¶
✅ Spécification intégralement testable et automatisable
Aucune ambiguïté bloquante identifiée.