Så kallade specificerande exempel (kundorienterade, ofta automatiserade funktionstester) är ett missförstått och kritiserat arbetssätt. Somliga hävdar till och med att de mest är en dröm från extremagilister som inte fungerar i praktiken. Vi som har sett dem fungera alldeles utmärkt vet att så inte behöver vara fallet. Tvärtom kan de kännas nästan ovärderliga. I den här session vill jag gräva lite i detta. Vad är poängen med specificerande exempel i en effektiv utvecklingsprocess? Vilka är de potentiella fördelarna? Vilka problem kan man råka ut för? Vad är bra arbetssätt och vad bör vi undvika? Hur kan vi få det att fungera rent praktiskt?
Bilderna hör samman med ett föredrag som jag gav på DevLin2011, en systemutvecklingskonferens i Linköping, 10 Mars, 2011.
1 of 42
More Related Content
Examplariska exempel - Om att använda specificerande exempel för att förbättra samarbetet och utveckla rätt system
1. Exemplariska exempel
Använda specificerande exempel för att förbättra
samarbetet och utveckla rätt system
Joakim Holm, Adaptiv STHLM AB, 2011
lördag den 12 mars 2011 1
2. Vem talar? Vem talar?
Inom mjukvara sedan 1994 ✦ Praktiserat agila
metoder sedan år 2001 ✦ I styrelsen av Agile Sweden
✦ Medgrundare och konsult på Adaptiv (2009) ✦
Medgrundare av Agila Sverige-konferensen (2008)
lördag den 12 mars 2011 2
3. specificerande exempel
Karaktäriserande, konkret, exekverbar beskrivning
av korrekt beteende hos ett system
uttryckt på naturligt språk
lördag den 12 mars 2011 3
9. Grunderna i exempel
Givet att jag redigerar kontaktuppgifter
När jag ändrar namn till "Hocke Jolm"
Och jag sparar ändringen
Så visas ett meddelande:
"Fel. Hocke Jolm är inget vettigt namn."
Och jag heter "Jocke Holm" i systemet
lördag den 12 mars 2011 9
10. 1
Arbetsprocessen
Story:
För att locka fler deltagare
Som deltagare
Kan jag korrekt och koncist
se när kursen ges.
lördag den 12 mars 2011 10
11. 2
Arbetsprocessen
Acceptanskriteria:
- 1-dagskurser visas med startdatum
- Flerdagskurser visas som startdatum -
slutdatum
lördag den 12 mars 2011 11
12. 3
Arbetsprocessen
Exempel:
- Kurstillfälle som inte fått ett datum
ännu visas som "(datum kommer)"
- 1-dagskurser visas som "7 mars 2011"
- Flerdagskurser visas som "7 mars
2011 - 10 mars 2011"
...
lördag den 12 mars 2011 12
13. 4
Arbetsprocessen
Scenario: 2-dagarskurs
Givet ett kurstillfälle
När jag sätter startdatum till "2011-03-07"
Och jag sätter slutdatum till "2011-03-08"
Så visas kursdatum som
"07 Mar, 2011 - 08 Mar, 2011"
lördag den 12 mars 2011 13
14. 5
Arbetsprocessen
Given /^ett kurstillfälle$/ do
pending
end
When /^jag sätter startdatum till "([^"]*)"$/
do |start_date|
pending
end
...
lördag den 12 mars 2011 14
15. 6
Arbetsprocessen
Given /^ett kurstillfälle$/ do
@course = Course.create!
end
When /^jag sätter startdatum till "([^"]*)"$/
do |start_date|
@course.update_attribute(
:start_date, Date.parse(start_date))
end
...
lördag den 12 mars 2011 15
16. 7
Arbetsprocessen
Scenario: 2-dagarskurs
Givet ett kurstillfälle
När jag sätter startdatum till "2011-03-07"
Och jag sätter slutdatum till "2011-03-08"
Så visas kursdatum som
"07 Mar, 2011 - 08 Mar, 2011"
lördag den 12 mars 2011 16
20. Tre vanliga tankefel
1. "ATDD är ett testverktyg"
(det hör man ju!)
Nej! Det är ett arbetssätt för att i samarbete
utforska, kommunicera och validera funktioner.
lördag den 12 mars 2011 20
21. Tre vanliga tankefel
2. "Kraven måste ju komma från verksamheten"
(det är ju deras ansvar)
Nej! Det måste ske i samarbete mellan
domänexpert, testare och utvecklare
lördag den 12 mars 2011 21
22. Tre vanliga tankefel
3. "Allt måste specificeras via exempel!"
(processer är till för att följas)
Nej! Använd rätt verktyg för rätt jobb.
lördag den 12 mars 2011 22
23. Spec:a inte impl.detaljer
Givet att jag är på ansökningssidan till kursen "Makramé"
När jag fyller i textfältet "Namn" med "Jocke Holm"
Och textfältet "E-postadress" med "jocke@adaptiv.se"
Och klickar på knappen "Skicka"
Så visas meddelandet "Du är anmäld till kursen Makramé"
Givet att jag ska ansöka till kursen "Makramé"
När jag anger namn "Jocke Holm"
ansöker till kursen med namn och e-postadress
Och jag anger e-postadress "jocke@adaptiv.se"
Så bekräftas min ansökan
Och jag skickar in anmälan
Så bekräftas att "Jocke Holm" har ansökt till kursen "Makramé"
lördag den 12 mars 2011 23
24. Spec:a inte allt
Givet att jag är på anmälningssidan till "Motorprogrammet"
När jag fyller i tidigare akademiska poäng med "25,5"
Så visas felmeddelande "Enbart heltal"
<enhetstest>
lördag den 12 mars 2011 24
25. Spec:a inte persistens
Givet att jag kan redigera kontaktuppgifter
När jag redigerar namn till "Hocke Jolm"
Och sparar nya kontaktuppgifter
Så sparas mina kontaktuppgifter i databasen
Och min profil visas
Och mitt namn är nu "Hocke Jolm"
<integrationstest>
lördag den 12 mars 2011 25
26. Råd för dåd
Tala svenska (verksamhetsspråket)
Använd ert gemensamma språk
Komplettera exempel med beskrivningar
Fokusera på domänlogiken
Se gärna till att alla kan exekvera
Två sviter: Regression och WiP
lördag den 12 mars 2011 26
28. 3 sätt att ansluta
Exempel
Exempel Klient
Exempel Applikation Applikation
Domän Domän Domän
Domän direkt Simulerad klient Automatiserad klient
lördag den 12 mars 2011 28
29. 3 sätt för data
Exempel Exempel Exempel
Domän Domän Domän
Infrastruktur Infrastruktur DB-stubbe
DB DB
Populerad DB Rensad DB Emulerad DB
lördag den 12 mars 2011 29
30. 3 verktyg
http://code.google.com/p/robotframework/
Robot
http://fitnesse.org/
http://cukes.info/
lördag den 12 mars 2011 30
32. Exempel: Kursanmälan
CourseDescript
code
name
description
realises
Course
startDate Participant
endDate
Registration name
location timeStamp email
for by
teachers
lördag den 12 mars 2011 32
33. Drivande stories
Admin Deltagare
CRUD kurser Lista alla kurser
CRUD kurstillfällen Se kursdetaljer med
kurstillfällen
Lista alla anmälningar för
kurstillfälle Lista alla kommande
kurstillfällen
Mejla bekräftelse till
deltagarna Anmäl mig till kurstillfälle
lördag den 12 mars 2011 33
34. Story:
För att förbättra mitt CV
Som deltagare
Kan jag anmäla mig till ett
aktuellt kurstillfälle
lördag den 12 mars 2011 34
35. Acceptanskriteria:
- Deltagare kan bara anmäla sig till
kommande kurser
- Deltagare kan inte anmäla sig till kurs
som redan har gått
- Deltagare kan inte anmäla sig till kurs
som är full
lördag den 12 mars 2011 35
36. Övning 1: Exempellistan
Exempel:
- Deltagare kan bara anmäla sig till kurs som
har ett startdatum
- Deltagare kan inte anmäla sig till kurs som
redan har gått
- Deltagare kan inte anmäla sig till kurs som är
full
lördag den 12 mars 2011 36
37. Facit 1: Exempellistan
Exempel:
- Deltagare kan anmäla sig till kurstillfälle
- Deltagare kan inte anmäla sig till kurstillfälle
som inte har ett startdatum
- Deltagare kan inte anmäla sig till kurs som har
startat eller genomförts
- Deltagare kan inte anmäla sig till kurs som är full
(antalet platser är lika med antalet anmälningar)
- Deltagare kan inte anmäla sig till samma
kurstillfälle t vå ggr.
- Deltagare som anmäler sig till en kurs de redan
har gått ska få en varning
lördag den 12 mars 2011 37
38. Övning 2: Ett exempel
Exempel: Deltagare kan inte anmäla sig till
samma kurstillfälle t vå ggr.
Scenario: Dubbel anmälan
Givet ...
När jag anmäler mig med e-postadress
"johan@adaptiv.se"
Så ...
lördag den 12 mars 2011 38
39. Facit 2: Ett exempel
Exempel: Deltagare kan inte anmäla sig till
samma kurstillfälle t vå ggr.
Scenario: Dubbel anmälan
Givet en kurs med namn "Data"
Och ett kurstillfälle som startar "2011-03-07"
Och en anmäld deltagare med e-postadress
"johan@adaptiv.se"
När jag anmäler mig med e-postadress
"johan@adaptiv.se"
Så är jag inte anmäld till kursen "Data" som
startar "2011-03-07"
Och jag ser meddelandet "Du är redan anmäld till
kursen!"
lördag den 12 mars 2011 39
40. Potentiella vinster
Färre missförstånd Synk mellan krav & test
Ökad känsla av delaktighet
Korrekt dokumentation
Mindre omarbete
Minskar spekulativ utveckling
Minskat dubbelarbete Bättre samarbete
Bättre regressionstester
lördag den 12 mars 2011 40