38 votes

Quand effectuer un test unitaire ou un test manuel

Alors que les tests unitaires semble efficace pour les grands projets où les Api doivent être de force industrielle (par exemple le développement de l' .Net framework Api, etc.), il semble probablement comme overkill sur de plus petits projets.

Quand est automatisé TDD approche de la meilleure façon, et quand pourrait-il être mieux d'utiliser le manuel de tests techniques, le journal de bugs, de triage, de les corriger, etc.

Un autre problème, quand j'étais un testeur de chez Microsoft, il a été souligné qu'il était une valeur en ayant les développeurs et les testeurs être des personnes différentes, et que la tension entre ces deux groupes pourraient contribuer à créer un excellent produit à la fin. Peut TDD casser cette idée et de créer une situation où un développeur peut ne pas être la bonne personne rigoureuse de trouver leurs propres erreurs? Il peut être automatisé, mais il semble qu'il y a de nombreuses façons d'écrire les tests, et qu'il est discutable de savoir si un ensemble donné de tests de "prouver" que la qualité est acceptable.

71voto

Uncle Bob Points 3276

L'efficacité du TDD est indépendant de la taille du projet. Je pratique les trois lois de la DRT, même sur le plus petit exercice de programmation. Les tests ne prennent pas beaucoup de temps pour écrire, et de les enregistrer une énorme quantité de temps de débogage. Elles me permettent aussi de refactoriser le code sans avoir peur de casser quoi que ce soit.

TDD est une discipline similaire à la discipline de la double-saisie-comptabilité pratiqué par les comptables. Il permet d'éviter des erreurs dans-la-petite. Comptables entrer dans chaque opération deux fois, une fois comme un crédit, et une fois qu'une carte de débit. Si pas de simples erreurs ont été faites, alors le bilan est somme nulle. Zero est un simple contrôle sur place qui empêche les cadres d'aller en prison. Par la même occasion, de programmeurs d'écrire des tests unitaires à l'avance de leur code comme une simple vérification. En effet, ils écrivent chaque bit de code deux fois: une fois comme un test, et une fois que le code de production. Si les tests passent, les deux bits de code sont en accord. Ni la pratique protège contre les plus grands et les plus complexes de ses erreurs, mais les deux pratiques sont néanmoins précieux.

La pratique du TDD n'est pas vraiment une technique de contrôle, c'est une pratique de développement. Le mot "test" dans le DRT est plus ou moins une coïncidence. En tant que tel, TDD n'est pas un remplacement pour les bonnes pratiques en matière de dépistage, et de bons testeurs de l'AQ. En effet, c'est une très bonne idée d'avoir testeurs expérimentés écrire QA plans de test indépendamment (et souvent à l'avance) les programmeurs de l'écriture du code (et leurs tests unitaires).

C'est ma préférence (en effet ma passion) que ces tests de QA sont également automatisé à l'aide d'un outil comme FitNesse, le Sélénium, ou Watir. Les tests doivent être faciles à lire par des gens d'affaires, faciles à exécuter, et absolument sans équivoque. Vous devriez être en mesure de les exécuter à une notification de moments, généralement plusieurs fois par jour.

Chaque système doit également être testé manuellement. Cependant, les tests manuels ne doivent jamais être machinal. Un test qui peut être inclus dans le script doit être automatisé. Vous souhaitez uniquement mettre de l'humain dans la boucle lorsque le jugement humain est nécessaire. Par conséquent, l'homme doit être en train de faire des tests exploratoires, pas aveuglément à la suite des plans de test.

Donc, la réponse courte à la question de savoir quand à l'unité-test de rapport de test manuel est qu'il n'y a pas de "rapport". Vous devriez écrire des tests unitaires automatisés d'abord pour la grande majorité du code que vous écrivez. Vous devriez avoir automatisé QA tests d'acceptation écrite par les testeurs. Et vous devriez pratiques stratégiques exploratoire d'un test manuel.

7voto

eglasius Points 26221

Les tests unitaires ne sont pas destinées à remplacer fonctionnels et des tests sur les composantes. Les tests unitaires sont vraiment concentrés, de sorte qu'ils ne seront pas de frapper la base de données, services externes, etc. Les tests d'intégration le fait, mais on peut les avoir vraiment concentré. La ligne de fond, c'est que, sur la question, la réponse est qu'ils ne remplacent pas ceux des tests manuels. Maintenant, automatisé, tests fonctionnels + composant automatisé de tests peut certainement remplacer les tests manuels. Cela dépendra beaucoup du projet et de l'approche axée sur les personnes qui seront effectivement faire de ceux-ci.

Mise à jour 1: Notez que si les développeurs sont en train de créer automatisé, tests fonctionnels, vous voulez toujours à l'examen, que ceux qui ont de la pertinence de la couverture, de les compléter selon le cas. Certains développeurs de créer des automatisé de tests fonctionnels avec leur "unité" framework de test, parce qu'ils ont toujours à faire des tests de fumée, que l'unité des tests, et il aide vraiment avoir ces automatisé :)

Mise à jour 2: les tests Unitaires n'est pas excessif pour un petit projet, ni d'automatiser les tests de fumée ou à l'aide de TDD. Ce qui est exagéré est d'avoir de l'équipe de faire, pour la première fois sur le petit projet. De faire l'un de ceux associés à une courbe d'apprentissage (spécialement les tests unitaires ou TDD), et pas toujours va être fait droit à la première. Vous aussi, vous voulez quelqu'un qui a fait ça pour un tout impliqué, pour les aider à éviter les pièges et obtenir passé quelques problèmes d'encodage qui ne sont pas évidentes quand il. Le problème est qu'il n'est pas commun pour les équipes de ces compétences.

4voto

JaredPar Points 333733

TDD est la meilleure approche à chaque fois que c'est possible de le faire. TDD, tests automatiques, quantifiable par le biais de la couverture de code, et de méthode fiable de s'assurer de la qualité du code.

Test manuel nécessite une énorme quantité de temps (par rapport aux TDD) et souffre d'une erreur humaine.

Il n'y a rien en disant que TDD signifie que seuls les développeurs à tester. Les développeurs devrait être responsable pour le codage d'un pourcentage du framework de test. QA devrait être responsable pour une part beaucoup plus grande. Les développeurs de tester les Api de la façon dont ils veulent les tester. Tests de QA Api dans les moyens que j'ai vraiment de ne pas avoir pensé et de faire des choses qui, même si cela semble fou, sont réellement fait par les clients.

3voto

WW. Points 11335

Je dirais que l'unité-les tests sont un des programmeurs de l'aide pour répondre à la question:

Le code de faire ce que je pense que c' n'?

C'est une question qu'ils doivent se poser beaucoup. Programmeurs comme pour automatiser tout ce qu'ils font beaucoup où ils peuvent.

Le test distinct de l'équipe doit répondre à une autre question:-

Ce système de faire ce que je (et les utilisateurs) s'attendent à ce qu'il pour le faire? Ou faut-il surprise moi?

Il y a toute une massive de la classe de bugs liés à l'programmeur ou les concepteurs d'avoir une autre idée de ce qui est correct que les tests unitaires ne sera jamais de ramassage.

3voto

peterchen Points 21792

Selon les études de divers projets (1), tests Unitaires trouver 15..50% des défauts (moyenne de 30%). Ce n'est pas le pire bug finder dans votre arsenal, mais pas une solution miracle non plus. Il n'y sont pas de solution miracle, tout bon QA stratégie se compose de plusieurs techniques.


Un test automatisé s'exécute le plus souvent, il sera donc trouver des défauts plus tôt et de réduire le coût total de ces fonctions - qui est la vraie valeur de l'automatisation des tests.

Investir vos ressources à bon escient et de choisir les fruits mûrs de la première.
Je trouve que les tests automatisés sont plus faciles à écrire et à maintenir pour les petites unités de code - isolé de fonctions et de classes. Les fonctionnalités utilisateur est plus facile testés manuellement et un bon testeur trouverez de nombreuses bizarreries delà les tests requis. Ne pas les mettre les uns contre les autres, vous avez besoin des deux.


Dev vs Testeurs Développeurs sont notoirement mauvaises à tester leur propre code: les raisons sont d'ordre psychologique, technique et la dernière pas moins économique - testeurs sont généralement moins chers que les développeurs. Mais les développeurs peuvent faire leur part, et de rendre le test plus facile. TDD, test d'une partie intrinsèque de la construction du programme, et non pas seulement après coup, c'est la vraie valeur de l'ATS.


Un autre point intéressant au sujet de test: Il n'y a aucun point dans une couverture de 100%. Statistiquement, les punaises de suivre une règle 80:20 - la majorité des bugs est trouvé dans les petites sections de code. Certaines études suggèrent que ce est encore plus important - et des tests doivent focuse sur les endroits où les punaises de tourner vers le haut.


(1) la Productivité de Programmation Jones 1986 u.un., cité de Code Complet, 2e. ed. Mais comme d'autres l'ont dit, l'unité de tests ne sont qu'une partie de tests, d'intégration, de régression et les tests du système peut être au moins partiellement automatisé, ainsi.

Mon interprétation de ces résultats: "de nombreux yeux" a la meilleure détection de défauts, mais seulement si vous avez certains processus formel qui les rend effectivement regarder.

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