Skip to content

RIGOR ​

Implementación ​

Estrategia de Rendimiento y Testing (Normativo – v0.1) ​

Estado: Normativo Alcance: Define las garantías de rendimiento, expectativas de benchmarking, validación de determinismo y estrategia de pruebas obligatoria en todos los motores de RIGOR.

Este documento formaliza las restricciones de calidad requeridas para una implementación conforme.


1. Propósito ​

Este documento establece:

  • Expectativas de complejidad de rendimiento
  • Requisitos de validación de determinismo
  • Obligaciones de cobertura de pruebas
  • Garantías de regresión
  • Estrategia de verificación de estabilidad

Se aplica a todos los motores y a la capa de ejecución de CLI.


2. Modelo de Rendimiento ​

RIGOR está diseñado para el análisis estructural y determinista de especificaciones.

Las implementaciones DEBEN optimizar para:

  • Complejidad predecible
  • Escalado lineal o casi lineal
  • Patrones de tiempo de ejecución deterministas

3. Complejidad Esperada por Motor ​

3.1 Motor de Canonicalización ​

Complejidad esperada:

O(N + E)

Donde:

  • N = número de nodos
  • E = número de aristas (edges)

Debe evitar escaneos anidados.


3.2 Motor de Validación ​

Complejidad esperada:

O(R × N)

Donde:

  • R = número de reglas
  • N = nodos en el alcance (scope)

Las reglas DEBEN evitar recorridos anidados del grafo completo siempre que sea posible.


3.3 Motor de Restricciones ​

Complejidad esperada:

O(C × S)

Donde:

  • C = número de restricciones
  • S = tamaño del alcance

Las funciones de agregación DEBEN operar sobre colecciones canónicas ordenadas.


3.4 Motor de Diff ​

Complejidad esperada:

O(N + E)

La comparación de atributos DEBE evitar comportamientos cuadráticos.


3.5 Motor de Versionado ​

Complejidad esperada:

O(C)

Donde:

  • C = número de cambios en el ChangeSet

3.6 Motor de Migración ​

Complejidad esperada:

O(O + N)

Donde:

  • O = número de operaciones
  • N = tamaño del grafo

3.7 Motor de Resolución de Eventos ​

Complejidad esperada:

O(Ev + D)

Donde:

  • Ev = número de eventos
  • D = número de dependencias

La detección de ciclos DEBE ser lineal.


4. Expectativas de Memoria ​

El uso de memoria DEBERÍA escalar linealmente con el tamaño del grafo.

Las implementaciones NO DEBEN:

  • Duplicar el grafo completo innecesariamente
  • Mantener copias redundantes de colecciones grandes
  • Tener fugas de memoria entre invocaciones del CLI

5. Pruebas de Determinismo ​

El determinismo es una propiedad obligatoria.

Las implementaciones DEBEN incluir:

5.1 Pruebas de Repetibilidad ​

Ejecutar la misma entrada múltiples veces → misma salida (igualdad a nivel de bytes en modo JSON).


5.2 Pruebas de Aleatorización de Orden ​

Si las estructuras de datos internas no están ordenadas (ej. mapas de hash), las pruebas DEBEN:

  • Mezclar el orden de inserción
  • Verificar una salida canónica idéntica

5.3 Pruebas de Estabilidad de Concurrencia ​

Si se utiliza paralelización:

  • Las ejecuciones paralelas y secuenciales DEBEN producir resultados idénticos.

6. Categorías de Pruebas ​

Las siguientes capas de pruebas son obligatorias.


6.1 Pruebas Unitarias ​

Cada componente del motor DEBE tener:

  • Pruebas a nivel de regla
  • Pruebas a nivel de restricción
  • Pruebas a nivel de operación
  • Pruebas del parser de expresiones

La cobertura DEBE incluir casos de éxito y de fallo.


6.2 Pruebas de Integración ​

Los escenarios de extremo a extremo (end-to-end) DEBEN probar:

  • Pipeline completo del CLI
  • Interacción Diff + Versión
  • Cadena de Migración + Validación
  • Resolución de eventos después de la migración

6.3 Pruebas Golden (Golden Tests) ​

Las pruebas Golden DEBEN:

  • Serializar la salida JSON
  • Comparar contra archivos de referencia committeados
  • Fallar ante cualquier cambio estructural

