Saltar al contenido principal

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

  1. Selecciona un proyecto
  2. Haz clic en un archivo en la visualización
  3. 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

NivelDescripciónAcción
BajoPocos dependientes, cambio aisladoProceder con revisión estándar
MedioMúltiples dependientes, riesgo moderadoPruebas exhaustivas recomendadas
AltoMuchos dependientes, módulo centralPruebas extensivas, considerar despliegue gradual
CríticoAfecta rutas críticasRevisió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

  1. Ejecutar análisis de impacto en archivos que planeas modificar
  2. Revisar la cadena de dependencias - entender el radio de explosión
  3. Identificar pruebas afectadas - asegurarse de que se actualicen
  4. Verificar dependencias circulares - amplifican el impacto

Reduciendo el Impacto

  1. Usar interfaces - Depender de abstracciones
  2. Aplicar principios SOLID - Responsabilidad única limita el impacto
  3. Desacoplar módulos - Reducir dependencias directas
  4. 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