J'ai hérité d'un projet avec une base de code assez importante, et le développeur d'origine répond rarement, voire jamais, aux e-mails. Il y a une tonne de façons différentes de faire certaines choses, et je ne les connais pas toutes. Beaucoup de code dupliqué le long de ces chemins (plutôt que des fonctions incluses par, disons, 5 pages qui font relativement la même chose, c'est du code copié sur 5 pages), et quelques problèmes subtils dans la base de données (nous avons tous entendu parler de code spaghetti , mais avez-vous déjà entendu parler d'une base de données de spaghetti?)
Tout cela, je peux gérer la plupart du temps sans problème.
Le problème est lorsqu'un client trouve un bogue quelque part. Ils enverront généralement une capture d'écran du dernier problème et diront: "Pourriez-vous y jeter un œil?" tout en mettant en évidence ce qui ne va pas sur la page, et parfois ce qui était attendu. Très peu d'informations sont données et essayer de leur parler et d'en obtenir plus (comme ce qu'ils ont fait pour obtenir le résultat), c'est comme se faire des dents.
Fondamentalement, cela se résume à ceci:
- Base de code volumineuse et complexe que je ne connais pas à 100%
- De nombreuses façons dont les choses peuvent mal tourner
- Très peu d'informations sur l'origine d'un bug
Quelqu'un at-il des conseils, des astuces, des suggestions, etc. sur la façon de déboguer ce genre de chose?
Réponses:
Quand je reçois quelque chose comme ça, je demande généralement plus d'informations. Je ne sais pas comment c'est là où vous travaillez, mais ici si je n'ai pas assez d'informations pour reproduire le problème localement, je peux renvoyer le ticket marqué Cannot Reproduce, avec une demande de plus d'informations, et ils savent que rien ne se corrige avant Je peux le casser de mon côté.
Si vos clients ont du mal à décrire les étapes, demandez-leur une vidéo de capture d'écran. Il existe quelques produits gratuits qui peuvent les créer, comme Jing. Cela rend beaucoup plus facile lorsque vous pouvez regarder exactement ce qu'ils faisaient.
EDIT: Jing était une bonne idée quand j'ai écrit cela il y a quelques années. Depuis lors, ils ont modifié leur programme d'installation pour charger votre système avec du crapware «bonus» que vous n'avez jamais demandé, donc je ne peux plus le recommander. Cependant, il y a beaucoup d'enregistreurs d'écran décents.
la source
Un bon début pourrait être ce livre .
J'utilise la définition ci-dessous car il semble que le développeur ne soit plus là pour la prendre en charge.
la source
J'ai eu un problème similaire il y a quelques années et le plus grand coup de pouce à la productivité et au nettoyage du code a été l'intégration du suivi des bogues dans le système.
Nous avons utilisé Fogbugz (je suppose qu'ils font encore Fogcreek!) Et nous avons pu créer un mécanisme de gestion des exceptions où l'utilisateur pouvait appuyer sur un bouton à chaque fois qu'une exception était levée et il serait immédiatement connecté à notre système - plus d'appels et plus de captures d'écran. Avec cette option, vous prenez les informations dont vous avez besoin au lieu d'essayer de les extraire de l'utilisateur. On dirait qu'une variante vous ferait du bien, surtout avec une option de capture d'écran.
L'autre chose que vous voudrez commencer à faire est de commencer à ajouter la journalisation. Vous souhaiterez peut-être aller jusqu'à la journalisation de chaque appel de méthode avec des valeurs d'argument. Comme il semble que vous travaillez avec du code hérité (code sans test), cette journalisation vous aidera à ajouter des tests unitaires appropriés afin que vous ne répétiez aucun problème.
la source
Mon conseil le plus sérieux est de commencer à refactoriser où vous le pouvez. Je ne peux pas compter le nombre de fois où j'ai vu une recopie de fonctionnalités pour découvrir que ce n'était pas une copie complète à 100%. Il s'agissait d'une copie à 99,9% et d'une petite erreur mineure qui a entraîné un bug. Commencez à ajouter des tests unitaires à tout et si vous avez un service d'assurance qualité, essayez d'obtenir des scripts de test automatisés pour les parties du code que vous travaillez.
D'un autre côté, voyez combien de journalisation peut injecter dans le code. Autrement dit, s'il n'a pas beaucoup de journalisation, vous pouvez ajouter un indicateur au code pour commencer à récupérer une journalisation plus détaillée à vos propres fins de débogage. C'est quelque chose que vous pouvez demander à un utilisateur d'activer et de désactiver si vous pouvez ouvrir une boîte de dialogue. Cela m'a aidé plus de fois que je ne peux en compter. J'obtiens normalement "ça ne marche pas" sans une photo du problème. Je dis simplement «envoyez-moi le fichier journal».
la source
Commencez par écrire des tests unitaires. Choisissez une classe ou une fonction et écrivez un ensemble de tests correspondant à la façon dont vous pensez que cela devrait fonctionner. Si les tests échouent, découvrez pourquoi. S'il s'agit d'un bug - corrigez-le. Si vos attentes s'avèrent fausses, déterminez ce que fait réellement la chose et modifiez les tests en conséquence.
Une fois que vous avez un ensemble décent de tests unitaires de travail, vous disposez d'un filet de sécurité pour effectuer une refactorisation afin de rendre le code plus propre.
Continuez à itérer jusqu'à ce que vous compreniez la base de code.
Inutile de dire que c'est quelque chose que vous devez faire à l'avance, pas en réponse à un rapport de bogue.
la source