Code reviews: de voordelen en aandachtspunten op een rij

Met peer code reviews controleren leden van een developmentteam elkaars werk. Zo is er meer kennisdeling binnen het team en neemt de kwaliteit van de oplossing toe. In dit artikel kijkt Floris naar de belangrijkste voordelen en de aandachtspunten van code reviews.

Wat zijn peer code reviews?

Tijdens een peer review bekijkt iemand het werk van een directe collega. Het doel is om kennisdeling en de kwaliteit van de oplossing te vergroten. Bij softwareteams gaat het specifiek om de broncode van een (web)applicatie. Het proces verloopt meestal als volgt:

  • Developer A schrijft nieuwe code of wijzigt bestaande code.
  • Developer A slaat de code op in een aparte branch in het versiebeheersysteem (Git, Subversion, etc) en geeft aan dat de code gereviewed kan worden middel een pull request.
  • Een willekeurige collega, in dit geval Developer B, bekijkt de door A gemaakte oplossing.
    • Als Developer B verbeterpunten ziet, dan retourneert hij de code inclusief zijn of haar opmerkingen aan Developer A. Die gaat er vervolgens mee aan de slag. Zodra hij of zij klaar is, slaat hij de code weer op in het versiebeheersysteem en zal Developer B de code opnieuw bekijken.
    • Als er geen verbeterpunten meer zijn, dan voegt Developer B de code toe aan de juiste branch in het versiebeheersysteem (meestal de ‘master branch’). De code is dan opgenomen in de applicatie.

Naast peer code reviews bestaan er ook andere soorten reviews zoals die door externe specialisten. In dit artikel kijk ik alleen naar reviews door directe collega’s.

"Als developer B verbeterpunten ziet, dan retourneert hij de code inclusief zijn of haar opmerkingen aan developer A."

De voordelen van code reviews

Code reviews leveren drie belangrijke voordelen op: kennisdeling binnen het team, afname van het aantal bugs en toename van wat ik de “secundaire kwaliteit” noem.

Het eerste grote pluspunt van reviews is dat de kennisdeling binnen het developmentteam toeneemt. Door de nieuwe of gewijzigde code van een collega te bekijken en controleren blijft diegene die de review uitvoert op de hoogte van de veranderingen in het systeem. Hij of zij is daardoor met een groter deel van de totale broncode bekend dan anders het geval zou zijn. Door de reviews evenredig onder elkaar te verdelen, wordt voorkomen dat kennis van specifieke onderdelen slechts bij één persoon aanwezig is. En het bekijken van het werk van een ander is vrijwel altijd leerzaam.

 

"Het eerste grote pluspunt van reviews is dat de kennisdeling binnen het developmentteam toeneemt."

Een ander voordeel van code reviews is dat het aantal fouten afneemt. Het principe is eigenlijk heel eenvoudig: twee paar ogen zien nu eenmaal meer dan één. De reviewer bekijkt de code vanuit zijn eigen perceptie van het kennisdomein en de technische oplossing, en zal daardoor bugs kunnen identificeren die de oorspronkelijke auteur over het hoofd heeft gezien. Bovendien zit de kennis van de oplossing nog fris in het geheugen, waardoor het verhelpen van bugs sneller en gemakkelijker is dan als de fouten pas enkele weken, maanden of zelfs jaren later gevonden worden.

Het derde voordeel van code reviews is dat de secundaire kwaliteit toeneemt. Daarmee bedoel ik dat code doorgaans netter, beter gedocumenteerd, grondiger getest, beter gestructureerd en beter onderhoudbaar is. Dat heeft er mee te maken dat mensen nu eenmaal (veelal onbewust) netter werk opleveren als ze weten dat een ander er actief naar gaat kijken. Dit wordt ook wel het “Ego Effect” genoemd.

"Het principe is eenvoudig: twee paar ogen zien nu eenmaal meer dan één."

Aandachtspunten

Het introduceren van code reviews in een development team lijkt gemakkelijk, maar in de praktijk is er een behoorlijk aantal valkuilen. Uit onze eigen ervaringen en die van andere teams hebben we de volgende aandachtspunten op een rij gezet:

  • Stel zeker dat het team code reviews ziet als een positieve manier om van elkaar te leren. De auteur van de code kan immers iets leren van de reviewer, maar de reviewer kan ook iets leren van het werk van de auteur. Als de teamleden de reviews niet als een kans om te leren maar enkel als een verplicht controlemechanisme zien, dan ontstaat er tegenzin en verliezen de reviews een deel van hun kracht.
  • Leg de focus van de review op of de code het juiste resultaat geeft en aansluit bij de architectuur van de applicatie – en niet op of de code precies jouw oplossingsrichting volgt. Bij veel ontwikkelteams ontaarden code reviews in discussies die feitelijk neerkomen op persoonlijke voorkeuren. Dat zou niet het geval mogen zijn. Discussies over bijvoorbeeld de stijl van programmeren of de beste architectuur zijn nuttig, maar dienen op andere momenten plaats te vinden.
  • Benoem niet alleen fouten, maar zeker ook goede punten. Het geven, maar ook het ontvangen van kritiek, vraagt om serieuze sociale vaardigheden. Door niet alleen te kijken naar wat beter kan maar ook wat juist goed is, versterkt de samenwerking tussen de teamleden en krijgen reviews een positieve lading.
