Fermé . Cette question doit être plus ciblée . Il naccepte pas les réponses actuellement.

Commentaires

  • La question liée a été supprimée.
  • Je pense que lapproche est en fait simple. Si vous lavez développé seul, vous en savez tout. Vous pouvez même corriger le bogue sans débogage. Dans cet esprit, le meilleur moyen est dutiliser votre temps pour coder autre chose, jusquà ce que quelquun qui en sait beaucoup à ce sujet puisse répondre à votre question sur la façon de résoudre le problème; ou, laissez-le reposer, codez dautres choses, jusquà ce quune idée de le réparer vienne à votre esprit, afin que vous ne perdiez pas de temps ni dénergie. Je suppose que votre question concerne la gestion des équipes dentreprise.
  • Je pense que Raid. Spray anti-insectes disponible dans le commerce. Est-ce une question philosophique? Les livres sont faits à partir de la simple prépondérance …

Réponse

Létat desprit et lattitude envers le débogage sont peut-être la partie la plus importante, car elle détermine avec quelle efficacité vous corrigerez lerreur et ce que vous en apprendrez – le cas échéant.

Les classiques du développement logiciel comme The Pragmatic Programmer et Code Complete plaident essentiellement pour la même approche: chaque erreur est une occasion dapprendre, presque toujours sur vous-même (car seuls les débutants blâment le compilateur / lordinateur en premier).

Traitez donc ça comme un mystère quil sera intéressant de percer. Et percer ce mystère doit être fait systématiquement, en exprimant nos hypothèses (à nous-mêmes ou aux autres), puis en testant nos hypothèses, une par une si besoin est – en utilisant tous les outils à notre disposition, en particulier les débogueurs et les cadres de test automatisés. Ensuite, une fois le mystère résolu, vous pouvez faire encore mieux en recherchant dans tout votre code des erreurs similaires que vous avez pu commettre; et rédigez un test automatisé pour vous assurer que lerreur ne se reproduira plus sans le savoir.

Une dernière remarque – je préfère appeler les erreurs « erreurs » et non « bogues » – Dijkstra a réprimandé ses collègues pour avoir utilisé ce dernier terme car cest malhonnête, soutenant lidée que les fées des insectes pernicieuses et inconstantes ont planté des bogues dans nos programmes alors que nous ne cherchions pas, au lieu dêtre là à cause de notre propre pensée (bâclée): http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1036.html

Nous pourrions, par exemple, commencer par nettoyer notre langue en ne plus appeler un bogue un bogue mais en lappelant une erreur. Cest beaucoup plus honnête parce que cela met carrément le blâme là où il appartient, à savoir. avec le programmeur qui a commis lerreur. La métaphore animiste du bogue qui sest malicieusement introduite alors que le programmeur ne cherchait pas est intellectuellement malhonnête car elle déguise que lerreur est la propre création du programmeur. La bonne chose de ce simple changement de vocabulaire est quil a un effet si profond : alors quavant, un programme avec un seul bogue était « presque correct », ensuite un programme avec une erreur est juste « faux » (parce que dans lerreur).

Commentaires

  • En fait, jaime le terme " error " plutôt que " bug ", pas parce que cela met le blâme sur " le programmeur qui a commis lerreur ", mais parce que cela indique clairement quil pourrait ne pas être le programmeur en faute. Pour moi, " bug " implique une erreur dans le code; alors que " erro r " implique une erreur quelque part . Peut-être dans le code, peut-être dans la configuration de lenvironnement, peut-être dans les exigences. Ça me rend dingue quand mon patron a une " liste de bogues " où la moitié des problèmes sont des changements dexigences. Appelez ça une liste de tâches, ferchrissakes!
  • +1 pour " chaque erreur est une opportunité dapprendre, presque toujours sur vous-même (car seuls les débutants blâment le compilateur / lordinateur dabord) "
  • Vous connaissez lhistorique du terme " bug ", non? Je veux dire, comme utilisé dans le développement de logiciels. Bien sûr, nous navons ' pas ce problème aujourdhui, mais un bogue a en fait pénétré dans le matériel dun ordinateur sans être remarqué par le programmeur et a causé un problème.De peur que quelquun ne pense me corriger, je sais quEdison a utilisé ce terme bien avant lincident du papillon de nuit, cest pourquoi jai utilisé le mot ' histoire ', pas ' origin '. Voir computerworld.com/article/2515435/app-development/… et en.wikipedia.org/wiki/Software_bug#Etymology
  • @threed Bien sûr. Mais depuis un certain temps, les insectes nont pas causé la grande majorité des erreurs logicielles.

