Hai ragione. Il BDD non elimina i problemi con l'ambiguità del linguaggio - non del tutto. Come altri hanno sottolineato, i frammenti tradotti devono essere abbinati definendoli correttamente, ma anche questo non risolve il problema di ambiguità sottostante.
Ora perché il BDD è davvero utile nonostante non risolva questo problema? Ci sono alcune ragioni e questa lista certamente non è completa.
L'ambiguità non è stata risolta
Questo non è né un motivo a favore di BDD né contro di esso. Ma quando lo si mette in contrasto con altri approcci come storie di utenti o requisiti, allora tutti gli approcci di sviluppo SW soffrono di ambiguità linguistiche poiché iniziano 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 poi ancora, i tuoi clienti e molto probabilmente gli sviluppatori non conosceranno quella lingua.
Lingua onnipresente
Il BDD va di pari passo con l'idea di un linguaggio onnipresente. Essere in grado di specificare gli scenari insieme a tutti i clienti, tester e sviluppatori, conferisce a BDD un vantaggio rispetto ad altri approcci.
Considera un tecnico dei requisiti tradizionale che annota tutti i requisiti. Una volta che tu, come tester o cliente, ottieni quel documento di 300 pagine pieno di requisiti da rivedere, avrai problemi molto più urgenti della terminologia utilizzata 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 ubiquo, non direi che sia BDD sia le storie degli utenti sono 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 funzionalità. Per me personalmente, questo è il principale argomento di vendita per BDD.
Contrariamente a ciò con i requisiti tradizionali - abbiamo detto ai tecnici dei requisiti da anni che i loro requisiti dovrebbero essere verificabili. Tuttavia, ogni progetto vede un caso in cui da qualche parte i tester si rendono conto che non hanno idea di come testare un determinato requisito.
Le storie degli utenti, se fatte bene, includono i tester nella loro fase iniziale di creazione per accertarsi di ciò. Sfortunatamente, questo è un caso di teoria che si scontra con il mondo reale, dove ho visto numerose storie che nessun tester ha mai visto prima.
BDD d'altra parte offre automaticamente uno scenario di test eseguibile. Non ci sono scuse e non c'è alcun modo per aggirare questo (beh, a meno che non ignori completamente i livelli di automazione e scriva solo gli scenari per la poesia di fantasia).
Più in generale, Test First è un principio che è stato molto gratificante in tutte le fasi dello sviluppo del software e BDD è la sua applicazione al livello più esterno dello sviluppo (rispetto al TDD f.ex. a livello di unità).
Sommario
In sintesi, BDD non ti eleva dai problemi dell'ambiguità del linguaggio naturale. Tuttavia, ti aiuta ad affrontare questo problema attraverso due punti importanti: Concentrarsi su un linguaggio ubiquo per ridurre le ambiguità (non lo eliminerà del tutto, ma aiuta un sacco!) E costringendoti a scrivere un eseguibile specifiche. Quest'ultimo punto aiuta a risolvere i problemi di ambiguità, soprattutto perché questo è il punto in cui le ambiguità iniziano a presentarsi come problemi altrimenti.