8
votes

Sur le développement axé sur le test, mais en sens inverse

J'apprécie TDD et je pense que cela n'est pas indispensable, mais écrivez toujours mes tests qu'après que j'écris mon code source puis refacteur en conséquence. Je ne peux jamais m'apporter pour écrire le test d'abord alors la source pour réussir le test. Donc, je retourne toujours au processus. Est-ce une mauvaise pratique de ma part? Quels sont les inconvénients de le faire dans l'inverse comme moi?


3 commentaires

@jrob - Vous ne prenez pas tout en compte si vous êtes découragé par une évaluation basse. Peut-être qu'il pose des questions difficiles.


@Jrob - Je vais essayer d'être plus vigilant pour reconnaître qu'il y a une réponse, merci.


J'ai trouvé que faire cela est un bon moyen d'entrer dans TDD. Il est difficile de penser que le test a été conduit au début, mais lorsque vous mûrez d'écrire vos tests de ce type, vous commencerez bientôt à écrire des tests en premier et à obtenir les avantages.


5 Réponses :


2
votes

La conception est-elle motivée par les considérations de test? Si tel est le cas, les tests ont conduit le développement. Qui est ce qui est censé arriver.

Ecrire des tests d'abord absolument que les tests ont conduit au développement. Et il a tendance à limiter le refactoring.

Si vous souhaitez d'abord écrire tout le code, le refacteur, vous utilisez des tests pour conduire le développement (ce qui est bon). Cependant, vous êtes probable de perdre du temps en écrivant tout le code d'abord pour le refaire le refacteur (ce qui n'est pas aussi bon.) L'utilisation de TDD facilitera cela; Les tests d'écriture avant que le code ne réduiront également le temps de développement en sauvegardant un refactoring.


2 commentaires

TDD limite le refactoring? TDD permet de refactoring dans mon expérience.


Vous mélangez TD conception et td Développement assez vaguement - mais il semble que vous soyez avec cela avec la foule TDD.



16
votes

Si vous n'écrivez pas d'abord vos tests, il n'est sans doute pas TDD. Avec TDD, vous écrivez normalement le test, regardez-le échouer, puis implémentez-le pour le faire passer.

Les avantages sur votre flux de travail sont les suivants:

  • Vos tests peuvent échouer! Tout est trop facile à créer un test qui ne peut tout simplement pas échouer. Et comme étant le signalement Eric, si vous n'écrivez pas le test en premier, et regardez-vous échouer, comment savez-vous que le test teste réellement les fonctionnalités que vous venez de mettre en œuvre?
  • Votre code est définitivement testable. Bien que je suis sûr que vous suivez des techniques testables, Test Premier Développement garantit que le code est définitivement testable, sinon vous n'auriez pas écrit le code: -)
  • transforme vos solutions "à l'envers". Déprétables ceci mais TDD vous fait penser à "ce dont vous avez besoin" plutôt que "des détails de la mise en œuvre". En produisant des tests, vous vous retrouvez d'abord votre structure d'architecture / classe générale dans vos tests, puis vous obtenez sur les détails de la mise en œuvre.

    Vous pouvez atténuer les risques de tous ces points, de sorte que vous souhaitiez continuer à aller votre façon de passer ou de passer à l'essai d'abord.


1 commentaires

+1 Misko.Heuvery.com/2009/09/02/... est un excellent essai détaillé de ce sujet.



5
votes

Si vous écrivez les tests après, corrigez-vous vraiment le développement / la conception? Je ne le penserais pas.

Pour développer la réponse de Steven Robbins: Si votre test n'échoue pas avant de le faire passer, Comment savez-vous qu'il teste la bonne chose ?


3 commentaires

Mais je tests réellement échoue lol parce que la source n'est souvent pas simple, mes tests indiquent donc que ce que je pensais que mon calcul est dans mon algorithme n'est pas ce que mon test est réellement attendu et je dois donc aller refacteur la source jusqu'à ce que mes attentes de test soient satisfait


Alors, pourquoi ne spécifiez-vous pas vos attentes avant d'écrire la fonctionnalité?


C'est ce que j'essaie de me convaincre d'ici lol en conversant avec vous et d'autres artisans



1
votes

En pensant à votre conception de logiciels et à votre codage suivi de près en ajoutant des tests pour vous assurer que vous n'avez pas oublié quelque chose est un bon moyen de procéder à mon livre.

Vous pensez à votre code d'une conception logicielle et d'un point de vue de test. J'ai tendance à développer du code et à tester en paratelle, ne suivez jamais le paradigme "Écrire ton test", car il a tendance à donner un code qui remplit vos tests - pas votre conception.

Le risque de TDD est que la période de conception est laissée de côté. Si vous construisez vos tests en essayant de casser votre code de toutes les manières possibles, corrigez les problèmes que votre test fait ressortir votre code stable. J'ai dû refacturer le code écrit via TDD qui était de qualité prototype au mieux, ce n'est pas la méthode qui fournit un bon code, c'est l'effort mental que vous y consacre.


0 commentaires

0
votes

Je fais du TDD (correctement) depuis 2000. Il y a beaucoup de bons points que d'autres ont mentionné, mais un point très important et manque à l'autre des autres descriptions:

TDD vous fait écrire un code simple!

Lorsque vous faites TDD, vous écrivez le test, puis vous écrivez le code absolu le plus simple possible pour réussir le test. Si vous inversez cela, alors vous écrivez souvent du code plus complexe qu'il ne doit être, et qui a des effets secondaires inattendus.

TDD est une discipline très difficile, mais elle est importante car elle est comparable à un chirurgien stérilisant ses instruments avant la chirurgie. Si vous ne stérilisez pas, vous risquez de vous infecter votre patient. Si vous n'écrivez pas d'abord votre test, vous risquez de vous infecter votre code avec une dette technique.


0 commentaires