Om het landelijke treinverkeer in goede banen te leiden, gebruikt ProRail een systeem genaamd PRL, wat staat voor Procesleiding Rijwegen. Deze applicatie draait op OpenVMS en wordt onderhouden en ontwikkeld door InTraffic. Maar ProRail heeft besloten per 2020 OpenVMS te verlaten, omdat de kritische massa ontbreekt en kennis en kunde verdwijnt. Om de continuïteit te waarborgen wordt daarom PRL gemigreerd van OpenVMS naar Linux. Alleen kan PRL niet in de huidige vorm naar Linux, omdat PRL is ontwikkeld in DEC Pascal en dat draait niet op Linux.

Wil je ook meewerken aan projecten bij InTraffic? Solliciteer dan direct!

Daarom is besloten PRL eerst te converteren naar C++. Het gaat alleen wel om 1,3 miljoen regels code en die zet je niet zomaar even om. Daarnaast moet de nieuwe code zich exact hetzelfde gedragen als de oude code. Want het rijden van de treinen, de keuze van sporen en de stand van wissels hangen ervan af. Een verstoring kan het treinverkeer ernstig ontregelen en voor je het weet worden er Kamervragen gesteld, want ProRail ligt op dit moment onder een vergrootglas. Hoe pak je dat aan als projectteam?

Converter

Er is geen beginnen aan om 1,3 miljoen regels aan Pascal-code handmatig om te zetten naar C++. InTraffic heeft een externe partij daarom opdracht gegeven een converter te bouwen. "Vervolgens zijn we begonnen met het testen van de eerste conversieresultaten van de converter", vertelt Huib Leusink, Technisch Tester bij InTraffic. "Door eerst een eenvoudig deel van PRL grondig te testen, krijg je goed inzicht in de kwaliteit van de converter en op welke punten deze verbeterd moet worden. Daarna test je steeds meer en complexere delen van PRL, net zolang tot alle conversieregels foutloos werken." Werkt de converter eenmaal foutloos, dan kun je je volledig concentreren op het testen van de functionaliteit. "Op dat punt zijn we nu aangekomen."

Automatische tests

Essentieel in het project is dat de code één op één geconverteerd wordt, omdat het gedrag hetzelfde moet blijven. Het systeem wordt gefaseerd omgezet. Oude en nieuwe delen moeten naadloos op elkaar aansluiten. De informatie die ze uitwisselen moet binair hetzelfde blijven en dat is nog een hele uitdaging.

Testen kan natuurlijk niet op een live omgeving. "Wij gebruiken een testsysteem om de actuele staat van de buitenwereld, bijvoorbeeld de positie van treinen en standen van wissels, te simuleren", vertelt Huib. "De tests voeren wij geautomatiseerd uit via een zelfontwikkeld test framework genaamd ATF, Automatic Test Framework. Hiermee kunnen wij wissels omzetten, berichten naar PRL sturen, het resultaat opvangen en vervolgens de input en output op juistheid controleren. Automatisering zorgt voor een hoge efficiëntie en reproduceerbaarheid. En het kan ook 's nachts draaien, waardoor we tijdwinst boeken."

Debugsessies

Het team dat zich bezig houdt met dit omvangrijke project bestaat onder andere uit een aantal ontwikkelaars en testers. De ontwikkelaars zorgen ervoor dat bestaande code en geconverteerde code goed op elkaar aansluiten. En ze voeren reviews uit om te zien of de nieuwe code leesbaar, onderhoudbaar en aanpasbaar is en of aan de codeerstandaarden is voldaan. Hierbij wordt onder andere de tool FlexeLint ingezet, omdat het meer en uitgebreidere waarschuwingen laat zien dan de compiler zelf.

De testers werken niet alleen met automatische testen, maar voeren ook handmatige testen zoals debugsessies uit. Huib: "Door de code visueel te doorlopen en te kijken wat er gebeurt, kan ik uitzonderingssituaties testen. Door variabelen en condities handmatig te zetten, kan ik bepaalde code dan alsnog activeren om te zien wat er gebeurt. Als tester zou ik alleen kijken naar wat erin gaat en wat eruit komt. Mijn rol als Technisch Tester is uitgebreider, ik kijk door de debugsessies ook naar wat er onder water gebeurt."

Bijzonder werk

Twee bijzondere aspecten aan het project zijn dat het om complex technisch werk gaat en er geen nieuwe functionaliteit wordt gebouwd. "Dit is geen doorsnee ontwikkelproject," benadrukt Huib. "De hele applicatie verandert in technische zin, maar de code moet exact blijven doen wat het al deed. Je doet enorm veel programmeerkennis op en wordt zeer ervaren in het lezen van code. Het werk verveelt mij nooit en ik leer elke dag weer nieuwe dingen. Heel bijzonder is dat de gebruikers niets van mijn werk zien of merken. Alles speelt zich af onder het oppervlak. Ze krijgen iets compleet nieuws, maar zien toch geen veranderingen aan de buitenkant. Door mee te werken aan dit project, lever ik er een bijdrage aan dat ProRail tot in de verre toekomst gebruik kan blijven maken van PRL."