40 votes

Devrais-je utiliser TDD?

Je suis le seul développeur à mon (très petit) et je suis sur le point de commencer sur un support de taille ASP.NET application web pour la société.

Je suis en train de voir si je doit apprendre Développement Piloté par les tests (TDD) et le mettre en œuvre dans cette application.

J'ai besoin de commencer le développement de notre nouvelle demande peu de temps et je suis inquiet à propos de l'essai. J'ai programmé pendant de nombreuses années, mais n'ont jamais fait de tests unitaires.

J'ai lu à de nombreuses ressources en ligne concernant TDD, mais je n'en suis pas sûr si je vais avoir un "assez bon" saisir sur elle pour la rendre efficace dans l'application.

40voto

Kevin Pang Points 16019

Il dépend de l'endroit où vos priorités. Si vous êtes intéressé dans la promotion de vous-même en tant que développeur, TDD est certainement utile d'examiner si seulement pour l'expérience. Il va vous aider à repenser la façon de coder et probablement faire de vous un meilleur développeur à cause de cela.

Mais qui pourrait facilement être compensé par combien TDD nuit à votre capacité à obtenir votre produit dans un délai raisonnable. Vous avez mentionné que vous êtes le seul développeur de travail dans cette entreprise qui signifie que la pression est sur vous pour obtenir votre projet de fait. TDD est certainement une grande pratique, mais parfois contraintes de la vie réelle et la praticité doit venir en premier.

Donc en bref, si vous avez le temps, alors oui, l'utilisation de TDD. Ce n'est pas vraiment que beaucoup de généraux et vous pouvez toujours ignorer les tests dans un pincement. Mais si vous êtes vraiment à court de temps et je ne pense pas que vous serez en mesure de l'intégrer sans mettre en avant vos produits et du travail à risque, personne ne s'en fault-vous pour sauter il. Les puristes ne seront pas d'accord, mais ce n'est pas un monde noir et blanc et parfois des compromis doivent être faits pour obtenir des choses faites.

25voto

Randolpho Points 36512

Rappelez-vous ceci: la seule mauvaise essai est celui que vous n'avez pas mis à exécution.

Maintenant, vous avez besoin de plonger directement dans TDD? Peut-être pas. Mais vous devriez certainement commencer les tests unitaires ce que vous pouvez. Vous ne pouvez pas l'unité de test des Interfaces graphiques très bien, et c'est très bien-à l'exception de ceux pour l'UAT.

Mais toute sorte de logique vous pouvez exécuter les coulisses? Yep, vous devez le tester.

Tout d'abord commencer par essayer de tester des méthodes individuelles. Comme vous allez, vous allez commencer à courir dans la douleur, parce que très probablement, votre code n'est pas conçu pour être testé. C'est très bien; restructurer le code! Continuer à faire ainsi jusqu'à ce que vous pouvez tester votre code. Rappelez-vous ce que vous aviez à faire, et faire que la première fois, la prochaine fois que vous écrivez du code.

