Även om statisk kodanalys är ett mycket effektivt sätt att tidigt identifiera defekter i koden automatiskt så uppstår den stora effekten när maskinens snabbhet kombineras med en människas intelligens, smak, kreativitet och kritiska tänkande. Medan statisk analys (se tidigare artikel om Statisk analys) använder verktyg som skannar och analyserar källkoden automatiskt är kodgranskning till stor del ett manuellt arbete.
Detta är den tredje artikel i en artikelserie med fyra delar som beskriver hur man kan införa en automatiserad test-pipeline och fokusera på de aktiviteter som kan göras så tidigt som möjligt i implementationsarbetet.
Vad är kodgranskning?
Målet med kodgranskning är att bedöma kvaliteten på ny eller modifierad kod för fel och avvikelser från kodningsregler och kvalitetsstandarder som fastställts av organisationen.
Kodgranskning bör inte bara bestå av ensidig feedback, där en person granskar en annans kod med målet att identifiera defekter och avvikelser från olika regler. Istället bör det vara en dialog med lika mycket fokus på kunskapsdelning, kompetensöverföring och ett sätt att öka hela teamets kodningsförmåga. Kodgranskningar leder till att förbättra teammedlemmars expertis. Eftersom en mer senior utvecklare vanligtvis utför granskningen kan en junior utvecklare använda den här feedbacken för att förbättra sin egen kodning.
Tänk på vilka minimikrav som skall vara uppfyllda för att be om en kodgranskning. Vanligtvis vill man att statisk analys är utförd och resultatet från den är bifogad den kodmängd som kommer att granskas. Man vill också ha tillhörande enhetstester färdiga, genomkörda med godkänt resultat och bifogade den kodmängd som kommer att granskas. (Mer om enhetstester i nästa artikel.)
Tänk också på hur feedback ska ges i kodgranskningsprocessen. Se till att markera de positiva aspekterna av koden samtidigt som förbättringar föreslås och förklaras. Den feedback som ges bör vara tillräckligt konstruktiv för att uppmuntra utvecklaren att förstå granskarens perspektiv och inleda en konversation ifall det behövs.
Kodgranskningsverktyg
När det gäller att hitta fel så slår ingenting en människas kritiska tänkande, intelligens och omdöme. Hur får man då in detta så tidigt som möjligt i en delivery pipeline och hur mycket kan automatiseras?
Ett kodgranskningsverktyg automatiserar processen för kodgranskning så att en granskare enbart fokuserar på koden. Verktyget integreras i en delivery pipeline för att initiera en kodgranskning innan ny kod checkas in huvudkodbasen (trunk/main line).
Du bör välja ett verktyg som är kompatibelt med din befintliga teknikstack för att sömlöst integrera det i ditt arbetsflöde. Om du till exempel använder Git för kodhantering, TravisCI för kontinuerlig integration, se till att du väljer ett verktyg som stöder dessa tekniker för att kunna passa in i utvecklingsprocessen.
Ifall du använder GitHub så har du redan ett inbyggt kodgranskningsverktyg (integrerat i pull requests). Här kan du hantera pull requests, analysera diffar, kommentera inline och kontrollera ändringshistoriken. Kodgranskningsverktyget låter dig också lösa enkla Git-konflikter via webbgränssnittet. GitHub-kodgranskningsverktyget är ett bra verktyg om du redan är på plattformen. Det kräver ingen ytterligare installation eller konfiguration.
Ett viktigt resultat av en kodgranskningsprocess är ökad effektivitet. Även om traditionell eller manuell hantering av kodgranskning har fungerat tidigare kan du förlora effektiviteten om du inte har ett kodgranskningsverktyg.
Parprogrammering
Man kan säga att parprogrammering är en kontinuerlig kodgranskningsprocess. Två utvecklare sitter vid samma dator, men bara en av dem kodar aktivt medan den andra ger feedback i realtid. I detta fall är naturligtvis ett extra kodgranskningssteg helt överflödigt.
Även om parprogrammering fungerar som ett bra verktyg för att inspektera ny kod, kompetensöverföra och utbilda utvecklare, kan det potentiellt visa sig vara ineffektivt på grund av dess tidskrävande natur. Denna process låser granskaren från att göra något annat produktivt arbete under perioden.
Sammanfattning
Precis som för statisk analys utgör kodgranskning en ”quality gate” och ökar tillförlitligheten för koden efter att det är passerat. Kodgranskning är enkel att integrera en sin delivery pipeline.
Och slutligen, precis som för statisk analys, är kanske den största fördelen pedagogisk: Kodgranskning tränar organisationen till att hålla hög standard på koden. Feedback och förslag på förbättringar tränar organisationen till att kontinuerligt bli bättre.