Apprendre et améliorer vos compétences de débogage

Les programmeurs passent un pourcentage élevé de temps à déboguer plutôt qu'à écrire du code. Vous avez probablement eu une formation pour apprendre un langage ou un framework - mais comment avez-vous appris à corriger les défauts de votre logiciel?

Lorsque vous êtes tombé amoureux de la programmation (ou du moins que vous avez décidé que c'était une carrière rémunératrice), vous y avez probablement pensé comme une entreprise créative. Vous concevriez un excellent logiciel, écriviez le code et pouf! - ça marcherait parfaitement la première fois.

Ouais. Droite.

Dans le monde réel, vous avez passé beaucoup de temps à déboguer du code plutôt qu'à écrire de nouvelles choses. Je suis sûr que je pourrais déterrer un pourcentage obscur du temps de développement consacré à la correction des défauts plutôt qu'à la création de nouvelles fonctionnalités, mais je doute que vous ayez besoin d'entendre un nombre. Vous pouvez trop facilement imaginer les jours que vous avez passés à rechercher le bogue de l'enfer et son effet sur le calendrier de votre projet.

Désormais, les programmeurs peuvent et apprennent de nombreuses façons d'acquérir de nouvelles compétences logicielles, qu'il s'agisse de lire un livre, d'assister à une conférence technique ou de visiter des sites comme JavaWorld.com. (Je suis plutôt content que vous fassiez ce dernier.) Cependant, ceux-ci se concentrent généralement sur des outils, tels que des langages ou des frameworks, et non sur des méta-techniques, telles que "Comment trouver ce bogue en deux heures au lieu de deux jours". Les langues peuvent aller et venir, tout comme les débogueurs IDE, mais la capacité de discerner sous quel rocher se cache votre bogue est celle qui restera avec vous pour toujours.

Une grande partie de la compétence d'apprentissage du débogage est, bien sûr, l'expérience. Cela pourrait être votre propre expérience, ou l'opportunité d'être une sauterelle aux pieds d'un maître programmeur. Je soupçonne également que certaines personnes ont un talent inné pour le dépannage (tout aussi pertinent pour réparer une voiture cassée comme une application qui se comporte mal), et ceux d'entre nous qui n'en ont pas ne peuvent que bouder d'envie.

Cependant, une partie de ceci peut être apprise. Par exemple, un maître programmeur de ma connaissance avait un axiome: si vous cherchez un bogue depuis (relativement) longtemps et que vous ne pouvez pas le trouver, il a dit: "Vous cherchez au mauvais endroit." Cela semble évident, mais certainement vrai ... et combien de fois avez-vous perdu du temps à chercher dans le module XYZ alors que le problème était complètement ailleurs?

J'ai demandé à plusieurs développeurs comment ils avaient appris ou amélioré leurs compétences de débogage. Un nombre surprenant d'entre eux ont parlé de leur maîtrise du débogueur de l'EDI ou d'une autre expertise en matière d'outils, mais la plupart de ce que je voulais savoir, ce sont leurs conseils sur l'amélioration de la capacité à corriger les erreurs. Voici un bref résumé de leurs réponses.

  1. Soyez discipliné. Le débogage est un processus, a déclaré un développeur, pas une série d'événements aléatoires. Ne modifiez pas les boutons au hasard; suivez le processus d'exécution du code. Tout comme réparer une tondeuse à gazon, dit-il. La partie A reçoit-elle les informations dont elle a besoin? Et la sortie? Si cela vous convient, passez à autre chose.
  2. Pour améliorer vos compétences, déboguez le code des autres plutôt que le vôtre. Il sera plus facile de voir les défauts des hypothèses de l'autre personne que de voir les vôtres. Vous pouvez le faire dans le cadre d'une révision de code entre pairs et d'un débogage entre pairs. Vous développerez la capacité de reconnaître plus rapidement les causes communes des défauts, a promis un développeur, et vous apprendrez à reconnaître (et à abandonner) vos propres mauvaises pratiques de développement.
  3. Faites comme si vous étiez le compilateur. Recherchez et corrigez autant d'erreurs que possible avant d'appuyer sur le bouton Compiler. Alors que la plupart des IDE modernes incluent des débogueurs intégrés (comme Intellisense de Visual Studio), vous apprendrez moins de leur automatisation qu'en examinant consciemment le processus. (De la même manière, vous n'apprendrez jamais à épeler correctement en vous appuyant sur un correcteur orthographique pour faire tout le travail.)
  4. Apprenez à corriger les bogues le plus tôt possible dans le processus de développement. Cela peut signifier quelque chose de formalisé, comme un développement piloté par les tests. Cela signifie également consacrer du temps au débogage de votre conception au lieu de vous lancer dans le codage.
  5. Le débogage est plus facile lorsque vous pouvez tenir le système entier dans votre tête. Ne faites pas l'erreur de vous concentrer sur une seule partie d'une application. Faites attention aux interrelations entre les modules. Lisez le code à plusieurs niveaux d'abstraction, a conseillé un programmeur. «Trouver le bogue est la partie la plus difficile, et il faut comprendre clairement ce que font plusieurs parties du code», dit-elle.
  6. Une partie du même conseil, je pense, est la suggestion de quelqu'un d'autre: acquérir une bonne compréhension du système à un niveau inférieur à celui sur lequel vous travaillez. «Si vous déboguez un programme de niveau système C, il est utile de connaître certains assemblages et quelque chose sur le système d'exploitation», a expliqué un ingénieur en chef du logiciel système. "Si vous déboguez une application J2EE, il est utile de connaître les threads Java, RMI et GC." Dans de nombreux cas, a-t-il souligné, les messages d'erreur proviennent de ce niveau inférieur. «Si vous pouvez comprendre ce que cela signifie, cela vous aidera à comprendre ce qui ne va pas à votre niveau d'abstraction», a-t-il expliqué.

Quelques développeurs ont également recommandé des ressources supplémentaires. Parmi eux, le livre de David Agan, Debugging, qui promet neuf règles indispensables, et Why Programs Fail: A Guide to Systematic Debugging, qui est sur le point de sortir dans une deuxième édition. Le développeur qui a recommandé ce dernier dit qu'il enseigne une approche systématique du débogage avec de nombreux exemples pratiques. Un autre a suggéré un essai en ligne, Dix compétences de testeurs de logiciels très efficaces.

J'aime toutes ces réponses, mais je soupçonne qu'il y a plus de sagesse à partager. Comment avez-vous acquis vos compétences en débogage? Comment avez-vous aidé les autres à améliorer les leurs?

Cette histoire, "Apprendre et améliorer vos compétences de débogage" a été initialement publiée par JavaWorld.