Reemplazo conductual
Un servicio bancario con 10 años en producción, sin código, sin documentación y sin sus autores. Lo entendimos experimento a experimento y lo reemplazamos. Responde igual, errores incluidos.
El log de experimentos
Cada cuadro es una línea de experimentos.jsonl: una hipótesis, el request que la pone a prueba y la respuesta del original. Repite el día para verlas en el orden en que se hicieron, o reordénalas por tema o por la respuesta que dio el original.
Método
La tubería de validación
El original valida en un orden fijo y responde con el primer error que encuentra. El reemplazo sigue el mismo orden. Elige un mensaje real del log y mira dónde se detiene.
El número de control
Cada mensaje termina en un número de control. Ajustando hipótesis contra el log llegamos a la fórmula: ISO 7064 mod 97-10, la misma idea que valida un IBAN. Las letras valen su posición (A=1 … Z=26), los dígitos valen ellos mismos y el resto se ignora.
Errores incluidos
Un cliente de 10 años puede depender de cualquiera de estas. El reemplazo las devuelve igual, y la spec las marca para que un sistema nuevo no las herede.
DEPOSITO;AC-0001;98765;20
→ 200 {"status":"recieved","operacionId":"OP-0001"}log 1253 · CD-01
ALTA;maria;85 → {"cuentaId":"AC-0001"}
CONSULTA;AC-0001;14 → {"cuenta_id":"AC-0001",…}log 1249 · CA-01 · RI-08
CONSULTA ;AC-0001;14
→ 400 {"error":"E301",
"mensaje":"comando desconocido␣",
"sugerencia":"CONSULTA"}log 1307 · ER-12
PING;64 → 200 {"pong":true}
PING;cualquier-cosa → 200 {"pong":true}log 4, 1274–1277 · CP-01
Cómo sabemos que funciona
casos grabados del original, reproducidos idénticos contra el reemplazo
errores 500 en más de 150.000 peticiones de fuzzing y red team, en los perfiles v1 y v2
la regla que ninguna prueba manual vio: entre cuentas del mismo titular no hay límite de transferencia. La encontró el fuzzer diferencial.
Las 20 pruebas de ejemplo
Los organizadores dieron 20 ejemplos con la respuesta exacta del original: una sola secuencia con estado, como los tests del jurado. Aquí corren contra el reemplazo real, paso a paso. Las respuestas del reemplazo son las que devuelve app/, no una copia.
Los ejemplos se grabaron con el original de la mañana (v1).
Debrief
Toca una tarjeta para ver la respuesta corta y su evidencia. El modo ensayo las recorre una a una con un tiempo por respuesta.
El incidente
Las vueltas del centinela de 15:30, 15:40 y 15:50 vieron todavía v1. Entre las 15:50 y las 15:55 el proveedor desplegó v2. A las 15:55 la regresión completa lo detectó y a las 16:17 el reemplazo ya respondía como v2.
centavos con 2 decimales · CB-04
por operación, inclusivo · CB-05
contador por cuenta · CB-06
19 formato del saldo · 4 E506 en TRANSFER de 100000 · 9 E510 con 423 · 11 consecuencias del límite nuevo (saldos, ANULA → E402, números de operación). Fuente: bench/regresion_v2.json, spec CB-07.
Jorge Fajardo · Joan Pellegrino