Wartbarkeit

Wartbarkeit stellt sicher, dass die Software leicht zu modifizieren, zu erweitern und zu warten ist. Folgende speziellere Qualitätsmerkmale können hier unterschieden werden:

  • Modularität bezieht sich auf die Strukturierung der Software in unabhängige Module, die separat entwickelt, getestet und gewartet werden können. Dies erleichtert die Verwaltung der Software und ermöglicht einfachere sowie weniger fehleranfällige Änderungen.

  • Wiederverwendbarkeit garantiert, dass Komponenten der Software in verschiedenen Anwendungen oder Kontexten wiederverwendet werden können. Dies reduziert den Entwicklungsaufwand und erhöht die Effizienz durch die Nutzung bewährter Komponenten.

  • Analysierbarkeit beschreibt die Fähigkeit, die Software und ihren Quellcode zu analysieren und zu verstehen. Dies erleichtert die Fehlerbehebung und Änderungen.

  • Änderbarkeit sorgt dafür, dass Änderungen an der Software leicht und ohne unerwünschte Nebenwirkungen durchgeführt werden können. Dies erhöht die Flexibilität und Anpassungsfähigkeit der Software.

  • Prüfbarkeit stellt sicher, dass die Software leicht zu testen bzw. allgemein zu überprüfen ist, um Fehler (fachlich wie auch architektonisch) frühzeitig zu erkennen und zu beheben. Dies verbessert die Gesamtqualität der Anwendung.

Folgende Qualitätstaktiken können hier in Betracht gezogen werden:

Domain-Driven Design

Softwarearchitektur basierend auf der Geschäftsdomäne strukturieren

Domain-Driven Design (DDD) stellt die Geschäftsdomäne ins Zentrum des Entwurfsprozesses. Entwickler arbeiten eng mit Fachexperten zusammen und entwickeln eine Ubiquitous Language, die sowohl im Code als auch in der Fachkommunikation gilt. Bounded Contexts grenzen Teildomänen klar voneinander ab, sodass jeder Kontext sein eigenes konsistentes Modell pflegt. Aggregate definieren Konsistenzgrenzen innerhalb eines Kontexts und kapseln zusammengehörige Entitäten. Value Objects modellieren unveränderliche Konzepte ohne eigene Identität. Diese Strukturierung spiegelt die Geschäftsrealität direkt im Code wider und macht fachliche Änderungen nachvollziehbar umsetzbar.

Fördert: Modularität
Fördert auch: Analysierbarkeit, Angemessenheit
Konsequenzen: Hoher initialer Aufwand für die Domänenanalyse, mögliche Übermodellierung bei einfachen Anwendungen.

#UbiquitousLanguage #BoundedContexts #AggregateDesign

Separation of Concerns

Funktionalitäten in klar abgegrenzte, unabhängige Bereiche aufteilen

Separation of Concerns unterteilt eine Anwendung in Module, die jeweils genau eine Verantwortlichkeit übernehmen. Die Darstellungsschicht kümmert sich ausschließlich um die Benutzerinteraktion, die Geschäftslogik verarbeitet fachliche Regeln, und die Datenzugriffsschicht verwaltet die Persistenz. Jedes Modul lässt sich unabhängig verstehen, testen und ändern, weil es keine fremden Verantwortlichkeiten trägt. Entwickler lokalisieren Fehler schneller, weil sie wissen, in welchem Modul ein bestimmtes Verhalten implementiert ist. Diese Trennung verhindert, dass Änderungen an einer Funktionalität unbeabsichtigt andere Bereiche des Systems beeinflussen.

Fördert: Modularität
Fördert auch: Änderbarkeit, Prüfbarkeit
Konsequenzen: Initialer Mehraufwand bei der Strukturierung, mögliche Überarchitektur bei kleinen Anwendungen.

#ModularesDesign #SingleResponsibilityPrinciple #KomponentenbasierteEntwicklung

Modularisierung

Anwendung in kleine, unabhängige und wiederverwendbare Komponenten aufteilen

Modularisierung teilt eine Anwendung in separate, lose gekoppelte Module mit klar definierten Schnittstellen auf. Jedes Modul kapselt eine spezifische Funktionalität und weist minimale Abhängigkeiten zu anderen Modulen auf. Klare Grenzen — durchgesetzt über gut gestaltete APIs, Paketstrukturen oder Service-Verträge — verhindern unkontrollierte Kopplung. Einzelne Module lassen sich isoliert leichter verstehen, warten und testen, da ihr Umfang fokussiert und überschaubar bleibt. Änderungen an einem Modul bergen weniger Risiko unbeabsichtigter Seiteneffekte auf andere Systemteile. Teams können Module unabhängig entwickeln, deployen und wiederverwenden, was Effizienz und Flexibilität steigert.

Fördert: Modularität
Fördert auch: Wiederverwendbarkeit, Prüfbarkeit
Konsequenzen: Erhöhter initialer Planungsaufwand, mögliche Performance-Einbußen durch Schnittstellenkommunikation, Notwendigkeit einer konsistenten Modulverwaltung.

#KomponentenbasierteEntwicklung #LoseKopplung #Schnittstellendesign