Réponse

  1. Ecrivez des tests. Les tests sont non seulement excellents pour prévenir les bogues (daprès mon expérience, le TDD bien fait élimine presque tous les bogues triviaux et stupides), mais aide également beaucoup au débogage. Les tests obligent votre conception à être plutôt modulaire, ce qui facilite grandement lisolement et la réplication du problème. De plus, vous contrôlez lenvironnement, donc il y aura beaucoup moins de surprises. De plus, une fois que vous obtenez un cas de test qui échoue, vous pouvez être raisonnablement sûr que vous « avez cloué la vraie raison du comportement qui vous dérange.

  2. Apprenez à utiliser un débogueur. Les instructions print peuvent fonctionner raisonnablement bien à un certain niveau, mais un débogueur la plupart du temps est très utile (et une fois vous savez comment vous en servir, cest beaucoup plus confortable que les déclarations print).

  3. Parlez de votre problème à quelquun, même si cest juste un canard en caoutchouc . Se forcer à exprimer le problème sur lequel vous travaillez avec des mots fait vraiment des miracles.

  4. Donnez-vous une limite de temps. Si, par exemple, après 45 minutes, vous sentez que vous nallez nulle part, passez à dautres tâches pendant un certain temps. Lorsque vous reviendrez sur votre bogue, vous pourrez, espérons-le, voir d’autres solutions possibles que vous n’auriez pas envisagées auparavant.

Commentaires

  • +1 pour " Se forcer à exprimer le problème sur lequel vous travaillez avec des mots fait vraiment des miracles. "
  • Et pour ajouter à (1), presque tous les bogues que vous voyez dans le code impliquent quil y a ' un bogue – ou du moins une omission – dans la suite de tests. Corrigez les deux en même temps et non seulement vous prouvez que ' avez résolu le problème, vous ' êtes en sécurité contre cela réintroduit.

Réponse

