10
votes

Stratégies de chasse des bugs?

Disons que vous avez un bogue trouvé dans le test fonctionnel d'une partie assez complexe du logiciel. Cela pourrait découler de données mauvaises / inattendues dans la base de données, du code de niveau central ou quelque chose à l'avant.

Bien. Nous avons tous été là.

Vous avez des tests unitaires pour écrire et exécuter, les instructions de débogage / enregistrement pour insérer, des instructions SQL à écrire et à exécuter, des choses que vous souhaitez vérifier avec Firebug, etc.

Disons que la première étape est proposée avec une liste de causes potentielles que vous souhaitez enquêter.

Maintenant, vous devez décider de l'ordre de faire les choses.

Avez-vous:

  1. enquête sur les causes dans une commande basée sur la sensation de gut?
  2. enquête sur les causes dans l'ordre du plus rapide de vérifier au plus lentement à vérifier?
  3. suppose que le bogue est spécifique à cette fonctionnalité et étudie de la plupart des codes spécifiques aux fonctionnalités pour une fonctionnalité de code spécifique?
  4. suppose que c'est la faute de quelqu'un d'autre et étudie du code le plus général sur votre code spécifique?
  5. Quelque chose d'autre que je n'ai pas mentionné?

    J'ai un sentiment que la première stratégie est la plus souvent utilisée. Peut-être que parce que je ne travaille pas avec de nombreux développeurs juniors, et plus de développeurs seniors ont tendance à avoir une intuition décente. Ou peut-être que nous pensons simplement que nous avons une intuition décente mais devraient vraiment utiliser une approche plus systématique.

    Toutes les pensées?


4 commentaires

6. Google pour le bogue ou la poste sur Stackoverflow


Une pensée - cela devrait être un wiki communautaire.


@ 01, je ne comprends toujours pas parfaitement le raisonnement ou les avantages d'une question de la communauté wiki malgré leur lecture à leur sujet sur Meta. Il semble que je ne suis pas la seule personne un peu confondue par cette fonctionnalité. Mais je suppose que je vais l'essayer (au moins une fois) de voir ce qui se passe.


6. Commencez avec le code qui a été changé le plus récemment.


14 Réponses :


2
votes

Je dirais que cela n'a pas d'importance, tant qu'il est documenté et méthodique. C'est un petit truisme étrange dans la programmation qui, parfois faire des choses dans un ordre aléatoire, est plus efficace que de dépenser beaucoup de temps à essayer de comprendre la "meilleure" voie.

Ne jamais sous-estimer le sentiment d'intestin; C'est l'expérience en vous donnant une tête. Je commence presque toujours avec ce que vous considérerez probablement d'être mon sentiment "intestinal". Je regarde l'erreur et vérifie les étapes que je pense susceptibles de causer ce problème.


0 commentaires

2
votes

Mon premier pas dans une situation comme celle-ci est généralement de vérifier les choses dans l'ordre qui réduira le plus rapidement le nombre de choses à vérifier. Vous pouvez presque y penser comme faisant une recherche binaire du bogue: "Eh bien, les paramètres de poste ont l'air bien, je peux donc exclure tout avant la soumission de formulaire", etc.

Cela dit, si j'ai un fort sentiment que le problème pourrait être dans un endroit particulier, je vérifierai cela en premier.


0 commentaires

1
votes

J'ai tendance à aller avec le sentiment d'intestin, et une approche de division et de conquête; isoler des morceaux de code de taille décroissante où je pense que "le bogue" est.

Cela ne fonctionne pas si vous ne savez pas, ni ne comprenez pas le codeBase - si tel est le cas, trouvez quelqu'un qui le fait et allez avec leur sentiment d'intestin.


0 commentaires

1
votes

D'abord, j'essaie de comprendre le bogue, puis je fais tout ce que vous suggérez, en fonction de la sensation de gut. C'est vraiment un compromis de la manière dont vous êtes certain d'une cause spécifique et à quel point il est facile de tester.

En outre, lorsque j'échete une cause, j'essaie d'ajouter directement les vérifications vraiment rapides car je l'inspectione de toute façon (ajouter des énoncés de sortie temporaires de débogage, ajouter des affirmations et telles)


0 commentaires

4
votes

Dans mon expérience, il est probablement préférable d'aller avec une sensation de gut (1) pendant 30 minutes environ.

Si rien ne sort de cela, parlez à quelqu'un d'autre à ce sujet.

