false

Softwarequalität

Das Ziel eines Entwicklers, retroperspektiv Softwarearchitekten sollte immer sein, gute Software zu erschaffen. Was aber macht die Güte einer Software aus?

Als Entwickler nehmen wir, wenn wir über Qualität sprechen, immer die Codequalität war. Die Codequalität ist nämlich die Qualität, welche uns direkt stört, sollte Sie verletzt werden. Die Codequalität ist allerdings nur ein sehr kleiner Aspekt der Softwarequalität.

Die ISO/IEC 25010 ist ein internationaler Standard für die Bewertung der Qualität von Softwareprodukten. Sie beschreibt ein Rahmenwerk für die Bewertung von Software-Systemen hinsichtlich ihrer Funktionalität, Übertragbarkeit, Effizienz, Benutzbarkeit, Zuverlässigkeit und Übertragbarkeit. Dieser Standard dient als Leitfaden für die Durchführung von Software-Qualitätsbewertungen und unterstützt die Überwachung der Software-Entwicklungsprozesse.

Da die ISO 25010 am häufigsten von Softwarearchitekten genutzt wird, werden wir uns die Sicht der Softwarearchitekten einmal genauer anschauen:

Als Softwarearchitekt muss man alle Punkte im gesamten Prozess immer im Hinterkopf behalten. Andernfalls kann es zu Schwächen in der Software kommen, welche sich früher oder später, negativ auswirken.

Daher möchte ich diese Aspekte und ihre Unteraspekte einmal genauer betrachten.

Funktionalität

Die Funktionalität beschreibt die Fähigkeit eines Software-Systems, die erwarteten Funktionen ordnungsgemäß auszuführen. Dies schließt ein, dass das System die spezifizierten Anforderungen erfüllt, den Anwendern die gewünschten Funktionen bereitstellt und Fehlerfrei arbeitet. Sie stellt sicher, dass das System seine Aufgabe erfüllt und die Bedürfnisse der Anwender befriedigen kann.

Dies bedeutet nicht nur, dass eine Software viele Features beinhalten kann, sondern das diese Features auch wirklich gebraucht werden oder das die Features, welche enthalten sind, für sich genommen auch so funktionieren wie Sie gebraucht werden.

Die Subaspekte von Funktionalität sind:

  • Vollständigkeit
  • Korrektheit
  • Angemessenheit

Prüfen können wir diesen Aspekt und seine Unteraspekte durch Anforderungsbasiertetests, Blackboxtests, Integrationstests und Angemessenheitstests.

Effizienz

Die Effizienz beschreibt die Kapazität eines Software-Systems, seine Funktionen mit einem angemessenen Aufwand an Ressourcen (z.B. Zeit, Speicher, Prozessorleistung) auszuführen. Effizienz stellt sicher, dass das System die Anforderungen in einer zufriedenstellenden Geschwindigkeit und mit einem angemessenen Ressourceneinsatz erfüllt. Eine hohe Effizienz ist wichtig, um eine gute Leistung und Benutzerfreundlichkeit zu gewährleisten.

Es geht also darum, ob wir zum Beispiel zusätzliche Nutzer auf unser Software-System los lassen können, oder dieses dann unter der Last zusammenbricht. Wie schnell es überhaupt auf Anfragen reagiert und in wie fern die Rechner / Server, welche wir einsetzen auch gerechtfertigt sind.

Die Subaspekte von Effizienz sind:

  • Antwortzeitverhalten
  • Resourcenverbrauch
  • Kapazität

Geprüft wird dieser Aspekt und seine Unteraspekte über Lasttests, Performancetests und Skalierbarkeitstests.

Kompatibilität

Kompatibilität beschreibt die Fähigkeit eines Software-Systems, problemlos mit anderen Systemen, Anwendungen, Geräten, Betriebssystemen oder Netzwerken zusammenzuarbeiten. Dies umfasst auch die Fähigkeit, Daten oder Informationen auszutauschen und/oder zu kommunizieren, ohne dass es zu Fehlern oder Inkonsistenzen kommt. Sie stellt sicherstellt, dass das System gut in bestehende IT-Umgebungen integriert werden kann und mit anderen Systemen und Anwendungen zusammenarbeiten kann.

Hierbei geht es um das Zusammenspiel zwischen Komponenten und Software-Systemen.

Die Subaspekte von Kompatibilität sind:

  • Koexistenz
  • Interoperabilität

Geprüft wird dieser Aspekt und seine Unteraspekte durch Interoperabilitättests und Koexistenztests.

Benutzbarkeit

Die Benutzbarkeit beschreibt die Fähigkeit eines Software-Systems, von den Anwendern effektiv, effizient und zufriedenstellend genutzt zu werden. Dies schließt ein, dass das System einfach zu verstehen und zu bedienen ist, intuitiv, benutzerfreundlich und angemessen an die Bedürfnisse der Anwender angepasst ist. Benutzbarkeit stellt sicher, dass die Anwender das System erfolgreich nutzen können, ohne dass es zu Fehlern oder Verwirrung kommt, und dass sie eine zufriedenstellende Nutzererfahrung haben.

Gerade im Konsumermarkt ist die Benutzbarkeit der Bereich, indem sich die Spreu vom Weizen trennt. Denn hier wird betrachtet wie aufwendig die Benutzung durch den Bediener ist und wie gut dessen Arbeitsabläufe umgesetzt sind und vor allem erleichtert werden. Es ist somit nicht einfach damit getan, dass wir eine Software „hinsetzen“; Sie sollte auch verstanden werden.

Die Subaspekte von Benutzbarkeit sind:

  • Angemessenheit
  • Erlernbarkeit
  • Bedienbarkeit
  • Ästhetik
  • Barrierefreiheit

