© StonePictures/Shutterstock.com
Von VB6 direkt zur Browser-App

Zwei Schritte vor und keinen zurück


Eine Visual-Basic-Anwendung mag ausgereift sein und ihren Dienst noch funktional erfüllen, sie ist technisch und in Bezug auf die Benutzeroberfläche dennoch eine Altlast. Der Autor zeigt einen neuen, werkzeugbasierten Ansatz zur Anwendungsmodernisierung, der mit einem hohen Automatisierungsanteil eine effiziente Alternative zum Neuschreiben bietet. Im dargestellten Kundenprojekt wurden so sechzehn Anwendungen mit zwei Millionen Lines of Code von Visual Basic (VB) direkt in eine moderne Browser-App transformiert.

Wer heute funktional ausgereifte Anwendungen am Markt anbietet, hat mit der Entwicklung meist zu einer Zeit begonnen, als Werkzeuge wie der Gupta Team Developer oder Visual Basic (VB5 oder VB6) als fortschrittliche Technologien galten. Heute bereiten diese Plattformen jedoch zunehmend Probleme: Die Herstellerunterstützung hat nachgelassen oder ist längst aufgekündigt, Softwareentwickler dafür lassen sich kaum noch finden und von einem Einsatz unter Windows 10, im Browser oder in der Cloud können die Anwender oft nur träumen.

Genau das waren auch die Problempunkte, aufgrund derer ein nordamerikanischer Anbieter von Software für den öffentlichen Dienst das Unternehmen des Autors kontaktiert hat: Insgesamt 16 VB6-Anwendungen waren bei über 400 Kunden erfolgreich im Einsatz. Darunter waren Programme für die Aufstellung des Haushaltsplans, die Organisation der Fahrzeugzulassung und die Abrechnung der Grundsteuer zu finden. Die Einschränkungen der alten Plattform hatten sich jedoch zu einem so massiven Hemmschuh für die Nutzerakzeptanz und den technischen Support entwickelt, dass der Vertrieb an Neukunden nahezu zum Erliegen gekommen war. Und bei einem Umfang von zwei Millionen Lines of Code war an Neuschreiben nicht zu denken.

Zukunftschance statt Altlast

Ein Befreiungsschlag aus dieser misslichen Situation konnte nur gelingen, indem zwei Schritte auf einmal unternommen wurden: Die Systemgrundlage musste vom altem VB6 auf aktuelles .NET umgestellt werden. Zugleich musste die Benutzeroberfläche von Windows in eine flexible Browser-App verlegt werden, die auch die Ausführung auf Nicht-Windows-Plattformen und mobilen Geräten ermöglichte. Zusätzlich galt es, in dieses ohnehin schon massive Migrationsprojekt eine externe Webagentur einzubinden, die ein grundlegendes Redesign der Anwendungsoberfläche erstellen sollte. Die vielfältigen Herausforderungen sollten durch den Einsatz spezialisierter Migrationswerkzeuge in einem klar strukturierten Phasenmodell angegangen werden.

Phase 1 – von VB6 nach .NET

Zunächst galt es, den in die Jahre gekommenen VB6-Code nach .NET zu portieren. Für diesen Projektschritt konnte auf den vbPORTER zurückgegriffen werden. Das ist ein Migrationswerkzeug, das sonst auch für isolierte Portierungen nach WinForms eingesetzt wird (Abb. 1). Vordergründig ging es dabei um eine Sprachtransformation, bei der die verwendeten Syntaxelemente von VB6 in ihre C#-Entsprechung umgesetzt werden. Das reichte vom Ersetzen der Operatoren AND und OR durch & und | bis zu komplexen Anpassungen wie beispielsweise der Deklaration von Variablen durch Instanziierung statt durch DIM (Dimension). Eine Übersetzung nach VB.NET wird vom Werkzeug ebenfalls unterstützt, kam aber in diesem Projekt nicht zum Einsatz.

glomm_anwendungsmodernisierung_1.tif_fmt1.jpgAbb. 1: Portierung von VB6 nach WinForms mit dem vbPORTER

Konzepte, die unter .NET nicht mehr wie von VB6 gewohnt vorhanden sind, stellt eine Bibliothek namens fecherFoundation zur Verfügung. In ihr finden sich Komponenten mit entsprechender Signatur und Funktionsumfang, auf die der vbPORTER zurückgreifen kann. So implementiert die Library beispielsweise das beliebte Recordset aus RDO (Remote Data Objects):

public class FCRecordset : DataTable, IFCDataTable

Auf dieser Grundlage muss der vbPORTER nicht den gesamten Source Code umbauen, sondern kann einfach die Vorkommen von Recordset durch FCRecordset ersetzen. Ähnliches gilt auch für die visuellen Komponenten aus VB6, die ebenfalls auf die grundlegend anderen .NET-Konzepte umgestellt werden müssen. Auch hier helfen entsprechende Klassen aus der fecherFoundation, wie etwa FCButton (basierend auf System.Windows.Forms.Button), FCForm (basierend auf System.Windows.Forms.Form) und viele mehr. Die VB6-Controls wurden also nicht direkt in ihre .NET-Äquivalente überführt, sondern in fecherFoundation-Implementierungen. Diese setzen ihrerseits auf den Standard-.NET-Controls auf. Dabei macht es keinen Unterschied, ob es sich um simple Push-Buttons und Textboxen oder komplexe Third Party Controls handelt. Auf diese Weise bleibt der erzeugte Code übersichtlich und der volle Funktionalitätsumfang der VB6-Controls auch in der .NET-Welt ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang