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