È? Può essere. La mia opinione sarebbe che sarebbe una soluzione molto scarsa per il software di intrattenimento in generale, anche se potrebbe funzionare bene per le librerie di basso livello.
EDIT: Ecco alcune giustificazioni per la mia opinione.
Wikipedia definisce BDD una tecnica che "incoraggia la collaborazione tra sviluppatori, QA e partecipanti non tecnici o aziendali a un progetto software". Sembra già una cattiva idea perché i giochi differiscono dalla maggior parte dei software in quanto non sono progettati come strumenti per soddisfare un'esigenza specifica di un "partecipante non tecnico o aziendale", ma sono opere coese ampiamente progettate per intrattenere. C'è un'enfasi sul "comportamento software desiderato", ma i giochi raramente hanno un "comportamento software desiderato", tranne a livello tecnico. C'è sicuramente il merito di controllare quella parte del codice, ma non con l'utente finale, perché non lo vedranno mai.
Ma supponiamo che tu voglia buttare via quella roba degli stakeholder umani e usare semplicemente BDD per far rispettare i contratti tra diversi moduli di codice, che per quanto posso vedere non differisce molto dal normale sviluppo guidato dai test, che considero scarsamente- adatto ai giochi, per il seguente motivo.
I test sono utili per verificare che eventi discreti si siano verificati quando previsto. Questo funziona bene nella programmazione guidata dagli eventi, ad es. la maggior parte del mondo del software, in cui viene eseguita un'azione, viene generato un po 'di output e quindi si verifica che l'azione e il risultato corrispondano. Tuttavia, il software di gioco è in genere una simulazione, in cui un'azione non ha un risultato discreto ma un cambiamento continuo nello stato mondiale. Se il mio giocatore nascosto fa rumore, potrei voler controllare che l'IA mi dia la caccia. Quindi, posso creare un test per assicurarmi che l'IA sia nello stato di "caccia" dopo che è stato creato un rumore, ed è fantastico. Ma come faccio a sapere se la caccia funziona anche? Non puoi verificarlo all'istante: puoi osservarlo solo con il passare del tempo.
Inoltre, un approccio test-first può creare un falso senso di sicurezza e indurre le persone a credere che il codice sia migliore di quanto non sia in realtà.
def check_dice_roll_in_range():
d = new Dice()
assert(d.roll() between 1 and 6)
class Dice:
def roll():
return 4
Poiché un risultato del test può dare un falso positivo, non è mai possibile sfuggire alla necessità di base di controllare il codice stesso. Ma se il codice stesso viene verificato adeguatamente, il test assume un'importanza secondaria. Questo è il motivo per cui, a mio avviso, i test vengono utilizzati al meglio dopo l'evento, per testare correzioni di errori.
Non direi che non c'è mai alcun vantaggio nel testare che, quando gli oggetti X e Y lavorano insieme, il risultato ottenuto è come previsto. Il problema è se stai usando il modo più efficace per verificarlo. I metodi potrebbero includere la verifica formale, una revisione del codice, i metodi test-first, i metodi last-test, i test tradizionali sulla scatola nera del QA o semplicemente usando il codice come previsto e osservando i risultati. Le ultime due opzioni sono sorprendentemente efficaci per la maggior parte del tempo, perché nonostante sembri che manchino di rigore, la maggior parte dei bug si trova nel corso dell'uso tipico e la comprensione di un bug nel suo contesto naturale a volte può essere più semplice della comprensione in un test artificiale imbracatura. In cima a questo,
Quindi, in sintesi, penso che lo sviluppo basato sui test non sia necessariamente un'ottima scelta per il software, che i test da soli non sono mai sufficienti per garantire la qualità del software (e quindi il tempo impiegato per scriverli deve essere confrontato con usi alternativi di quel tempo di sviluppo), che i giochi sono particolarmente scarsi per i casi di test automatizzati e che i giochi sono particolarmente scarsi per i metodi di sviluppo che mirano a enfatizzare il "valore commerciale" e i "test di accettazione".
(Spero che sia una risposta migliore, anche se non sei d'accordo con i miei punti.)