C'est assez étonnant de quoi parler à quelqu'un d'autre (même s'il n'est pas technique), peut aider.


2 commentaires

C'est une bizarrerie cognitive. Nous sommes des créatures linguistiques, donc l'activité de traduction de vos intuitions intérieures en sons vous oblige à regarder le problème sous un autre angle.


+1. J'ai oublié de mentionner de parler à quelqu'un à ce sujet. Je trouve souvent que l'acte d'explication peut provoquer une ampoule d'éclairage de sortir dans votre tête et de résoudre le problème sur place.



21
votes

Je trouve le Débogage de canard en caoutchouc la stratégie fonctionne bien aussi.


3 commentaires

J'ai toujours entendu l'histoire (éventuellement apocryphe) du professeur d'informatique qui avait un ours en peluche à l'avant de son bureau. Au cours de ses heures de bureau, tout étudiant qui souhaitait lui demander une question a dû demander à l'ours d'abord; Si l'étudiant ne pouvait toujours pas comprendre le problème après avoir demandé à l'ours, l'étudiant pourrait alors demander au profresseur. Ma femme apprendra la programmation - et je pense que je vais essayer d'employer mes chats dans ce rôle (surtout celui qui est sourd.)


+1. Pour la même raison, j'ai donné +1 à Bravex. De plus, je n'étais pas au courant de ce terme.


"Le débogage de l'ours en caoutchouc" semble un peu étrange



0
votes

Ma commande:

  1. Regardez le code de 1-2 Causes les plus probables (choisies basées sur la sensation de gut).
  2. Si rien n'est trouvé, exécutez le code dans le débogueur (ou si possible, insérez des instructions de débogage / de journalisation au code).
  3. Si rien n'est trouvé, appelez quelqu'un d'autre et répétez les étapes 1 et 2 avec lui.

0 commentaires

4
votes
  1. reproduisez le bogue dans un environnement de débogage.
  2. Examiner l'état du système au point Le bogue se produit pour trouver les éléments incompatibles / incorrects / inattendus de l'état qui ont directement conduit visiblement au bogue survenant. Souvent, il suffit de regarder le code et la pile d'appel vous indiqueront immédiatement quel est le problème.
  3. Ajoutez des tests à tous les points où cet état peut être créé / muté dans le flux de contrôle normal.
  4. traiter les échecs de ces tests en tant que nouveau bogue, retour à l'étape deux.

    rinçage, mousser, répéter jusqu'à ce que la cause initiale du problème soit trouvée. Fastidieux et mécanique, mais vous obtiendrez là-bas.

    sauf ... occasionnellement les tests d'une itération de l'étape 3 n'échouent pas; Le plus souvent, car une mémoire de corruption de système non liée est ce qui conduit à l'état non valide, ou parce que le problème est le threading / chronométrage / ininciplinisé les données dépendant et introduisant suffisamment les tiges et / ou la disposition des données pour modifier ou masquer les symptômes. À ce stade, pour cette affiche au moins, le processus devient plus intuitif, alternant entre remplacer les tests de santé mentale avec des formes moins intrusives et désactiver de manière sélective les modules pour exclure des sources de corruption.


0 commentaires

0
votes

Voici quelques astuces utiles:

  • Si vous utilisez une langue qui génère une trace de pile sur des exceptions, commencez à partir de là.
  • Obtenez une copie des données originales qui ont causé le problème si vous le pouvez.
  • Utilisez un bon débogueur.
  • Si vous avez accès à un il y a des choses comme le ODB pour différentes langues pouvant être utile en vous permettant de faire avancer ou d'inverser rapidement l'exécution après que l'événement se produise
  • exclure l'impossible et vous resterez à la solution!

0 commentaires

1
votes

Écoutez comment les experts débèvent du logiciel sur la radio d'ingénierie logicielle:

Dave Thomas parle de logiciel Archéologie qui a de très bons conseils sur le débogage.

Andreas Zeller apparaît dans un Episode < / a> dévoué au débogage.


0 commentaires


1
votes

Je suis avec @moonshadow, mais j'ajouterai cela à une certaine mesure, cela dépend de ce que l'échec est. C'est-à-dire que certaines sortes d'échec ont des causes assez bien connues et je commencerais avec la cause connue

