È difficile e non realistico mantenere grandi dati fittizi. È ancora più difficile quando la struttura del database subisce modifiche.
Falso.
I test unitari non richiedono dati fittizi "grandi". Richiede abbastanza dati fittizi per testare gli scenari e niente di più.
Inoltre, i programmatori veramente pigri chiedono agli esperti in materia di creare semplici fogli di calcolo dei vari casi di test. Solo un semplice foglio di calcolo.
Quindi il programmatore pigro scrive un semplice script per trasformare le righe del foglio di calcolo in casi di test unitari. È piuttosto semplice, davvero.
Quando il prodotto si evolve, i fogli di calcolo dei casi di test vengono aggiornati e vengono generati nuovi test unitari. Fallo sempre. Funziona veramente.
Anche con MVVM e la possibilità di testare la GUI, è necessario molto codice per riprodurre lo scenario della GUI.
Che cosa? "Riprodurre"?
Il punto di TDD è progettare cose per la testabilità (Test Drive Development). Se la GUI è così complessa, deve essere riprogettata per essere più semplice e più testabile. Più semplice significa anche più veloce, più gestibile e più flessibile. Ma per lo più più semplice significherà più testabile.
Ho esperienza che TDD funziona bene se lo si limita a una semplice logica aziendale. Tuttavia, è difficile testare una logica aziendale complessa poiché il numero di combinazioni di test (spazio di test) è molto elevato.
Questo può essere vero.
Tuttavia, chiedere agli esperti in materia di fornire i casi di test di base in una forma semplice (come un foglio di calcolo) aiuta davvero.
I fogli di calcolo possono diventare piuttosto grandi. Ma va bene, dal momento che ho usato un semplice script Python per trasformare i fogli di calcolo in casi di test.
E. Ho dovuto scrivere alcuni casi di test manualmente perché i fogli di calcolo erano incompleti.
Però. Quando gli utenti hanno segnalato "bug", ho semplicemente chiesto quale caso di test nel foglio di calcolo fosse errato.
In quel momento, gli esperti in materia avrebbero corretto il foglio di calcolo o avrebbero aggiunto esempi per spiegare cosa doveva succedere. Le segnalazioni di bug possono - in molti casi - essere chiaramente definite come un problema di test case. In effetti, dalla mia esperienza, definire il bug come un caso di test rotto rende la discussione molto, molto più semplice.
Anziché ascoltare gli esperti, cercare di spiegare un processo aziendale super complesso, gli esperti devono produrre esempi concreti del processo.
TDD richiede che i requisiti siano corretti al 100%. In tali casi, ci si potrebbe aspettare che requisiti contrastanti vengano catturati durante la creazione di test. Ma il problema è che questo non è il caso in uno scenario complesso.
Non utilizzare TDD impone assolutamente che i requisiti siano corretti al 100%. Alcuni sostengono che TDD può tollerare requisiti incompleti e mutevoli, in cui un approccio non TDD non può funzionare con requisiti incompleti.
Se non si utilizza TDD, la contraddizione si trova in ritardo nella fase di implementazione.
Se si utilizza TDD, la contraddizione si trova in precedenza quando il codice supera alcuni test e non supera altri test. In effetti, TDD fornisce una prova di una contraddizione all'inizio del processo, molto prima dell'implementazione (e argomenti durante il test di accettazione dell'utente).
Hai un codice che supera alcuni test e ne fallisce altri. Guardi solo quei test e trovi la contraddizione. Funziona davvero, molto bene in pratica perché ora gli utenti devono discutere della contraddizione e produrre esempi coerenti e concreti del comportamento desiderato.