Je voulais poser cette question même, pour voir combien d'entreprises pratiquaient effectivement le TDD.
Au cours des 11 années que j'ai programmées professionnellement, seules les deux dernières organisations étaient même au courant du TDD (qui s'étend sur près de 5 ans d'esprit, avant cette période, le TDD n'était pas aussi populaire qu'aujourd'hui). Je vais aller droit au but et répondre à votre question avant de m'éloigner de mon argumentaire de vente pour TDD :)
Dans la dernière entreprise pour laquelle je travaillais (éditeur universitaire en ligne de collections de sciences humaines et scientifiques), nous savions que nous devions pratiquer le TDD, mais nous n'y sommes jamais arrivés. Pour notre défense, nous avions une base de code de 250k, donc ajouter des tests à une base de code non testable de cette taille me semblait insurmontable (je me sens coupable de taper ça maintenant!). Même les meilleurs d'entre nous font des erreurs .
Quiconque a fait même une petite quantité de TDD sait à quel point les tests de mise à niveau sur du code non testable peuvent être douloureux ... Les principales causes sont les dépendances implicites (vous ne pouvez pas tirer sur tous les leviers pour affirmer les résultats du code - vous ne pouvez pas vous moquer scénarios) et la violation du principe de responsabilité unique (les tests sont compliqués, artificiels, nécessitent trop de configuration et sont difficiles à comprendre ).
Nous avons temporairement augmenté notre équipe QA (d'une, peut-être deux personnes à une demi-douzaine ou plus) pour tester la plate-forme avant toute version. C'était extrêmement coûteux en temps et en argent, certaines versions prenaient trois mois pour terminer les «tests». Même alors, nous savions que nous livrions avec des problèmes, ils n'étaient tout simplement pas des «bloqueurs» ou «critiques», juste «haute priorité».
Si vous avez une expérience commerciale de plusieurs années, vous apprécierez que chaque entreprise affirme des tâches critiques , puis invente un niveau de priorité plus élevé au-dessus de cela, et très probablement au-dessus de cela aussi - en particulier lorsque quelqu'un d'en haut pousse une fonctionnalité / correction de bogue. Je digresse ...
Je suis heureux d'annoncer que je pratique le TDD dans mon entreprise actuelle (télécommunications, maison de développement d'applications Web et mobiles), couplé à Jenkins CI pour fournir d'autres rapports d'analyse statique (la couverture de code étant la plus utile après avoir confirmé la réussite de la suite de tests) . Les projets sur lesquels j'ai utilisé TDD sont un système de paiement et un système informatique de grille.
L'argumentaire de vente ...
Il peut souvent être difficile de justifier des tests automatisés pour les membres non techniques de l'équipe. L'écriture de tests ajoute plus de travail au processus de développement mais ... le temps que vous investissez dans les tests maintenant, vous économiserez plus tard dans les efforts de maintenance. Vous empruntez vraiment du temps . Plus le produit est utilisé longtemps, plus vous réaliserez d'économies - et cela vous aidera à éviter une réécriture importante .
Tester d'abord signifie que vous codez d'abord votre intention, puis confirmer que votre code remplit cette intention. Cela fournit une concentration et distille votre code pour ne faire que ce qui est prévu et pas plus (lire sans ballonnement). C'est une spécification et une documentation exécutables en même temps (si votre test est bien écrit et que les tests doivent être aussi lisibles / propres que votre code système, sinon plus!).
Les non-programmeurs n'auront (souvent) pas cette idée et donc TDD n'a pas beaucoup de valeur pour eux, et est considéré comme un raccourci jetable vers une date de sortie antérieure.
La programmation est notre domaine, et dans mon esprit, il nous appartient , en tant que professionnels, de conseiller sur les meilleures pratiques comme TDD. Ce n'est pas aux chefs de projet de décider si c'est fait pour réduire le temps de développement, c'est hors de leur juridiction . De la même manière, ils ne vous disent pas quel cadre, solution de mise en cache ou algorithme de recherche utiliser, ils ne devraient pas vous dire si vous devez utiliser des tests automatisés.
À mon avis, l'industrie du développement de logiciels (dans l'ensemble) est actuellement en panne, le fait que les tests de vos logiciels ne soient PAS la norme.
Imaginez cela dans d'autres industries: médical, aviation, automobile, cosmétiques, peluches, boissons alcoolisées, etc. J'ai demandé à ma fiancée de nommer une industrie où elle ne teste pas le produit et elle ne pouvait pas!
Il est peut-être injuste de dire qu'aucun test ne se produit parce qu'il le fait ... mais dans les entreprises sans test automatisé, c'est un processus très manuel / humain (lu maladroit et souvent sujet aux erreurs).
Un point que je soutiendrais dans votre question ...
Ils voulaient généralement que le développement commence immédiatement, ou après un court séjour de conception. Plus semblable à Agile.
Être "Agile" ne prescrit pas de procéder sans tests, le premier membre répertorié sur agilemanifesto.org est Kent Beck , le créateur de XP et TDD!
Deux livres que je recommanderais fortement si vous êtes intéressé par TDD, ou si vous ne les avez tout simplement pas lus et que vous êtes un programmeur passionné (c'est tout le monde qui lit bien?;)
Développement d'un logiciel orienté objet guidé par des tests
Clean Code - Série Robert C Martin ("Uncle Bob")
Ces deux livres se complètent et condensent beaucoup de sens en quelques pages.
Merci d'avoir posé cette question :)