Prioriter testene dine!

Slides:



Advertisements
Liknende presentasjoner
Webbasert administrasjonssystem for fondsforvaltere Martin Lie 20. april 2006.
Advertisements

Design av sikre web-applikasjoner
PUG Norway – 12. nov 09Thomas Skjørten / Jan Kolstad.
Deltaker på sosialt nettsted Bruker du sosiale medier som for eksempel Facebook, Twitter eller LinkedIn? (Prosent av Internettbrukere) 17 Dagligbankundersøkelsen.
Litt mer om PRIMTALL.
Hvordan innholdsstrategi fikk hamsteren ut av buret
Ditt eget integrerte utviklingsmiljø med OpenEdge i fokus Hamar 27. mars 2009 Thomas Skjørten/Jan Kolstad.
NESOs Formannskole klasse / 2014
Sikkerhet og smidig IASA, 17. mars 2010.
Java Teknologi Teknikker Økosystem Johannes Brodwall
Nyheter visma business
Extreme Integration Oslo XP meetup, 22. mars, 2011 Johannes Brodwall.
Hummer på Kvitsøy - status
mai Havneforeningens Lederprogram Barcelona Foto: Joachim S. Müller.
”Verifiser Forventet Funksjonalitet”
Test-Drevet Utvikling Bowling med
Realistiske demoer gir bedre feedback!
Test-Drevet Utvikling Bowling med extremeprogramming.no.
Terje Hjerpbakk Oppgave 2 Vår ING. Problemstilling  Designe en database og lage et program som gjør det mulig å lage fleksible spesifikasjoner/rapporter.
Om smidig brukerkommunikasjon Smidig 2011 Johannes Brodwall Steria Norway.
Produktive utviklere – Presenter gevær! Truls Jørgensen og Jan-Erik Carlsen Capgemini Norge.
Pay it forward − delta på StackOverflow Avdelingsmøte Tech, 15. september 2011 Åsmund Eldhuset.
Samordna Opptak Mål: Fordele studenter på studier.
Softwarearkitektur og kvalitet
Apache Maven 2.
© Lars-Erik Kindblad.  Et platformuavhengig verktøy for å automatisere build prosesser.  Støttes og drives av Apache Software Foundation.  Kommer ferdig.
Praktisk livredning med git
Grunnleggende testteori
Prosjekt 45e - WebConcret
Maximite AS Et konsulentselskap bestående av 8 uavhengige konsulenter som er spredt fra Finmark til Oslo Bred erfaring innen blant annet strategiutvikling,
Entity Framework Andreas Knudsen, Bekk Consulting AS 31/
ASP.Net Fremover (Asp.Net 3.5 Extensions) Andreas Knudsen, Bekk Consulting AS 31/
Lean Startup sier du, men jeg jobber jo i prosjekt?
  © Steria FitNesse som nyttig verktøy Smidig FitNesse som nyttig verktøy Anders Vindvad.
HVORFOR FORRETNING BØR BRY SEG OM KONTINUERLIGE LEVERANSER Smidig 2012 Sveinung Dalatun.
Smidig rafting på Storo Over fossefallet i en tønne av scrum
Lørenskog kommune, arbeidsgiverseksjonen
Gruppe 8 - Pizzamart Veien så langt. Ansvarsroller Ingen sjef over alle sjefer Alle har egne ansvarsområder – Scrum Master – Møteleder – Database-ansvarlig.
  © Steria Å Lytte til koden Johannes Brodwall, Chief scientist, Steria Statkraft 16. april, 2010 Du kan lytte til koden.
