Análisis de Impacto
Comprende los efectos en cascada de los cambios de código antes de realizarlos.
¿Qué es el Análisis de Impacto?
El análisis de impacto responde la pregunta: "Si cambio este archivo, ¿qué más se verá afectado?"
Esto te ayuda a:
- Planificar cambios más cuidadosamente
- Identificar pruebas requeridas
- Evitar roturas inesperadas
- Estimar el esfuerzo para cambios
Ejecutando Análisis de Impacto
Interfaz Web
- Selecciona un proyecto
- Haz clic en un archivo en la visualización
- Haz clic en Analizar Impacto
CLI
> /analyze src/services/user.ts
API
curl -X POST https://api.archicore.io/api/v1/projects/:id/analyze \
-H "Authorization: Bearer TU_API_KEY" \
-d '{"path": "src/services/user.ts"}'
Entendiendo los Resultados
Análisis de Impacto para src/services/user.ts
╭─────────────────────────────────────────╮
│ Dependencias Directas (5) │
├─────────────────────────────────────────┤
│ → src/utils/crypto.ts │
│ → src/db/models/user.ts │
│ → src/config/auth.ts │
│ → src/types/user.ts │
│ → src/utils/validation.ts │
╰─────────────────────────────────────────╯
╭─────────────────────────────────────────╮
│ Dependientes - Serán Afectados (8) │
├─────────────────────────────────────────┤
│ ← src/controllers/auth.ts │
│ ← src/controllers/profile.ts │
│ ← src/controllers/admin.ts │
│ ← src/middleware/auth.ts │
│ ← src/services/session.ts │
│ ← src/api/routes/users.ts │
│ ← tests/user.test.ts │
│ ← tests/auth.test.ts │
╰─────────────────────────────────────────╯
Nivel de Riesgo: MEDIO
Pruebas Afectadas: 2
Niveles de Impacto
| Nivel | Descripción | Acción |
|---|---|---|
| Bajo | Pocos dependientes, cambio aislado | Proceder con revisión estándar |
| Medio | Múltiples dependientes, riesgo moderado | Pruebas exhaustivas recomendadas |
| Alto | Muchos dependientes, módulo central | Pruebas extensivas, considerar despliegue gradual |
| Crítico | Afecta rutas críticas | Revisión adicional, feature flags recomendados |
Simulando Cambios
Previsualiza el impacto de un cambio propuesto:
> /simulate
Describe tu cambio: Agregar un nuevo parámetro a UserService.getUser()
Resultados de la Simulación:
Archivos que necesitan actualizaciones:
1. src/controllers/auth.ts:34 - llama a getUser()
2. src/controllers/profile.ts:12 - llama a getUser()
3. src/services/session.ts:45 - llama a getUser()
Pruebas que necesitan actualizaciones:
1. tests/user.test.ts - 5 casos de prueba llaman a getUser()
2. tests/auth.test.ts - 3 casos de prueba llaman a getUser()
Esfuerzo estimado: Medio (8 archivos, 15 puntos de llamada)
Mejores Prácticas
Antes de Hacer Cambios
- Ejecutar análisis de impacto en archivos que planeas modificar
- Revisar la cadena de dependencias - entender el radio de explosión
- Identificar pruebas afectadas - asegurarse de que se actualicen
- Verificar dependencias circulares - amplifican el impacto
Reduciendo el Impacto
- Usar interfaces - Depender de abstracciones
- Aplicar principios SOLID - Responsabilidad única limita el impacto
- Desacoplar módulos - Reducir dependencias directas
- Escribir capas facade - Ocultar detalles de implementación
Ejemplo: Refactorización Segura
// Antes: Dependencia directa
// Cambiar User afecta a todos los consumidores
class UserController {
constructor(private userService: UserService) {}
}
// Después: Dependencia de interfaz
// Cambiar la implementación de UserService no afecta a los consumidores
interface IUserService {
getUser(id: string): Promise<User>;
}
class UserController {
constructor(private userService: IUserService) {}
}
Integración con CI/CD
Agrega análisis de impacto a tu pipeline:
# .gitlab-ci.yml
impact-analysis:
script:
- archicore analyze --changed-files
- if [ $IMPACT_LEVEL == "critical" ]; then
echo "Impacto crítico detectado - requiere revisión adicional";
exit 1;
fi