Jaime la plupart des autres réponses, mais voici quelques conseils sur la marche à suivre AVANT de faire quoi que ce soit. Cela vous fera gagner beaucoup de temps.

  1. Déterminez sil y a vraiment un bogue. Un bogue est TOUJOURS une différence entre le comportement du système et les exigences; le testeur doit être capable darticuler le comportement attendu et réel. Sil est incapable de fournir une assistance pour le comportement attendu, il ny a aucune exigence et il ny a pas de bogue – juste lopinion de quelquun. Renvoyez-le.

  2. Envisagez la possibilité que le comportement attendu est incorrect. Cela peut être dû à une mauvaise interprétation de lexigence. Cela peut également être dû à un défaut dans lexigence elle-même (un delta entre une exigence détaillée et une exigence métier). Vous pouvez également les renvoyer.

  3. Isolez le problème. Seule lexpérience vous apprendra le moyen le plus rapide de le faire – certaines personnes peuvent presque le faire avec leur instinct. Une approche de base consiste à varier une chose tout en garder toutes les autres choses constantes (le problème se produit-il sur dautres environnements? avec dautres navigateurs? dans une région de test différente? à différents moments de la journée?) Une autre approche consiste à regarder les vidages de pile ou les messages derreur – parfois vous pouvez dire juste par la façon dont il est formaté quel composant du système a jeté lerreur dorigine (par exemple, si cest en allemand, vous pouvez bla moi ce tiers avec lequel vous travaillez à Berlin).

  4. Si vous lavez réduit à deux systèmes qui collaborent, inspectez les messages entre les deux systèmes via le moniteur de trafic ou les fichiers journaux , et déterminez quel système se comporte selon les spécifications et lequel ne lest pas. Sil y a plus de deux systèmes dans le scénario, vous pouvez effectuer des vérifications par paires et descendre dans la pile dapplications.

  5. La raison pour laquelle lisolement du problème est si critique est que le problème nest peut-être pas dû à un défaut de code sur lequel vous avez le contrôle (par exemple, les systèmes tiers ou lenvironnement) et que vous souhaitez que cette partie prenne le relais le plus rapidement possible. Cest à la fois pour vous faire économiser du travail et pour les mettre immédiatement au point afin que la résolution puisse être obtenue dans un laps de temps aussi court que possible. Vous ne voulez pas travailler sur un problème pendant dix jours seulement pour trouver que cest vraiment un problème avec le service Web de quelquun dautre.

  6. Si vous avez déterminé quil y a vraiment un défaut et que cest vraiment dans le code que vous contrôlez, vous pouvez isoler davantage le problème en recherchant la dernière version « connue en bon état » et inspecter les journaux de contrôle de source pour les changements qui peuvent avoir causé le problème. Cela peut gagner beaucoup de temps.

  7. Si vous ne pouvez pas le comprendre à partir du contrôle de code source, il est maintenant temps de joindre votre débogueur et de parcourir le code pour le comprendre Il y a de fortes chances que vous ayez une assez bonne idée du problème de toute façon.

Une fois que vous savez où se trouve le bogue et que vous pouvez trouver une solution, voici « une bonne procédure pour y remédier:

  1. Ecrivez un test unitaire qui reproduit le problème et échoue.

  2. Sans modifier le test unitaire, faites il réussit (en modifiant le code de lapplication).

  3. Conservez le test unitaire dans votre suite de tests pour empêcher / détecter la régression.

Réponse

Je pense que la reproduction dun bug est également importante. Tous les cas qui reproduisent le bogue peuvent être listés et vous pouvez ensuite vous assurer que votre correction de bogue couvre tous ces cas.

Réponse

Jai lu un excellent livre sur ce sujet intitulé Pourquoi les programmes échouent , qui décrit diverses stratégies pour trouver des bogues allant de lapplication de la méthode scientifique pour isoler et résoudre un bug, au débogage delta. Lautre partie intéressante de ce livre est quil supprime le terme « bug ». Lapproche de Zeller est:

(1) Un programmeur crée un défaut dans le code. (2) Le défaut provoque une infection (3) Linfection se propage (4) Linfection provoque un échec.

Si vous souhaitez améliorer vos compétences de débogage, je recommande vivement ce livre.

Dans ma propre expérience personnelle, jai trouvé beaucoup de bogues dans notre application, mais la direction nous pousse simplement à avancer pour obtenir de nouvelles fonctionnalités. Jai souvent entendu dire que « Nous avons trouvé ce bogue nous-mêmes et le client » ne la pas encore remarqué, alors laissez-le jusquà ce quil le fasse « . Je pense quêtre réactif par opposition à proactif dans la correction des bogues est une très mauvaise idée car lorsque le moment est venu de mettre un correctif, vous avez dautres problèmes qui doivent être résolus et plus de fonctionnalités de gestion veulent sortir dès que possible, alors vous êtes pris. dans un cercle vicieux qui peut entraîner beaucoup de stress et dépuisement professionnel et finalement, un système défectueux.

