Project Audit — Auditoría de Coherencia de Proyectos
Resumen
Patrones para auditar la consistencia de proyectos: verificar que documentación, código, especificaciones, ejemplos y validadores dicen lo mismo. Detectar desviaciones estructurales antes de que se propaguen.
Patrón 1: Auditoría de Coherencia Cruzada
Cuando un proyecto tiene múltiples artefactos interconectados (DECISIONES.md, README, spec, código generador, ejemplos XML/JSON, validador, tests), ejecutar una auditoría automática antes de dar por terminado un cambio.
Pasos
Identificar artefactos clave:
- Documento de decisiones (
DECISIONES.md, DESIGN.md, etc.)
- README principal
- Especificación técnica (
spec/, docs/)
- Código generador/conversor
- Ejemplos en formato objetivo
- Validador / tests
- Interfaz de usuario (HTML, app, etc.)
Extraer texto de cada artefacto:
def read_file(path):
with open(path) as f:
return f.read()
Definir dimensiones de coherencia (una por cada decisión estructural clave):
- Ejemplo NeTEx:
dataObjects eliminado, ParticipantRef mayúscula, 6 frames tipados, ScheduledStopPoint en vez de PassengerStoppingArea, Tariff en vez de FareStructure, FrameDefaults eliminado
- Cada dimensión se verifica como booleana (presente/ausente) en cada artefacto
Verificar cada dimensión en cada artefacto:
for name, text in [("DECISIONES", dec), ("README", readme), ("spec", spec), ...]:
has_x = keyword in text
has_wrong_y = "wrong_term" in text # término obsoleto
status = "✅" if has_x and not has_wrong_y else "❌"
Reportar resultados: mostrar una tabla de estado por dimensión × artefacto
Reglas del patrón
- Solo auditar decisiones estructurales, no detalles menores
- Los términos obsoletos deben marcarse con
~~ en documentación para que no se detecten como "presentes" en auditorías automatizadas simples
- Si una dimensión falla en 2+ artefactos → es un problema real, no ruido
Patrón 2: Detección de Desviaciones Estructurales
Cuando se pide modificar un formato o esquema, verificar que la modificación propuesta es compatible con las restricciones del estándar base antes de aplicar cambios masivos.
Secuencia
- Identificar el estándar base (XSD oficial, protocolo, formato)
- Descargar la definición oficial (repositorio del estándar, documentación)
- Verificar la compatibilidad de la propuesta con el estándar antes de modificar código
- Si es incompatible, documentar por qué y proponer alternativas:
- Adaptar a estándar (coste de mantenimiento alto pero compatibilidad total)
- Perfil propio (coste de compatibilidad pero estructura propia)
- Híbrido (validación XSD + validador propio encima)
Pitfall crítico
NUNCA eliminar elementos del XML sin verificar si el XSD/estándar base lo exige.
Ejemplo: NeTEx-CEN 1.14 requiere <dataObjects><CompositeFrame>...</CompositeFrame></dataObjects> en PublicationDelivery. Eliminar dataObjects rompe XSD validation. Si se quiere estructura propia, hay que adoptar explícitamente el modelo de "perfil propio" y documentarlo.
Patrón 3: Validación Post-Refactor
Después de un rewrite de estructura:
- Ejecutar todos los tests existentes
- Regenerar el ejemplo con el código nuevo
- Verificar la estructura generada contra la especificación
- Actualizar el ejemplo en
spec/examples/ para que coincida con la generación real
- Re-auditar coherencia cruzada
Registros
Ver references/netex-audit-2025-07-07.md para el caso de estudio NeTEx-ES.
1---2name: project-audit3description: Patrones de auditoría de proyectos — verificación de coherencia cruzada entre documentación, código y datos, detección de desviaciones estructurales.4---56# Project Audit — Auditoría de Coherencia de Proyectos78## Resumen910Patrones para auditar la consistencia de proyectos: verificar que documentación, código, especificaciones, ejemplos y validadores dicen lo mismo. Detectar desviaciones estructurales antes de que se propaguen.1112## Patrón 1: Auditoría de Coherencia Cruzada1314Cuando un proyecto tiene múltiples artefactos interconectados (DECISIONES.md, README, spec, código generador, ejemplos XML/JSON, validador, tests), ejecutar una auditoría automática antes de dar por terminado un cambio.1516### Pasos17181. **Identificar artefactos clave:**19 - Documento de decisiones (`DECISIONES.md`, `DESIGN.md`, etc.)20 - README principal21 - Especificación técnica (`spec/`, `docs/`)22 - Código generador/conversor23 - Ejemplos en formato objetivo24 - Validador / tests25 - Interfaz de usuario (HTML, app, etc.)26272. **Extraer texto de cada artefacto:**28 ```python29 def read_file(path):30 with open(path) as f:31 return f.read()32 ```33343. **Definir dimensiones de coherencia** (una por cada decisión estructural clave):35 - Ejemplo NeTEx: `dataObjects` eliminado, `ParticipantRef` mayúscula, 6 frames tipados, `ScheduledStopPoint` en vez de `PassengerStoppingArea`, `Tariff` en vez de `FareStructure`, `FrameDefaults` eliminado36 - Cada dimensión se verifica como booleana (presente/ausente) en cada artefacto37384. **Verificar cada dimensión en cada artefacto:**39 ```python40 for name, text in [("DECISIONES", dec), ("README", readme), ("spec", spec), ...]:41 has_x = keyword in text42 has_wrong_y = "wrong_term" in text # término obsoleto43 status = "✅" if has_x and not has_wrong_y else "❌"44 ```45465. **Reportar resultados:** mostrar una tabla de estado por dimensión × artefacto4748### Reglas del patrón49- **Solo auditar decisiones estructurales**, no detalles menores50- **Los términos obsoletos deben marcarse con `~~`** en documentación para que no se detecten como "presentes" en auditorías automatizadas simples51- **Si una dimensión falla en 2+ artefactos → es un problema real**, no ruido5253## Patrón 2: Detección de Desviaciones Estructurales5455Cuando se pide modificar un formato o esquema, verificar que la modificación propuesta es compatible con las restricciones del estándar base antes de aplicar cambios masivos.5657### Secuencia58591. **Identificar el estándar base** (XSD oficial, protocolo, formato)602. **Descargar la definición oficial** (repositorio del estándar, documentación)613. **Verificar la compatibilidad** de la propuesta con el estándar antes de modificar código624. **Si es incompatible**, documentar por qué y proponer alternativas:63 - Adaptar a estándar (coste de mantenimiento alto pero compatibilidad total)64 - Perfil propio (coste de compatibilidad pero estructura propia)65 - Híbrido (validación XSD + validador propio encima)6667### Pitfall crítico6869> **NUNCA eliminar elementos del XML sin verificar si el XSD/estándar base lo exige.**70>71> Ejemplo: NeTEx-CEN 1.14 requiere `<dataObjects><CompositeFrame>...</CompositeFrame></dataObjects>` en `PublicationDelivery`. Eliminar `dataObjects` rompe XSD validation. Si se quiere estructura propia, hay que adoptar explícitamente el modelo de "perfil propio" y documentarlo.7273## Patrón 3: Validación Post-Refactor7475Después de un rewrite de estructura:761. Ejecutar todos los tests existentes772. Regenerar el ejemplo con el código nuevo783. Verificar la estructura generada contra la especificación794. Actualizar el ejemplo en `spec/examples/` para que coincida con la generación real805. Re-auditar coherencia cruzada8182## Registros8384Ver `references/netex-audit-2025-07-07.md` para el caso de estudio NeTEx-ES.