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.
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
Comment le travail se déroule
- 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.
- 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.
- 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.
- 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
| Ce que fait la plateforme, ce que fait un humain | Qui fait quoi | Notes |
|---|---|---|
| Lire tout le code et construire le graphe d'appels | Plateforme | Y compris le dialecte que plus personne ne supporte et le fichier généré depuis 2009. |
| Trouver le code mort | Plateforme | Atteignabilité statique, plus les traces de production quand vous pouvez nous en donner une période. |
| Traduire un module | Plateforme | La 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ègle | Ingénieur | Le 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 deux | La 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ées | Les deux | Les lignes qui n'ont jamais été à l'équilibre dans l'ancienne base ne le sont pas davantage dans la nouvelle. |
| Bascule et retour arrière | Ingénieur | Les 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é.
Dix minutes si vous avez les réponses sous la main. Vous pouvez l'envoyer avant d'avoir décidé quoi que ce soit.