Volevo fare proprio questa domanda, per vedere quante aziende praticavano effettivamente il TDD.
Negli 11 anni che ho programmato professionalmente solo le ultime due organizzazioni erano persino a conoscenza del TDD (che copre quasi 5 anni di mente, prima che TDD non fosse così popolare come lo è oggi). Prenderò la caccia e risponderò alla tua domanda prima di divagare nel mio campo di vendita per TDD :)
Nell'ultima società per cui ho lavorato (editore accademico online di scienze umanistiche e collezioni scientifiche), sapevamo che dovevamo praticare TDD ma non ci siamo mai arrivati. A nostra difesa avevamo una base di codice di 250k, quindi l'aggiunta di test a una base di codice non verificabile di quelle dimensioni sembrava insormontabile (mi sento colpevole digitarlo ora!). Anche il migliore di noi commette errori .
Chiunque abbia fatto anche una piccola quantità di TDD sa quanto possano essere dolorosi i test di retrofitting sul codice non testabile del campo bruno ... Le cause principali sono dipendenze implicite (non è possibile estrarre tutte le leve per affermare i risultati dal codice - non si può prendere in giro scenari) e violazione del principio della singola responsabilità (i test sono complicati, inventati, richiedono troppe impostazioni e sono difficili da capire ).
Abbiamo temporaneamente aumentato il nostro team di controllo qualità (da una, forse due persone a una mezza dozzina o più) per testare la piattaforma prima di qualsiasi rilascio. È stato un tempo enormemente costoso dal punto di vista economico e finanziario, alcune pubblicazioni avrebbero richiesto tre mesi per completare i "test". Anche allora sapevamo di essere spediti con problemi, non erano semplicemente "bloccanti" o "critici", solo "prioritari".
Se hai un'esperienza commerciale di anni, apprezzerai che ogni azienda afferma attività critiche e quindi inventa un livello di priorità più elevato sopra quello, e molto probabilmente anche uno sopra quello, specialmente quando qualcuno dall'alto sta spingendo una funzionalità / correzione di bug. Io divago ...
Sono felice di riferire che sto praticando TDD nella mia attuale azienda (telecomunicazioni, web e casa di sviluppo di app mobili), insieme a Jenkins CI per fornire altri rapporti di analisi statica (la copertura del codice è la più utile dopo aver affermato i passaggi della suite di test) . I progetti su cui ho utilizzato TDD sono un sistema di pagamento e un sistema di grid computing.
Il passo delle vendite ...
Spesso può essere una lotta in salita che giustifica test automatici per i membri del team non tecnici. Scrivere test aggiunge più lavoro al processo di sviluppo ma ... il tempo che investi nei test ora, risparmierai negli sforzi di manutenzione in seguito. Stai davvero solo prendendo in prestito tempo . Più a lungo il prodotto è in uso, maggiore sarà il tuo risparmio e ti aiuterà a evitare la grande riscrittura .
Test prima significa che stai prima codificando il tuo intento, quindi confermando che il tuo codice soddisfa tale intento. Ciò fornisce attenzione e distilla il tuo codice per fare solo ciò che è destinato e non di più (leggi senza gonfiare). È una specifica eseguibile e documentazione allo stesso tempo (se il tuo test è ben scritto, e i test dovrebbero essere leggibili / puliti come il tuo codice di sistema, se non di più!).
I non programmatori (spesso) non avranno questa intuizione e quindi TDD non ha molto valore per loro, e viene visto come scorciatoia usa e getta per una data di rilascio precedente.
La programmazione è il nostro dominio e, nella mia mente, ciò rende nostra responsabilità , come professionisti, consigliare le migliori pratiche come TDD. Non per i project manager decidere se è stato fatto per ridurre i tempi di sviluppo, è fuori dalla loro giurisdizione . Allo stesso modo non ti dicono quale framework, soluzione di memorizzazione nella cache o algoritmo di ricerca utilizzare, non dovrebbero dirti se dovresti utilizzare test automatici.
A mio avviso, l'industria dello sviluppo del software (nel complesso) è attualmente rotta, il fatto che avere test per il tuo software NON sia la norma.
Immagina questo in altri settori: medico, aeronautico, automobilistico, cosmetico, peluche, bevande alcoliche ecc. Ho chiesto alla mia fidanzata di nominare un settore in cui non testano il prodotto e lei non poteva!
Forse non è giusto affermare che non si verificano test perché lo fa ... ma nelle aziende senza test automatizzati, è un processo molto manuale / umano (leggi ingombrante e spesso soggetto a errori).
Un punto che contenderei nella tua domanda ...
Di solito volevano che lo sviluppo iniziasse immediatamente o dopo un breve periodo di progettazione. Più simile a Agile.
Essendo "Agile" non prescrive di procedere senza test, il primo membro elencato su agilemanifesto.org è Kent Beck , il creatore di XP e TDD!
Due libri che consiglio vivamente se sei interessato a TDD, o semplicemente non li hai letti e sei un appassionato programmatore (tutti leggono bene?;)
Software orientato agli oggetti in crescita guidato da test
Codice pulito - Serie Robert C Martin ("Zio Bob")
Questi due libri si completano a vicenda e condensano molto senso in poche pagine.
Grazie per aver posto questa domanda :)