Hai ragione. BDD non elimina i problemi con l'ambiguità del linguaggio - per niente. Come altri hanno sottolineato, gli snippet che vengono tradotti devono essere abbinati definendoli correttamente, ma anche questo non affronta il problema di ambiguità sottostante.
Ora, perché BDD vale davvero la pena nonostante non si risolva questo problema? Ci sono alcuni motivi e questo elenco certamente non è completo.
L'ambiguità non è stata risolta
Questo non è né un motivo a favore di BDD né contro di esso. Ma quando lo contrapponi ad altri approcci come le storie o i requisiti degli utenti, allora tutti gli approcci di sviluppo SW soffrono di ambiguità del linguaggio poiché iniziano tutti in un modo o nell'altro con una formulazione del linguaggio naturale.
Tecnicamente, il problema dell'ambiguità linguistica è stato risolto con linguaggi artificiali come lojban , ma molto probabilmente i vostri clienti e sviluppatori probabilmente non conosceranno quella lingua.
Linguaggio ubiquitario
BDD va di pari passo con l'idea di un linguaggio onnipresente. Essere in grado di specificare scenari insieme a tutti i clienti, tester e sviluppatori, offre a BDD un vantaggio rispetto ad altri approcci.
Considera un ingegnere di requisiti tradizionale che annota tutti i requisiti. Una volta che sei un tester o un cliente che ottieni quel documento di 300 pagine pieno di requisiti da rivedere, avrai molti più problemi pressanti rispetto alla terminologia che è stata usata lì.
Le storie degli utenti fanno un po 'meglio su questo fronte, poiché includono anche tutte le parti interessate nella loro creazione. In termini di linguaggio onnipresente, non direi che BDD o le storie degli utenti siano migliori, anche se differiscono significativamente nel punto successivo.
testabilità
Un aspetto importante di BDD è che le tue specifiche sono effettivamente eseguibili (tramite Cucumber o simili). Né i requisiti né le storie degli utenti offrono questa funzione. Personalmente, questo è il principale punto di forza per BDD.
In contrasto con i requisiti tradizionali: da anni diciamo agli ingegneri dei requisiti che i loro requisiti dovrebbero essere verificabili. Tuttavia, ogni progetto vede un caso in cui da qualche parte i tester della linea si rendono conto di non avere idea di come testare un determinato requisito.
Le storie degli utenti, se eseguite correttamente, includono i tester nella fase iniziale di creazione per accertarsene. Sfortunatamente, questo è un caso di teoria che si scontra con il mondo reale, in cui ho visto numerose storie che nessun tester ha mai visto prima.
BDD d'altra parte ti dà automaticamente uno scenario di test eseguibile. Non ci sono scuse e modi per evitarlo (beh, a meno che non si ignori completamente i livelli di automazione e si scrivano solo scenari per la poesia elaborata).
Più in generale, Test First è un principio che è stato molto gratificante in tutte le fasi dello sviluppo del software e BDD è la sua applicazione allo strato più esterno dello sviluppo (rispetto al f.ex. TDD a livello di unità).
Sommario
In sintesi, BDD non ti solleva dai problemi di ambiguità del linguaggio naturale. Ti aiuta, tuttavia, ad affrontare questo problema attraverso due punti importanti: Concentrarsi su un linguaggio onnipresente per ridurre le ambiguità (non le eliminerà del tutto, ma aiuta un sacco!) E costringendoti a scrivere eseguibile specifiche. Quest'ultimo punto sta aiutando ad affrontare i problemi di ambiguità principalmente perché quello è il punto in cui le ambiguità iniziano a manifestarsi come problemi altrimenti.