Déboguer systématiquement
Ne devinez pas et ne corrigez pas à l'aveugle. Chaque étape doit réduire l'endroit où peut se trouver le bogue.
1. Reproduire
- Obtenez l'erreur exacte, la trace de la pile, les logs, les entrées et l'environnement (versions, OS, configuration).
- Faites en sorte que la défaillance se produise à la demande, idéalement avec une seule commande ou un seul test. Si elle est intermittente, trouvez ce qui la rend plus probable (charge, synchronisation, ordre, une entrée spécifique).
- Si vous ne pouvez pas la reproduire, dites-le et rassemblez plus d'informations avant de modifier le code.
2. Isoler
- Réduisez la reproduction : supprimez les entrées, les étapes et le code jusqu'à ce que la suppression de quoi que ce soit d'autre fasse disparaître le bogue.
- Si cela fonctionnait avant, trouvez le changement qui l'a cassé :
git logsur les fichiers concernés, ougit bisect run <commande de test>. - Lisez la trace de la pile à partir du haut de votre code, pas celle du framework.
3. Hypothèse et test
- Écrivez une hypothèse spécifique : "le cache renvoie des entrées périmées parce que la clé ignore la locale".
- Concevez une vérification qui la prouve ou la réfute : une ligne de log, une assertion, un point d'arrêt dans le débogueur, un test unitaire. Prédisez le résultat avant de l'exécuter.
- Si le résultat vous surprend, votre modèle du code est erroné. Mettez-le à jour avant d'essayer l'idée suivante.
- Changez une seule chose à la fois. Annulez les expériences qui n'ont pas aidé.
4. Corriger la cause
- Corrigez là où la valeur erronée est produite, pas là où elle est constatée. Vérifiez si la même erreur existe ailleurs.
- Ajoutez un test de régression qui échoue avant la correction et réussit après.
- Supprimez les logs temporaires et le code de débogage.
5. Rapporter
Expliquez la cause racine en une ou deux phrases, la correction, comment vous l'avez vérifiée, et tout ce qui reste inexpliqué.