BDD è una metodologia "outside-in", che, a quanto ho capito, significa che inizi con ciò che sai. Scrivi le tue storie e scenari e poi implementa gli oggetti di dominio più esterni, spostando "verso l'interno" e "deliberatamente" scoprendo i collaboratori mentre scorri attraverso livelli di servizio, livelli di dominio, ecc. Per un collaboratore che non esiste ancora, ti prendi in giro (o "fingi") finché non lo fai. (Sto rubando alcuni di questi termini direttamente da Dan North e Kent Beck).BDD è realmente applicabile al livello dell'interfaccia utente?
Quindi, come si inserisce una UI?
Prendendo in prestito da una delle Nord di blog entries, egli riscrive questo:
Given an unauthenticated user
When the user tries to navigate to the welcome page
Then they should be redirected to the login page
When the user enters a valid name in the Name field
And the user enters the corresponding password in the Password field
And the user presses the Login button
Then they should be directed to the welcome page
in questo:
Given an unauthenticated user
When the user tries to access a restricted asset
Then they should be directed to a login page
When the user submits valid credentials
Then they should be redirected back to the restricted content
Egli fa questo per eliminare la lingua dai domini non rilevanti, uno dei quali è l'interfaccia utente ("Campo nome", "Campo password", "Pulsante Login"). Ora l'interfaccia utente può cambiare e la storia (o meglio, l'intento della storia) non si interrompe.
Quindi quando scrivo l'implementazione per questa storia, utilizzo l'interfaccia utente o no? È meglio attivare un browser ed eseguire "l'utente invia credenziali valide" tramite un test del selenio, o per connettersi direttamente all'implementazione sottostante (come un servizio di autenticazione)? A proposito, sto usando jBehave come il mio framework BDD, ma potrebbe altrettanto facilmente essere Cucumber, rSpec, o un numero di altri.
Tendo a non testare l'interfaccia utente in modo automatico e sono cauto con gli strumenti di automazione della GUI come Selenium perché ritengo che i test (1) possano essere eccessivamente fragili e (2) essere eseguiti dove il costo dell'esecuzione è il più grande. Quindi la mia inclinazione è quella di testare manualmente l'interfaccia utente per l'estetica e l'usabilità e lasciare la logica di business a livelli inferiori, più facilmente automatizzabili. (E possibilmente strati meno probabili cambiare.)
Ma io sono aperto a essere convertito su questo. Quindi, è BDD per l'interfaccia utente o no?
PS. Ho letto tutti i post su SO che ho trovato su questo argomento, e nessuno in realtà ha risposto alla mia domanda. This one si avvicina di più, ma non sto parlando di separare l'interfaccia utente in una storia separata; piuttosto, sto parlando di ignorarlo interamente ai fini del BDD.
Grazie per la risposta, Liz. Ho fatto riferimento anche al tuo blog e ai tuoi video. Non mi sono perso il fatto che BDD riguardi la comunicazione più di ogni altra cosa, il che credo sottolinei la mia reticenza nell'incorporare la GUI. I miei stakeholder in genere non esprimono comunque storie in termini di interfaccia grafica. –
"Uncle" Bob Martin [tweettato] (https://twitter.com/unclebobmartin/status/207282123835588608) su questo argomento due volte durante il fine settimana, aggiungendo benzina al fuoco: "I test sono codice! Come tutti i codici devono essere progettato! Non legare i tuoi test all'interfaccia utente! " –
È consentito solo un collegamento HTML per commento, apparentemente. [Ecco] (https://twitter.com/unclebobmartin/status/207281655130488832) il secondo link: "Le persone che fanno BDD _through_ l'interfaccia utente NON stanno facendo assolutamente BDD, stanno facendo MDD: Mess Driven Development." –