it-swarm-fr.com

Comment améliorer votre capacité à déboguer le code existant

Une tâche commune dans le monde du travail s'occupe du code existant, mais de buggy. Quels sont quelques conseils pour améliorer vos compétences en tant que débogueur?

29
GSto

Ne présumez rien

Il est souvent tentant de dire "Oh, je sais ce que fait ce morceau de code, c'est bien". Ne fais pas ça. Testez toutes les hypothèses et passez à travers tout ce que.

33
Adam Lear

Diviser et conquérir est une bonne approche. Essayez d'identifier une entrée visible (événement d'entrée/réseau utilisateur ...) et de sortie (journal, sortie à l'utilisateur, message de réseau sortant ...) entre lequel le problème existe. Essayez de mettre des empreintes à des morceaux importants ou de points significatifs entre eux et essayez de vous affiner où le bogue est dans le code.

Diviser et conquérir peut également travailler très bien en cas de régressions sur le code contrôlé de la version. Trouvez deux constructions - une où elle fonctionne comme prévu, autrement avec la régression. Créez le fossé jusqu'à ce que vous soyez laissé avec un tas de Checkins comme suspects potentiels.

4
aufather

Plutôt que la côtelette binaire, écrivez des tests sous la forme

  • Étant donné...
  • Lorsque...
  • Attendre...

Pour vérifier ce que vous savez réellement être vrai sur le fonctionnement de l'application par rapport à ce que vous supposez être vrai.

La plupart des IDes facilitent d'extraire des méthodes et de générer des talons de test Xunit. Utiliser cela.

Pourquoi ne pas saupoudrager les débogues? Parce que, après avoir terminé, vous devrez probablement défaire une grande partie de ce travail et supprimer une quantité juste de ces débogues. Lorsque vous écrivez des tests, votre débogage facilitera la prévention et la détection des futurs bugs.

4
sal

Comme d'autres l'ont dit - ne présumez rien. Ceci est particulièrement vrai si son code que vous avez écrit. Lors du débogage des autres codes, vous êtes plus susceptible de ralentir parce que le code est nouveau pour vous ou si vous ne faites pas confiance au codeur. Lors du débogage de votre propre code, il est trop facile de supposer que vous l'avez écrit correctement, ralentissez-le!

Pour le processus réel de débogage:

  • Écrire des tests d'unité s'ils n'existent pas déjà.
  • Ajouter une journalisation appropriée si cela n'existe pas déjà.
  • Ensuite, utilisez le débogage.

L'ajout des tests d'unité et de la journalisation d'abord plus efficace que l'utilisation du débogueur d'abord. Vous obtenez également l'avantage supplémentaire d'avoir les tests d'unité pour ne pas introduire de bugs futurs et que la journalisation aidera les sessions de débogage à l'avenir.

2
Tim Murphy

Continuez à déboguer. Si vous débogez beaucoup, vous vous améliorerez.

2
Khelben

Connaissez vos outils. Par exemple, le débogueur de Visual Studio a une fonctionnalité impressionnante appelée traces de trace qui ressemblent à des points d'arrêt, mais au lieu d'arrêter votre code insertion d'une instruction de trace dans la sortie de débogage.

Lire des livres ou prendre une classe sur la façon d'utiliser votre débogueur est fortement recommandé. J'ai pris quelques cours et j'ai lu quelques livres de John Robbins qui a fait une grande différence dans mon efficacité en tant que débogueur.

1
Jay Beavers

Deux choses, basées sur la plupart des 22 dernières années à maintenir le code, d'autres personnes ont écrit.

Comprenez les types de bugs que vous avez tendance à écrire.

Par exemple, je suis un codeur très méticuleux, alors une fois que mon code compilait, il est généralement exempt de bugs triviaux. Donc, mes insectes ont tendance à être bizarres compliquées de choses comme des blocages de fil. Sur le côté bas, j'ai un ami qui écrit principalement des bugs triviaux - des points-virgules à la fin de C++ pour des boucles, la ligne suivante ne peut être exécutée qu'une fois, ce genre de chose.

Ne supposez pas que d'autres personnes écrivent les mêmes types de bugs que vous faites.

Je ne sais pas combien de fois j'ai perdu du temps à tirer les gros pistolets de débogage, en supposant qu'un bug était mon genre de choses étranges vraiment subtilité, seulement pour que mon ami regarde à mon épaule et partir, "Avez-vous remarqué que point-virgule? " Après des années, je suis d'abord aller pour les fruits triviaux et peu suspendus lorsque vous regardez le code des autres peuples.

1
Bob Murphy

Avant de marcher sur une petite partie du code, voyez si vous pouvez déterminer avec précision le résultat. Cela a tendance à voler face à ne présumez rien (que je suis élu BTW), mais à mesure que vous gagnez de l'expérience, cela peut aider à s'impliquer où regarder.

Cela peut sembler trivial, mais apprendre les nuances de votre débogueur et apprendre les clés à chaud. Parfois, les débuggeurs peuvent être assez lents pour que votre esprit se demande lorsque vous passez à travers. Si vous pouvez suivre la machine et ne vous soucierez pas, cela peut aider.

Si vous pouvez modifier le code pendant le débogage:

  • envisagez d'affirmer les conditions préalables et post. Parfois, vous pouvez ensuite passer à pied, au lieu d'entrer en code.
  • pour si des déclarations avec des expressions compliquées, considérons quelque chose (certains peuvent les sourcils, mais cela fonctionne pour moi)

comme:

bool isLessThan5 = a < 5;
bool isGreaterThan10 = a > 10;
if ( isLessThan5 || isGreaterThan10 )
{
   // more code here
}

à la place de:

if ( a < 5 || a > 10 )
{
   // more code here
}

Pour les cas, vous ne pouvez pas tout déboguer, pour une raison quelconque, apprendre à "canard en caoutchouc" avec un collègue. Parfois, l'acte d'expliquer éclaire la lumière. (OK, peut-être que ce n'est pas exactement dans le thème des questions, mais je pense que c'est assez proche de justifier la mention)

1
DevSolo

Comprendre fonctionnellement ce que le code essaie de faire. Si vous ne connaissez pas la photo complète (tous les cas de test, ce code doit passer) Il est difficile de déboguer correctement sans introduire de nouveaux bugs

0
bigtang

Consultez le livre très précieux pourquoi les programmes échouent: Guide du débogage systématique , par Andreas Zeller. Il vous présentera de nombreuses techniques, théories et outils, dont certains sont à la pointe de la recherche.

Les diapositives du livre sont disponibles en ligne, mais je trouve le livre lui-même est plus facile à lire.

Le livre vous aidera à vous aider à démarrer et à vous faire réfléchir plus scientifiquement sur le débogage, mais ce n'est aucun substitut à la pratique. Vous devrez peut-être écrire et déboguer pendant 10 ans avant de voir un ordre d'amélioration de la magnitude de votre performance. Je me souviens encore de faire tomber ma mâchoire à Sun voir des développeurs seniors, qui ont été programmés pour UNIX depuis 30 ans, trouvent des bugs obscur multithreading ou des bugs parallèles en quelques minutes. L'expérience compte!

0
Macneil

Si vous vous êtes réduit dans une petite région, mais je ne peux toujours pas repérer l'erreur, essayez l'option "Code de vue + assemblage" de votre débogueur. Sachant assez d'ASM pour dire "Il devrait y avoir une branche ici" ou "pourquoi est-ce que cela ne copie que le mot bas?" va souvent identifier l'erreur de codage.

0
AShelly

Écrire un test d'unité automatisé et d'autres types d'intégration et de tests fonctionnels.

Les tests les plus automatisés que vous avez, moins vous avez besoin de temps dans un débogueur.

En outre, bon design - SOLID Principes. Si vous écrivez de petites classes ciblées et favorisez la composition sur l'héritage, éliminez la duplication, etc., votre code sera toujours plus facile à déboguer.

Je trouve que le code bien conçu produit un ensemble de bogues différent de ce code qui n'est pas bien conçu. De manière générale, le code bien conçu produit des bogues plus faciles à trouver, reproduire et corriger.

L'exception (et il y en a toujours un) est un code multithreading :-)

0
Chris Holmes