s. 1 Evaluering av rådgivningstjenesten Foto: Crestock.com.
Smidig overtakelse - eller som å åpne en Pandoras krukke?
Verdistrømanalyse Henning Spjelkavik Smidig 2009 v1.1.
Idrett for funksjonshemmede
Teknisk gjeld i smidige prosjekter Synliggjøre: Fremgang Hindringer
Black box testing av webapplikasjoner
Fagtreff brakker/moduler Norsk Utleieforening 28 februar Grunnopplæring i faget Hjelpearbeider Block Watne Snekkerlinja.
Misbruk av FitNesse XP Meetup Trond Arve Wasskog.
Lightning Talks Oslo XP meetup juli Johannes Brodwall.
Smidig utrulling Anders Sveen, BBS Efaktura. Hva? Ofte Tar lite tid Automatisert Sikkert XP Meetups.2.
Ble Mona Lisa malt iterativt? Reidar Sande Smidig 2008, 9. oktober 2008.
Figur 1 Behov. Figur 2 Behov Figur 3 Prioritering/ressursinnsats.
Figur 1 Behov. Figur 2 Behov Figur 3 Behov Figur 4 Behov.
Figur 1 Behov. Figur 2 Behov Figur 3 Prioritering/ressursinnsats.
1 Hvordan lage websider Med Interkodex AS. 2 Innledende Å lage profesjonelle webløsninger kan gjøres veldig enkelt og rimelig. Du trenger ikke kunne webdesign.
Åpne en luke hver dag og få en gave
Introduksjon til øvingstimer
Konkurrenceevne og globalisering 10. Makroøkonomi Teori og beskrivelse 4.udg. © Limedesign
SINTEF Raufoss Manufacturing AS
JIRA dreper smidigheten din
Oppdater.com Web-publiseringssystem for InCreo AS Øyvind Henriksen
HOVEDPROSJEKT 28e HiST2003/2004. Om oss Tor Arne Hammervik, 21 år Tor Arne Hammervik, 21 år Thomas Lund, 24 år Thomas Lund, 24 år Geir Magne Nilsen, 24.
Del 3 Kampidrettenes utdanningssamarbeid Utarbeidet av Espen Amundsen
Trondheim Lytte- og Læresenter. Sammendrag Prosjektet ble iverksatt fordi Trondheim Lytte- og Læresenter så behovet i å ha et elektronisk kundearkiv i.
Produktion og udbud 4. Mikroøkonomi Teori og beskrivelse © Limedesign
LOPOT Lokasjonsbasert ProfilOppdateringsTjeneste.
Veien videre - Dialogkonferanse fossilfrie byggeplasser.
Bjørn Ove Pedersen og Stian Dalviken
UH-IaaS: Dagens løsning
Nova - metodikk Uninett 2013 –
Utskrift av presentasjonen:

Prioriter testene dine! Sveinung Dalatun & Øyvind Voldsund Smidig 2011

Automatisert testprioritering I denne lyntalen skal vi snakke om automatisert testprioritering Vi tenker da på enhetstester, men kanskje enda mer relevant - (trege) integrasjonstester Vi tar for oss verktøy og teknikker som kan brukes for å få raskere feedback på testkjøringer

Problemet - Integrasjonstester Ett av problemene – og årsaken – til trege testkjøringer er trege integrasjonstester Det finnes forskjellige definisjoner på integrasjonstester, men ofte tar de gjerne lang tid å kjøre, kan ha avhengigheter til mange andre forskjellige systemer. Og dersom en integrasjonstest for eksempel bruker databaser eller konsumerer webtjenester, så kan ting begynne å ta lang tid. I tillegg har OFTE integrasjonstester større potensiale for å feile, siden de kanskje skal integreres mot andre systemer som vi selv ikke har kontroll over. http://github.com/sveinung

Problemet - Store test suites Når I tillegg prosjektet øker I omfang, og test suites blir store, og bestående av både enhets-tester, integrasjonstester, systemtester, og kanskje en del andre typer tester DA …. kan ting begynne å ta lang tid tid. For å illustrere problemet, og forklare hva vi ønsker å oppnå, så skal vi ta et enkelt eksempel http://github.com/sveinung

Her har vi et sett med tester http://github.com/sveinung

En av dissa testane inneheld en feil Som utviklere flest så er jeg lat. Jeg er utolmodig, og ønsker ikke å vente flere minutter for så å finne ut at feilen kom sist i testkjøringen. Dersom der er en feilende test, vil jeg gjerne vite det med en gang, slik at jeg kjapt kan gå i gang med å rette opp feilen. Det er vel de aller fleste enig i? Kanskje spesielt de som har søtte på et prosjekt som har pågått i årevis, og har fått en saftig kodebase med masse tester. Dersom vi hadde hatt en måte å rangere testene på, etter kor stor sannsynlighet dei har for å inneholde feil http://github.com/sveinung

1 2 3 4 … Jo da kunne vi fått den feilende testen til å kjøre først, På den måten hadde jeg fått raskere feedback, og kommet raskere tilbake til arbeidet, og vi unngår mange problem. http://github.com/sveinung

Kontekstbytte & Effektivitet Som for eksempel kontekstbytte Når man prøver å løse et problem, er det en fordel å beholde den mentale konteksten gjennom hele prosessen, sånn at man slipp å sette seg inn i problemet om og om igjen, som følge av avbrudd undervegs. En naturlig følge av kontekstbyttet er også at man blir mindre effektiv. http://github.com/sveinung

Og vi taper tid og penger vi kunne brukt på andre og bedre ting. Så ka kan vi gjer for å løse ditte problemet? Ej trur Sveinung her har et godt forslag… http://github.com/sveinung