La communication est également un autre facteur lorsque des bogues sont détectés. Envoyer un e-mail ou le documenter sur le le traqueur de bogues est très bien, mais selon ma propre expérience, dautres développeurs trouvent un bogue similaire et plutôt que de réutiliser la solution que vous avez mise pour corriger le code (car ils ont tout oublié), ils ajoutent leurs propres versions, donc vous avez 5 solutions différentes dans votre code et il semble plus gonflé et déroutant en conséquence. Ainsi, lorsque vous corrigez un bogue, assurez-vous que quelques personnes examinent le correctif et vous donnent des commentaires au cas où ils auraient corrigé quelque chose de similaire et a trouvé une bonne stratégie pour y faire face.

limist a mentionné le livre,

Le programmeur pragmatique qui contient des informations intéressantes sur la correction des bogues. En utilisant lexemple que jai donné dans le paragraphe précédent, je « jetterais un œil à ceci: Software Entrophy , où lanalogie dune veuve brisée est utilisée. fenêtres apparaissent, votre équipe peut devenir apathique à ne jamais résoudre ce problème, à moins que vous nadoptiez une attitude proactive.

Commentaires

  • I ' jai entendu " Nous avons trouvé ce bogue nous-mêmes et le client na ' pas encore remarqué, alors laissez-le jusquà ils le font aussi " trop souvent. Et après avoir visité le site, souvent le client la remarqué, mais na pas ' je lai signalé. Parfois parce quils pensent que ' nest pas utile parce que cela ne peut ' être corrigé, parfois parce quils recherchent déjà le remplacement dun concurrent ', et parfois (à tort ou à raison) " eh bien, cest est tout un tas de merde fumant de toute façon ".
  • @JuliaHayward – Cest très souvent le cas, mais dans votre situation, vos clients peuvent être satisfaits de la fonctionnalité et ne pas être trop préoccupés par ce qui se passe sous le capot de '. Le problème commence à faire surface lorsque le client revient pour demander des fonctionnalités supplémentaires et que vous devez ajouter dautres améliorations telles que rendre votre application multilingue, compatible mobile bla bla, vous commencez à regarder ce que vous avez et à voir toutes les fissures dans le mur.
  • Je vous montre simplement que tous les livres du monde sur la conception de logiciels, les tests et une bonne communication, ainsi que de nombreux produits sur lesquels vous travaillez, sont un désordre tentaculaire.Bien que sachant ce que ' a raison, le stress et les délais irréalistes (en face de votre code déjà foiré) sont les raisons pour lesquelles le code est dans létat dans lequel il est. Je nai ' aucune réponse moi-même, je ' je suis assez distingué au bureau comme un visage gémissant ***** * alors que je crie pour garder le code sain et le processus de développement fluide, mais parfois léquipe ' ne se lie pas bien.

Réponse

Bug, erreur, problème, défaut – peu importe comment vous voulez lappeler, cela ne fait pas beaucoup de différence. Je vais men tenir au problème depuis « Cest ce à quoi je » suis habitué.

  1. Déterminez quelle est la perception du problème: traduire à partir de « s » Bob dun client nest toujours pas dans le système « vers » Quand jessaye de créer un enregistrement dutilisateur pour Bob, il échoue avec une exception de clé en double, bien que Bob ne soit pas déjà là-dedans « 
  2. Déterminez sil » sagit vraiment dun problème ou simplement dun malentendu (en effet, Bob nest pas  » t là-dedans, il ny a personne qui sappelle bob, et linsertion devrait fonctionner).
  3. Essayez dobtenir des étapes fiables minimales que vous pouvez suivre pour reproduire le problème – quelque chose comme « Étant donné un système avec un enregistrement dutilisateur » Bruce « , lorsquun enregistrement dutilisateur » Bob « est inséré, alors une exception se produit »
  4. Ceci est votre test – si possible, placez-le dans un système automatisé harnais de test que vous pouvez exécuter encore et encore, ce sera inestimable lors du débogage. Vous pouvez également lintégrer à votre suite de tests pour vous assurer que ce problème particulier ne réapparaîtra pas plus tard.
  5. Sortez votre débogueur et commencez à mettre des points darrêt – déterminez le chemin du code lorsque vous exécutez votre test, et identifier ce qui ne va pas. Pendant que vous faites cela, vous pouvez également affiner votre test en le rendant aussi restreint que possible – idéalement un test unitaire.
  6. Corrigez-le – vérifiez que votre test réussit.
  7. Vérifiez le problème dorigine tel que décrit par le client est également corrigé (très important – vous venez peut-être de résoudre un sous-ensemble du problème). Vérifiez que vous n’avez pas introduit de régressions dans d’autres aspects du programme.

