Zum Inhalt springen

Systeme neu geschrieben

Softwaremodernisierung: VB6, Delphi, PHP und ColdFusion nach Go

PHP 5.6, VB6, Delphi, ColdFusion, Classic ASP, Perl, Oracle Forms, ein Java-Monolith auf einem Server, den niemand neu zu starten wagt. Wir schreiben sie Modul für Modul nach Go, Rust und TypeScript um, während das alte System weiter den Produktivbetrieb trägt, und ein Paritätsprüfstand vergleicht alt gegen neu auf Ihrem eigenen aufgezeichneten Verkehr. Dreißig Tage für ein System von rund einer Million Zeilen, in Phasen, nach denen Sie aufhören können.

Angebot anfordernVier Bildschirme zu Stack, Schmerz und Termin. Ein Entwickler antwortet, meist noch am selben Tag.

30 Tage für rund eine Million Zeilen, aufgeteilt in Phasen


Die Klartext-Ablage ist durchgestrichen, weil ein Teil jedes Legacy-Systems gelöscht statt portiert wird, und das ist meist die billigste Arbeit im Projekt.

Heute

Vier Laufzeitumgebungen, zwei davon ohne Support, und eine Dateiablage, die keiner ansehen will.

  • app.phpPHP 5.6
  • legacy.dllVB6
  • reports.cfmColdFusion
  • crystal reportsunsupported
  • ftp-dropplaintext

Nach der Umstellung

Go für Kern und Auswertung, TypeScript vorne, eine Übergabe, die unterschrieben ist.

  • coreGo
  • reportingGo · read replica
  • webTypeScript
  • transferSFTP · signed

30 Tage für rund eine Million Zeilen, aufgeteilt in Phasen

Die Klartext-Ablage ist durchgestrichen, weil ein Teil jedes Legacy-Systems gelöscht statt portiert wird, und das ist meist die billigste Arbeit im Projekt.

Wie die Arbeit läuft

Umgestellt wird erst, wenn das neue Modul auf Ihrem eigenen Verkehr dieselbe Ausgabe erzeugt hat wie das alte.
  1. 01Tag 1–4

    Kartieren

    Aufrufgraph, geplante Jobs, externe Schnittstellen und eine gemessene Liste dessen, was tot ist. Schätzungen gehen schief, weil jemand Zeilen gezählt hat, statt herauszufinden, welche davon noch ausgeführt werden.

  2. 02Tag 3–9

    Die Naht einziehen

    Eine Grenze, durch die der Verkehr läuft, damit alte und neue Implementierung nebeneinander laufen und verglichen werden können. Für Benutzer ändert sich in diesem Schritt nichts.

  3. 03der Großteil des Projekts

    Modul für Modul portieren

    Jedes Modul geht hinter die Naht, wird gegen aufgezeichneten Produktivverkehr abgespielt und nimmt echten Verkehr, sobald die Ausgaben übereinstimmen. Fehler eingeschlossen, denn welche davon behoben werden, ist ein eigenes Gespräch mit dem Fachbereich.

  4. 043–7 Tage je Teilsystem

    Abschalten

    Alter Code gelöscht, Lizenzen gekündigt, Server aus. Eine Migration, die das alte System laufen lässt, hat verdoppelt, was Sie pflegen, statt fertig zu werden.

Was die Plattform macht, was ein Mensch macht

