BDD è effettivamente scrivibile da non programmatori?


24

Lo sviluppo guidato dal comportamento con la sua sintassi emblematica di scenari "Dato-quando-allora" è stato recentemente molto apprezzato per i suoi possibili usi come oggetto limite per la valutazione della funzionalità del software.

Sono assolutamente d'accordo sul fatto che Gherkin , o qualsiasi script di definizione delle funzionalità che preferisci, sia un DSL leggibile dal punto di vista aziendale e fornisca già valore in quanto tale.

Tuttavia, non sono d'accordo sul fatto che sia scrivibile da non programmatori (come fa Martin Fowler ).

Qualcuno ha resoconti di scenari scritti da non programmatori, quindi strumentati dagli sviluppatori?

Se c'è davvero un consenso sulla mancanza di scrivibilità, vedresti un problema con uno strumento che, invece di iniziare con gli scenari e strumentarli, genererebbe scenari leggibili dal business dai test reali?

Aggiornamento: per quanto riguarda lo strumento "generatore di scenari", ovviamente non indovinerebbe magicamente il linguaggio commerciale;) Ma, proprio come attualmente utilizziamo gli abbinatori regexp per creare test in un approccio top-down (sulla dimensione dell'astrazione), potremmo usare costruttori di stringhe per creare scenari con un approccio dal basso verso l'alto.

Un esempio di "dare solo un'idea":

Given I am on page ${test.currentPage.name}
And I click on element ${test.currentAction.element}
…

Ci vorrà molto tempo prima che gli umani siano in grado di fornire un linguaggio comune leggibile da altri umani in modo esatto, anche dopo che i computer saranno già in grado di scrivere codice per i computer.

Ironia della sorte, JBehave 1 (il primo strumento BDD) è iniziato generando scenari leggibili dal punto di vista aziendale. Non abbiamo analizzato l'inglese fino a Cetriolo. Penso che JBehave 1 sia stato utile per ricordare alle persone che dovevano prima parlarne ...
Lunivore,

Risposte:


20

L'ho visto. Non è finito bene.

Penso che il cetriolo sia un'astrazione ingombrante (<- lol: D) per questo motivo esatto. Troppo difficile per le persone non tecniche per scrivere da soli; troppo prolisso per i tecnici.

Le persone non tecniche non hanno imparato a pensare come programmatori. È nostro privilegio comprendere la conoscenza astratta, scomporla, ricostruirla di nuovo ed essere ancora in grado di scappare con successo dall'ambiguità. Questo è ciò per cui siamo pagati.

Se c'è davvero un consenso sulla mancanza di scrivibilità, vedresti un problema con uno strumento che, invece di iniziare con gli scenari e strumentarli, genererebbe scenari leggibili dal business dai test reali?

Lo strumento stesso non sarà in grado di generarli. Il computer non sa nulla del dominio aziendale. Alla fine - il programmatore sarebbe responsabile di disegnare ciò che deve essere generato comunque e anche allora - probabilmente quegli scenari sarebbero troppo dettagliati / criptici per i loro utenti finali.


20
Non technical people just haven't learned to think like programmers. La verità. Questo stesso concetto è stato pubblicizzato e reinventato più volte negli ultimi 20 anni e finisce quasi sempre con scarsi risultati. Alle aziende piace il concetto di ottenere software senza dover pagare quegli avidi sviluppatori di software per le sanguisughe che succhiano il sangue, ma dimenticano che la parte più difficile dello sviluppo del software è la maggior parte delle volte la comprensione delle regole aziendali più profonde e complesse rispetto agli stessi uomini d'affari.
maple_shaft

2
"Le persone non tecniche non hanno semplicemente imparato a pensare come programmatori." Sì, la capacità di scomporre i problemi ed esprimerli entro termini logici atomici specifici è probabilmente ciò che rende uno programmatore / analista. L'idea che l'aspetto dell'inglese renda Gherkin utilizzabile da chiunque mi sembra incredibilmente ingenuo. Grazie per averlo confermato :) Computer knows nothing about business domain.Certo. Non ho reso la mia idea molto chiara, mi dispiace per quello. Aggiungerò informazioni alla domanda.
MattiSG,

8
@maple_shaft: gli ultimi 20 anni? Prova gli ultimi 60 anni. Alcuni dei primi clamore di COBOL furono che gli uomini d'affari potevano scriverlo, eliminando la necessità di programmatori. Quando ciò non accadde, le persone inventarono un sacco di quelle che chiamavano lingue di quarta generazione che avrebbero dovuto fare la stessa cosa.
David Thornley,

11

Parte della difficoltà in termini di scrittura di un documento di specifiche da parte del cliente è che il cliente spesso non sa come tradurre le cose che il cliente desidera in una lingua che descriva effettivamente ciò di cui il cliente ha bisogno. Sebbene il cliente possa dire che desidera che un determinato comportamento esista in un sistema, in genere non è così interessato alle minuzie finché non ha visto, utilizzato e sperimentato il funzionamento del software in un modo che il cliente ritiene non corrisponda al suo esigenze.

Quando i clienti descrivono un processo aziendale, spesso lasciano fuori molte informazioni rilevanti. Spesso queste informazioni si riferiscono a cose su un processo che sono comunemente comprese all'interno del dominio particolare del cliente e che quindi sono date per scontate e spesso non trasmesse al programmatore. Altre volte, il cliente in realtà non sa come gestire tutte le condizioni al contorno all'interno di un sistema e sta cercando una guida per il programmatore. A volte è tutto un semplice caso di usabilità, con il cliente che pensa di voler lavorare in un modo, ma in seguito cambia idea quando diventa più chiaro che le cose dovrebbero funzionare diversamente.

Ok, quindi abbastanza di "relazioni con i clienti 101 per i programmatori". La domanda è se sia ancora utile che il cliente utilizzi un DSL leggibile dal punto di vista aziendale per definire come definire una specifica. Credo che, con la guida, la risposta sia un "sì" provvisorio, e dico provvisorio perché la domanda successiva che mi viene in mente è: perché un cliente dovrebbe creare un DSL quando è possibile che un programmatore ne definisca più facilmente uno che possa fornire a un cliente un linguaggio semplice ma ricco per definire come un sistema deve funzionare?

Quando hai fornito a un cliente un linguaggio per descrivere come vorrebbero che un sistema funzioni, finirai con delle affermazioni che dicono qualcosa sulla falsariga di:

"for a given 'subsystem', as a 'business entity' I want 'some feature' so that I might achieve 'some result'".

Questo tipo di affermazione finisce per descrivere un requisito in modo molto chiaro, fornendo la forma generale che il cliente desidera sostanzialmente che il sistema assuma, o un altro modo di vederlo è che il cliente sta descrivendo quale sia il sistema. Se desideri che i tuoi clienti pensino un po 'di più alle cose, puoi quindi chiedere loro di descrivere le regole alle quali la funzione deve obbedire usando una serie di dichiarazioni simili forse a:

"Given 'some system state', When 'some action occurs', Then expect 'some result'

Ancora una volta descrizioni molto chiare, questa volta su comeil sistema dovrebbe comportarsi. Il fatto è che questo non sostituirà la necessità per uno sviluppatore di software di riempire tutti gli spazi vuoti e di prendere in giro ulteriori dettagli di cui il cliente può essere solo periferico. Mentre il programmatore può essere in grado di essere "addestrato" dal programmatore per descrivere caratteristiche e comportamenti in un formato adatto al programmatore, il cliente non avrà davvero le capacità o le conoscenze per generare casi di test significativi, né per fornire l'implementazione codice. Questo è stato il punto dell'articolo Martin Fowler cui l'OP ha fatto riferimento. Quindi sì, il software stesso non è scrivibile dal cliente, ma la descrizione del software sicuramente può - e IMHO dovrebbe - essere scritta dal cliente. Per quello che vale, non ho letto l'articolo di Fowler che diceva che il cliente non avrebbe dovuto

Sento che a volte i programmatori possono dimenticare che i nostri clienti sono generalmente molto intelligenti in termini di comprensione delle loro attività e dei loro processi, sicuramente molto meglio di noi. Quando non hanno un programmatore per dire loro come costruire un sistema software, i clienti generalmente ricorrono ad altri - forse meno efficienti - mezzi per risolvere i loro particolari problemi di gestione aziendale. Con questo intendo semplici database (pensa ad Access) o fogli di calcolo, o addirittura libri contabili scritti a mano, e con regole e procedure ben definite per gestire tali processi. Ciò che manca a molti clienti non è un mezzo per determinare come un sistema deve funzionare, ma piuttosto come dovrebbe essere costruito e, soprattutto, quanto efficacemente descrivere le regole comportamentali di un sistema alle persone chenon hanno le competenze per costruire realmente il sistema.

Se c'è davvero un consenso sulla mancanza di scrivibilità, vedresti un problema con uno strumento che, invece di iniziare con gli scenari e strumentarli, genererebbe scenari leggibili dal business dai test reali?

Penso che questo stia esaminando la questione nel modo sbagliato. Vedrei un grosso problema con uno strumento che genera documentazione dai test se quella documentazione fosse destinata a rappresentare una specifica in alcun modo. Per testare uno scenario, è necessario capirlo, pertanto lo scenario deve già esistere affinché sia ​​possibile definire un test per esso. Se descrivi lo scenario in una sintassi BDD, lo hai già specificato e quindi puoi solo strumentare gli scenari dopo il fatto. Se invece avessi uno strumento che consentisse al cliente di descrivere un sistema in un bel DSL adatto alla programmazione, e se quello strumento potesse essere utilizzato per generare i modelli di codice che verrebbero utilizzati come suite di test, allora io ' d dire che ci sarebbe un grande valore in un simile strumento. Non vedrebbe il cliente allontanare i programmatori dall'equazione e contribuirebbe a ridurre lo sforzo richiesto per soddisfare i desideri del cliente e generare requisiti codificati in modo test in BDD, e forse renderebbe i desideri del cliente più facilmente comprensibili. Non sarebbe tuttavia un sostituto per avere a disposizione uno sviluppatore di software esperto per aiutare il cliente a separare le esigenze del cliente dalle sue esigenze.


"Per testare uno scenario, è necessario capirlo, quindi lo scenario deve già esistere affinché sia ​​possibile definire un test per esso." Sono d'accordo. Ciò di cui mi sto interrogando è se far valere i vincoli linguistici valga la pena. Non pretendo che dovremmo scrivere solo test; ma mi chiedo se non dovremmo accettare il fatto che la descrizione dell'attività (e probabilmente dovrebbe) essere sempre descrizioni semplici e libere del modulo . Quindi, avremmo discese commerciali pure e generato scenari leggibili, permettendo agli umani di decidere se abbinarli; piuttosto che fingere che usiamo le effettive descrizioni per testare.
MattiSG,

@MattiSG ...whether enforcing language constraints is worth anything. Questa è una buona domanda Le descrizioni in formato libero sono più espressive e naturali per lo scrittore, ma comportano commenti sconclusionati che richiedono una dissezione per ricavare una specifica utile. Definendo "regole" formali (alias DSL) per scrivere requisiti e specifiche, hai un linguaggio comune che sia il cliente che il programmatore possono capire, limitando i malintesi. Se ottieni le descrizioni giuste, possono essere usate alla lettera come modello per i tuoi test. Pertanto non sono necessari strumenti complessi per "generare" nulla.
S.Robins,

@MattiSG FWIW, usare un DSL e un BDD è il sistema che io stesso uso. I requisiti sono definiti come dichiarazioni Entity-Feature-Benefit e sono seguiti da una specifica che estende le dichiarazioni dei requisiti iniziali utilizzando le istruzioni AAA (Ie: Given-When-Then) ... essenzialmente istruzioni di scenario. La difficoltà quando si tenta di decodificare il testo libero è che senza un DSL, non si ha un mezzo semplice per definire un algoritmo in grado di generare scenari di raccolta significativi. Il mio punto era che usare i test come punto di partenza per generare scenari è un po 'arretrato.
S.Robins,

5

Ho visto gli sviluppatori scrivere scenari; i tester scrivono scenari e persino il proprietario di un prodotto scrive scenari. Ho anche avuto conversazioni esplicitamente progettate per far emergere scenari - "Dato <questo altro contesto>, quando cosa dovrebbe accadere allora?" - e annotato le parole usate dall'azienda.

I migliori risultati che ho avuto sono stati quelli di avere una conversazione con il proprietario del prodotto mentre era in ufficio, catturarli su una wiki e poi inviarli a lui in modo che potesse correggere e aggiungere altro. Ha trovato una coppia che ci mancava nelle nostre conversazioni. Quello ha scosso.

Gli scenari peggiori che ho visto sono quelli che gli sviluppatori si sono scritti senza alcuna conversazione con l'azienda. Posso dirlo perché usano termini come "Quando eseguo una ricerca" o "Quando invio il modulo con una data di oggi + 3". Di solito non sono scenari molto interessanti, troppi di loro, un livello di dettaglio troppo basso e quindi completamente non mantenibili. Anche l'azienda non legge questi.

Molto meglio concentrarsi sulle conversazioni IMO. Ho visto alcuni team fare questo per un paio di mesi con enormi miglioramenti della qualità, indipendentemente dall'automazione. Un team è riuscito a far funzionare l'automazione in un ambiente molto difficile alcune settimane dopo, con grande gioia del tester! Ma davvero, fintanto che il team ha conversazioni e utilizza scenari per delineare altri scenari, non penso che importi chi li scrive.


+1 La comunicazione è davvero la chiave, e gli scenari devono davvero essere nei termini in cui ci occupano gli uomini d'affari, quindi in linea con la domanda dei PO, se creiamo un DSL, questo deve davvero essere in grado di essere una corrispondenza più stretta a ciò che il cliente sta per dire e non a ciò che i programmatori pensano che dovrebbe dire il cliente.
S.Robins,

0

La mia esperienza è che è meglio lasciare al BA (analista aziendale) la scrittura dei GWT ( Given-When-Then ) (esperienza con SpecFlow). Il BA può tradurre i requisiti del cliente in GWT e l'azienda può leggerlo. I clienti comprendono i sistemi ma non hanno la tecnologia in grado di scrivere i requisiti in un modo che possiamo usare.

Idealmente la BA scriverà un po 'di GWT, farei alcune revisioni, la BA rivederebbe / rivedere la ripetizione fino a quando la BA e il business non fossero fiduciosi nella copertura. Praticamente il BA mi darebbe una bozza che avrei ripulito e fatto funzionare. L'Affare alza le spalle dicendo sicuro, quindi si chiede perché non abbia coperto alcune aree a cui nessuno ha pensato.


Potresti spiegare cosa significa GWT per te? :)
MattiSG il

@MattiSG: suppongo sia per Given-When-Then (vedi OP).
sleske,

@MattiSG - Aggiornato il post in buone condizioni.
SoylentGray,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.