Your SlideShare is downloading. ×
0
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Acceptanstesting
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Acceptanstesting

438

Published on

Acceptance testning Primer for Cint 2009 in Swedish

Acceptance testning Primer for Cint 2009 in Swedish

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
438
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Acceptanstesting<br />Av Kristoffer Roupé<br />2009<br />
  • 2. Vilket syfte fyller det?<br />Varför ska vi hålla på med sånt där trams?<br />
  • 3. <ul><li>Säkerhetsställa att rätt värde levereras till slutkund
  • 4. Öka förståelsen för vad som ska levereras
  • 5. Hjälpa underlätta förståelsen för vad som har levererats
  • 6. Enkelt kunna påvisa buggar och bevisa deras existens</li></li></ul><li>Vem är det till för?<br />Ok, men det angår väl ändå inte mig…?!<br />
  • 7. Produktutveckling<br />
  • 8. Utveckling<br />
  • 9. Vem är det till för?<br />Svar: Alla påverkade av någon typ av leverans!<br />
  • 10. Vilka verktyg finns då?<br />Ok, om jag nu ska ta hand om något må det f#@n va smidigt!<br />
  • 11. Tillgängliga verktyg<br />Cucumber<br />Härstammar ifrån Beteende Driven Design<br />Given/When/Then syntax<br />Kriterier definieras i klarspråk<br />FIT<br />Uppfunnet av wiki-mannenWardCummingham<br />Tabellformat<br />Kriterier definieras i form av tabeller<br />Twist<br />Thoughtworks nya tool, mestadels för web-ui testning<br />Engelska-liknande konstruktioner<br />Kriterier definieras med hjälp av fördefinierade ord<br />Hemmabyggen<br />Uppfinns och skapas för det behovet man har<br />Ofta i något domänspecifikt språk<br />
  • 12. Härstammar ifrån BDD<br />Har egenskaper (features) -&gt; stories<br />Har scenarion -&gt; acceptanssteg<br />Scenarion skrivs på formen: <br /> Givet &lt;något tillstånd&gt;<br /> När &lt;något sker&gt;<br /> Så &lt;försäkra att&gt;<br />
  • 13. Språket Cucumber förstår heter Gherkin<br />Cucumber förstår i skrivande stund 37 olika språk<br />Ett test kan se ut såhär:<br />Feature: Search courses <br />In order to ensure better utilization of courses <br />Potential students should be able to search for courses <br />Scenario: Search by topic <br />Given there are 240 courses which do not have the topic &quot;biology&quot; <br />And there are 2 courses A001, B205 that each have &quot;biology&quot; as one of the topics<br />When I search for &quot;biology&quot; <br />Then I should see the following courses: <br /> | Course code | <br /> | A001 | <br /> | B205 | <br />
  • 14. Ett dag i en egenskaps livscykel<br />Det var en gång för länge sedan…<br />
  • 15. Naturligtvis skriver jag in min nya egenskap i mitt favoritverktyg pivotaltracker!<br />
  • 16. Egenskapen kommer med i planeringen och en utvecklare…<br />… ”laddar” ner den ifrån pivotaltracker med hjälp av tpope’spickler.<br />Ett tool för att managera saker i pivotaltracker.<br />
  • 17. Utvecklaren definierar acceptansstegen…<br />… genom att implementera dem i s.k. stegdefinitioner.<br />Därefter börjar utvecklaren implementera egenskapen.<br />
  • 18. När acceptansstegen godkänns av Cucumber på utvecklarens maskin.<br />Skickar utvecklaren koden till byggservern. För ytterligare verifikation.<br />
  • 19. Om implementationen accepteras, använder …<br />Byggservern tpope’spickler och levererar egenskapen i pivotaltracker.<br />
  • 20. Om implementationeninte accepteras…<br />Meddelas alla utvecklare att något inte står rätt till och vilket accptanssteg som fallerat.<br />
  • 21. En liten summering…<br />Pickler- Ett tool för att managerastories i PivotalTracker<br />Stories skrivna med som features, med <br />Given/When/Then<br />Pickler– Används för att leverera en feature som blivit godkänd till pivotaltracker!<br />Tolkar stories skriva i Gherkin och exekverar acceptansteg<br />Byggservern kör alla acceptanstest vid varje integrationsbygge. Om något test inte accepteras stoppas bygget tills någon fixat det!<br />
  • 22. Hur gör jag då?<br />Ok, om jag nu ska skriva de här egenskaperna, så måste jag ju veta vad jag har att ”jobba” med!<br />
  • 23. Egenskap (Feature)<br />Börja med att beskriva önskat värde!<br />Ett bra sätt att skriva egenskaper är:<br />In order to &lt;gainsomevalue&gt;<br />As &lt;who am I?&gt;<br />I want&lt;something&gt; / (So that &lt;stakeholder X is satisfied&gt;)<br />Då får man det viktigaste först… värdet!<br />Därefter vad man eftertraktar<br />Samt för vem detta är eftertraktat<br />
  • 24. Övning: Egenskap<br />Ta 5min med personen till vänsterom dig ochförsökskriva1avdessapåformen<br />In order to…/As … / I want … (/ So that …)<br />CPX: Implement Regions in Australia<br />CAT: Avoid oversampling<br />
  • 25. Scenarion<br />Beskrivs av Given/When/Then<br />Given &lt;a context&gt;<br />When &lt;an event happens&gt;<br />Then &lt;an outcomeoccurs&gt;<br />Andra ord som kan vara användabara är:<br />And & But, ger läsbarhet istället för att repetera något av stegen.<br />
  • 26. And & But<br />Scenario: Multiple Givens <br />Given one thing <br />Given an other thing <br />Given yet an other thing <br />When I open my eyes <br />Then I see something <br />Then I don&apos;t see something else <br />Scenario: Multiple Givens<br />Given one thing <br />And an other thing <br />And yet an other thing <br />When I open my eyes <br />Then I see something <br />But I don&apos;t see something else<br />
  • 27. Abstrakt Scenario (Scenario Outline)<br />Adderar exempel till stegen i form av tabeller.<br />Fortfarande på formen Given/ When/ Then<br />Scenario: eat 5 out of 12 <br />Given there are 12 cucumbers <br />When I eat 5 cucumbers <br />Then I should have 7 cucumbers<br />Scenario: eat 5 out of 20 <br />Given there are 20 cucumbers <br />When I eat 5 cucumbers <br />Then I should have 15 cucumbers <br />Scenario Outline: eating <br />Given there are &lt;start&gt; cucumbers When I eat &lt;eat&gt; cucumbers <br />Then I should have &lt;left&gt; cucumbers <br />Examples: <br />| start | eat | left | <br />| 12 | 5 | 7 | <br />| 20 | 5 | 15 | <br />
  • 28. Lite mer avancerade stegdefinitioner<br />Exempel:<br />Säg att jag t.ex. har 3 olika användare som jag vill exercera i min egenskap. Hur gör jag det då?<br />Tänk om jag håller på med en blogg då och vill skapa en post med långa textsträngar …<br />
  • 29. Flerraders stegargument (Multi step arguments)<br />Given the followingpeopleexist: <br />| name | email | phone | <br />| Aslak | aslak@email.com | 123 | <br />| Joe | joe@email.com | 234 | <br />| Bryan | bryan@email.org | 456 | <br />Given /the followingpeopleexist:/ do |people_table| <br />people_table.hashes.eachdo |hash| <br /># The first time the +hash+ willcontain: <br /> # {&apos;name&apos; =&gt; &apos;Aslak&apos;, &apos;email&apos; =&gt; &apos;aslak@email.com&apos;, &apos;phone&apos; =&gt; &apos;123&apos;} <br /> # The second time: <br /> # {&apos;name&apos; =&gt; &apos;Joe&apos;, &apos;email&apos; =&gt; &apos;joe@email.com&apos;, &apos;phone&apos; =&gt; &apos;234&apos;} <br /> # etc. <br />end<br />end<br />
  • 30. Flerraderssträngar(Multiline strings)<br />Given a blog post named &quot;Random&quot; with Markdown body <br /> &quot;&quot;&quot; <br /> Some Title, Eh? <br /> ============== <br /> Here is the first paragraph of my blog post. Loremipsum dolor sit amet, <br />consecteturadipiscingelit. <br /> &quot;&quot;&quot;<br />Given /^a blog post named &quot;([^&quot;]*)&quot; with Markdown body$/ do |title, markdown| <br />Post.create!(:title =&gt; title, :body =&gt; markdown) <br />end<br />
  • 31. DRY:ing up your code<br />Ok, nu har jag en hel del steg och grejor, men det börjar se rätt grötigt ut. Vad gör jag nu?<br />
  • 32. Transformationer<br />Man använder transformmetoder för att registrera ett regexp tillsammans med ett block. Transformen kommer köras innan registrerade Regexp grupper, vilket gör att Transformen körs innan själva Step-blocket<br /># features/step_definitions/user_steps.rb<br />Transform /^user w+$/do |step_arg| <br />User.find_by_username /(w+)$/.match(step_arg)[0] <br />end<br />Then /^(user w+) should be friends with (user w+)$/do |user, friend| <br />user.shouldbe_friends_with(friend) <br />end<br />
  • 33. Transformationsstabeller<br />Scenario: setting up via table <br />Given ... <br />When ... <br />Then I should have <br /> | name | age | <br /> | corey | 36 |<br />Transform /^table:name,age$/do |table| <br />table.hashes.map { |hash| <br />hash[:name] <br /> }.map { |name| <br />Person.find_by_name(name)<br /> } <br />end<br />
  • 34. Övning: Scenario<br />Ta 5min med personensom du arbetade med ochförsökskriva2scenarionåt “er” egenskappåformen:<br />Given /When / Then<br />CPX: Implement Regions in Australia<br />CAT: Avoid oversampling<br />
  • 35. Kommunikation via test<br />Men om produktägaren skriver alla scenarion innan oss, och det är integrerat med bygget… betyder det att bygget kommer va rött tills vi är klara då?<br />
  • 36. Taggning<br />Ett bra sätt att organisera egenskaper och scenarion <br />En egenskap eller scenario kan ha så många taggar som ”behövligt”<br />Du kan använda --tagsför att köra (eller låta bli att köra) saker<br />cucumber--tags@billing<br />cucumber--tags~@billing<br />Du kan använda taggar för att länka in t.ex. dokument<br />Ett annat sätt är att använda det i ditt work flow för att förmedla saker till dina kollegor, t.ex. work in progress<br />@wip<br /> Feature: Index projects<br />
  • 37. Tagglogik<br />När du ska köra t.ex. ett par scenarion kan du välja mellan att ”och:a” eller ”ellra” ihop dem genom:<br />AND: cucumber--tags@billing, @important<br />OR: cucumber--tags@billing--tags@important<br />
  • 38. Begränsa körning med taggar<br />Om man följer Kanban så kanske man vill begränsa säg, hur många saker som görs åt gången. Då kan man använda ”--wip”-flaggan och skriva något liknande:<br />cucumber--tags@wip:3<br />

×