Après quelques itérations, vous apprendrez ce que vous devez savoir (vraiment, vous ne pouvez l'apprendre en faisant) et la douleur va disparaître. Quand cela arrive, je vous suggère de vous êtes probablement prêt à regarder en TDD.

14voto

Roshan Points 908

Je ne peux pas trop insister sur les avantages de l'ATS-fondé de la méthode de développement. Lorsque vous adoptez TDD, votre unité-tests de devenir des citoyens de première classe aux côtés le code que vous écrivez, au lieu de code qui est maintenu pour le plaisir d'avoir en unités de tests et de ne pas être maintenu à jour.

En mode TDD, vous utilisez votre appareil-tests comme une spécification exécutable de ce que votre composant devrait le faire. Vous devez faire cela en considérant que vous voulez que votre composant à faire, et puis l'écriture de tests pour l'exercice de cette fonctionnalité. Depuis votre code initialement n'aurez pas de cette fonctionnalité, tous les nouveaux tests de vous écrire échouer ou d'être rouge. Une fois que vous avez vos tests, commencer la mise en œuvre de la composante. Progressivement, à mesure que vous ajoutez la fonctionnalité requise, le rouge des tests s'allume en vert. La bonne chose est que, après que vous avez mis en œuvre suffisamment de fonctionnalités pour rendre tous les tests passent, vous savez que vous avez terminé la mise en œuvre de la destinée de spécification et de savoir exactement où s'arrêter. Trop souvent j'ai vu des situations où un développeur aura achevé la mise en œuvre de la fonctionnalité requise mais ne l'arrête pas, plutôt que l'amélioration de la composante et l'ajout de fonctionnalités supplémentaires et d'eye-candy, dont aucun ne fait partie de la spécification requise, de perdre active de temps de développement.

Une fois que vous avez votre appareil-tests, il est facile de mettre cela dans une une intégration continue de l'environnement. Cet environnement serait check-out de la dernière version du code à partir de votre référentiel, le construire, puis exécutez votre appareil-tests. Si une régression qui se passe, si quelqu'un vérifie dans le code qui sauts de votre unité-tests, vous saurez à ce sujet pronto, au lieu de trouver après qu'il a été déployé à votre environnement de production. Pour s'assurer que le nouveau code n'a pas d'introduire une régression, nous avons configuré la connexion crochets sur notre dépôt pour s'assurer que tout le code soumis a également eu de l'accompagnement des tests et qu'ils passent. Ceci est particulièrement utile lorsque vous avez plusieurs personnes travaillant sur un projet, comme ils peuvent voir et via n'importe quel tableau de bord de suivi que vous pourriez utiliser si le référentiel est bon pour la synchronisation à ce point dans le temps ou non. Il est également facile de paramètres régionaux une version particulière du référentiel qui ne de travailler, de laisser les gens travailler avec les bonnes versions, alors que quelqu'un d'autre est de travailler sur la fixation de tout ce problème est actuellement en rupture de votre build. Ce serait aussi potentiellement un "verte" de construire, comme indiqué par le tableau de bord est un build qui a une très bonne probabilité de ne pas rencontrer les problèmes lorsqu'ils sont poussés à un environnement de production.

Beaucoup de gens pensent que l'adoption TDD signifierait davantage de travail et de tracas, et qu'il serait plus temps. Considérons cependant que le temps supplémentaire passé à l'écriture de tests permettra d'éviter toute fonctionnalité qui est en train d'être testé à partir de la rupture, et que vous seriez à la recherche de ces pauses plus tôt, plutôt que plus tard.

Un autre avantage de l'utilisation de TDD est que vous allez donner à votre conception beaucoup plus d'attention, et qu'il serait beaucoup mieux structuré et industrialisé au cours d'une non-ATS approche. Cette modularité est important de pouvoir disposer d'une unité de test de la suite qui est rapide à exécuter et non cassant.

GUI-test est difficile, mais pas impossible. Pensez à l'internet-l'INTERFACE utilisateur de tester des technologies tels que le Sélénium, le WebDriver et Watir, qui peuvent exercer web de l'Isu de la programmation. Il est facile à une mauvaise utilisation de ces outils, en effectuant seulement cher de bout en bout, essais de les utiliser. Une bien meilleure approche est à l'abstrait de l'INTERFACE de la couche de sorte qu'il peut être testé de manière isolée, indépendamment de votre logique métier. Vous ne voulez pas un test de l'INTERFACE utilisateur d'aller et de réaliser des opérations sur une base de données.

Pour récapituler, vous voulez écrire unité efficace-tests à faire en utilisant le TDD est une expérience agréable, plutôt qu'un fardeau. Vos tests doivent être rapides, test de composants dans l'isolement, et, idéalement, devrait être exécuté à tout moment.

Ce que j'ai décrit ici est un cas idéal. Vous n'avez pas à adopter de chaque idée mentionné, mais vous pouvez choisir ce qui fonctionne pour faire de votre processus de développement plus efficace.

10voto

Tim Points 13334

Notez que le TDD n'est pas sur le test; c'est un processus de développement. Le test n'est pas fait pour remplacer la fonction de test c'est ce qui définit le dev processus.

On dirait que vous parlez de tests unitaires et d'autres tests automatisés. Le test est bon. Les tests automatisés est bon. N'ayez pas peur de faire des erreurs. Si vous pensez au sujet de votre code et comment automatiser les tests, autant que possible, alors vous êtes dans une bonne position - cependant il y a une coupure de rendements décroissants. 100% automatisé de contrôle n'est probablement pas quelque chose qui est coût-efficace - surtout pour une organisation que vous décrivez.

Si vous êtes réellement en train de parler TDD (Ce que les experts appellent ATS), qui peut aussi être bon. Il existe de nombreux processus de développement. Il est bon de rappeler que les processus de développement des cadres et des guides - et non pas une religion à suivre comme une quête. Aucun processus n'est d'une taille convient à tous. Faire ce qui fait sens pour vous et à améliorer comme vous allez. Avoir juste une personne dans un dev organisation facilite le changement de processus assez indolore. Adresse de vos problèmes à haut risque de premier et de mettre quelques légers processus en place pour ces avant d'aller après une faible valeur de questions.

6voto

Harper Shelby Points 13395

La meilleure façon d'apprendre est de le faire. Si vous avez lu beaucoup de choses à ce sujet, il est temps de plonger dedans - et en tant que développeur unique, les tests unitaires peuvent être une aubaine, car il n'y a pas d'autre regard à examiner votre code.

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