Analisi di Impatto
Comprendi gli effetti a catena delle modifiche al codice prima di apportarle.
Cos'è l'Analisi di Impatto?
L'analisi di impatto risponde alla domanda: "Se modifico questo file, cos'altro sarà interessato?"
Questo ti aiuta a:
- Pianificare le modifiche più attentamente
- Identificare i test necessari
- Evitare rotture inaspettate
- Stimare lo sforzo per le modifiche
Eseguire l'Analisi di Impatto
Interfaccia Web
- Seleziona un progetto
- Clicca su un file nella visualizzazione
- Clicca Analizza Impatto
CLI
> /analyze src/services/user.ts
API
curl -X POST https://api.archicore.io/api/v1/projects/:id/analyze \
-H "Authorization: Bearer TUA_API_KEY" \
-d '{"path": "src/services/user.ts"}'
Comprendere i Risultati
Analisi di Impatto per src/services/user.ts
╭─────────────────────────────────────────╮
│ Dipendenze Dirette (5) │
├─────────────────────────────────────────┤
│ → src/utils/crypto.ts │
│ → src/db/models/user.ts │
│ → src/config/auth.ts │
│ → src/types/user.ts │
│ → src/utils/validation.ts │
╰─────────────────────────────────────────╯
╭─────────────────────────────────────────╮
│ Dipendenti - Saranno Interessati (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 │
╰─────────────────────────────────────────╯
Livello di Rischio: MEDIO
Test Interessati: 2
Livelli di Impatto
| Livello | Descrizione | Azione |
|---|---|---|
| Basso | Pochi dipendenti, modifica isolata | Procedere con revisione standard |
| Medio | Più dipendenti, rischio moderato | Test approfonditi raccomandati |
| Alto | Molti dipendenti, modulo centrale | Test estesi, considerare rollout graduale |
| Critico | Interessa percorsi critici | Revisione extra, feature flag raccomandati |
Simulare le Modifiche
Anteprima dell'impatto di una modifica proposta:
> /simulate
Descrivi la tua modifica: Aggiungere nuovo parametro a UserService.getUser()
Risultati della Simulazione:
File che necessitano aggiornamenti:
1. src/controllers/auth.ts:34 - chiama getUser()
2. src/controllers/profile.ts:12 - chiama getUser()
3. src/services/session.ts:45 - chiama getUser()
Test che necessitano aggiornamenti:
1. tests/user.test.ts - 5 casi di test chiamano getUser()
2. tests/auth.test.ts - 3 casi di test chiamano getUser()
Sforzo stimato: Medio (8 file, 15 punti di chiamata)
Best Practice
Prima di Apportare Modifiche
- Esegui l'analisi di impatto sui file che intendi modificare
- Rivedi la catena delle dipendenze - comprendi il raggio d'azione
- Identifica i test interessati - assicurati che vengano aggiornati
- Verifica le dipendenze circolari - amplificano l'impatto
Ridurre l'Impatto
- Usa le interfacce - Dipendi dalle astrazioni
- Applica i principi SOLID - La responsabilità singola limita l'impatto
- Disaccoppia i moduli - Riduci le dipendenze dirette
- Scrivi layer facade - Nascondi i dettagli di implementazione
Esempio: Refactoring Sicuro
// Prima: Dipendenza diretta
// Modificare User impatta tutti i consumatori
class UserController {
constructor(private userService: UserService) {}
}
// Dopo: Dipendenza da interfaccia
// Modificare l'implementazione di UserService non impatta i consumatori
interface IUserService {
getUser(id: string): Promise<User>;
}
class UserController {
constructor(private userService: IUserService) {}
}
Integrazione CI/CD
Aggiungi l'analisi di impatto alla tua pipeline:
# .gitlab-ci.yml
impact-analysis:
script:
- archicore analyze --changed-files
- if [ $IMPACT_LEVEL == "critical" ]; then
echo "Impatto critico rilevato - richiede revisione aggiuntiva";
exit 1;
fi