Sprinten naar succes

Een introductie tot het ontwikkelen van succesvolle webapplicaties en mobiele apps.

Download e-book
  • Wees niet te kort door de bocht. Wat voor de reviewer zo duidelijk is dat hij of zij slechts een paar uitroeptekens als commentaar geeft (“!!!”), kan bij de oorspronkelijke auteur van de code heel anders overkomen. Zonder meteen ellenlange verhalen te schrijven is het belangrijk om je commentaar altijd (kort) toe te lichten.
  • Geef alleen commentaar als het nodig is. Niemand houdt ervan om over futiliteiten te discussiëren. Mocht je toch een opmerking willen maken waarvan je weet dat het om een kleinigheid gaat, geef dat expliciet aan, bijvoorbeeld door te beginnen met “Nit:” (van het Engelse ‘nitpicking’). Maar accepteer in dat geval ook als de ander besluit om die specifieke feedback niet te verwerken.
  • Laat alle teamleden deelnemen aan het reviewproces. Developers van alle niveau’s, van stagiaires tot senioren, moeten in willekeurige volgorde elkaars werk bekijken. Zo maximaliseer je de kennisdeling en leren de teamleden het meest van elkaar. Bovendien vermindert het de kans op het bekritiseren van futiliteiten, want.. “what goes around, comes around”.
"Geef alleen commentaar als het nodig is. Niemand houdt ervan om over futiliteiten te discussiëren."
  • Code reviews moeten binnen een zo kort mogelijke tijd gestart worden. Wanneer je code indient voor review, dan wil je immers niet pas dagen later feedback krijgen, want dan ben je vermoedelijk alweer met hele andere dingen bezig. Dat betekent echter niet dat een teamlid zijn of haar werk uit handen moet laten vallen om als een bezetene jouw code te bekijken. Maar over het algemeen zijn er meerdere momenten per dag waarop een teamlid tijd heeft om het eigen werk even te laten rusten en de code review uit te voeren.
  • Werk altijd in tweetallen. Eén stukje code moet door één andere developer gereviewed worden, niet door meerdere. Anders krijgt de oorspronkelijke auteur met de inzichten van meerdere personen te maken en dat leidt al snel tot ongewilde discussies.
  • Gebruik een tool als GitHub voor het reviewen van de code. Met dit soort tools is het erg gemakkelijk om op specifieke onderdelen van de code feedback te geven en daar vervolgens opvolging aan te geven. Dat wil overigens niet zeggen dat het bespreken van de review niet face-to-face kan plaatsvinden. Zeker als het commentaar wat ingrijpender is, dan is het aan te raden om even samen achter het scherm te kruipen en de opmerkingen door te spreken. Het is dus belangrijk om daar met elkaar de juiste balans in te vinden.
  • Kijk niet alleen naar de geproduceerde applicatiecode, maar ook naar (de aanwezigheid van) tests en documentatie.
"Gebruik een tool als GitHub voor het reviewen van de code."

Conclusie

Zoals gezegd, code reviews zijn een heel geschikt om kennisdeling binnen het team te bevorderen en de kwaliteit van de oplossing te bewaken. Maar bovenal is het een middel om met elkaar te communiceren over dat waar je samen aan werkt. Nagenoeg elke échte professional waardeert eerlijke, beargumenteerde en open feedback en code reviews kunnen hier een belangrijke rol in spelen.

p.s. Werk je voornamelijk alleen en heb je daardoor niet de luxe van code reviews? Kijk dan een week later naar de code die je hebt geschreven. De ervaring leert dat je na die periode wat meer op afstand van de inhoud staat en zelf gemakkelijker eventuele onvolkomenheden in je eigen werk kunt identificeren.

Wil je meer weten over code reviews? Dit zijn twee goede artikelen om mee te beginnen:

Joshua en David overleggen
Het ideale Scrum team

Hoe ziet de samenstelling van het perfecte Scrum ontwikkelteam eruit?

Lees het artikel
Meer weten?

Op onze blog publiceren we regelmatig artikelen over software development en Scrum.

Meer artikelen