Legacy Code

reengineren of migreren?

Delphi Migreren

Er zijn verschillende aanpakken bekend om Delphi code te migreren5. (vrij naar John Brant et al.):

  • handmatig herontwerp
  • one-shot transformatie tool
  • regel-gebaseerde transformatie

Handmatig herontwerp

De meestvoorkomende aanpak is het handmatig herschrijven. Vaak wordt dan een compleet herontwerp gedaan. Deze aanpak heeft de volgende problemen

  • de hoeveelheid werk die gedaan moet worden is niet veel kleiner dan bij de oorspronkelijke ontwikkeling van de software. Het bestaand systeem fungeert als een executeerbare specificatie, maar het nieuwe systeem heeft over het algemeen een andere architectuur.
  • tijdens het herschrijven is de capaciteit van het team om wijzigingen aan te brengen in de software verminderd. Iedere wijziging moet expliciet gemanaged worden om goed in beide systemen terecht te komen.
  • het schrijven van de nieuwe software leidt tot een vergelijkbaar aantal fouten als er bij het schrijven van de originele software gemaakt zijn.

Een gevolg is dat veel van deze projecten simpelweg falen.

One-shot transformatie tool

Er zijn voor Delphi tools in de handel die en simpele transformatie van de syntax en de meest voorkomende types naar C# kunnen doen. De initiële conversie wordt daarmee gedaan en vervolgens wordt er handmatig voor gezorgd dat de code werkt.

Ook dit leidt tot een stop in ontwikkeling tot het systeem weer werkt. Over het algemeen is deze aanpak sneller dan een volledig handmatige. Het grote probleem met deze aanpak is het gebrek aan feedback. Als er een probleem is met de conversie moet of de transformatie nog een keer gebeuren, waarbij de handmatige wijzigingen verloren gaan, of moeten de wijzigingen handmatig worden doorgevoerd. Hoe later in het proces, hoe moeilijker het wordt om de wijziging te automatiseren.

Regel gebaseerde transformatie

Bij een regel-gebaseerde transformatie wordt een set aan vertaal regels opgebouwd dat de code converteert. Door alleen de vertaalregels te bewerken, en iedere keer de transformatie opnieuw uit te voeren, wordt geleidelijk aan een steeds betere vertaling gemaakt. John Brant et al. hebben met deze methode succesvol een systeem van zo'n 1.5 millioen regels Delphi code gemigreerd naar C#.

Het bouwen van een regel is niet zo snel als het direct programmeren van code, maar het heeft diverse voordelen:

  • de ontwikkeling van de originele code kan gewoon blijven doorgaan en is onafhankelijk van de regels
  • de regel kan iedere keer weer op de nieuwste versie van de code worden toegepast (bijvoorbeeld in de daily build)
  • de regel kan in één keer op het hele project worden toegepast. Een probleem dat op één plaats wordt opgelost wordt vaak op nog onbekende plekken ook opgelost.