Si vous connaissez très bien le code, ou si le problème ou le correctif est évident, vous pouvez en ignorer certains étapes.

Comment devrions-nous laborder pour tirer le meilleur parti de notre temps précieux et nous permettre de passer moins de temps à essayer de le trouver et plus de temps à coder ?

Je suis en désaccord avec cela, car cela implique que lécriture dun nouveau code est plus utile que davoir un programme de travail de haute qualité. Il ny a rien de mal à être aussi efficace que possible pour résoudre les problèmes, mais un programme ne saméliore pas nécessairement en y ajoutant simplement plus de code.

Commentaires

  • cest la meilleure réponse IMO

Answer

Voici comment je fais:

  1. utilise la même méthode à chaque fois pour trouver le problème. Cela améliorera votre temps de réaction aux erreurs.
  2. Le meilleur moyen est probablement de lire le code. En effet, toutes les informations sont disponibles dans le code. Vous avez juste besoin de moyens efficaces pour trouver la bonne position et la capacité de comprendre tous les détails.
  3. le débogage est très lent, et nest nécessaire que si vos programmeurs ne comprennent pas encore comment lordinateur exécute les instructions asm / ne peuvent pas comprendre les piles dappels et trucs de base
  4. Essayez de développer des techniques de preuve comme lutilisation de prototypes de fonctions pour raisonner sur le comportement du programme. Cela vous aidera à trouver la bonne position plus rapidement

Réponse

Lorsque nous détectons une erreur dans notre code, que pouvons-nous faire pour léliminer? Comment devrions-nous laborder pour tirer le meilleur parti de notre temps précieux et nous permettre de passer moins de temps à essayer de le trouver et plus de temps à coder? Aussi, que devons-nous éviter lors du débogage?

En supposant que vous êtes dans un environnement de production, voici ce que vous devez faire:

  1. Décrivez correctement l « erreur » et identifiez les événements qui la provoquent.

  2. Déterminez si l « erreur » est une erreur de code ou erreur de spécification. Par exemple, la saisie dun nom à 1 lettre peut être considérée comme une erreur pour certains systèmes mais un comportement acceptable pour dautres systèmes. Parfois, un utilisateur signalait une erreur quil pense être un problème, mais les attentes de lutilisateur concernant le comportement du système ne faisaient pas partie des exigences.

  3. Si vous ont prouvé quil y a une erreur et que lerreur est due au code, vous pouvez alors déterminer quels morceaux de code doivent être corrigés pour éviter lerreur. Examinez également leffet du comportement sur les données actuelles et les opérations futures du système (analyse dimpact sur code et données).

  4. À ce stade, vous auriez probablement une estimation de la quantité de ressources qui seront consommées pour corriger le bogue. Vous pouvez le corriger immédiatement ou planifier un correctif dans une prochaine version du logiciel.Cela dépend également de la volonté de lutilisateur final de payer pour le correctif. Vous devez également évaluer les différentes options disponibles pour corriger lerreur. Il peut y avoir plus dun moyen. Vous devez sélectionner lapproche qui convient le mieux à la situation.

  5. Analysez les raisons qui ont provoqué lapparition de ce bogue (exigences, codage, tests, etc.). Appliquez des processus qui empêcheraient la condition de se reproduire.

  6. Documentez lépisode de manière adéquate.

  7. Libérez le correctif (ou le nouvelle version)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *