Code reviews: tijdverlies of onmisbare stap?

Bobby Bouwmann
Bobby Bouwmann

17 augustus 2020

Binnen Enrise wordt een aantal processen gehanteerd om de kwaliteit van de code onverminderd hoog te houden. Een van de belangrijkste is: code reviews. Dankzij een constante loop van feedback tussen ontwikkelaars houden deze elkaar scherp. Naast de kwalitatieve overwegingen zorgen code reviews ook voor automatische kennisdeling binnen het team. Dit biedt vele voordelen voor het ontwikkelproces en de kwaliteit voor de langere termijn van het project.

Wat zijn code reviews?

Een code review is in de basis: het controleren van de code die geschreven is door een andere developer. Fouten maken is tenslotte menselijk. Zo ook in code. Naast automatische code checks, die door verschillende libraries worden uitgevoerd, kijkt ook een developer van vlees en bloed mee. Deze collega neemt de code handmatig door om te controleren of deze onregelmatigheden bevatten. Dit proces noemen we een code review.

Waar let je op bij een code review?

Bij het reviewen van code komen vaak vele vragen naar boven. Gelukkig hebben wij daar veel ervaring mee en volgen we een vast stramien om dit proces zo efficiënt mogelijk te laten verlopen. We stellen onszelf de volgende vragen:

  • Zijn er duidelijke logische fouten in de code?
  • Zijn alle cases volledig geïmplementeerd, kijkend naar de vereisten van het ticket?
  • Zijn de nieuwe geautomatiseerde tests voldoende voor de nieuwe code? Missen er nog rand gevallen in de testen?
  • Voldoet de nieuwe code aan de bestaande stijl richtlijnen?
  • Slaagt de build die de code-stijl controleert en alle testen draait?

Fouten maken is tenslotte menselijk. Zo ook in code.

Naast het stellen van deze logische vragen leggen we eveneens de nadruk op een dieper niveau van de code. Denk hierbij aan bepaalde codestructuren (design patterns) en de complexiteit van de code. Code moet begrijpelijk te zijn voor derden. Een vraag die ik mezelf ter controle altijd graag stel is: “Snap ik deze code over zes maanden nog steeds?”. Op basis van de antwoorden op deze vraag kun je een realistische inschatting maken of de code leesbaar en onderhoudbaar blijft tijdens het project.

Bij een code review is het essentieel dat ook daadwerkelijk de code wordt gereviewd. En dus niet de ontwikkelaar van de code. Tijdens het reviewen is een kritische blik noodzakelijk, maar het is verstandig dit op een correcte manier te doen. Het is constructief om bij een code review aan te geven hoe je het eventueel anders zou aanpakken of een moment pakken om samen met je collega een andere oplossing te vinden. Positieve feedback is natuurlijk ook altijd welkom. Voorbeelden van vragen die je kan stellen zijn; “Heb je met dit of dit scenario rekening gehouden?” of “Wat nou als er X of Y gebeurt?” Je vangt tenslotte meer vliegen met stroop dan azijn.

Voordelen van een code review

Tijdens het development proces biedt een goed uitgevoerde code review veel voordelen. Het development proces verloopt sneller, er vindt meer kennisdeling plaats en de kwaliteit van de code gaat zienderogen vooruit. Ik zal hieronder een poging wagen om deze voordelen dieper uit te lichten:

Een vraag die ik mezelf ter controle altijd graag stel is: “Snap ik deze code over zes maanden nog steeds?”.

Automatische kennisoverdracht

Omdat de code wordt gecontroleerd door een (of meerdere) andere developers vindt er automatische kennisoverdracht plaats. Elke nieuwe feature die wordt ontwikkeld of elke bug die wordt gefixt is onder ogen gekomen en beoordeeld door meerdere developers. Dit zorgt ervoor dat soortgelijke features voortaan sneller gebouwd kunnen worden. Voor bugs betekent dit dat ze in de toekomst mogelijk voorkomen kunnen worden of in ieder geval sneller worden herkend. De kennisoverdracht zorgt voor stabiliteit in het development team. Het resultaat is dat teams beter in staat zijn om nieuw werk op te pakken omdat niemand de zogeheten  ‘bus factor’ heeft.

Voor junior developers is een code review ook erg waardevol. Je leert een hoop van andere developer alleen al met het observeren van hun code. Daarnaast vliegen de relevante vragen over tafel, aangezien de reviewer van de code precies moet begrijpen wat er veranderd is. Dit zorgt ervoor dat er kritisch naar de code wordt gekeken. En de code eventueel kan worden aangepast voordat deze te complex en ondoordringbaar is geworden. 

Consistentie in code

We leven in een tijd waarin bijna alles geautomatiseerd kan worden. Voorbeelden zijn het draaien van alle testen, maar ook het oplossing van code style problemen. Dit zorgt ervoor dat de code automatisch voldoet aan bepaalde richtlijnen. Maar niet alle code kan altijd binnen deze richtlijnen vallen. De code reviews zorgen ervoor dat de ongelijkheden er ook handmatig uitgehaald kunnen worden. 

Zet twee mensen bij elkaar en vraag ze hetzelfde te programmeren. Je zult gegarandeerd twee verschillende implementaties krijgen. De code reviews zorgen ervoor dat het hele team in dezelfde richting qua implementatie denkt. Dit is ideaal wanneer een nieuwe persoon bij het project aanhaakt, aangezien deze richtlijnen ervoor hebben gezorgd dat de code consistent is. 

Betere inschattingen

Wanneer er nieuwe functies aan de bestaande code worden toegevoegd, kan de oorspronkelijke ontwikkelaar goed aangeven waar de knelpunten zitten en een inschatting geven. Doordat er tijdens code reviews meerdere developers naar de oude code hebben gekeken, hebben ook zij nu kennis van de knelpunten, complexiteit en het domein. Hierdoor heb je van meerdere ontwikkelaars een sterker, betrouwbaardere en realistischere inschatting.

Let op: Code reviews kosten tijd

Natuurlijk, een code review kost extra tijd. Maar op de langere termijn levert het vele voordelen. De code reviews zorgen ervoor dat mogelijke bugs in een vroeg stadium gevonden worden, dat er extra testen worden geschreven voor edge cases en dat de code van hogere kwaliteit is. 

Daarnaast zorgen code reviews voor een stimulans: elke developer wil zijn of haar code extra goed opleveren wanneer een collega deze code nakijkt en er feedback op geeft. Er wordt een extra inspanning gedaan om er voor te zorgen dat alle testen slagen, de code er leesbaar uitziet en deze toekomstbestendig is qua ontwerp, wat weer zorgt voor soepel verloop van de code review. Het volledige ontwikkelproces zal hier wel bij varen.

In bovenstaande video vertellen mijn collega’s meer over het ontwikkelproces in ons team. Wil je meer weten over hoe we bij Enrise elke dag nadenken over het verbeteren van code? Of heb je vragen over ons ontwikkelproces? Bel, chat of mail ons! We vertellen je er graag meer over.