Softwarequalität und Wartbarkeit
Wartbarkeit ist eines der wichtigsten Qualitätsmerkmale von Software. Code, der leicht zu verstehen, zu ändern und zu erweitern ist, reduziert langfristige Kosten und Fehler.
In a Nutshell
Wartbarkeit bedeutet, dass Code leicht verstanden, geändert und erweitert werden kann. Schlüsselfaktoren: gute Architektur, Dokumentation, Tests, Refactoring und Technical Debt Management.
Kompakte Fachbeschreibung
Wartbarkeit ist ein Qualitätsmerkmal nach ISO 25010, das beschreibt, wie einfach Software mit vertretbarem Aufwand angepasst, korrigiert oder erweitert werden kann. Wartbarer Code ist lesbar, modular, gut dokumentiert und durch Tests abgesichert. Hohe Wartbarkeit reduziert die Gesamtkosten des Lebenszyklus (TCO) und ermöglicht schnelle Reaktion auf sich ändernde Anforderungen.
Faktoren der Wartbarkeit
1. Lesbarkeit
Code wird häufiger gelesen als geschrieben. Lesbarer Code spart Zeit bei Wartung.
// Schlecht: unleserlich
function c(d){let r=0;for(let i=0;i<d.length;i++)r+=d[i];return r;}
// Gut: lesbar
function calculateSum(numbers: number[]): number {
return numbers.reduce((sum, num) => sum + num, 0);
}
2. Modularität
Kleine, kohärente Module sind leichter zu verstehen und zu ändern.
// Schlecht: monolithisch
class UserService {
register() { /* ... */ }
login() { /* ... */ }
sendEmail() { /* ... */ }
logAudit() { /* ... */ }
}
// Gut: modular
class UserService { register() {} login() {} }
class EmailService { send() {} }
class AuditService { log() {} }
3. Dokumentation
Gute Dokumentation erklärt WARUM, nicht WAS.
/**
* Authentifiziert einen Benutzer mit JWT.
*
* @param credentials Benutzername und Passwort
* @returns JWT Token bei Erfolg
* @throws AuthError bei ungültigen Credentials
*
* Warum JWT statt Session: Mobile Clients behalten Token,
* Sessions erfordern Server-Side State.
*/
function authenticate(credentials: Credentials): Promise<Token> {
// ...
}
4. Tests
Tests sind lebende Dokumentation und Sicherheit bei Änderungen.
describe('authenticate', () => {
test('returns token for valid credentials', async () => {
const token = await authenticate({ user: 'alice', pass: 'secret' });
expect(token).toBeDefined();
});
test('throws for invalid credentials', async () => {
await expect(authenticate({ user: 'alice', pass: 'wrong' }))
.rejects.toThrow(AuthError);
});
});
5. Refactoring
Regelmäßiges Refactoring verhindert Technical Debt.
// Vorher: Code Smell
function processOrder(order) {
if (order.status === 'pending') {
if (order.payment === 'paid') {
if (order.stock > 0) {
order.status = 'shipped';
}
}
}
}
// Nachher: Clean Code
function canShip(order: Order): boolean {
return order.status === 'pending' &&
order.payment === 'paid' &&
order.stock > 0;
}
function processOrder(order: Order): void {
if (canShip(order)) {
order.status = 'shipped';
}
}
Technical Debt
Technical Debt ist die metaphorische Schuld, die entsteht, wenn schnelle Lösungen statt sauberer Implementierungen gewählt werden.
Arten von Technical Debt
| Art | Beschreibung | Beispiel |
|---|---|---|
| Deliberate | Bewusste Entscheidung für Tempo | MVP ohne Tests |
| Inadvertent | Unbewusst durch schlechte Praxis | Spaghetti Code |
| Bit Rot | Code veraltet über Zeit | Veraltete Dependencies |
| Messy | Schnelle Hack, nie aufgeräumt | TODO-Kommentare |
Debt Management
// Debt Tracker im Code
// TODO: Refactor to Strategy Pattern (Debt: Medium, Priority: High)
// FIXME: Race condition in concurrent access (Debt: Critical)
// HACK: Quick fix for deadline, needs proper solution (Debt: High)
Metriken für Wartbarkeit
| Metrik | Beschreibung | Ziel |
|---|---|---|
| Cyclomatic Complexity | Komplexität von Funktionen | < 10 |
| Code Duplication | Duplizierter Code | < 5% |
| Test Coverage | Abdeckung durch Tests | > 80% |
| Documentation Coverage | Dokumentierte APIs | > 90% |
| Mean Time to Repair | Zeit zur Fehlerbehebung | < 4h |
Best Practices
- Early Refactoring: Refactor früh und oft, nicht am Ende
- Documentation: Dokumentiere komplexe Entscheidungen
- Tests: Schreibe Tests vor Änderungen (Safety Net)
- Code Reviews: Reviews verhindern Debt-Akkumulation
- Technical Debt Tracking: Track Debt explizit und plane Tilgung
Prüfungsrelevante Stichpunkte
- Wartbarkeit nach ISO 25010: Anpassbarkeit mit vertretbarem Aufwand
- Faktoren: Lesbarkeit, Modularität, Dokumentation, Tests
- Technical Debt: metaphorische Schuld durch schnelle Lösungen
- Refactoring als kontinuierlicher Prozess
- Metriken: Cyclomatic Complexity, Duplication, Coverage
FAQ
1. Was ist Wartbarkeit?
2. Was ist Technical Debt?
3. Was ist Cyclomatic Complexity?
4. Wie verbessert man Wartbarkeit?
5. Was ist Refactoring?
6. Arten von Technical Debt?
7. Was ist Code Duplication?
8. Wie trackt man Technical Debt?
9. Was ist MTTR?
10. Modularität vs Monolith?
11. Wann refactoren?
12. Dokumentation WAS vs WARUM?
13. Tests und Wartbarkeit?
14. Was ist Bit Rot?
15. Wartbarkeit vs Performance?
Weiter im Softwarequalität Lernpfad
Der nächste Artikel im Softwarequalität Lernpfad behandelt Softwarequalität und Zuverlässigkeit — wie zuverlässige Software durch Fehlertoleranz, Monitoring und Recovery erreicht wird.
Quellen
- https://iso25000.com/index.php/en/iso-25000-standards/iso-25010.html
- https://martinfowler.com/bliki/TechnicalDebt.html
- https://refactoring.guru/
Buchempfehlungen zur Softwarequalität
Wenn Du Dich weiter mit Wartbarkeit, Refactoring und Softwarequalität beschäftigen möchtest, empfehlen wir Dir die folgenden Bücher:
Software Engineering
Bücher über Softwarequalität, Clean Code, Code Reviews und Softwareentwicklungsprozesse
Clean Code: Programmieren in Java – Refactoring, Test-Driven Development und Clean Architecture von Robert C. Martin
Bei Amazon ansehenAffiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.
Software Engineering: Umfassendes Handbuch für die Praxis
Bei Amazon ansehenAffiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.
Refactoring: Wie Sie bestehenden Code verbessern von Martin Fowler
Bei Amazon ansehenAffiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.