Par exemple, sur les erreurs "Access Violation" des systèmes Windows sont presque toujours dues à la tentative d'utilisation ou d'examen (accès) de mémoire non allouée. Pour trouver la source d'une telle erreur, c'est une bonne idée de regarder tous les endroits où la mémoire est (ou n'est pas) allouée.

Si on sait que le "problème" est dû à des données incorrectes, le correctif peut nécessiter des modifications à la validation ou à l'acquisition des données, même une fois que l'erreur est tracée à l'analyse.

Un point de plus, tout en réfléchissant à travers le virus, il vaut souvent bien l'effort d'essayer de créer un petit programme pour la créer.


0 commentaires

0
votes

Je fais normalement ceci:

1) ajoutez un nouveau cas de test fonctionnel au système de test de régression automatisé. Je démarre normalement un projet de logiciel avec un système de test de régression propre avec

  • Bibliothèque Excel VBA + C Pour contrôler l'interface / périphérique SCSI / IDE (il y a 13 ans), le rapport de test est Excel Speeadshetsheet.
  • TCL attendez des tests de système de routeur de réseau complexe. Le rapport de test est WebPage. (Il y a 6 ans)
  • Aujourd'hui, j'utilise Python / attendre. Le rapport de test est XML + Python Base XML Analyzer.

    Cet objectif pour toutes ces œuvres est de vous assurer qu'une fois que tout bogue est trouvé, il ne doit plus jamais apparaître dans le code de contrôle ou le système de production à nouveau. Il est également plus facile de reproduire les problèmes aléatoires et à long terme.

    Ne vérifiez pas de code à moins que cela ne vous assiste à un test de régression automatisé de nuit .

    J'écris généralement 1: 1 le rapport entre le code produit par rapport au code de test. 20K lignes d'expert TCL pour les lignes de 20 km de code C ++. (Il y a 5 ans.) Par exemple:

    • CODE C implémenterait un proxy de transfert de connexion TCP de tunnel de configuration.
    • Cas de test TCL: (a) Configurer les connexions Assurez-vous que les données sont passées à travers. (b) Configurez les connexions avec différents éléments de réseau. (c) Faites ceci 10, 100, 1000 fois et vérifiez que des problèmes de fuite de mémoire et de ressources système, etc.
    • Faites ceci pour toutes les fonctionnalités du système, on peut savoir pourquoi la ration de 1: 1 sur le programme de test au code.

      Je ne veux pas que l'équipe de QA fasse un test automatisé avec mon système de test, car tout mon code de contrôle doit réussir les tests. J'exécute habituellement 2 semaines d'essai de régression à long terme avant de donner au code à l'équipe QA.

      Les cas de test manuel de l'équipe QA s'assurent également que mon programme dispose de suffisamment d'informations de diagnostic intégrées pour capturer tous les bugs futurs. L'objectif est d'avoir suffisamment d'informations de diagnostic pour résoudre 95% des bogues dans <2 heures. J'ai pu faire cela dans mon dernier projet. (Équipement de réseau vidéo chez RBG Networks.)

      2) Ajouter une routine de diagnostic (base Web de nos jours) Pour obtenir toutes les informations internes. (État actuel, journaux, etc.). > 50% de mon code (C / C ++, spécialement) sont le code de diagnostic.

      3) Ajouter plus de détails Journal pour la zone de problèmes que je ne comprends pas.

      4) Analysez les informations.

      5) essayez de corriger le bogue.

      6) s'exécute sur la nuit / sur les tests de régression du week-end. Lorsque j'étais en R & D, je demande généralement au bail 5-10 systèmes de test pour exécuter des tests de régression continue 24x7. Cela aide normalement à ID et à résoudre le problème de la mémoire, des ressources et des performances à long terme avant que le code ne frappe SQA.

      Une fois qu'un système intégré échoue, démarrez à l'invite Linux de temps en temps. J'ai ajouté un cas d'essai qu'il vaut le cycle d'alimentation du système avec une prise programmable à nouveau et assurez-vous qu'il puisse "voir" l'invite de commande et commencer à exécuter le test pendant la nuit. Nous avons pu rapidement identifier le problème du code FPGA et vous assurer que le système est toujours en hausse après 5000 cycles de puissance. Un cas de test a été ajouté et tout ce qu'un nouveau code Verilog Code CheckIn / FPGA est construit. Ce cas de test a été couru. Ce n'était plus jamais un problème.


0 commentaires

0
votes

Je suggère de lire le débogage en pensant.

Andreas Zeller a également fait du travail dans des études de débogage systématiques.


0 commentaires