Reverse engineering is het proces van het onderzoeken of analyseren van een product, systeem of software om inzicht te krijgen in het ontwerp, de functionaliteit en de implementatiedetails. Dit wordt doorgaans gedaan door het product uit elkaar te halen of de documentatie te bestuderen en vervolgens achterwaarts te werken om te begrijpen hoe het is gemaakt of hoe het werkt.
In de context van software houdt reverse engineering vaak in dat een gecompileerd programma wordt gedecompileerd of ontmanteld, om daarmee inzicht te krijgen in de broncode of om informatie over algoritmes en datastructuren te extraheren. Dit kan nuttig zijn voor verschillende doeleinden, zoals het begrijpen van verouderde systemen, het vinden van kwetsbaarheden of het maken van interoperabele producten.
Vertaling op vertaling
Een grote onderneming gebruikte een standaardpakket, uiteraard aangevuld met het nodige maatwerk. Vanuit de business ontstond op een gegeven moment behoefte aan een financiële rapportage met data die in het bestaande systeem net even in een ander format waren opgeslagen.
Gelukkig beschikte de organisatie over een ervaren automatiseerder die begreep wat er nodig was en hoe hij dat voor elkaar kon krijgen. In de jaren daarna waren er meerdere malen aanpassingen nodig en ook dat kreeg de automatiseerder elke keer voor elkaar, zij het met telkens een beetje meer moeite.
Toen de automatiseerder uiteindelijk met pensioen ging, werd besloten om te stoppen met het stapelen van ‘vertaling op vertaling’ en te werken aan een nieuw systeem. De nieuwe oplossing moest wel hetzelfde resultaat opleveren, maar kon niet meer gebruikmaken van de oude structuur.
Stap voor stap ontrafelen
Met reverse engineering is stap voor stap uitgezocht wat het systeem precies deed om begrip te krijgen van hoe het proces werkelijk in elkaar stak. Daarbij kwam naar boven dat er hele blokken ‘dode software’ in het systeem zaten. Wat door herhaaldelijke aanpassingen en onvoldoende documentatie natuurlijk prima te verklaren was.
Het heeft bijna zes maanden geduurd om een nieuw systeem te bouwen dat hetzelfde opleverde (en dat had best nog langer kunnen duren). Daarbij moet worden aangetekend dat het nieuwe systeem aanmerkelijker sneller werkt, seconden in plaats van uren, en dat er minder gebruikersinteractie vereist is. De inspanning was dan ook zeker op z’n plaats.
Het zou echter beter zijn geweest als de kennis over en de structuur van de processen beter belegd was geweest. Deze manier van aanpassing op aanpassing leidt vaak sneller tot problemen dan we ons realiseren.