Übersetzen ist Maschinenarbeit, und wir machen sie in Maschinentempo. Was der Code bedeuten soll, ist die Stelle, an der unsere Entwickler ihr Geld verdienen.
Maschinelle Übersetzung ohne Prüfung erzeugt Code, zu dem sich niemand bekennt. Jedes Modul geht durch einen Menschen, bevor es Verkehr nimmt.
Was die Plattform macht, was ein Mensch machtWer macht wasAnmerkungen
Die ganze Codebasis lesen und den Aufrufgraphen bauenPlattformAuch den Dialekt, den niemand unterstützt, und die Datei, die seit 2009 generiert wird.
Toten Code findenPlattformStatische Erreichbarkeit, dazu Produktiv-Traces, wenn Sie uns einen Zeitraum davon geben können.
Ein Modul übersetzenPlattformDer erste Durchgang ist Maschinenausgabe, wird als Pull Request geprüft und von Hand neu geschrieben, wo ein Prüfer ihm nicht folgen kann.
Entscheiden, was Fehler ist und was RegelEntwicklerDas System rundet seit zwölf Jahren gleich, und jemand weiter hinten hat darauf gebaut.
Der ParitätsprüfstandGemeinsamAufzeichnen und Abspielen sind unsere Arbeit. Welche Abweichungen zulässig sind, unterschreibt Ihre Seite.
Datenmigration und AbgleichGemeinsamDie Zeilen, die in der alten Datenbank nie aufgingen, gehen in der neuen auch nicht auf.
Umstellung und RückwegEntwicklerTermine, Bereitschaft und der Punkt, an dem wir uns einig sind zurückzugehen.

Was wir schon umgezogen haben

Dutzende Migrationen und über zehn Jahre in Legacy-Code. VB6- und Delphi-Clients in den Browser, Classic ASP und ColdFusion nach Go, PHP-4- und PHP-5-Monolithen in typisierte Services, Perl-Cronjobs und PL/SQL-Pakete in Services mit Tests darauf, Oracle Forms ins Web, Java aus der Zeit vor Maven in etwas, das ein neuer Kollege am ersten Morgen bauen kann. Ihren Dialekt haben unsere Entwickler schon getroffen, auch die Teile davon, die nie jemand aufgeschrieben hat.


Die erste Phase ist klein genug, um eine Prüfung von uns zu sein: ein Modul durch die Naht, gegen Ihren eigenen Verkehr abgespielt, mit dem Abweichungsbericht vor Ihnen. Sie sehen unsere Arbeitsweise zum Preis einer Phase statt zum Preis eines Jahres.

Fragen, die Entwickler uns stellen

Können wir während des Neuschreibens weiter Features liefern?
Ja, und das ist der Hauptgrund, warum es länger dauert als ein Neubau auf der grünen Wiese. Feature-Arbeit geht in die alten Module, bis jedes portiert ist, und der Paritätsprüfstand fängt die, die sich unter uns geändert haben.
Warum nicht refaktorieren, was wir haben?
Manchmal ist das die richtige Antwort, und Sie hören sie im ersten Gespräch. Für ein Neuschreiben spricht es, wenn die Laufzeitumgebung aus dem Support ist, die Toolchain nur auf einer Maschine existiert oder Sie niemanden mehr einstellen können, der das anfasst. Wir machen beide Arten von Arbeit, die Antwort ist also keine Verkaufsposition.
Was, wenn wir auf halber Strecke aufhören?
Dann bleibt ein System, das zum Teil Go ist und zum Teil das, was Sie hatten, mit einer dokumentierten Grenze dazwischen. In diesem Zustand kann man leben, und manche Kunden sitzen dort ein Jahr, bis Budget frei wird.
Erzeugt maschinelle Übersetzung Code, den wir annehmen würden?
Zeile für Zeile übersetzt nicht, deshalb liefern wir das nicht aus. Jedes Modul wird in idiomatischem Go neu erzeugt, wie jeder Pull Request geprüft und von Hand umgeschrieben, wenn der Prüfer ihm nicht folgen kann. Sie dürfen das erste Modul selbst prüfen, bevor wir weitermachen.
Wie schätzen Sie das?
Aus gemessenen Modulgrößen, Kopplung und dem Anteil des erreichbaren Codes. Die Analyse gibt Ihnen in drei bis fünf Tagen eine Spanne, einen Phasenplan und Preise dazu.

Fangen Sie mit einem Modul an

Eine grobe Beschreibung reicht für den Anfang: was das System ist, wie groß und was den Termin erzwingt. Zurück kommt ein Phasenplan, und die erste Phase ist klein genug, um sie ohne Gremium freizugeben.

Angebot anfordern

Zehn Minuten, wenn Sie die Antworten parat haben. Sie können es abschicken, bevor Sie irgendetwas entschieden haben.