Ir al contenido

reescritura de sistemas

Modernización de aplicaciones legacy: VB6, Delphi, PHP y ColdFusion a Go

PHP 5.6, VB6, Delphi, ColdFusion, ASP clásico, Perl, Oracle Forms, un monolito Java en un servidor que nadie se atreve a reiniciar. Los reescribimos módulo a módulo en Go, Rust y TypeScript mientras el sistema viejo sigue sirviendo producción, y un banco de paridad compara viejo contra nuevo sobre su propio tráfico grabado. Treinta días para un sistema de alrededor de un millón de líneas, en fases, y puede parar al final de cualquiera de ellas.

Pedir presupuestoCuatro pantallas sobre el stack, el dolor y el plazo. Contesta un ingeniero, normalmente el mismo día.

30 días para un sistema de alrededor de un millón de líneas, partido en fases


El buzón en texto plano está tachado porque parte de cualquier sistema legacy se borra en vez de portarse, y suele ser el trabajo más barato del proyecto.

Hoy

Cuatro runtimes, dos de ellos fuera de soporte, y un buzón de ficheros que nadie quiere mirar.

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

Después del cambio

Go para el núcleo y el camino de informes, TypeScript delante, transferencias firmadas.

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

30 días para un sistema de alrededor de un millón de líneas, partido en fases

El buzón en texto plano está tachado porque parte de cualquier sistema legacy se borra en vez de portarse, y suele ser el trabajo más barato del proyecto.

Cómo va el trabajo

Nada se cambia hasta que el módulo nuevo ha dado la misma salida que el viejo sobre su propio tráfico.
  1. 01días 1–4

    Mapearlo

    Grafo de llamadas, tareas programadas, interfaces externas y una lista medida de lo que está muerto. Los presupuestos fallan porque alguien contó líneas en vez de averiguar cuáles se siguen ejecutando.

  2. 02días 3–9

    Poner la costura

    Una frontera por la que pasa el tráfico, para que la implementación vieja y la nueva corran una al lado de la otra y se comparen. En este paso no cambia nada visible para el usuario.

  3. 03el grueso del proyecto

    Portar módulo a módulo

    Cada módulo sale detrás de la costura, se repite contra tráfico de producción grabado y toma tráfico real cuando las salidas coinciden. Con los errores incluidos, porque cuáles arreglar es otra conversación, con el negocio.

  4. 043–7 días por subsistema

    Dar de baja

    Código viejo borrado, licencias canceladas, servidores apagados. Una migración que deja el sistema viejo encendido ha duplicado lo que usted mantiene en lugar de terminar.

Qué hace la plataforma y qué hace una persona

Traducir es trabajo de máquina y lo hacemos a velocidad de máquina. Qué se supone que significa el código es donde nuestros ingenieros se ganan el sueldo.
La traducción automática sin revisión produce código que nadie va a querer mantener. Cada módulo pasa por una persona antes de tomar tráfico.
Qué hace la plataforma y qué hace una personaQuién hace quéNotas
Leer toda la base de código y construir el grafo de llamadasPlataformaIncluido el dialecto que ya no soporta nadie y el fichero que se genera desde 2009.
Encontrar código muertoPlataformaAlcanzabilidad estática, más trazas de producción cuando puedan darnos un periodo de ellas.
Traducir un móduloPlataformaLa primera pasada es salida de máquina, revisada como una merge request y reescrita a mano donde un revisor no la sigue.
Decidir qué comportamiento es un error y cuál es una reglaIngenieroEl sistema redondea igual desde hace doce años y alguien aguas abajo ha construido encima.
El banco de paridadLos dosLa captura y la repetición son nuestras. Qué diferencias son aceptables lo firma su lado.
Migración y conciliación de datosLos dosLas filas que nunca cuadraron en la base vieja tampoco cuadran en la nueva.
Cambio y vuelta atrásIngenieroLas fechas, la guardia y el punto en el que acordamos volver.

Lo que ya hemos movido

Decenas de migraciones y más de diez años dentro de código legacy. Clientes de VB6 y Delphi llevados al navegador, ASP clásico y ColdFusion a Go, monolitos de PHP 4 y 5 a servicios tipados, scripts de Perl en cron y paquetes PL/SQL a servicios con pruebas encima, Oracle Forms a la web, Java anterior a Maven convertido en algo sobre lo que un recién llegado compila su primera mañana. Nuestros ingenieros ya se han encontrado con su dialecto, incluidas las partes que nadie escribió.


La primera fase es lo bastante pequeña como para ser una prueba sobre nosotros: un módulo a través de la costura, repetido contra su propio tráfico, con el informe de diferencias delante. Ve cómo trabajamos por el precio de una fase y no de un año.

Preguntas que nos hacen los ingenieros

¿Podemos seguir sacando funcionalidad durante la reescritura?
Sí, y es la razón principal de que esto tarde más que una reescritura desde cero. El trabajo de funcionalidad va a los módulos viejos hasta que cada uno se porta, y el banco de paridad pilla los que han cambiado por debajo.
¿Por qué no refactorizar lo que tenemos?
A veces es la respuesta correcta y la oirá en la primera llamada. La reescritura gana cuando el runtime está fuera de soporte, la cadena de herramientas solo existe en una máquina o ya no consigue contratar a nadie que lo toque. Hacemos los dos tipos de trabajo, así que la respuesta no es una postura comercial.
¿Y si paramos a mitad de camino?
Se queda con un sistema medio en Go y medio como estaba, con una frontera documentada entre los dos. Es un estado real en el que vivir, y algunos clientes se quedan ahí un año mientras se libera presupuesto.
¿La traducción automática produce código que aceptaríamos?
Línea a línea, no, y por eso no la entregamos. Cada módulo se regenera en Go idiomático, se revisa como cualquier merge request y se reescribe a mano cuando el revisor no lo sigue. Puede revisar el primer módulo usted mismo antes de que sigamos.
¿Cómo estiman esto?
A partir de tamaños de módulo medidos, del acoplamiento y de cuánto código es alcanzable. La auditoría le da un rango, un plan por fases y precios al lado en tres a cinco días.

Empiece por un módulo

Con una descripción aproximada basta para empezar: qué es el sistema, cómo de grande y qué está forzando la fecha. Le devolvemos un plan por fases, y la primera es lo bastante pequeña como para aprobarla sin pasar por un comité.

Pedir presupuesto

Diez minutos si tiene las respuestas a mano. Puede mandarlo antes de haber decidido nada.