Auswirkungsanalyse
Verstehen Sie die Welleneffekte von Code-Änderungen, bevor Sie sie durchführen.
Was ist Auswirkungsanalyse?
Die Auswirkungsanalyse beantwortet die Frage: "Wenn ich diese Datei ändere, was wird noch betroffen sein?"
Dies hilft Ihnen:
- Änderungen sorgfältiger zu planen
- Erforderliche Tests zu identifizieren
- Unerwartete Fehler zu vermeiden
- Aufwand für Änderungen einzuschätzen
Auswirkungsanalyse ausführen
Web-Interface
- Projekt auswählen
- Auf eine Datei in der Visualisierung klicken
- Auswirkung analysieren klicken
CLI
> /analyze src/services/user.ts
API
curl -X POST https://api.archicore.io/api/v1/projects/:id/analyze \
-H "Authorization: Bearer IHR_API_KEY" \
-d '{"path": "src/services/user.ts"}'
Ergebnisse verstehen
Auswirkungsanalyse für src/services/user.ts
╭─────────────────────────────────────────╮
│ Direkte Abhängigkeiten (5) │
├─────────────────────────────────────────┤
│ → src/utils/crypto.ts │
│ → src/db/models/user.ts │
│ → src/config/auth.ts │
│ → src/types/user.ts │
│ → src/utils/validation.ts │
╰─────────────────────────────────────────╯
╭─────────────────────────────────────────╮
│ Abhängige - Werden betroffen sein (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 │
╰─────────────────────────────────────────╯
Risikostufe: MITTEL
Betroffene Tests: 2
Auswirkungsstufen
| Stufe | Beschreibung | Aktion |
|---|---|---|
| Niedrig | Wenige Abhängige, isolierte Änderung | Mit Standard-Review fortfahren |
| Mittel | Mehrere Abhängige, moderates Risiko | Gründliche Tests empfohlen |
| Hoch | Viele Abhängige, Kernmodul | Umfangreiche Tests, schrittweises Rollout erwägen |
| Kritisch | Betrifft kritische Pfade | Zusätzliche Review, Feature-Flags empfohlen |
Änderungen simulieren
Vorschau der Auswirkungen einer vorgeschlagenen Änderung:
> /simulate
Beschreiben Sie Ihre Änderung: Neuen Parameter zu UserService.getUser() hinzufügen
Simulationsergebnisse:
Dateien die Updates benötigen:
1. src/controllers/auth.ts:34 - ruft getUser() auf
2. src/controllers/profile.ts:12 - ruft getUser() auf
3. src/services/session.ts:45 - ruft getUser() auf
Tests die Updates benötigen:
1. tests/user.test.ts - 5 Testfälle rufen getUser() auf
2. tests/auth.test.ts - 3 Testfälle rufen getUser() auf
Geschätzter Aufwand: Mittel (8 Dateien, 15 Aufrufstellen)
Best Practices
Vor dem Durchführen von Änderungen
- Auswirkungsanalyse ausführen für Dateien die Sie ändern möchten
- Abhängigkeitskette prüfen - den Explosionsradius verstehen
- Betroffene Tests identifizieren - sicherstellen dass sie aktualisiert werden
- Auf zirkuläre Abhängigkeiten prüfen - diese verstärken die Auswirkung
Auswirkungen reduzieren
- Interfaces verwenden - Von Abstraktionen abhängen
- SOLID-Prinzipien anwenden - Einzelverantwortung begrenzt Auswirkungen
- Module entkoppeln - Direkte Abhängigkeiten reduzieren
- Facade-Schichten schreiben - Implementierungsdetails verbergen
Beispiel: Sicheres Refactoring
// Vorher: Direkte Abhängigkeit
// Änderung an User betrifft alle Konsumenten
class UserController {
constructor(private userService: UserService) {}
}
// Nachher: Interface-Abhängigkeit
// Änderung der UserService-Implementierung betrifft Konsumenten nicht
interface IUserService {
getUser(id: string): Promise<User>;
}
class UserController {
constructor(private userService: IUserService) {}
}
CI/CD-Integration
Fügen Sie Auswirkungsanalyse zu Ihrer Pipeline hinzu:
# .gitlab-ci.yml
impact-analysis:
script:
- archicore analyze --changed-files
- if [ $IMPACT_LEVEL == "critical" ]; then
echo "Kritische Auswirkung erkannt - erfordert zusätzliche Review";
exit 1;
fi