Bubble Context

https://leanpub.com/qualitaetstaktiken

Modulith

https://leanpub.com/qualitaetstaktiken

Schichtenarchitektur

https://leanpub.com/qualitaetstaktiken

Mustersprache

https://leanpub.com/qualitaetstaktiken

Anti Corruption Layer

https://leanpub.com/qualitaetstaktiken

Architektur-Reviews

https://leanpub.com/qualitaetstaktiken

Walking Skeleton

https://leanpub.com/qualitaetstaktiken

Technischer Durchstich

https://leanpub.com/qualitaetstaktiken

Clean Code

https://leanpub.com/qualitaetstaktiken

SOLID-Prinzipien

https://leanpub.com/qualitaetstaktiken

Refactoring

https://leanpub.com/qualitaetstaktiken

Refactoring-Katas

https://leanpub.com/qualitaetstaktiken

Statische Codeanalyse

https://leanpub.com/qualitaetstaktiken

Code Reviews

https://leanpub.com/qualitaetstaktiken

Strategic Code Deletion

https://leanpub.com/qualitaetstaktiken

Abkündigungsstrategie

https://leanpub.com/qualitaetstaktiken

Ensemble-Programmierung

https://leanpub.com/qualitaetstaktiken

Pair Programming

https://leanpub.com/qualitaetstaktiken

Offene Entwicklungspraktiken

https://leanpub.com/qualitaetstaktiken

Codekonventionen

https://leanpub.com/qualitaetstaktiken

Codemetriken

https://leanpub.com/qualitaetstaktiken

Code Quality Gates

https://leanpub.com/qualitaetstaktiken

Automatisierte Tests

https://leanpub.com/qualitaetstaktiken

Integrationstests

https://leanpub.com/qualitaetstaktiken

Test-Driven Development (TDD)

https://leanpub.com/qualitaetstaktiken

Behavior-Driven Development (BDD)

https://leanpub.com/qualitaetstaktiken

Code Coverage Analyse

https://leanpub.com/qualitaetstaktiken

Dependency Injection

https://leanpub.com/qualitaetstaktiken

Dependency Injection Container

https://leanpub.com/qualitaetstaktiken

Dependency Management

https://leanpub.com/qualitaetstaktiken

Kontinuierliche Integration

https://leanpub.com/qualitaetstaktiken

Kurze Iterationszyklen

https://leanpub.com/qualitaetstaktiken

Architektur-Workshops

https://leanpub.com/qualitaetstaktiken

Architektur-Review-Board

https://leanpub.com/qualitaetstaktiken

Architektur-Governance

https://leanpub.com/qualitaetstaktiken

Architekturkonformitätsanalyse

https://leanpub.com/qualitaetstaktiken

Fitness Functions

https://leanpub.com/qualitaetstaktiken

Architektur-Roadmap

https://leanpub.com/qualitaetstaktiken

Versionskontrolle

https://leanpub.com/qualitaetstaktiken

Feature Toggles

https://leanpub.com/qualitaetstaktiken

Logging

https://leanpub.com/qualitaetstaktiken

Wissensmanagementsystem

https://leanpub.com/qualitaetstaktiken

Architekturdokumentation

https://leanpub.com/qualitaetstaktiken

Architecture Decision Records (ADR)

https://leanpub.com/qualitaetstaktiken

Living Documentation

https://leanpub.com/qualitaetstaktiken

Docs as Code

https://leanpub.com/qualitaetstaktiken

API-First Design

https://leanpub.com/qualitaetstaktiken

API-Dokumentation

https://leanpub.com/qualitaetstaktiken

Codekommentare

https://leanpub.com/qualitaetstaktiken

Fluent Interfaces

https://leanpub.com/qualitaetstaktiken

Mutation Testing

https://leanpub.com/qualitaetstaktiken

Property-Based Testing

https://leanpub.com/qualitaetstaktiken

Aspektorientierte Programmierung (AOP)

https://leanpub.com/qualitaetstaktiken

Codegenerierung

https://leanpub.com/qualitaetstaktiken

Continuous Delivery

https://leanpub.com/qualitaetstaktiken

Continuous Deployment

https://leanpub.com/qualitaetstaktiken

Microservices

https://leanpub.com/qualitaetstaktiken

Containerisierung

https://leanpub.com/qualitaetstaktiken

Infrastructure as Code

https://leanpub.com/qualitaetstaktiken

Loose Coupling

https://leanpub.com/qualitaetstaktiken

High Cohesion

https://leanpub.com/qualitaetstaktiken

Hexagonal Architecture

https://leanpub.com/qualitaetstaktiken

Event-Driven Architecture

https://leanpub.com/qualitaetstaktiken

Strangler Fig Pattern

https://leanpub.com/qualitaetstaktiken

Observability

https://leanpub.com/qualitaetstaktiken

Contract Testing

https://leanpub.com/qualitaetstaktiken

Trunk-Based Development

https://leanpub.com/qualitaetstaktiken

Evolutionary Database Design

https://leanpub.com/qualitaetstaktiken

Management Technischer Schulden

https://leanpub.com/qualitaetstaktiken