So, they ask, why should developers work against the test-cases created by testers?
Ottima domanda. TDD non suggerisce che i test vengano scritti dai tester. Il fatto che tu stia suggerendo la gente indica che non tutti si sentono a proprio agio con TDD e stanno inserendo ulteriori passaggi nel processo.
La loro domanda indica qualcosa di importante su TDD.
I tester non scrivono tutti i test. In effetti, non dovrebbero scrivere molti dei test. Alcuni dicono che non dovrebbero scrivere alcun test.
[Tests] are for verification and are based on the higher-level specs created by the UX team, which ... is sufficient for developers
Sì, ma.
Quelle "specifiche di alto livello create dal team UX" non sono sempre la migliore descrizione di un sistema. Questa affermazione - "[Test] ... si basa sulle specifiche di livello superiore create dalla UX" - è sospetta e spesso sbagliata.
What is the actual benefit of BDD/TDD, if you already have a test-team who's test cases are fully compatible with the higher-level specs currently given to the developers?
Ciò implica un falso presupposto, di nuovo. Nello specifico "i casi di test sono pienamente compatibili con le specifiche di livello superiore attualmente fornite agli sviluppatori".
Concept - > JAD - > Specifiche - > Test - > Codice
è ciò che hai in atto ora. Passi di trasformazione multipli e lineari. Ogni passaggio introduce qualche errore.
Concept - > Risultati dei test attesi - > Codice
Ha meno passaggi di trasformazione e meno errori introdotti lungo il percorso. Gli utenti (o gli utenti con l'aiuto dei facilitatori) possono scrivere direttamente i risultati del test.
L'ho fatto per la prima volta qualche anno fa e ha avuto un successo strepitoso. All'inizio volevano documenti di design, che tutti noi abbiamo scritto e passato in giro. Ma ho richiesto specifici risultati del test case. Ho creato i risultati dei test di esempio in fogli di calcolo. Ci è voluto un po '(in realtà settimane), ma gli utenti alla fine hanno corretto i miei errori e mi hanno inviato fogli di lavoro estremamente espansi. Hanno aggiunto i chiarimenti necessari sotto forma di casi di test.
Hanno anche scritto note e commenti. Una brutta abitudine.
Ho scritto una piccola utility per trasformare i fogli di calcolo direttamente in codice unittest.
Alla fine del primo tentativo di rilascio, gli utenti hanno ricevuto numerosi reclami e correzioni e bug da correggere. C'era un sacco di trouble ticket e rapporti sullo stato in corso. Controllo delle modifiche Tutta quella roba. Tutto in gran parte inutile.
Abbiamo esaminato il foglio di calcolo con i casi di test. Hanno corretto gli errori nei loro fogli di calcolo (ce n'erano uno o due). Hanno continuato a cercare di spiegare i loro appunti e commenti. Ho continuato a chiedere esempi invece di spiegazioni. Alla fine, hanno iniziato a revisionare e ampliare i fogli di calcolo per coprire completamente bug e funzionalità.
Alla fine ogni nota e commento esplicativo è stato supportato con un esempio concreto.
A questo punto, noi, gli utenti e io, facevamo il TDD completo. Casi di test foglio di calcolo per l'unittest del codice al codice di produzione. I responsabili IT stavano armeggiando con documenti di controllo delle modifiche e aggiornamenti delle specifiche. Tutta quella documentazione descriveva semplicemente i fogli di calcolo che contenevano i casi di test.
Una volta che la prima versione era in produzione, i requisiti della "Fase 2" erano interamente forniti come dati di test sui fogli di calcolo. 100% guidato dall'esempio. Nessun commento, nessuna nota, nessuna spiegazione di cui parlare. Si è tolto la strada e ha smesso di provare a scrivere le specifiche inglesi.
Concept - > Risultati attesi - > Codice
Questo è uno dei vantaggi di TDD. Non hai chiesto del refactoring, quindi salvo quella lunga e noiosa storia di guerra per la domanda di qualcun altro.