Refactoring: een technische onderhoudsbeurt
Het nieuwe jaar is een mooi moment om ‘refactoring’ te bespreken: een Engelse term voor het herstructureren van programmacode. Kort gezegd, een technische onderhoudsbeurt voor het verbeteren van de programmatuur.
Refactoring is het aanpassen van bestaande code, zonder dat daarbij extra functionaliteit wordt toegevoegd. Het doel ervan is het verbeteren van de programmacode.
Bij een project waaraan voor een langere tijd wordt gewerkt ontstaan nieuwe ideeën over de technische implementatie. Een enkele keer is, bij nader inzien, eerder geschreven code niet van voldoende kwaliteit, of zelfs incorrect. Refactoring stelt de ontwikkelaars in staat dit soort problemen op te lossen, zonder dat er gewerkt wordt aan nieuwe functies.
Hoe ontstaat suboptimale code?
Software-ontwikkeling is een proces dat resulteert in software, het is geen statisch traject waarbij code ten behoeve van end-user functionaliteit in één keer achter elkaar wordt opgeschreven. Een programmeur bouwt in meerdere cycli aan functionaliteit; stap voor stap wordt programmeercode geschreven en wordt de functionaliteit uitgebreid.
Een gevolg van dit ontwikkelprocess is dat (per stap) bedachte ideeën over de technische implementatie niet altijd juist blijken te zijn en dat er code aangepast dient te worden. Helaas kan dit niet altijd direct, en blijft er suboptimale code achter.
Daarnaast heeft niet iedere ontwikkelaar dezelfde kennis of voorkeuren. Veelal zijn er meerdere technische implementaties mogelijk om hetzelfde te bereiken. Grofweg identieke functionaliteit wordt daardoor op meerdere manieren geïmplementeerd, wat de consistentie in de code verslechtert.
Hoe ontstaan er nieuwe ideeën?
Een programmeur is een mens, en heeft niet altijd alle kennis paraat over een project, programmeertaal of framework. Natuurlijkerwijs ontstaan er na verloop van tijd nieuwe opvattingen over eerder geschreven - door jezelf en door anderen - code. Door het werken aan een ander project, het leren van nieuwe functies van een programmeertaal, het beter leren kennen van een framework, of door het updaten van een programmeertaal/framework ontstaat er nieuwe kennis en nieuwe mogelijkheden die eerder geschreven code ouderwets doen lijken.
Iedere programmeur in het wild, of programmeur gehouden op kantoor, zal een natuurlijke aandrang hebben om nieuwe kennis toe te passen op een bestaand project om de technische kwaliteit hiervan te verbeteren.
Wat is het voordeel van refactoren?
Omdat refactoren geen factureerbare functionaliteit oplevert is het nut van refactoren niet altijd duidelijk voor niet programmeurs. Echter biedt het enkele voordelen voor een project en het bedrijf.
Refactoring biedt de mogelijkheid een project up-to-date te brengen naar de op dat moment geldende technische standaarden. Het volgen van standaarden vereenvoudigt het inwerken van developers die onbekend zijn met het project, en het komt de snelheid van het ontwikkelen van nieuwe functionaliteit ten goede. Bovendien is up-to-date en gestandaardiseerde code gemakkelijker te hergebruiken. Geprogrammeerde functionaliteit kan eenvoudig (deels) hergebruikt worden bij een ander onderdeel van de website. Tevens verkleint het up-to-date houden van software en het volgen van standaarden beveiligingsrisico's.
Daarnaast komt het verwijderen van suboptimale code (vanzelfsprekend) de kwaliteit ten goede. De leesbaarheid van code kan worden verbeterd door het herstructureren van o.a. bestanden, classes en methodes, wat het voor een ontwikkelaar weer gemakkelijker maakt om te werken aan de code en nieuwe functionaliteit te ontwikkelen.
Het herstructureren of herschrijven van code kan ook de foutgevoeligheid van ontwikkeling verkleinen. Doordat code op een logischere plaats wordt ondergebracht of wordt samengevoegd met andere code, is de kans van vergeten van code bij het ontwikkelen van nieuwe functionaliteit kleiner. Dit leidt tot minder bugs.
Tevens vergroot refactoring het plezier van een developer in zijn werk. Refactoring is de grote schoonmaak van software-ontwikkeling. Het opschonen van oude code geeft een developer voldoening en houdt zijn/haar kennis op peil doordat theoretische kennis van nieuwe technische mogelijkheden in de praktijk kunnen worden toegepast.