Question

Vous parcourez les réponses à cette question

Était-ce utile?

La solution

Je pense que la réponse acceptée est l’une des plus faibles ( Inconvénients du développement piloté par les tests? ), et la réponse la plus récente sent le parfum de quelqu'un qui pourrait écrire des tests spécifiques.

  

Grand investissement en temps: pour le simple   Si vous perdez environ 20% de la valeur réelle   mise en œuvre, mais pour compliqué   cas, vous perdez beaucoup plus.

TDD est un investissement. J’ai constaté qu’une fois que j’étais complètement au TDD, le temps que j’avais perdu était très minime, et le temps que j’avais perdu était plus que compensé quand il s’agissait de maintenir le temps.

  

Pour les cas complexes, vos cas de test sont   plus difficile à calculer, je suggère dans   des cas comme ça pour essayer d'utiliser   code de référence automatique qui s'exécutera   en parallèle dans la version debug /   test, au lieu du test unitaire de   cas les plus simples.

Si vos tests deviennent très complexes, il est peut-être temps de revoir votre conception. TDD devrait vous guider sur la voie des unités de code plus petites et moins complexes travaillant ensemble

  

Parfois, votre conception n’est pas claire au début et évolue au fur et à mesure, ce qui vous obligera à refaire votre test, ce qui générera beaucoup de perte. Je suggérerais de reporter les tests unitaires dans ce cas jusqu'à ce que vous ayez une idée de la conception.

C'est le pire point de tous! TDD doit vraiment être "Test Driven Conception ". TDD concerne la conception, pas les tests. Pour tirer pleinement parti des avantages de la TDD, vous devez piloter votre design à partir de vos tests. Vous devriez donc refaire votre code de production pour faire passer vos tests, et non l'inverse, comme le suggère ce point

.

Désormais, le

Autres conseils

IMHO La plus grande idée reçue à propos de TDD est la suivante: le temps passé à rédiger et à refactoriser des tests serait une perte de temps. La pensée est la suivante: "Ouais, une suite de tests est agréable, mais la fonctionnalité est complète. beaucoup plus rapidement si nous venons de le coder ".

Lorsque cela est correctement effectué, le temps consacré à l'écriture et à la maintenance des tests est économisé plusieurs fois au cours de la vie du projet, le temps que ne soit pas passé à déboguer et à corriger les régressions. Étant donné que le coût des tests est initial et que les retombées se font dans le temps, il est facile de l’ignorer.

Parmi les autres idées fausses, citons ignorer l’impact du TDD sur le processus de conception et ne pas réaliser que des "tests douloureux" sont nécessaires. est une odeur de code qui doit être corrigée rapidement.

Je vois beaucoup de gens qui comprennent mal quels tests sont réellement utiles au TDD. Les gens écrivent de gros tests d'acceptation au lieu de petits tests unitaires, puis passent beaucoup trop de temps à maintenir leurs tests et concluent ensuite que le TDD ne fonctionne pas. Je pense que les responsables de BDD ont intérêt à éviter totalement l’utilisation du mot test.

L’autre extrême est que les gens arrêtent de faire des tests d’acceptation et pensent que, parce qu’ils testent les unités, leur code est testé. Il s’agit là encore d’une incompréhension du fonctionnement d’un test unitaire. Vous avez toujours besoin de tests d'acceptation.

L’idée fausse que je vois souvent est que le TDD garantit de bons résultats.

Souvent, les tests sont ignorés par des exigences erronées et, par conséquent, les développeurs produisent un produit qui ne répond pas aux attentes de l'utilisateur. À mon avis, la clé de TDD est de travailler avec les utilisateurs pour définir les exigences tout en les aidant à gérer leurs attentes.

Ce sont des questions qui, à mon avis, sont assez controversées et donc sujettes à des malentendus:

  • D'après mon expérience, le plus gros avantage est de produire un code bien meilleur au prix de beaucoup de temps passé à écrire des tests. Cela vaut donc vraiment la peine pour les projets qui exigent une qualité élevée, mais sur d’autres sites moins centrés sur la qualité, le temps supplémentaire ne vaut pas la peine.

  • Les gens semblent penser que seul un sous-ensemble important de fonctionnalités doit être testé, mais c'est en fait un mal à mon humble avis. Vous devez tout tester pour que votre test soit valide après refactoring.

  • Le gros inconvénient de TDD est le faux sentiment de sécurité donné par des tests incomplets: j'ai vu des sites tomber en panne parce que les gens pensaient que les tests unitaires étaient suffisants pour déclencher un déploiement.

  • Il n’est pas nécessaire de se moquer des frameworks pour faire du TDD. Ce n'est qu'un outil pour tester certains cas plus facilement. Les meilleurs tests unitaires sont cependant lancés haut dans la pile et doivent être agnostiques sur les couches du code. Tester une couche à la fois n'a pas de sens dans ce contexte.

Il suffit de mettre une autre réponse dans le pot.

L'un des malentendus les plus courants est que votre code est corrigé , c'est-à-dire. J'ai ce code, maintenant comment vais-je le tester? S'il est difficile d'écrire un test, posez-vous la question: comment puis-je modifier ce code pour le rendre plus facile à tester?

Pourquoi ..?

Eh bien, le type de code facile à tester est le suivant:

  1. Modulaire - chaque méthode fait une chose.
  2. Paramétré - chaque méthode accepte tout ce dont elle a besoin et affiche tout ce qu'elle devrait
  3. Bien spécifié - chaque méthode fait exactement ce qu'elle devrait, ni plus, ni moins.

Si nous écrivons un code comme celui-ci, le test est un jeu d'enfant. Ce qui est intéressant, c’est que le code facile à tester est, comme par hasard, un meilleur code .

Mieux car plus facile à lire , plus facile à tester , plus facile à comprendre , plus facile à déboguer . C’est pourquoi le TDD est souvent décrit comme un exercice de conception.

scroll top