Même si je n'ai pas été dans un projet TDD ou BDD, ou si j'ai été dans certains qui disent qu'ils font du TDD mais sont loin de là, ce sont des choses auxquelles je pense et que j'essaie vraiment de lire autant que je peux sur.
Revenons à la question. Lorsque vous faites un BDD, vous devez d'abord écrire votre "test" et le faire échouer, non? Et puis implémentez cette fonctionnalité ou ce que vous appelez. Mais si vous prenez cela à l'extrême, cela ne pourrait-il pas être une sorte de développement descendant? Vous regardez votre interface utilisateur et vous dites: «J'aimerais avoir cette fonctionnalité / ce comportement ici». Ensuite, vous corrigez votre interface utilisateur pour implémenter cette fonctionnalité et le code qui prend en charge l'interface utilisateur. À ce stade, vous n'avez implémenté aucune logique métier ou logique d'accès aux données, vous venez de mettre en œuvre votre comportement. Ce que je vise au lieu d'écrire le test d'abord, vous écrivez d'abord votre code d'interface utilisateur. Dans certains cas, il devrait en résulter le même code pour l'accès aux données et la couche métier, car vous utilisez votre code d'interface utilisateur pour définir ce que votre entreprise doit prendre en charge.
Bien sûr, vous devez compléter cela par des tests qui sont utilisés pour vous assurer que la fonctionnalité fonctionne comme elle le devrait dans la fonctionnalité.
Des pensées?
la source
main
. Dans votre commentaire de haut en bas, vous parlez de tests fonctionnels, qui exécutent l'ensemble du programme à travers un seulmain
.Réponses:
Vous parlez de BDD dans une perspective de haut niveau de test de votre interface utilisateur. Les tests sont un peu plus moelleux à ce niveau que plus bas dans votre code côté Javascript / serveur.
Plusieurs livres que j'ai lus sur TDD disent que vous devriez écrire du code comme si les systèmes sous-jacents existaient et en écrire juste assez pour que votre test réussisse. Vous pouvez écrire des talons sur le serveur pour réussir vos tests de comportement d'interface utilisateur. Ensuite, vous commencez à cette couture de stub et écrivez quelques tests unitaires pour votre code côté serveur et descendez jusqu'à une implémentation complète.
Je code souvent comme s'il existait des couches sous-jacentes pour réussir un test de haut niveau, on a l'impression de descendre dans un terrier de lapin et d'extraire de nombreuses autres classes pour satisfaire le test de haut niveau, puis d'écrire des tests pour ces niveaux inférieurs. Comme vous l'avez déjà reconnu, cela vous aide à rester concentré en commençant par des tests de niveau supérieur.
Comme tout programmeur chevronné le sait, le développement logiciel comporte de nombreuses couches. J'ai tendance à travailler plus bas que l'interface utilisateur et à penser aux données ou au comportement dont mon interface utilisateur a besoin depuis le serveur et à commencer par là (peut-être parce que je ne fais pas beaucoup de travail sur l'interface utilisateur de nos jours).
Si je suis vraiment honnête, extraire une classe des couches sous-jacentes signifie que je ne fais pas de test en premier, mais ... dans quelques minutes ou parfois des heures, je ferai un test pour ce code. Cela me semble toujours bénéfique car j'aide à voir où vous pourriez avoir besoin de fournir des dépendances à une classe et d'honorer le principe de responsabilité unique - si c'est difficile à tester, vous en faites trop au même endroit, etc.
la source
Oui! Sinon, vous obtenez des tests axés sur le développement .
De façon réaliste, cependant, il y a des problèmes qui sont difficiles à aborder en utilisant le TDD "pur". Vous pourriez être plus productif en écrivant du code de production découvert à l'avance et en le couvrant avec des tests plus tard (et en apprenant comment aborder des problèmes similaires avec TDD à l'avenir). Regardez cette technique , que son auteur a appelée rinse-and-repeat TDD à défaut d'un meilleur terme.
la source
Si vous n'écrivez pas d'abord vos tests, vous ne pilotez pas le développement à travers vos tests. Ergo, vous ne faites pas de développement piloté par les tests!
la source
Si vous voulez travailler de cette façon, allez-y. Mais ce n'est pas un développement piloté par les tests.
la source
Ce que vous décrivez ressemble beaucoup à l' approche Front-Ahead Design . Malheureusement, Front-Ahead Design est le coup satirique d'Alex Papadimoulis face aux méthodes agiles.
la source
Personnellement, je pense qu'il est essentiel de penser aux tests pendant la phase de conception. C'est vraiment génial d'avoir une implémentation fonctionnelle, mais la seule façon d'être sûr d'avoir un produit fonctionnel est de l'avoir testé pièce par pièce. La façon de couvrir cela est par une combinaison de tests unitaires et d'une équipe qualifiée d'AQ travaillant en partenariat.
Maintenant, la façon dont vous installez cette dicipline dans votre équipe dépend de vous. TDD est l'une de ces stratégies - et celle qui a sa place, et il existe de nombreuses autres variantes. Cependant, TDD n'est pas particulièrement adapté au développement de la mise en page de l'interface utilisateur.
la source