(UX-)Design muss funktionieren
Wie kann man UX-Design eigentlich objektiv testen? Code-Testing vs. Design-Testing: eine Gegenüberstellung
Softwarequalität - fragt man den Ottonormalverbraucher, was man darunter versteht, sind die häufigsten Antworten wohl: „Die Software tut, was sie tun soll.“, „Man findet sich gut zurecht.“ oder „Die Oberflächen sehen schick aus.“ Zurecht. Schließlich sind es am Ende die Anwender:innen, die die Softwarelösung nutzen. Jedoch ist das nur eine Seite der Medaille. Auf welche Softwarequalitätsmerkmale und -kriterien es aus technischer und wirtschaftlicher Sicht ankommt und wie Clean Code Development dabei helfen kann, die Softwarequalität zu maximieren, ist Gegenstand dieses Artikels.
Was gute Softwarequalität auszeichnet, hängt am Ende damit zusammen, wen man fragt. So beurteilen die Anwender:innen die Funktionalität und Benutzerfreundlichkeit, Solution Architects den Aufbau der Entitäten, die Softwareentwickler:innen die Güte des Quellcodes, Admins die Supportfähigkeit, Produktmanager den Funktionsumfang usw. Für eine bessere Einordnung lohnt es sich daher den Begriff Softwarequalität aufzuteilen: in die äußere und die innere Softwarequalität.
Die äußere Softwarequalität beschreibt die Perspektive von außen auf die Software. Wie stabil und zuverlässig läuft die Anwendung? Wie schnell reagiert die Software? Wie intuitiv und benutzerfreundlich sind die Oberflächen gestaltet? Welche Funktionalitäten sind abgedeckt? Wie sicher ist das System vor Angriffen? Die wichtigsten Merkmale sind demnach: Funktionalität, Benutzbarkeit, Zuverlässigkeit, Robustheit, Performance und Sicherheit.
Übrigens: Auch eher qualitative Qualitätsmerkmale wie Benutzerfreundlichkeit sind validierbar. Wie UX Design objektiv getestet werden kann, erläutert unser Head of UX Design Uwe Betzin hier: (UX) Design muss funktionieren
Die innere Softwarequalität beschreibt die Perspektive nach innen – also auf Architektur, Design und Güte des Quellcodes. Wie einfach lässt sich der Code lesen und verstehen? Wie gut lässt sich der Code umschreiben, modifizieren und erweitern? Welche Abhängigkeiten gibt es? Wie hoch ist die Testabdeckung? Die wichtigsten Merkmale sind: Lesbarkeit, Nachvollziehbarkeit, Testbarkeit, Wiederverwendbarkeit und Evolvierbarkeit.
Selbstredend sind äußere Qualitätsmerkmale, wie ein korrekter Funktionsumfang, Zuverlässigkeit oder Benutzerfreundlichkeit wichtige Kriterien, wenn es um die Wirtschaftlichkeit einer Lösung geht. Schließlich muss der Output des Softwareprodukts, bspw. Effizienzsteigerungen, nach einer gewissen Zeit die entstandenen Entwicklungsaufwand übersteigen, um einen positiven ROI zu gewährleisten. Jedoch darf bei dieser Rechnung die Product Lifetime und damit der Blick in die Zukunft nicht außer Acht gelassen werden. Denn so schnell wie sich heutzutage Prozesse, Technologien und sogar ganze Businessmodelle ändern, so rasant ändern sich auch die Anforderungen an die Software. Das bedeutet im Umkehrschluss: die Lösung muss sich auch wirtschaftlich weiterentwickeln, anpassen oder verändern lassen. Und genau hier kommt es auf die inneren Qualitätsmerkmale an.
Wird die innere Softwarequalität vernachlässigt, kommt es im Laufe der Entwicklung zu technischer Schuld. Und diese Schuld wächst mit jeder Änderung an. Mit ihr wächst auch der Arbeitsaufwand für Änderungen am Quellcode – und zwar nicht linear, sondern exponentiell. Das unvermeidbare Ende in vielen Fällen: Die Softwarelösung kann gar nicht mehr weiterentwickelt werden und muss von Grund auf neu geschrieben werden. Um dies zu verhindern und um Softwarelösungen zu entwickeln, die über einen längeren Zeitraum im Betrieb sein sollen, muss auch die innere Softwarequalität auf einem hohen Niveau sein. Und das von Beginn an.
Quellcode wird deutlich öfter gelesen als geschrieben. Hierbei haben sich syntaktische Normen und Konventionen etabliert, an die es sich zu halten gilt. Man könnte es vergleichen mit einer hochdeutschen Schreibweise nach Duden. Diese sind wir gewohnt zu lesen und können Sie daher schnell erfassen. Lautschrift dagegen vermittelt zwar die gleiche Bedeutung, da wir es aber nicht gewohnt sind sie zu lesen, dauert es erheblich länger sie zu entziffern. Das gleiche gilt für Quellcode: Schreiben alle in der gleichen Form und Syntax, findet man sich deutlich schneller zurecht.
Fast noch wichtiger als die Syntax ist jedoch die Semantik. Softwareentwickler:innen verbringt 70 bis 90% ihrer Arbeitszeit damit, Quellcode zu lesen und zu verstehen. Wirklich produktiv genutzt werden also lediglich 10 bis 30% der Zeit. Um dieses Verhältnis zu optimieren, ist es unerlässlich, dass der Code semantisch nachvollziehbar ist. Das bedeutet, dass man dem Code ansehen können muss, was er tut und wieso er es tut – was auch eine Verknüpfung der Kundenanforderungen mit dem Code impliziert.
Genauso wichtig, wie die Lesbarkeit und Nachvollziehbarkeit, ist es aber auch, dass der Code funktional korrekt arbeitet. Um dies nicht nur gewährleisten, sondern auch garantieren und nachweisen zu können, ist eine hohe Testabdeckung elementar. Über automatisierte Tests muss der Quellcode in seinen kleinsten Teilen, bspw. über Unit-Test, wie auch in seiner Gesamtheit, bspw. über Integrations-Tests, jederzeit überprüfbar sein. Nur so kann sichergestellt werden, dass Änderungen nicht zu Regression führen.
Softwarekomponenten sollten so implementiert werden, dass sie wiederverwendet werden können. Das hat gleich mehrere Vorteile: Zum einen wird dadurch Code-Duplizierung reduziert, was den Quellcode schlanker und effizienter macht. Zum anderen werden durch Wiederverwendung gleicher Codebestandteile mögliche Fehlerquellen reduziert, wodurch der Wartungsaufwand deutlich verringert werden kann.
Der Begriff evolvieren leitet sich vom Wort Evolution ab und beschreibt die Fähigkeit eines Lebewesens, sich durch Genveränderungen an neue Umweltfaktoren anzupassen. Bezogen auf Software bedeutet Evolvierbarkeit, dass Quellcode so designt wird, dass er jederzeit flexibel modifiziert werden kann. So kann bspw. ein neues Feature zu einem späteren Zeitpunkt im Entwicklungsprojekt mit geringerem Aufwand umgesetzt werden, als wenn es von Anfang an gefordert gewesen wäre.
Clean Code Development ist ein normgebendes Wertesystem für Softwareentwickler:innen. Über Werte und Tugenden vermittelt Clean Code Development eine perfekt auf die Softwareentwicklung zugeschnittene Arbeitsphilosophie, die von Agilität, konsequentem interdisziplinären Austausch, einem hohen Qualitätsbewusstsein sowie dem Drang nach ständiger Optimierung lebt. Daneben sind es ganz praktische Handlungsempfehlungen für das eigentliche Coding. In fünf Grade unterteilte Praktiken und Prinzipien, die, wenn sie von Anfang an beherzt werden, nicht nur zu hoher innerer Softwarequalität führen, sondern diese auch mess- und prüfbar machen.
Folgende Tabelle zeigt welche Prinzipien und Praktiken auf die wichtigsten inneren Softwarequalitätsmerkmale einzahlen und was sie bedeuten:
Wie kann man UX-Design eigentlich objektiv testen? Code-Testing vs. Design-Testing: eine Gegenüberstellung
Wie man Software entwickelt, die sich flexibel und langfristig an neue Markt- und Kundenanforderungen anpassen lässt