Zum Hauptinhalt springen

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

  1. Projekt auswählen
  2. Auf eine Datei in der Visualisierung klicken
  3. 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

StufeBeschreibungAktion
NiedrigWenige Abhängige, isolierte ÄnderungMit Standard-Review fortfahren
MittelMehrere Abhängige, moderates RisikoGründliche Tests empfohlen
HochViele Abhängige, KernmodulUmfangreiche Tests, schrittweises Rollout erwägen
KritischBetrifft kritische PfadeZusä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

  1. Auswirkungsanalyse ausführen für Dateien die Sie ändern möchten
  2. Abhängigkeitskette prüfen - den Explosionsradius verstehen
  3. Betroffene Tests identifizieren - sicherstellen dass sie aktualisiert werden
  4. Auf zirkuläre Abhängigkeiten prüfen - diese verstärken die Auswirkung

Auswirkungen reduzieren

  1. Interfaces verwenden - Von Abstraktionen abhängen
  2. SOLID-Prinzipien anwenden - Einzelverantwortung begrenzt Auswirkungen
  3. Module entkoppeln - Direkte Abhängigkeiten reduzieren
  4. 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