Las pruebas Golden DEBEN validar el determinismo.


6.4 Pruebas de Regresión ​

Cada defecto descubierto DEBE producir:

  • Un caso de prueba reproducible
  • Una prueba de regresión permanente
  • Un mapeo claro al código de error

La suite de regresión DEBE crecer de forma monótona.


6.5 Pruebas Basadas en Propiedades (Property-Based Tests) ​

Las implementaciones DEBERÍAN incluir pruebas de propiedades para:

  • Invariantes de ordenamiento canónico
  • Propiedades de simetría del diff
  • Monotonía de incrementos de versión
  • Consistencia de agregación de restricciones

Ejemplos de propiedades:

  • diff(A, A) → sin cambios
  • canonicalize(canonicalize(G)) = canonicalize(G)

6.6 Pruebas de Estrés (Stress Tests) ​

Grafos sintéticos grandes DEBEN probar:

  • Comportamiento de escalado
  • Estabilidad de memoria
  • Patrones de degradación de rendimiento

Las pruebas de estrés NO DEBEN alterar el determinismo.


7. Requisitos de Benchmarking ​

Las implementaciones DEBERÍAN proporcionar:

  • Una suite de benchmarks
  • Un conjunto de datos (dataset) estable
  • Medición de tiempo sin ruido de registros (logging)

Los benchmarks DEBEN reportar:

  • Conteo de nodos
  • Conteo de aristas
  • Tiempo de ejecución por motor
  • Uso de memoria

Los resultados DEBEN ser reproducibles bajo el mismo entorno.


8. Requisitos de CI ​

La Integración Continua (CI) DEBE:

  • Ejecutar la suite completa de pruebas
  • Ejecutar pruebas de determinismo
  • Validar salidas Golden
  • Fallar ante ordenamientos no deterministas
  • Fallar ante códigos de error no registrados

La CI DEBE bloquear el merge ante fallos en las pruebas.


9. Pruebas de Estabilidad de Códigos de Error ​

DEBE existir un registro de códigos de error.

Las pruebas DEBEN verificar:

  • Que no haya códigos duplicados
  • Que no haya códigos eliminados sin marcarlos como obsoletos
  • Que no haya cambios en la semántica sin un incremento de versión

La estabilidad del modelo de errores es obligatoria.


10. Detección de Regresión de Rendimiento ​

La CI DEBERÍA incluir:

  • Una línea base (baseline) de rendimiento
  • Alertas de umbral
  • Comparación histórica

PUEDEN configurarse fallos críticos si las caídas de rendimiento superan el umbral definido.


11. Pruebas de Compatibilidad ​

La compatibilidad hacia atrás DEBE probarse a través de versiones:

  • Cargar especificaciones antiguas
  • Validar contra el nuevo motor
  • Verificar la evolución esperada de los errores

El comportamiento que rompa la compatibilidad DEBE requerir un incremento de versión mayor.


12. Pruebas de Seguridad en Migraciones ​

Las pruebas de migración DEBEN verificar:

  • Rollback atómico en caso de fallo
  • Ausencia de mutaciones parciales
  • Orden correcto de aplicación
  • Éxito de la validación post-migración

13. Pruebas de Seguridad y Robustez ​

Aunque RIGOR no se ejecuta en runtime, la implementación DEBE probar:

  • Resiliencia ante entradas malformadas
  • Manejo de anidamiento profundo
  • Robustez de la detección de ciclos
  • Manejo de expresiones grandes

Los motores DEBEN fallar de forma determinista, no caer de forma impredecible.


14. No-Objetivos ​

La estrategia de rendimiento NO requiere:

  • Garantías de tiempo real
  • Diff sub-lineal
  • Ejecución distribuida
  • Validación de datos en runtime

El enfoque sigue siendo el determinismo estructural.


15. Criterios de Conformidad ​

Una implementación es conforme si:

  • Cumple con la clase de complejidad esperada
  • Garantiza una salida determinista
  • Supera las pruebas Golden y de regresión
  • Impone la estabilidad de los códigos de error
  • Mantiene benchmarks reproducibles

16. Resumen ​

La Estrategia de Rendimiento y Testing asegura:

  • Comportamiento determinista
  • Arquitectura escalable
  • Semántica de errores estable
  • Mantenibilidad a largo plazo
  • Control estricto de regresiones

Protocolo de Restricción de IA