Contexto
Existía un parser Java heredado para mensajes ATIS.
Un mensaje funcionaba correctamente, mientras otro introducía una construcción textual diferente:
text
SINGLE RWY IN USE RWY IN USE ...y el parser no la contemplaba.
Dificultad de los parsers textuales legacy
Muchos parsers de mensajes aeronáuticos se construyen como cadenas de reglas sobre tokens.
Funcionan mientras el texto siga un patrón esperado.
El problema surge con:
- frases opcionales;
- repeticiones;
- orden diferente;
- tokens ambiguos;
- variantes permitidas por especificación.
Decisión: crear un simulador independiente en Node.js
Compilar toda la aplicación Java para cada prueba era costoso.
Se decidió reproducir la lógica relevante en un proyecto pequeño donde:
text
input string -> parser -> objetoEsto permite:
- crear corpus de mensajes;
- reproducir fallos;
- probar cambios rápidamente;
- comparar salida;
- diseñar casos de regresión.
Regresión
El requisito más importante al adaptar una regla para el nuevo caso es no romper el caso que ya funcionaba.
Por tanto deben mantenerse al menos:
text
test A: mensaje antiguo -> sigue funcionando
test B: SINGLE RWY... -> funciona
test C: frase opcional ausente
test D: repetición de RWY IN USELección
Cuando un parser legacy es difícil de probar dentro de la aplicación completa, crear un harness o simulador aislado puede ser más rentable que depurar continuamente dentro del sistema original.
---
