Varför enhetstesta – anledning 1

images7Inlägg i denna serie, ”Anledningar att enhetstesta”:

Anledning 1 – Dokumentationseffekten

Anledning 2 – Säkerhetsbälteseffekten

Anledning 3 – Designeffekten


Jag tänkte köra en serie inlägg med fokus på anledningar till att enhetstesta. Jag kommer att köra dem utan inbördes ordning – alltså utan någon sorts prioritering dem emellan. Delvis för att jag inte är 100% säker på vilket argument som är det viktigaste. Det finns, som jag upplever det, många anledningar! Gissar på ett inlägg i veckan, vi får se hur snabbt det går.

Så här kommer en anledningen idag; det blir den dokumenterande effekt enhetstester har.

Om man jobbar på ett projekt tillsammans med några kollegor, eller för den delen tittar på sin egen kod från några månader sedan, händer det att man tar sig för pannan och undrar ”Hur fungerar nu den här klassen/funktionen igen?”. Exempelvis kan jag ställa mig frågor i stil med dessa:

nintendo-lego-video-game-01

  • ”Kan jag skicka in null för parametern secondaryPoly eller klarar inte funktionen av det? Måste jag skapa en tom poly då i min situation?”
  • ”Är det meningen att jag ska lägga till alla A-punkter först och sedan alla B-punkter i gridden? Kan jag blanda?”
  • ”Kan jag använda Compute() och sedan lägga till några A:n, för att sedan kunna använda Compute() igen?”
  • ”Kommer metoden att krascha om jag skickar in ett negativt tal, eller bara returnera 0?”

Den typen av frågor – om hur det är tänkt att en funktion eller ett objekt ska fungera – tillhör egentligen dess dokumentation. Men som van programmerare vet jag väldigt väl hur sällan dokumentation kommer på plats – och hur lite jag litar på dokumentation som finns (den blir så snabbt gammal pga ändringar i kodbasen!). Ofta är inte heller dokumentationen heltäckande (så kallade edge cases beskrivs inte, utan bara huvudfunktionen).

Utan enhetstester, finns det två vägar – störa sin kollega (om det inte är min egen kod!) – eller läsa igenom hur koden fungerar genom att titta under huven – läsa källkoden direkt. Och om man frågar en kollega är det inte alltid man får 100% pålitliga svar – de har inte allt i huvudet, lika lite som jag.

Med enhetstester finns det en tredje väg. Du kan kolla direkt på hur koden är tänkt att fungera genom att läsa igenom enhetstesterna!

För att få lite smak för detta argument, jämför hur du förstår klassen ”Countdown” genom att både läsa dess kod och dess enhetstester. Observera att detta är en väldigt liten klass – och med en större klass blir den dokumenterande effekten än viktigare såklart!

Countdown.cs (klasskod)

CountdownFixture.cs (enhetstester)

Taggar: , , , ,

