Bienvenue dans ce cours !
Cette première partie n'est pas évaluée. Son objectif est de vous présenter ce qu'est le débogage de code, d'installer les outils et de récupérer le projet sur lequel nous travaillerons pendant ce cours.
Rendez-vous ensuite dans la deuxième partie du cours pour passer à la pratique. 😉
La résolution d'un bug suit toujours les mêmes étapes. Dans ce chapitre, nous allons les détailler une par une.
Étape n°1 - Identifiez le problème
Les messages générés à l'exécution du code peuvent contenir des informations importantes sur l'endroit où le problème se produit. Puisque la gestion des erreurs en .NET est basée sur les exceptions, il est fondamental de donner les informations nécessaires à une analyse a posteriori. Par exemple, dans un ArgumentException, si un paramètre est reçu avec une valeur non supportée, il faut fournir cette valeur, en plus du nom du paramètre.
Étape n°2 - Reproduisez le problème dans un environnement contrôlé
Si le problème est identifié en pré-production ou production, il est généralement très compliqué d'effectuer la moindre action sans impacter les utilisateurs. Il est donc conseillé de rejouer les jeux de données qui conduisent au problème sur une machine de développement, ou mieux dans un test unitaire.
Étape n°3 - Déboguez le code
Il faut maintenant aller dans le code et l'exécuter pas à pas afin de comprendre ce qui ne se passe pas comme prévu. L'idée est d'arriver à émettre une hypothèse que l'on va ensuite valider. Une fois que le jeu de données permettant de reproduire le bug est identifié, on peut démarrer une investigation.
Il est important de comprendre que l'on pourrait truffer le code de messages indiquant par où l'on passe, quelle est la valeur des paramètres passés aux méthodes et quel est l'état des structures de données. Ce n'est pas réaliste pour plusieurs raisons :
L'impact sur les performances de l'application serait trop important. C'est d'ailleurs pour cela que certaines fonctions de trace ne s'exécutent qu'en mode DEBUG ;
Comment déterminer la quantité et la qualité des traces nécessaires ?
Il est difficile de savoir à l'avance ce que l'on voudra investiguer. Et si nous traçons TOUT, cela générera du bruit dans lequel il ne sera plus possible de trouver l'information pertinente.
C'est pour cela que l'on a besoin d'un débogueur. L'idée est d'être capable de réduire progressivement l'espace de recherche dans le code pour arriver aux instructions et aux structures de données fautives. Dans les parties suivantes du cours, nous verrons comment naviguer dans l'exécution du code et voir l'état des structures de données.
Étape n°4 - Fixez la cause
La quatrième étape est de trouver une solution au bug ! Pour cela, il faut :
Soit modifier les instructions ;
Soit modifier les structures de données.
Étape n°5 - Testez et validez la correction
Il faut toujours tester et vérifier que la correction résout le problème, sans oublier de valider qu'il n'engendre pas de régressions ailleurs (encore une valeur supplémentaire des tests unitaires !).
Étape n°6 - Et recommencez tant que les symptômes n'ont pas disparu
Si cela n'est pas suffisant, et bien… on recommence du début. :p
C'était la seule partie théorique du cours ! ;)
Il est maintenant temps de mettre les mains dans le cambouis. Je vous propose de résoudre quelques bugs ensemble dans la suite de ce cours ! Allons-y !