mutation-testing
Vérifie que les tests détectent réellement des bugs — pas seulement qu’ils exécutent du code — en entrant dans la phase COMMIT & VERIFY du cycle TDD.
Quand l’utiliser
- Entrer dans la phase 4 (COMMIT & VERIFY) du cycle TDD
- Investiguer un mutant survivant après que la baseline de tests est verte
- Confirmer qu’un kill est effectif après l’écriture d’un test de frontière
- Vérifier la qualité des tests avant une fusion
Ne jamais exécuter sur une baseline rouge — corriger les tests d’abord.
Contrat d’entrée
- Baseline de tests 100% verte
dotnet strykerdisponible (dotnet tool install -g dotnet-strykersi absent)- Chemins identifiés :
--project(csproj de production) et-tp(csproj de tests)
Contrat de sortie
- Score de mutation (pourcentage)
- Liste des mutants survivants classifiés : réel (test manquant) ou équivalent (aucun effet observable)
- Tests de frontière ajoutés pour chaque survivant réel
- Verdict : ✅ Continuer vers commit / ❌ BLOQUER — retourner à l’étape 4
Invariants
- S7 — Exécution déterministe — Les tests de mutation DOIVENT être exécutés via des appels d’outils terminal. Ne pas affirmer des résultats depuis de la prose
- Un test qui ne tue aucun mutant est du bruit — le supprimer
- Exclusions de scope — Ne jamais muter : DTOs, ViewModels, adaptateurs d’infrastructure,
DependencyInjection.cs,Program.cs, interfaces marqueurs, code généré - Score de mutation 100% sur la logique métier pour continuer vers commit (ou < 100% avec uniquement des mutants équivalents documentés)
Pourquoi cette forme
La couverture de code mesure l’exécution, pas la détection de bugs. Le test de mutation injecte des défauts contrôlés (opérateurs arithmétiques, comparaisons, booléens, conditionnels, valeurs de retour, LINQ) et vérifie que les tests échouent. Un mutant qui survit révèle un cas limite non testé ou un test insuffisamment assertif.
« A test that kills no mutant is noise. DELETE IT. »
Le flux déterministe en 5 étapes (run → parse JSON → classify → kill → re-run scoped) garantit une confiance reproductible dans la qualité des tests, indépendamment de l’interprétation humaine.
Customisation autorisée
- Seuils
--break-at,--threshold-high,--threshold-low(L1) - Patterns d’exclusion
--mutate "!..."(L1) - Mode
--since:mainpour développement rapide vs--mutate "**/*.cs"avant merge (L2)
Voir aussi
- red-synthesize-green — Cycle TDD dont la phase COMMIT utilise ce skill
- craft-discipline — Checkpoints d’auto-discipline avant commit
- quality-gates-evidence-contract — Contrat d’évidence qui consomme le score de mutation
- software-engineer — Agent DELIVER qui exécute ce skill