Løsning Manuell Bruke verktøy testprioritering Det stemmer det Øyvind… For å mitigere disse problemene, kan vi gjere som følgende: Me kanprioritere testene manuelt --- f.eks ved å gruppere treige tester og kjappe tester kvar for seg (noko som i og for seg er ofte praktisert, f.eks ved å kjøre integrasjonstester for seg selv vha. Byggeverktøy som Maven) Ei anna løsning er å bruke et verktøy for å generere prioriterte testkjøringer “on-the-fly” http://github.com/sveinung

Verktøy JUnit Max 1. Power Law Distribution 2. Recent Failures For å effektivisere testkjøringer, finnes det hovedsaklig – iallefall som vi vet om – to verktøy. Junit Max som er utviklet av Kent Beck og Pritest som er utviklet av oss. Junit max er en komersiell plugin til Eclipse som prioriterer etter to faktorer: [TRYKK] Power law distribution: Kjører mange kjappe tester først, og de få treige til slutt, for å kunne få så mykje av feedbacken så tidlig som mogleg. Recent Failures: Tester som nylig har feilet, har større sannsynlighet for å feile igjen, enn tester som har kjørt grønt i lange tider. 2. Recent Failures http://github.com/sveinung

Og støtter i dag testrammeverket Junit Pritest – Hva er det? Maven plugin Junit Friprog (github) Pritest er først og fremst et system for å automatisk prioritere testane dine For øyeblikket skjer dette gjennom å kjøre testane via Maven – pluginnen blir konfigurert via pom-xml (og man velger prioriteringsteknikk) Men det er ikkje noko i vegen for å utvide støtta til andre byggeverktøy Og støtter i dag testrammeverket Junit Pritest ligger fritt tilgjengelig på github (adresse nederst til venstre på slide) http://github.com/sveinung

Prioriteringsteknikker Prioritering etter: Nylige kodeendringer Historikk fra tidligere testkjøringer Metodedekning Vi vil no ta for oss tre av teknikkane for prioritering vi har implementert i Pritest: Nylige kodeendinger Historikk fra tidligere testkjøringer OG Metodedekning http://github.com/sveinung

en endring som nettopp er gjort i koden. Nylige kodeendringer Prioriterer tester som hører til nylig endret kode Git status Den første teknikken baserer seg på at feil som oppstår, som oftest oppstår som følge av en endring som nettopp er gjort i koden. Me har implementert dette ved hjelp av Git, der tester som tilhører enten nylig tillagt kode eller modifisert kode, blir kjørt først. http://github.com/sveinung

Historikk fra tidligere testkjøringer Sorterer synkende etter antall tidligere feilinger Hver testkjøring oppdaterer en lokal database med resultater Den neste teknikken går ut i frå at tester som har vist en historisk tendens til å feile, har et større sannsyn for å feile igjen, enn tester som aldri før har feilet. Denne teknikken krever naturligvis at testresultater blir lagret for ettertida. http://github.com/sveinung

Metodedekning Prioriterer synkende etter antall dekte metoder Utviklet av Gregg Rothermel Den siste teknikken går ut i frå at tester som berører mykje av koden, har større sannsyn for å oppdage feil enn tester som berører mindre deler av koden. Teknikken prioriterer tester etter antall metodekall som er blir utført i testen. Algoritmen bak teknikken er tidligere utviklet av en amerikansk forsker som heiter Gregg Rothermel. http://github.com/sveinung

Om me då skal samanlikna dei to verktøya: Til sammenligning JUnit Max Pritest 1. Kommersielt 1. Friprog 2. Kent Beck 2. To apekattar Om me då skal samanlikna dei to verktøya: Max er kommersielt, kostar vel 100 dollar årlig, medan Pritest er fri programvare og “free as in beer” Max har sjølvaste Kent Beck bak seg, medan Pritest må klara seg med to jypplingar Og til sist: Max er ein Eclipse-plugin medan Pritest er for øyeblikket retta mot maven (dog med store planar om å erobra nytt territorium) 3. Eclipse-plugin 3. Maven-plugin http://github.com/sveinung

http://github.com/sveinung Fremtiden Produksjonssette! Generalisere Plugin for IDEA / Eclipse Nye prioriteringsteknikker Første pri for fremtida er å få produksjonssatt! Pritest er for øyeblikket ikkje kome til versjon 1.0 og kodebasen er ustabil. Prioriteringsteknikkane fungerer i stor grad som dei skal, men grunna andre begrensingar er nytten endå lita. Generalisere: støtte flere testrammeverk og VCS Vi ønsker også å lage plugins for IDEA og Eclipse Me har og planar om å legge til nye og meir effektive prioriteringsteknikker http://github.com/sveinung http://github.com/sveinung

Sveinung Dalatun & Øyvind Voldsund Konsulenter 41552866 / 92446948 sveinung.dalatun@bekk.no oyvind.voldsund@bekk.no