Was sind technische Schulden?
Der Begriff Technische Schulden kommt aus der Informationstechnologie (IT). Vornehmlich im Bereich der Software- und Anwendungsentwicklung bezeichnet er die von Beginn an möglichen Fehlerquellen, die sich in der Entwicklung von Software oder Anwendungen einschleichen. Die spätere Beseitigung dieser Fehler wird hiermit metaphorisch als Schuld bezeichnet. Der für die Fehlerbeseitigung verbundene Aufwand kann - wie im realen Finanzwesen üblich - als Zins angesehen werden und muss demnach ebenfalls kalkuliert und beglichen werden.
Die Art der technischen Schulden können dabei sehr vielseitig sein. Bedingt durch latenten Zeit- und Kostendruck verschiebt man oder verzichtet gänzlich auf die Umsetzung automatisierter Regressions- oder Modultests. Häufige entstehen Fehlerquellen auch durch Missachtung von Code-Smells (schlechter, nicht fehlerhafter Quelltext) und wiederholten fehlerhaften Codesegmenten. Oftmals werden auch etablierte Coding Standards ignoriert und hilfreiche Anti-Pattern nicht ausreichend genutzt. Würden mögliche Maßnahmen von Beginn an konsequent genutzt, könnte sich der Mehraufwand jedoch langfristig durch einen geringeren Wartungsaufwand der Software deutlich auszahlen.
Ermittlung und Messbarkeit technischer Schulden
Bei der Ermittlung technischer Schulden muss man bereits zu Beginn auf die unterschiedlichen Bereiche blicken, in denen Probleme auftauchen können. In der Software- und Anwendungs-entwicklung unterscheidet man bei technischen Schulden zwischen vier verschiedenen Fehlergruppen, die im Folgenden kurz vorgestellt werden:
-
Design- und Architekturfehler
-
Implementierung und Kodierung
-
Dokumentation
-
Anwendungs- und Funktionstests
Im Bereich der Design- und Architekturfehler kann bereits eine im Vorfeld optimierte Anforderungsermittlung einen großen Teil der Fehlerquellen aufdecken und eliminieren. Die Bildung eines fachlich kompetenten Entwicklungsteams ist hier eine absolut notwendige Voraussetzung. Für das Segment der Implementierung und Kodierung von Quelltexten kann ein stetiger Vergleich der geplanten Anwendungsarchitektur mit den bereits erstellten Code-Strukturen grobe Fehlerquellen unmittelbar aufdecken.
Für eine gut strukturierte und zu jedem späteren Zeitpunkt einfach zu pflegende Software ist eine umfangreiche Dokumentation unerlässlich. Diese beginnt bereits mit der Planung und setzt sich in der Strukturierung der Funktionseinheiten fort. Jeder Codeblock sollte ausreichend dokumentiert und mit einer lückenlosen Versionierung versehen werden. Dies garantiert auch nach längerer Einsatzzeit eine optimale Wartung und Pflege bis auf Quelltextebene. Hierzu gehört dann abschließend auch eine leicht verständliche Anwendungsdokumentation für die Benutzer. Während der kompletten Implementierungsphase sollte zu jedem abgeschlossenen Funktionsblock eine ausreichende Funktionsprüfung erfolgen. Dies kann bis zu einem gewissen Grad auch automatisiert mit speziellen Tools erfolgen.
Auflösung von technischen Schulden
Ein rechtzeitiger Abbau dieser Schulden kann durch eine Vielzahl an Maßnahmen bereits in der Entwicklungsphase erreicht werden. Zu den zuvor genannten Anforderungen kommen aber noch weitere wichtige Aspekte hinzu. So kann beispielsweise eine kontinuierliche Diskussion und Anpassung über die festgelegte Architektur in Gruppenmeetings eine wirksame Maßnahme zur Fehlervermeidung sein. Auch eine stetige Aus- und Weiterbildung der beteiligten Entwickler über Workshops auf Messen oder Konferenzen sichert eine langfristige Produktqualität des Unternehmens.
Während der technischen Umsetzung eines Projektes und der Implementierung von Funktionsblöcken kann ein regelmäßiges Testen der Quellcodes, der Funktionen und der kompletten Anwendung versteckte Fehler bereits frühzeitig aufdecken. Bei größeren Problemen sollte dann frühzeitig eine Architekturänderung und ein Refactoring erfolgen. Ist ein Projekt dann bereits als RTM an den Kunden ausgeliefert, können neu entdeckte Fehler über Qualitätsupdates nachträglich eingespielt werden.
In der Anwendungsentwicklung hat sich der Begriff CRAP-Cycle als Beispiel für technische Schulden etabliert. Wenn während der Anwendungsentwicklung (Create) viele Fehler etabliert werden, wird später dadurch ein hoher Wartungsaufwand (Repair) erzeugt. Wird dieser Aufwand zu hoch, ist ein Abbruch (Abandon) der Wartungsphase nötig und es muss ein vollständiger Austausch (RePlacement) eines Architektur- oder Funktionsblockes erfolgen. Dieser CRAP-Cycle erzeugt einen sehr großen Zeit- und Kostenaufwand, der durch eine gute Planung bereits im Vorfeld minimiert werden kann.
Tools und Testsuiten
Für das Testen von Funktionen, kleinen Codeeinheiten und einer kompletten Anwendung werden eine Vielzahl an Tools angeboten. Für beinahe jede Programmiersprache gibt es in der Regel auch kostenfreie Tools. Für detailliertere Code- und Anwendungsprüfungen sind jedoch professionelle, dann auch kostenpflichtige Testsuites einzusetzen. Eines dieser Tools ist SonarQube, das eine statische Prüfung von Quelltexten in verschiedenen Programmiersprachen ermöglicht.
Ein weiteres Tool namens JDepend kann eine automatisierte Messung von Metriken bezüglich Coding und Design durchführen und komplette Java-Klassen und -Packages analysieren. Die Messergebnisse zeigen detailliert die Erweiterbarkeit, Wiederverwendung und Wartungsfreundlichkeit der untersuchten Codeblöcke. Mit diesen Ergebnissen kann bei frühzeitigem Einsatz in der Implementierungsphase eine hohe Anwendungsqualität sichergestellt werden.
Wenn Sie eine detaillierte, professionelle und unabhängige Einschätzung Ihrer Softwarequalität wünschen, so stehen wir Ihnen jederzeit zur Verfügung. Kontaktieren Sie uns unverbindlich.