Aller au contenu

modernisation applicative

Modernisation applicative : VB6, Delphi, PHP et ColdFusion vers Go

PHP 5.6, VB6, Delphi, ColdFusion, ASP classique, Perl, Oracle Forms, un monolithe Java sur un serveur que personne n'ose redémarrer. Nous les réécrivons module par module en Go, Rust et TypeScript pendant que l'ancien système sert la production, et un harnais de parité compare l'ancien et le nouveau sur votre propre trafic enregistré. Trente jours pour un système d'environ un million de lignes, en phases après lesquelles vous pouvez vous arrêter.

Obtenir un devisQuatre écrans sur la pile, la douleur et l'échéance. Un ingénieur répond, en général le jour même.

30 jours pour un système d'environ un million de lignes, découpé en phases


Le dépôt en clair est barré parce qu'une partie de tout système legacy se supprime au lieu de se porter, et c'est en général le travail le moins cher du projet.

Aujourd'hui

Quatre runtimes, deux hors support, et un dépôt de fichiers que personne ne veut regarder.

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

Après bascule

Go pour le cœur et le reporting, TypeScript devant, des transferts signés.

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

30 jours pour un système d'environ un million de lignes, découpé en phases

Le dépôt en clair est barré parce qu'une partie de tout système legacy se supprime au lieu de se porter, et c'est en général le travail le moins cher du projet.

Comment le travail se déroule

Rien ne bascule tant que le nouveau module n'a pas produit la même sortie que l'ancien sur votre propre trafic.
  1. 01jours 1–4

    Cartographier

    Graphe d'appels, tâches planifiées, interfaces externes, et une liste mesurée de ce qui est mort. Les estimations se trompent parce que quelqu'un a compté des lignes au lieu de chercher lesquelles s'exécutent encore.

  2. 02jours 3–9

    Poser la couture

    Une frontière par laquelle le trafic passe, pour que l'ancienne et la nouvelle implémentation tournent côte à côte et se comparent. Rien de visible pour l'utilisateur ne change à cette étape.

  3. 03l'essentiel du projet

    Porter module par module

    Chaque module part derrière la couture, se fait rejouer sur du trafic de production enregistré, et prend du trafic réel quand les sorties coïncident. Bugs compris, parce que lesquels corriger est une autre conversation, avec le métier.

  4. 043 à 7 jours par sous-système

    Décommissionner

    Ancien code supprimé, licences résiliées, serveurs éteints. Une migration qui laisse l'ancien système allumé a doublé ce que vous maintenez au lieu de finir.

Ce que fait la plateforme, ce que fait un humain

La traduction est un travail de machine et nous la faisons à la vitesse de la machine. Ce que le code est censé vouloir dire, c'est là que nos ingénieurs gagnent leur place.
Une traduction machine sans relecture produit du code que personne ne voudra porter. Chaque module passe par un humain avant de prendre du trafic.
Ce que fait la plateforme, ce que fait un humainQui fait quoiNotes
Lire tout le code et construire le graphe d'appelsPlateformeY compris le dialecte que plus personne ne supporte et le fichier généré depuis 2009.
Trouver le code mortPlateformeAtteignabilité statique, plus les traces de production quand vous pouvez nous en donner une période.
Traduire un modulePlateformeLa première passe est une sortie machine, relue comme une merge request et réécrite à la main là où un relecteur ne suit plus.
Décider quel comportement est un bug et lequel est une règleIngénieurLe système arrondit de la même façon depuis douze ans et quelqu'un en aval a construit dessus.
Le harnais de paritéLes deuxLa capture et le rejeu sont à nous. Quelles différences sont acceptables est une décision que votre côté signe.
Migration et rapprochement des donnéesLes deuxLes lignes qui n'ont jamais été à l'équilibre dans l'ancienne base ne le sont pas davantage dans la nouvelle.
Bascule et retour arrièreIngénieurLes dates, l'astreinte, et le point à partir duquel on convient de revenir en arrière.

Ce que nous avons déjà déplacé

Des dizaines de migrations et plus de dix ans dans du code legacy. Des clients VB6 et Delphi passés dans le navigateur, de l'ASP classique et du ColdFusion passés en Go, des monolithes PHP 4 et 5 devenus des services typés, des scripts Perl en cron et des paquets PL/SQL devenus des services avec des tests dessus, Oracle Forms mis sur le web, du Java antérieur à Maven rendu compilable par un nouvel arrivant dès sa première matinée. Nos ingénieurs ont déjà croisé votre dialecte, y compris les parties que personne n'a jamais documentées.


La première phase est assez petite pour servir de test sur nous : un module qui passe la couture, rejoué sur votre propre trafic, avec le rapport de différences devant vous. Vous voyez comment nous travaillons pour le prix d'une phase, pas d'une année.

Questions que nous posent les ingénieurs

Pouvons-nous continuer à livrer des fonctionnalités pendant la réécriture ?
Oui, et c'est la raison principale pour laquelle cela prend plus longtemps qu'une réécriture à partir de zéro. Le travail fonctionnel va dans les anciens modules jusqu'à ce que chacun soit porté, et le harnais de parité rattrape ceux qui ont changé sous nos pieds.
Pourquoi ne pas refactorer l'existant ?
Parfois c'est la bonne réponse, et vous l'entendrez dès le premier appel. La réécriture l'emporte quand le runtime est hors support, que la chaîne d'outils n'existe que sur une machine, ou que vous n'arrivez plus à recruter quelqu'un qui accepte d'y toucher. Nous faisons les deux métiers, donc la réponse n'est pas une position commerciale.
Et si nous nous arrêtons à mi-chemin ?
Il vous reste un système à moitié en Go, à moitié comme avant, avec une frontière documentée entre les deux. C'est un état réel où vivre, et certains clients y restent un an, le temps que le budget se libère.
La traduction machine produit-elle du code que nous accepterions ?
Une traduction ligne à ligne, non, et c'est pour cela que nous ne la livrons pas. Chaque module est régénéré en Go idiomatique, relu comme n'importe quelle merge request, et réécrit à la main quand le relecteur ne suit plus. Vous pouvez relire le premier module vous-mêmes avant que nous continuions.
Comment estimez-vous tout cela ?
À partir de tailles de modules mesurées, du couplage et de la part de code réellement atteignable. L'audit vous donne une fourchette, un plan par phases et les prix en face, en trois à cinq jours.

Commencez par un module

Une description approximative suffit : ce qu'est le système, sa taille, et ce qui impose la date. Vous recevez un plan par phases, et la première est assez petite pour être validée sans passer par un comité.

Obtenir un devis

Dix minutes si vous avez les réponses sous la main. Vous pouvez l'envoyer avant d'avoir décidé quoi que ce soit.