Vérifie que les tests adhèrent exactement à la spécification ShelfScan. Pour chaque module testé, croise les critères d'acceptation des tâches et les descriptions de la spec pour détecter les écarts, oublis et assertions incorrectes. À utiliser quand l'utilisateur demande « vérifie l'adhérence des tests », « les tests collent à la spec ? », « audit tests vs spec ».
Auditer l'adhérence des tests (tests/) à la spécification (docs/specifications/specifications.md) et aux tâches (docs/tasks/<milestone>/NNN__slug.md). Détecter :
docs/specifications/specifications.mddocs/plan/implementation_plan.mddocs/tasks/<milestone>/NNN__slug.mdsrc/tests/find tests/ -name "test_*.py" -not -path "*__pycache__*" | sort
grep -rl "Statut : DONE" docs/tasks/ | sort
Pour chaque module dans le périmètre :
| Section spec | Comportement | Test attendu |
|---|---|---|
| §3 Étape 2 | CLAHE sur canal L (pas RGB) | Valeur pixel vérifié avant/après |
| §3 Étape 3 | Canny + HoughLinesP produit ≥ 1 ligne | Test sur image avec séparations claires |
| §3 Étape 4 | Correction d'angle avant OCR | Image tournée → bounding boxes droites |
| §3 Étape 5 | CER = edit_distance / len(ref) | Calcul à la main sur exemple connu |
| §3 Étape 6 | Fuzzy matching : seuil minimal configurable | Test avec titre approchant |
| §6 | Taux de détection = livres trouvés / livres réels | Calcul vérifié sur cas simple |
| §6 | CER normalisé par longueur de la référence | Test unitaire |
ndim == 3, dtype == uint8).image, books, title, author, confidence).Pour chaque critère [x] dans la tâche :
- Trouver le(s) test(s) qui le couvrent.
- Vérifier que le test exécute réellement le scénario décrit.
- Si aucun test → signaler comme MANQUANT.
- Si test existe mais n'exerce pas le critère → signaler comme INSUFFISANT.
assert.# Test Adherence — <scope audité>
**Date** : YYYY-MM-DD
**Périmètre** : <modules audités>
**Verdict** : ✅ CONFORME | ⚠️ ÉCARTS DÉTECTÉS | ❌ NON-CONFORMITÉS CRITIQUES
---
## Résumé exécutif
<2-3 phrases>
## Matrice de couverture spec → tests
| Section spec | Comportement/Règle | Tâche(s) | Test(s) | Verdict |
|---|---|---|---|---|
| §3 Étape 2 | CLAHE canal L | #001 | `test_preprocess.py::test_clahe_on_l_channel` | ✅ |
| §6 | CER normalisé | #012 | `test_eval.py::test_cer_calculation` | ✅ |
| ... | ... | ... | ... | ... |
## Critères d'acceptation non couverts
| Tâche | Critère | Statut |
|---|---|---|
| #NNN | <critère> | ❌ MANQUANT |
## Écarts spec ↔ test
### B-N. <Titre>
**Spec** : §X — <comportement attendu>
**Test** : `tests/test_xxx.py::test_method`
**Écart** : <description précise>
**Action** : <correction>
## Anti-patterns détectés
| Test | Anti-pattern | Sévérité |
|---|---|---|
| `test_xxx.py::test_yyy` | Test réseau sans mock | WARNING |
## Résumé des actions
| # | Sévérité | Action | Fichier(s) |
|---|---|---|---|
| B-1 | BLOQUANT | <action> | `tests/test_xxx.py` |
| Niveau | Définition |
|---|---|
| BLOQUANT | Comportement de test en contradiction avec la spec. Critère obligatoire non couvert. |
| WARNING | Couverture partielle. Test tautologique. API externe non mockée. |
| MINEUR | Test orphelin valide. Docstring #NNN manquant. |