33 votes

Quelle est votre technique la plus utile pour trouver (ou prévenir) les insectes?

D'après votre expérience, quelles sont les techniques les plus utiles pour rechercher (ou prévenir) les bogues? Ou, pour poser la question autrement, comment classer ces techniques dans votre propre expérience?

  1. Intégration continue
  2. Avis de code
  3. Tests unitaires
  4. Test manuel
  5. Journées d'essais ciblées

30voto

Pascal Thivent Points 295221

"Si le débogage est le processus de suppression de bugs, puis la programmation doit être le processus de mise en." --Edsger Dijkstra

Vous pourriez vouloir vérifier l'Application Erreur de vérification de Logiciel qui introduit le concept de Poka-Yoke ou, pour une version plus récente de poka-yoke appliquée pour le développement de logiciels, Poka-Yoke Votre Code. Je cite la première référence ci-dessous:

Poka-yoke est une assurance de la qualité technique développée par les Japonais ingénieur de fabrication Shigeo Shingo. Le but de poka-yoke est d'éliminer défauts d'un produit par la prévention ou en corrigeant les erreurs dès possible. Poka-yoke a été utilisé fréquemment dans la fabrication de les environnements.

Pour appliquer poka-yoke pour le développement de logiciels et de faire un processus à la faute-preuve ("Une démarche qualité s'appuie qualité dans le code. Si vous régulièrement trouver des défauts au cours de la vérification, le processus est défectueux." -- M. Poppendieck), les techniques suivantes sont à mon avis les bonnes pratiques:

  • le typage statique: avec les langages statiquement typés, le type de la vérification est effectuée lors de la compilation, par opposition à exécution
  • automatisé des normes de développement des vérifications avec des outils comme analyseurs statiques (Findbugs, Checkstyle, PMD), la similitude des analyseurs (Symian, CPD) ou encore le code de formatage automatique de la requête (Bagnole)
  • paire de programmation immédiate d'un examen du code de choses qui ont besoin d'un cerveau humain
  • les tests automatisés: BDD (exécutable spécifications), tests unitaires, tests d'intégration, tests fonctionnels, tests de performance...
  • intégration continue pour les extrêmes de la rétroaction sur les échecs de compilation
  • arrêter la culture de la ligne (si une erreur se produit, le corriger immédiatement): ne laissez jamais une erreur se propager plus loin dans le système
  • les premiers tests ("si vous avez tester et résoudre les cycles, vous faites des tests trop tard" -- M. Poppendieck)
  • essai exploratoire: l'épreuve de conception, d'exécution et d'apprentissage.

Il n'y a pas d'ordre particulier, toutes ces pratiques ne l'aide, et devrait être considéré comme un tout pour obtenir une haute qualité.

Et pour ceux qui aiment les photos, c'est un poka-yoke méthode:

Poka-Yoke: with this habit you will never forget to take your cellphone
Poka-Yoke: avec cette habitude vous ne serez jamais oublier de prendre votre téléphone portable

8voto

itsmatt Points 18905
  • Comprendre ce qu'est le problème.
  • Conception d'une solution.
  • Rebondir la solution de certains collègues qui comprennent le domaine du problème.
  • Retravailler la conception de la solution si nécessaire.
  • Garder le code petit. Les Classes qui ne sont pas monolithiques. Les fonctions qui ne sont pas des centaines de lignes de long.
  • Test d'écriture de code. Il vous permettra d'être honnête et vous aide à trouver les bugs. Ne lésinez pas sur le présent.
  • N'essayez pas d'être trop intelligent. Certains de mes pires problème de code a été le résultat de ma essayer d'être intelligent.
  • N'essayez pas de jongler avec plus de choses que vous pouvez. Le changement de contexte entre les projets peuvent être un tueur de productivité.

Une autre chose:

  • Gérer les attentes. Cela veut dire de ne pas laisser l'horaire de la force de vous en balancer un tas de merde le code pour répondre à une échéance irréaliste. Le code de test va à la fenêtre, la plupart du temps lorsque le calendrier obtient d'être inaccessible. Cela signifie généralement buggy logiciel est livré. Vous n'allez pas offrir le logiciel parfait mais l'objectif est d'expédier le mieux que vous pouvez.

Autres choses, mais en fin de compte de savoir ce que vous essayez de résoudre et de ne pas laisser le lecteur à "faire" dérailler le train est la clé.

Juste mes deux cents.

7voto

wheaties Points 20917

Je les classerais comme suit:

  1. Communications adéquates entre groupes entre les responsables des exigences, le client et les autres groupes de développeurs. La plupart des bogues que nous avons "trouvés" ont été attribués à une mauvaise documentation des souhaits, des besoins ou de l'environnement de l'utilisateur.
  2. Tests unitaires
  3. Examen du code
  4. Test manuel
  5. Journées d'essais ciblées

Notre entreprise ne fait pas l'intégration continue, donc je ne peux pas la classer.

5voto

Peter Mortensen Points 7440

Ma technique la plus utile pour trouver des bugs est l'aide de AFFIRMERs.

J'ai trouvé beaucoup de très subtil de bugs (et aussi beaucoup de pas si subtil) de cette façon. Bugs qui pourraient autrement passer inaperçus, mais néanmoins provoquer par exemple des résultats incorrects. Par exemple seulement pour le type particulier de l'entrée. Dans de nombreux cas, il ne serait pas été possible de prédire l'existence d'un bug, même avec beaucoup de réflexion.

Les assertions sont disponibles dans une forme ou l'autre dans la plupart des les environnements. Je les ai utilisé avec C, C++, VB.NET, C#, Python et Perl. L'action quand une ASSERTION évalue à faux ne doit pas nécessairement être de quitter le programme. Ils peuvent également être enregistrées dans un fichier ou une boîte de dialogue est affichée (arrêt de l'exécution). Le second est la valeur par défaut de Visual Studio (applications de bureau seulement?).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X