Geprüft wird dieser Aspekt und seine Unteraspekte durch Usabilitychecks, A/B-Testings, Benutzertests und Gebrauchstauglichkeitstests.

Übertragbarkeit

Übertragbarkeit beschreibt die Fähigkeit eines Software-Systems, problemlos auf eine andere Hardware-Plattform, ein anderes Betriebssystem oder in eine andere IT-Umgebung übertragen zu werden, ohne dass es zu Fehlern oder Inkonsistenzen kommt. Übertragbarkeit stellt sicher, dass das System leicht auf andere Plattformen oder Umgebungen übertragen werden kann, wenn dies erforderlich ist, und dass es weiterhin wie erwartet funktioniert.

Zusammenfassend sagt die Übertragbarkeit aus, wie leicht sich die Software in anderen Systemen übertragen und nutzen lässt. Eine Frage kann zum Beispiel sein: Kann ich meine Desktop-Anwendungen auf anderen Betriebssystemen einsetzen?

Die Subaspekte von Übertragbarkeit sind:

  • Anpassungsfähigkeit
  • Installierbarkeit
  • Austauschbarkeit

Geprüft wird dieser Aspekt und seine Unteraspekte durch Installationstests, Betriebstests und Konfigurationstests.

Wartbarkeit

Wartbarkeit beschreibt die Fähigkeit eines Software-Systems, effektiv und effizient gewartet und modifiziert werden zu können, um Fehler zu beheben, Anforderungen zu ändern oder neue Funktionen hinzuzufügen. Wartbarkeit stellt sicher, dass das System leicht zu verstehen und zu modifizieren ist, wenn dies erforderlich ist, und dass es schnell und effizient gewartet werden kann, um Fehler zu beheben oder Anforderungen zu ändern.

Die Wartbarkeit ist leider einer der Aspekte, welcher am häufigsten vergessen wird, aber für das langfristige Überleben der Software der essentiellste ist. Im Kern geht es nämlich darum, wie viel Aufwand erbracht werden muss um die Software zu ändern. Je länger einer Software besteht, desto schwieriger kann es werden eine Software zu verändern, wenn nicht darauf geachtet wurde, dass Sie veränderbar sein muss.

Daher ist Wartbarkeit auch einer der zentralsten Aufgaben eines Softwarearchitekten! Du solltest sicherstellen, dass auch langfristig die Wartbarkeit von Software sichergestellt wird.

Die Subaspekte der Wartbarkeit sind:

  • Modularität
  • Wiederverwendbarkeit
  • Analysierbarkeit
  • Modifizierbarkeit
  • Prüfbarkeit

Geprüft wird dieser Aspekt und seine Unteraspekte durch statische Codeanalyse, Wartbarkeitstests und Whiteboxtests, also über automatisierte Unittests oder automatisierte Integrationtests.

Sicherheit

Sicherheit beschreibt die Fähigkeit eines Software-Systems, gegen Bedrohungen und Angriffe geschützt zu sein und die Integrität, Verfügbarkeit und Vertraulichkeit von Daten und Informationen sicherzustellen. Dies schließt ein, dass das System gegen unerwünschte Zugriffe, Datenverlust, Datenmanipulation oder andere Bedrohungen geschützt ist, die die Integrität und Vertraulichkeit der Daten beeinträchtigen könnten. Sicherheit stellt somit sicher, dass das System gegen Bedrohungen und Angriffe geschützt ist und dass die Daten und Informationen, die es verarbeitet, sicher sind.

Sicherheit wird sehr wichtig, wenn auffällt, dass Sie nicht gegeben ist. Im Groben geht es darum, wie gut Daten vor unberechtigten Zugriffen geschützt werden und ob diese Zugriffe auch protokoliert werden.

Die Subaspekte von Sicherheit sind:

  • Vertraulichkeit
  • Integrität
  • Nachweisbarkeit
  • Verantwortlichkeit
  • Authentizität

Geprüft wird dieser Aspekt und seine Unteraspekte durch Securitytests und Penetrationtests.

Zuverlässigkeit

Zuverlässigkeit beschreibt die Fähigkeit eines Software-Systems, korrekt und verlässlich zu funktionieren und in Übereinstimmung mit seinen Anforderungen zu arbeiten. Dies schließt ein, dass das System fehlerfrei funktioniert und seine Leistungen zuverlässig und konsistent erbringt, ohne unerwarteten Ausfall oder Fehlfunktionen. Zuverlässigkeit stellt sicher, dass das System zuverlässig funktioniert und dass es den Anforderungen der Anwender entspricht.

Die Zuverlässigkeit wird in der Praxis gerne durch Early Adopter oder in den Fachbereichen festgestellt. Es geht dabei zu Prüfen, in wie fern die Software ein Leistungsniveau unter festgelegten Bedingungen und über ein definierten Zeitraum, aufrecht halten kann.

Wenn also die Software kurz nach einem Release instabil wird, dann wurden offensichtlich die Zuverlässigkeitsaspekte nicht berücksichtigt.

Zu diesen Subaspekten gehören:

  • Ausgereiftheit
  • Verfügbarkeit
  • Fehlertoleranz
  • Wiederherstellbarkeit

Geprüft wird dieser Aspekt und seine Unteraspekte durch Provokationstests, Affentests, Ausfallsicherheitstests und Widerherstellbarkeitstests.

Wie man sieht, hat Softwarequalität sehr viele Aspekte und Subaspekte. Es gibt diverse Möglichkeiten diese zu prüfen. Die Aufgabe von Softwarearchitekten ist es diese Aspekte zu berücksichtigen und im Hinterkopf zu behalten, wenn wir Software konzipieren, entwerfen und überprüfen.