16 kommentarer till Varför enhetstesta – anledning 1

  1. mikaelf skriver:

    Hej!
    hur har du löst det med blogg.se och wp-taggar? Skriver du manuellt in blogg.se-taggarna eller har du fixat så att dom tas från dina wp-taggar automatiskt? Jag letar en smidig lösning så jag inte behöver skriva in taggarna två gånger.

    Mikael

  2. Olof Bjarnason skriver:

    Hej mikaelf!

    Jag skriver först wp-taggarna, trycker Ctrl+A Ctrl+C innan jag ”ok:ar” dem så jag har samma klump i clipboard, ok:ar, därefter kör jag bookmarklet-scriptet (har det som bookmark lättillgängligt) från bloggar.se (eller om det var nyligen.se man hittade det på..) och Ctrl+V:ar och får upp taggarna som jag kan klistra i in sedan.

    Det hade kunnat vara smidigare, men på detta sätt slipper jag åtminstone skriva taggarna två gånger!

  3. mikaelf skriver:

    Okej! Jag har helt struntat i bloggar.se ett tag men funderar på att börja igen. Det genererade rätt mycket trafik. Jag ska nog skriva om page.php eller nått sånt så att länkarna görs automagiskt. Nu när 2.7 släppts är ju ett utmärkt tillfälle.

  4. Josef skriver:

    Trevligt – jag vet inte varför men jag tänkte precis på enhetstestande nyligen med:)

  5. Olof Bjarnason skriver:

    Kul Josef …

    Det är faktiskt riktigt skoj med enhetstestande. Det är som en ny värld öppnar sig inom programmeringen!

  6. Josef skriver:

    Lattjade med mbunit 3 idag – det verkar kraftfullt – Nunit på steroider. Får se om det håller i längden dock. Har du kört det och kan rekommendera?

  7. Olof Bjarnason skriver:

    Det jag kört med allra mest är NUnit. Hur jämför sig mbunit med NUnit?

    Det jag gillar med NUnit är dess enkelhet – man behöver inte ens installera det, räcker med att packa upp en .zip-fil. Syntaxen är OK och lätt att läsa – något jag tycker är viktigt.

  8. Mia* skriver:

    Aha. Du skriver om sådant som intresserar mig!🙂

    Jag har förresten alldeles precis äntligen köpt boken ”Pragmatic Unit Testing”, som jag velat ha ungefär hur länge som helst. Inte för att jag tror att jag behöver den, men det är en bok jag vill äga, Något du läst och har en åsikt om?

    Du åkte förresten rakt in i RSS-läsaren.🙂

  9. Olof Bjarnason skriver:

    Mia: välkommen hit!!

    Har inte läst den boken, dock är Pragmatic Programmer en bibel i min hylla. Det var den som fick mig in på hela mitt ”moderna spår” inom programmering. Den bara måste du ha om du inte har den redan.

    Rapportera gärna hur Pragmatic Unit Testing är sen! Har just köpt Kent Becks klassiker Test Driven Development: By Example och en joker ”User Stories Applied” .. båda verkar lovande.

  10. Mia* skriver:

    Japp, jag köpte även The Pragmatic Programmer, som jag tidigare läst i lånad form – det är en bok jag måste ha, tycker jag med. I övrigt ingick i samma batch även Pragmatic Version Control Using Subversion, GoFs Design patterns, Fowlers Refactoring. Pragmatic Unit Testing har förstås tillägget ”In Java With JUnit”. Design patterns och Refactoring har jag läst förut, i lånad form, men tyckte de var värda att äga. Hm. Det kan nog vara läge att knappa in en boklista någonstans på bloggen.

    Test driven development har jag sneglat på både en och två gånger – du får gärna berätta om både den och jokern!🙂

  11. Olof Bjarnason skriver:

    GoF är given – har haft den flera år och återkommer till den boken då och då. Refactoring är också en klassiker – mikrodesign.

    Boklista: bra idé!

    Jag lovar att återkomma med bokrecensioner av de två (TDD och joker) senare! De ser båda lovande ut. Önskar jag haft TDD-boken när jag lärde mig TDD!

  12. Mia* skriver:

    Kul! TDD-boken kanske är något jag kan skicka till mina kollegor i Bangalore.🙂 Efter att jag läst den själv, förstås.

  13. Mia* skriver:

    Jag stod förresten och kikade i min ouppackade flyttkartonger på jobbet – funderade på att ta hem mina böcker, för i kartongerna gör de ju ingen nytta och det verkar inte som om det kommer några hyllor eller hurtsar att packa upp sina pinaler till. RESTful Web Services och Beautiful Code t.ex.

  14. Olof Bjarnason skriver:

    Är Beautiful Code bra?

  15. Mia* skriver:

    Vissa kapitel är väldigt intressanta, andra är det inte ett dugg. Det blir kanske så när man snor ihop bitar från många olika författare – jag har svårt för pyttipanna-böcker p.g.a inkonsekvensen som uppstår. Beautiful Code är ingen ”måste ha”-bok, nej.

  16. +++pontus+++ skriver:

    hej+++
    behöver fusk till gta san andreas ps2

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s

%d bloggare gillar detta: