Je sais que certaines personnes sont de grands partisans du développement piloté par les tests. J'ai utilisé des tests unitaires dans le passé, mais uniquement pour tester des opérations qui peuvent être testées facilement ou qui, je crois, seront très probablement correctes. La couverture complète ou presque complète du code semble prendre beaucoup de temps.
- Pour quels projets utilisez-vous le développement piloté par les tests? L'utilisez-vous uniquement pour des projets au-dessus d'une certaine taille?
- Dois-je l'utiliser ou non? Convainquez-moi!
programming-practices
unit-testing
tdd
Casebash
la source
la source
Réponses:
Ok, quelques avantages pour TDD:
Vous avez demandé à être convaincu, il s'agissait donc d'avantages. Voir cette question pour une vue plus équilibrée.
la source
À l'origine, Robert C. Martin a fait ces remarques - je peux les appuyer sur ma propre expérience:
Je fais à peu près tout le temps TDD, que je travaille sur la production ou que je joue du code; J'ai du mal à coder d'une autre manière ces jours-ci.
la source
(Avertissement: je ne fais pratiquement aucun truc d'interface utilisateur, donc je ne peux pas discuter de TDD pour les interfaces utilisateur.)
J'utilise TDD dans à peu près tout ce que je fais, des applications triviales aux piles SIP entières.
Je n'utilise pas TDD dans un site Web PHP hérité que j'ai repris. Je trouve douloureux de ne pas avoir de tests. Et je trouve cela extrêmement ennuyeux de casser accidentellement des parties du site parce que je n'ai pas de suite de tests de régression me disant que j'ai cassé quelque chose. Le client n'a pas le budget pour moi pour (a) écrire des tests pour la base de code et (b) dans le processus rendre le code testable en premier lieu, donc je viens de le supporter.
la source
la source
Quelle? Pas de réponse négative!?
Avis de non-responsabilité: je ne suis pas contre les tests unitaires. Quand les gens disent TDD, je suppose qu'ils veulent dire la version qui ressemble à la maladie où ils écrivent des tests avant d'écrire le code pour 80-100% de tout le code qu'ils écrivent.
Je dirais:
C'est un catalyseur. Si la capture de problèmes de régression est un problème si énorme pour vous que le TDD entièrement automatique dès le début semble utile, l'écriture de tests pour chaque dernier morceau de code que vous écrivez pourrait vous aider à ignorer le vrai problème.
Cela aide les gens à ignorer le vrai problème. Lorsque la correction d'un bug se transforme en un jeu de whack-a-mole où deux autres pop-up, l'architecture souffle. Concentrer. Concentrez-vous sur le vrai problème. Voir les taupes avant qu'elles ne soient battues est bien, mais vous ne devriez pas être là en premier lieu.
Ça mange beaucoup de temps. J'ai rencontré des bugs occasionnels. Je n'en frappe pas tellement qu'il semble intéressant de préfixer chaque nouvelle chose que j'écris avec un test pour cela. Détectez les problèmes où ils sont susceptibles de se produire. Traitez les erreurs de manière à ce qu'elles soient faciles à diagnostiquer. Valider. Testez aux points clés de chevauchement / goulot d'étranglement. Mais pour pleurer à haute voix, ne testez pas tous les derniers getter et setter dans quelque chose qui n'aurait probablement pas dû avoir ceux en premier lieu.
Objectif de conception: il n'y a absolument aucun moyen, même un bon développeur va écrire le meilleur code possible lorsqu'il se concentre également sur le test. Si cela semble être la seule façon d'avoir un design décent, je recommanderais de voir ce qui précède sur "se concentrer sur le vrai problème".
Échec de la macro-conception: la base de code de mon travail actuel est truffée d'interfaces qui ne sont jamais utilisées plus d'une fois et de violations massives du principe de base DRY que je n'ai finalement compris que lorsque j'ai réalisé que les gens écrivaient pour les cadres de test et testaient dans général. Les tests ne doivent pas conduire à une architecture stupide. Non vraiment, il n'y a rien qui soit en quelque sorte plus évolutif ou digne de l'entreprise de copier et coller 20 fichiers et de n'apporter des modifications importantes qu'à deux d'entre eux. L'idée est de séparer les préoccupations, pas de les diviser au milieu. L'abstraction inutile et inutile vous coûtera plus que jamais une couverture à 95%.
C'est vraiment populaire et beaucoup de gens l'aiment vraiment. Si ce n'est pas une raison suffisante pour au moins deviner et / ou examiner la merde de toute technologie avant son adoption, apprenez-vous un peu de paranoïa.
la source