2013-10-21 13 views
5

SfondoCome si acquisiscono i requisiti con i test di accettazione dichiarativi?

Sto cercando di aiutare la mia squadra ad organizzare per un nuovo progetto di applicazione per cellulare. Abbiamo scelto di seguire BDD (vedere anche BDD definition) al fine di acquisire semplici requisiti inglesi che formano un contratto tra parti interessate e sviluppatori per ogni singola storia utente.

Utilizziamo i test di accettazione per documentare i requisiti di ogni utente. I test di accettazione vengono scritti prima della pianificazione dello sprint. Gli sviluppatori perfezionano e aggiungono ai test durante la pianificazione dello sprint.

Definiamo Criteri di accettazione come un elenco di regole (ad esempio: convalida dell'input, valori predefiniti, ecc) e Test di collaudo come un elenco di scenari cetriolo. Abbiamo in programma di utilizzare Calabash per i test sui dispositivi mobili.

Ritengo che i criteri/test di accettazione siano una soluzione più agile e quindi migliore per documenti con requisiti più formali.

Sento di aver trovato una soluzione efficace per me, ma vorrei capire come altri stanno raccogliendo i requisiti e scrivendo test di accettazione.

Problema

C'è un dibattito nella comunità Cetriolo di imperative vs declarative fasi della prova. Mi avvicino all'imperativo, perché uno sviluppatore deve sapere che aspetto ha una storia utente consegnabile.

Non mi sento un problema con l'accoppiamento UI. Esistono modi per disaccoppiare l'interfaccia utente dal test (ad esempio: page objects). Inoltre, non ritengo che avere passaggi dettagliati rendano difficile per un partecipante non tecnico comprendere (a meno che non sappia come utilizzare un browser Web o un dispositivo mobile, ma si tratta di un problema separato).

È possibile che il termine "Acceptance Test" sia errato. Nel mio utilizzo, un test di accettazione non è allo stesso livello di un test unitario. Vedo un test di collaudo come livello elevato integration test.

L'esempio

  • Come ospite
  • voglio login
  • per accedere alle funzionalità di app

prova imperativo

  • Scenario: accesso valido
    • Dato Sono nella schermata di "login"
    • Quando entro in "e-mail @ dominio.com" in "e-mail"
      • E io entro in "password1" in "password"
      • E io batto "Login"
    • poi vedo "login riuscito"

dichiarativa di prova

  • Sc enario: accesso valido
    • Dato che ho un account valido
    • Allora posso accedere

Questi sia in grado di coprire le stesse funzionalità e la seconda è più breve, ma non dice se io può accedere con un nome utente, e-mail o account facebook/twitter/google/etc. E 'solo non è sufficiente per codificare in realtà una soluzione

La questione

Come si fa a catturare i requisiti per una funzione con gradini dichiarativi?

+1

Dan Nord (creatore di BDD) ha alcune riflessioni sulla questione: http://dannorth.net/2011/01/31/whose- dominio-è-da-comunque /. È utile tenere presente che uno scenario deve riguardare solo 2 domini: l'utente della funzionalità e lo sviluppatore che lo implementerà. Lo scenario dovrebbe chiarire a entrambi i domini ciò che accadrà come (ad esempio: "utente accede con email e password", non "utente accede con username e password", ecc) – Brenden

+0

http://blog.cyrusinnovation.com/2013 /04/improve-your-ios-frank-cucumber-acceptance-tests.html dice che l'imperativo è appropriato quando uno stakeholder è interessato all'esperienza utente di un determinato scenario. Ha senso mirare alla brevità tramite dichiarativo pur essendo esplicito con imperativo quando è richiesto. – Brenden

+0

Questa domanda sembra essere fuori tema perché riguarda la pianificazione del progetto. Penso che dovrebbe essere migrato a programmers.stackexchange.com. – Brenden

risposta

4

Domanda ben scritta!

Come si acquisiscono i requisiti per una funzionalità con passaggi dichiarativi ?

I requisiti per una funzione sono registrati nelle definizioni di passo.

Quindi nel tuo esempio imperativa:

When I enter "[email protected]" in "email" 
And I enter "password1" in "password" 
And I tap "login" 

questo potrebbe essere fatto dichiarativa riscrivendo come:

Given I login using valid credentials 

I passaggi per spostarsi ad un account valido (ossia attuazione dei criteri di accettazione che definisce cosa significa "valido") può quindi essere implementato nella definizione di passo per questa dichiarazione di scenario. Lo stesso vale per lo scenario opposto cioè

Given I login using invalid credentials 

Nuovamente, i passaggi per implementare questo scenario che soddisfano i criteri di accettazione può essere implementato nella definizione passaggio sottostante.

Questo approccio dichiarativo significa che si perde i requisiti (imperativo) dalla funzione (vale a dire quali passi precisi devono essere eseguite), rendendo più difficile per l'azienda per vedere esattamente ciò che questi scenari stanno facendo da solo la lettura il file delle caratteristiche. Tuttavia, ciò che si ottiene è che i test diventano meno fragili, poiché i passaggi specifici per eseguire un'attività vengono registrati nella definizione del passo e questa definizione del passo può essere condivisa tra molte funzioni.

Nella mia azienda lottiamo con le stesse preoccupazioni, e scopriamo che in alcuni casi è meglio usare imperativo piuttosto che dichiarativo, e viceversa.Ad esempio, nel tuo caso i passaggi che compongono "Dato che ho un account valido" possono essere utilizzati in molte funzioni, quindi renderlo dichiarativo è razionale. Tuttavia, se si dispone di una funzione in cui vengono immessi molti valori di stringa diversi, in tal caso è probabilmente meglio scriverli in modo imperativo.

"Horses for courses!"

Sarà molto interessante vedere altre risposte a questa domanda dal SO comunità.

+0

Riesco a vedere un certo valore nel definire i test di accettazione in modo imperativo all'interno di ogni story utente e quindi in modo dichiarativo negli scenari di cetriolo reali per renderli meno fragili. Grazie per la condivisione! – Brenden

+0

Pensando a questo proposito, abbiamo potuto utilizzare i criteri di accettazione per elencare i dettagli di ciò che un "account valido" è (per esempio: e-mail e password, senza nome utente e la scansione della retina). In questo modo gli scenari possono essere più brevi, mentre si acquisiscono ancora abbastanza requisiti per ogni story da parte dello sviluppatore da implementare completamente ... Mi piace questa idea. – Brenden

+1

Inoltre, è possibile aggiungere dettagli "appena sufficienti" relativi ai criteri di accettazione per il titolo dello scenario. Quindi nel tuo esempio potresti avere "Scenario: Login usando solo la scansione della retina" e "Scenario: login usando e-mail e password". –

0

Recentemente ho visitato un negozio/online per acquistare una lavatrice e una lavastoviglie. Tutto quello che volevo era comprarne uno che utilizza meno acqua e ha un lavaggio veloce. Ma i dettagli che ho incontrato sono stati travolgenti; come RPM, Spessore tamburo interno, Carico totale collegato in KW ecc.

Lo stile imperativo può sembrare adatto dal semplice esempio sopra riportato ma in realtà rende gli scenari di lettura più difficili e noiosi. Puoi provarlo leggendo 10 scenari da un progetto in cui non sei direttamente coinvolto a livello tecnico/giornaliero.

Dato che uno degli obiettivi dell'utilizzo del cetriolo è quello di portare trasparenza nel progetto, in particolare gli utenti non tecnici, lo stile dichiarativo è molto più efficace nel coinvolgere la direzione. L'ho visto nei miei progetti.

Ecco una storia fittizia. Prova e implementalo in modo imperativo, torna indietro e leggilo tra un paio di giorni, ti accorgerai che è troppo noioso.

Feature: Delivery 
    Free delivery is offered to customers who order two or more items 

    Scenario Outline: Calculate postage for delivery 
    Given I am signed-in 
    When I "<order>" items 
    Then postage should be "<postage>" 

    Examples: 
    | order | postage | 
    | 1  | 0.99 | 
    | 2  | 0  | 
    | 3  | 0  | 
    | 0  | ?  | 

Un altro collegamento che si potrebbe desiderare di leggere How to implement UI testing without shooting yourself in the foot

+0

Bella illustrazione, ma, in questo esempio, il vero problema è specificare cosa significa essere connessi, ordinare un oggetto e in quale valuta è inserita la spedizione in quale regione/nazione è affittata la spedizione. Come ho accennato nella mia domanda, voglio sapere dove si definiscono i requisiti per l'implementazione quando si usano i passi dichiarativi. Grazie. – Brenden

Problemi correlati