{"id":3193,"date":"2014-07-25T16:20:45","date_gmt":"2014-07-25T15:20:45","guid":{"rendered":"http:\/\/www.traineebloggen.se\/?p=3193"},"modified":"2014-12-09T11:38:20","modified_gmt":"2014-12-09T10:38:20","slug":"debugging","status":"publish","type":"post","link":"https:\/\/www.traineebloggen.se\/index.php\/2014\/07\/trainee\/debugging\/","title":{"rendered":"Debugging"},"content":{"rendered":"<p style=\"text-align: left\">Hej!<\/p>\n<p style=\"text-align: left\">I det h\u00e4r inl\u00e4gget har jag t\u00e4nkt beskriva hur man s\u00f6ker fel i kod, s\u00e5 kallad debugging. Att vara bra p\u00e5 att hitta den kodsnutt som orsakar en bugg \u00e4r till stor nytta f\u00f6r utvecklare, det \u00e4r sv\u00e5rt att fixa en bugg utan att ha hittat rotorsaken till att ens system beter sig felaktigt. Med en sund strategi f\u00f6r debugging g\u00e5r processen betydligt smidigare! V\u00e4rt att n\u00e4mna \u00e4r att jag och de flesta andra p\u00e5 Cinnober anv\u00e4nder utvecklingsmilj\u00f6n Eclipse s\u00e5 inl\u00e4gget \u00e4r \u00e4ven det baserat p\u00e5 Eclipse verktyg f\u00f6r debugging.<\/p>\n<p style=\"text-align: left\">Som utvecklare hoppar man in strax efter att en bugg blivit inrapporterad. Efter att ha l\u00e4st in sig i buggrapporten har man r\u00e4tt bra koll p\u00e5 hur man orsakar buggen. Det f\u00f6rsta jag brukar g\u00f6ra \u00e4r att en f\u00f6rsta g\u00e5ng f\u00f6rs\u00f6ka \u00e5terskapa felet. D\u00e5 jag v\u00e4l har lyckats och f\u00e5tt st\u00f6rre f\u00f6rst\u00e5else f\u00f6r vad som g\u00e5r fel tar jag ett steg tillbaka och funderar lite, kan jag skriva ett automatiskt test som provocerar fram den h\u00e4r buggen? Med ett autotest redo kan man snabbt g\u00f6ra \u00e4ndringar och se ifall de gav r\u00e4tt resultat s\u00e5 ifall jag kan anv\u00e4nda mig att ett s\u00e5nt skriver jag det alltid. Det l\u00f6nar sig i l\u00e4ngden, speciellt med tanke p\u00e5 att testet \u00e4r kvar \u00e4ven efter att du fixat buggen och ser till att du f\u00e5r veta om den \u00e5terv\u00e4nder.<\/p>\n<p style=\"text-align: left\">D\u00e5 jag v\u00e4l har ett test jag kan k\u00f6ra f\u00f6r att provocera fram buggen \u00e4r det dags att leta efter orsaken. I m\u00e5nga fall har man en aning om var man ska b\u00f6rja, man kan exempelvis ha tillg\u00e5ng till en <a title=\"Stack Trace Wikipedia\" href=\"http:\/\/en.wikipedia.org\/wiki\/Stack_trace\">stack trace<\/a>\u00a0 som pekar p\u00e5 ett st\u00e4lle d\u00e4r n\u00e5got g\u00e5tt fel i programkoden eller att man helt enkelt har koll p\u00e5 ett l\u00e4mpligt omr\u00e5de att b\u00f6rja s\u00f6ka. Om buggen exempelvis handlar om att ett loggmeddelande skrivs ut p\u00e5 fel s\u00e4tt \u00e4r det inte helt f\u00f6rv\u00e5nande en bra id\u00e9 att kika i koden som g\u00f6r loggningen innan man letar n\u00e5gon annanstans.<\/p>\n<p style=\"text-align: left\">Efter att ha hittat r\u00e4tt st\u00e4lle att kika p\u00e5 b\u00f6rjar man s\u00e4tta in n\u00e5gra brytpunkter p\u00e5 l\u00e4mpliga st\u00e4llen, k\u00f6r sitt test och stegar igenom koden i jakt p\u00e5 skumma beteenden. Hittar man ingenting f\u00e5r man bredda sin s\u00f6kning och forts\u00e4tta. Om det g\u00e5r tr\u00f6gt \u00e4r det aldrig fel att ta en paus och ventilera sina frustrationer vid kaffebryggaren eller ta en kort promenad runt huset, s\u00e5 sm\u00e5ningom ger \u00e4ven de tr\u00f6gsta buggarna med sig. \ud83d\ude42<\/p>\n<p style=\"text-align: left\">F\u00f6r att visa ett lite mer praktiskt exempel kan vi t\u00e4nka oss detta. Vi har ett lotteriprogram som drar en vinnare utifr\u00e5n en lista med registrerade konton. Just nu finns det bara tv\u00e5 testare som finkammar systemet efter buggar, S. Hibe och J. Wise. Vi ska precis testk\u00f6ra lottdragningen d\u00e5 vi f\u00e5r buggrapport fr\u00e5n Wise, pengar verkar ha f\u00f6rsvunnit fr\u00e5n hans konto! Mystiskt. Eftersom att Wise \u00e4r precis som sitt efternamn har han beskrivit vad han gjorde precis innan pengarna f\u00f6rsvann i en testbeskrivning, han var i f\u00e4rd med att s\u00e4tta in mer pengar p\u00e5 sitt konto.<\/p>\n<p style=\"text-align: left\">Vi b\u00f6rjar med att skriva tv\u00e5 tester som uppdaterar kontobalansen.<\/p>\n<p style=\"text-align: left\"><a href=\"http:\/\/www.traineebloggen.se\/wp-content\/uploads\/traineebloggen\/2014\/07\/DepositTests.png\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-3194 aligncenter\" src=\"http:\/\/www.traineebloggen.se\/wp-content\/uploads\/traineebloggen\/2014\/07\/DepositTests.png\" alt=\"DepositTests\" width=\"515\" height=\"191\" \/><\/a><\/p>\n<p style=\"text-align: left\">Vi k\u00f6r b\u00e5da testerna och ser att inget utav dem g\u00e5r igenom, problemet \u00e4r allts\u00e5 inte begr\u00e4nsat till specifika konton utan \u00e4r av ett bredare slag.<\/p>\n<p style=\"text-align: left\"><a href=\"http:\/\/www.traineebloggen.se\/wp-content\/uploads\/traineebloggen\/2014\/07\/failedTests.png\"><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-3195 aligncenter\" src=\"http:\/\/www.traineebloggen.se\/wp-content\/uploads\/traineebloggen\/2014\/07\/failedTests.png\" alt=\"failedTests\" width=\"335\" height=\"337\" \/><\/a><\/p>\n<p style=\"text-align: left\">I n\u00e4sta steg vill vi kika p\u00e5 vad som h\u00e4nder i koden d\u00e5 den k\u00f6rs s\u00e5 vi s\u00e4tter ut en brytpunkt i b\u00f6rjan utav metoden depositToAccount i klassen f\u00f6r kontohantering.<\/p>\n<p style=\"text-align: left\"><a href=\"http:\/\/www.traineebloggen.se\/wp-content\/uploads\/traineebloggen\/2014\/07\/breakpoint.png\"><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-3196 aligncenter\" src=\"http:\/\/www.traineebloggen.se\/wp-content\/uploads\/traineebloggen\/2014\/07\/breakpoint.png\" alt=\"breakpoint\" width=\"527\" height=\"65\" \/><\/a><\/p>\n<p style=\"text-align: left\">D\u00e4refter vill vi k\u00f6ra v\u00e5rt test i debug-l\u00e4ge och stega igenom depositToAccount rad f\u00f6r rad samtidigt som vi h\u00e5ller koll p\u00e5 vilka v\u00e4rden de olika variablerna har. Efter inladdning har Hibes konto 1000000 i kontobalans, vilket kan ses i variabelf\u00f6nstret. Testet vill nu l\u00e4gga till 1234 till kontobalansen.<\/p>\n<p style=\"text-align: left\"><a href=\"http:\/\/www.traineebloggen.se\/wp-content\/uploads\/traineebloggen\/2014\/07\/variabler.png\"><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-3197 aligncenter\" src=\"http:\/\/www.traineebloggen.se\/wp-content\/uploads\/traineebloggen\/2014\/07\/variabler.png\" alt=\"variabler\" width=\"473\" height=\"325\" \/><\/a><\/p>\n<p style=\"text-align: left\">Vi stegar p\u00e5 och uppt\u00e4cker utan problem den kodrad som orsakar felet, det visar sig att vi har gl\u00f6mt t\u00e4nka p\u00e5 att ta med den tidigare kontobalansen d\u00e5 vi skriver in ins\u00e4ttningar. \u00c4r kontobalansen noll \u00e4r det inga problem men f\u00f6ljande ins\u00e4ttningar blir felaktiga.<\/p>\n<p style=\"text-align: left\"><img decoding=\"async\" loading=\"lazy\" class=\" wp-image-3212 aligncenter\" src=\"http:\/\/www.traineebloggen.se\/wp-content\/uploads\/traineebloggen\/2014\/07\/bugFoundVertical1.png\" alt=\"bugFoundVertical\" width=\"512\" height=\"443\" \/><\/p>\n<p style=\"text-align: left\">Vi fixar till kodraden och p\u00e5minner oss att t\u00e4cka in fler testfall med\u00a0 enhetstester fram\u00f6ver, det \u00e4r trots allt r\u00e4tt pinsamt ifall n\u00e5got liknande skulle h\u00e4nda med en kund ist\u00e4llet f\u00f6r att en testare uppt\u00e4cker det!<\/p>\n<p style=\"text-align: left\">Det h\u00e4r \u00e4r s\u00e5klart bara en kort introduktion och troligtvis n\u00e5got som de flesta som skrivit kod redan \u00e4r bekanta med. Just hur sv\u00e5rt det \u00e4r att hitta felorsaken beror till stor del p\u00e5 hur stort systemet du debuggar \u00e4r och hur bra kunskap du sj\u00e4lv har om det. I vissa fall kan buggen bara \u00e5terskapas i v\u00e4ldigt specifika f\u00f6rh\u00e5llanden eller timingf\u00f6nster vilket kan vara extra jobbigt att arbeta med. Det viktiga \u00e4r att ha t\u00e5lamod!<\/p>\n<p style=\"text-align: left\">Nu \u00e4r det dags f\u00f6r helg, ha det bra!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hej! I det h\u00e4r inl\u00e4gget har jag t\u00e4nkt beskriva hur man s\u00f6ker fel i kod, s\u00e5 kallad debugging. Att vara bra p\u00e5 att hitta den kodsnutt som orsakar en bugg \u00e4r till stor nytta f\u00f6r utvecklare, det \u00e4r sv\u00e5rt att fixa en bugg utan att ha hittat rotorsaken till att ens system beter sig felaktigt. [&hellip;]<\/p>\n","protected":false},"author":79,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[394],"tags":[395,410,187,30],"_links":{"self":[{"href":"https:\/\/www.traineebloggen.se\/index.php\/wp-json\/wp\/v2\/posts\/3193"}],"collection":[{"href":"https:\/\/www.traineebloggen.se\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.traineebloggen.se\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.traineebloggen.se\/index.php\/wp-json\/wp\/v2\/users\/79"}],"replies":[{"embeddable":true,"href":"https:\/\/www.traineebloggen.se\/index.php\/wp-json\/wp\/v2\/comments?post=3193"}],"version-history":[{"count":5,"href":"https:\/\/www.traineebloggen.se\/index.php\/wp-json\/wp\/v2\/posts\/3193\/revisions"}],"predecessor-version":[{"id":3220,"href":"https:\/\/www.traineebloggen.se\/index.php\/wp-json\/wp\/v2\/posts\/3193\/revisions\/3220"}],"wp:attachment":[{"href":"https:\/\/www.traineebloggen.se\/index.php\/wp-json\/wp\/v2\/media?parent=3193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.traineebloggen.se\/index.php\/wp-json\/wp\/v2\/categories?post=3193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.traineebloggen.se\/index.php\/wp-json\/wp\/v2\/tags?post=3193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}