2008-08-07 6 views
48

Beaucoup de gens parlent d'écrire des tests pour leur code avant de commencer à écrire leur code. Cette pratique est généralement connue sous le nom de Test Driven Development ou TDD en abrégé. Quels sont les avantages que je retire de l'écriture de logiciels de cette façon? Comment puis-je commencer avec cette pratique?Pourquoi devrais-je pratiquer le développement piloté par les tests et comment devrais-je commencer?

+0

Veuillez voir ma réponse à la même question déjà posée. [Une réponse élaborée à cette question] (http://stackoverflow.com/questions/62625/how-do-you-know-what-to-test-when-writing-unit-tests#69259) – eroijen

+0

Je suis en retard ici, mais je voudrais mettre mon octet. Meilleure approche de la pratique TDD utilise Katas. Voici de bons katas avec des tests: https://github.com/garora/TDD-Katas –

Répondre

30

Il y a beaucoup d'avantages:

  • Vous obtenez une rétroaction immédiate sur Si votre code fonctionne, vous pouvez trouver plus rapidement des bugs
  • En voyant le test passer du rouge au vert, vous savez que vous avez un test de régression de travail et un code de travail
  • Vous gagnez de la confiance pour refactoriser le code existant, ce qui signifie que vous pouvez nettoyer le code sans vous soucier de ce qu'il pourrait casser
  • A la fin vous avez une série de tests de régression qui peut être exécuté au cours automatisé construit pour vous donner une plus grande confiance que votre codebase est solide

La meilleure façon de commencer est de commencer juste. Il y a un bon book by Kent Beck tout sur le développement piloté par les tests. Commencez simplement avec du nouveau code, ne vous inquiétez pas de l'ancien code ... chaque fois que vous avez besoin de refactoriser du code, écrivez un test pour la fonctionnalité existante, puis refactorisez-le et assurez-vous que les tests restent verts. En outre, lisez this great article.

+2

Le lien vers le dernier article (Conseils pour les tests unitaires) a expiré. Voici le lien vers le nouvel article: http://devver.wordpress.com/2008/07/07/tips-for-unit-testing/ –

3

La partie des avantages a recently been covered, comme par où commencer .... sur un petit système d'entreprise où il n'y a pas trop d'inconnues, donc les risques sont faibles. Si vous ne connaissez pas déjà un framework de test (comme NUnit), commencez par l'apprendre. Sinon, commencez par écrire votre premier test :)

+0

Le lien est cassé! –

0

À mon avis, le plus grand avantage est qu'il vous permet clairement de voir si votre code fait ce qu'il est censé faire. Cela peut sembler évident, mais il est super facile à exécuter égarer de vos objectifs initiaux, comme je l'ai trouvé dans le passé: p

2

Avantages

  1. -vous savoir comment compartimenter votre code
  2. -vous savoir exactement ce que vous voulez que votre code pour faire
  3. Vous savez comment il devait agir et, sur la route , si le refactoring casse quoi que ce soit
  4. Vous donne l'habitude de vous assurer que votre code sait toujours ce qu'il est censé faire

Mise en route

Faites-le simplement. Écrivez un scénario de test pour ce que vous voulez faire, puis écrivez le code qui devrait passer le test. Si vous réussissez votre test, génial, vous pouvez passer à l'écriture de cas où votre code échouera toujours (2 + 2 ne devrait pas être égal à 5, par exemple). Une fois tous vos tests réussis, écrivez votre logique métier pour faire ce que vous voulez faire.

Si vous partez de rien, assurez-vous de trouver une bonne suite de tests facile à utiliser. J'aime PHP donc PHPUnit ou SimpleTest fonctionnent bien. Presque toutes les langues populaires ont une suite de tests xUnit disponible pour aider à construire et automatiser les tests.

+0

Par ailleurs, "compartimenter votre code" vous mènera à une très bonne architecture " gratuitement".Lorsque vous cassez vos codes pour les tester, vous obtenez une meilleure architecture. C'est assez libre si vous avez un peu d'expérience en tant qu'architecte logiciel. – daitangio

0

Vous travaillez peut-être dans un environnement agile ou en cascade. Peut-être avez-vous des procédures bien définies qui ont été testées au cours des années de dur labeur, ou peut-être que vous venez de démarrer votre propre start-up. Quelle que soit la situation, vous avez probablement confronté au moins un, sinon plus, des douleurs suivantes, les problèmes ou les causes de non-livraison:

  • Une partie de votre équipe est maintenue hors de la boucle lors de la création des exigences, spécifications, ou user stories
  • la plupart, sinon la totalité, de vos tests sont manuels, ou vous ne disposez pas de tests du tout
  • Même si vous avez des tests automatisés, ils ne détectent pas les problèmes réels
  • Des tests automatisés sont écrits et exécutés lorsqu'il est trop tard pour fournir une valeur réelle au projet
  • Il y a toujours quelque chose de plus urgent que de consacrer du temps à tester
  • Les équipes sont réparties entre les tests, le développement et les services d'analyse fonctionnelle, et ils sont souvent désynchronisées
  • Une incapacité à refactorisons le code en raison de la crainte que quelque chose sera brisé
  • Le coût d'entretien est trop élevé
  • Le temps d'accès au marché est trop grand
  • Les clients ne se sentent pas que ce qui a été livré est ce qu'ils ont demandé
  • La documentation est jamais à jour
  • Vous avez peur de déployer à la production parce que le résultat est inconnu
  • Vous êtes souvent pas en mesure de déployer à la production parce que les tests de régression prennent trop de temps pour exécuter
  • équipe est passer trop de temps à essayer de comprendre ce que une méthode ou une classe

Le développement piloté par les tests ne résout pas par magie tous ces problèmes. Au lieu de cela, cela nous met sur la voie de la solution. Il n'y a pas de solution miracle, mais s'il y a une pratique de développement qui peut faire la différence à tant de niveaux, cette pratique est TDD. Le développement axé sur le test accélère le temps de mise sur le marché, facilite le refactoring et aide à créer un meilleur design En plus des avantages directs, TDD est un prérequis pour de nombreuses autres pratiques (la livraison continue étant l'un d'entre eux). Une meilleure conception, un code bien écrit, une mise sur le marché plus rapide, une documentation à jour et une couverture de test solide sont quelques-uns des résultats que vous obtiendrez en appliquant TDD.

Questions connexes