Software-Qualität
Prof. Alberto Sillitti, Professor an der Fakultät für Informatik und Ingenieurwesen der Innopolis University (Russische Föderation), erklärt alles Wissenswerte zum Thema Software-Qualität. Prof. Sillitti betreibt Forschung im Bereich der Software-Qualität in komplexen Softwaresystemen (Cyber-physical systems, Smart city, Unternehmen 4.0, etc.) in Zusammenarbeit mit verschiedenen internationalen Industriebetrieben, KMUs und Start-ups. Zudem berät er wichtige Südtiroler Unternehmen als Innovation Manager und Experte für Entwicklung und Bewertung der Software-Qualität.
Aus Sicht des Erzeugers und Benutzers
Softwares gehören mittlerweile zu unserem Alltag und sind eine grundlegende Komponente fast aller Produkte und Dienstleistungen, die wir alltäglich beanspruchen. Dennoch bleiben die meist sehr komplexen Softwaremechanismen für den Großteil der Benutzer ein Rätsel.
Wenn von der Qualität einer Software die Rede ist, sind damit oft nur die Mängel der Software („Bug“) gemeint. Dieser Aspekt ist zwar sehr wichtig, sagt aber nicht viel über die eigentliche Qualität der Software aus. Wesentlich ist in diesem Zusammenhang auch die Qualität des Quellcodes bzw. der Programmiersprache - ob sie zum Beispiel gut geschrieben und leicht zu ändern oder ausbaubar ist. Diese internen Merkmale einer Software sind nicht unmittelbar erkennbar, haben aber einen bedeutenden Einfluss auf die zukünftigen Entwicklungs- und Wartungskosten eines Systems und somit auf den Endpreis an den Benutzer. Wer die Ausarbeitung einer Systemsoftware in Auftrag gibt, die lange in Betrieb bleiben wird, sollte daher nicht nur die Bugs, sondern auch den Quellcode selbst bewerten. Somit können Zeit und Geld bei zukünftigen Änderungen und/oder Erweiterungen des Systems gespart werden. In diesem Zusammenhang ist eine tiefere Kenntnis der verschiedenen Qualitätsaspekte einer Software unumgänglich, um ein System in seiner Gesamtheit bewerten zu können.
Gegenstand dieses Beitrages ist daher ein sehr komplexes Softwaremerkmal: die Qualität. In diesem ersten Artikel befassen wir uns mit dem Begriff der Softwarequalität, sei es aus der Sicht des Erzeugers als auch des Benutzers eines Systems. In einem weiteren Artikel geht es dann um die Bewertung der Qualität und um eine konkrete Fallanalyse.
Es gibt unzählige Definitionen von Qualität. Eine der geläufigsten Begriffsbestimmungen betrifft auf jeden Fall die Fähigkeit einer Software, ihre Aufgabe erfüllen zu können. Bei dieser Definition geht es um die externe Qualität der Software, wobei der Benutzer die Software als geschlossene Schachtel wahrnimmt, in welche Daten eingegeben werden und Ergebnisse herauskommen. Dabei spielt der interne Ablauf keine Rolle. Der Benutzer kann dieses Qualitätsmerkmal ohne tiefere Einblicke in den Mechanismus oder besondere Fachkenntnisse bewerten: Es genügt, die Applikationsdomäne zu kennen, oder anders gesagt zu wissen, welche Ergebnisse aufgrund der gelieferten Daten erwartet werden. Unter diesem Gesichtspunkt lassen sich bereits verschiedene Aspekte der Softwarequalität bewerten, so zum Beispiel:
- die Fehlerhaftigkeit: Enthält der Quellcode Fehler, die das System an der korrekten Abwicklung seiner Aufgaben hindern?
- die Leistung: Wie schnell werden die Vorgänge des Systems durchgeführt und die Ressourcen (z.B. der Speicher) beansprucht?
- die Benutzerfreundlichkeit oder Usability: Wie erfolgt die Interaktion zwischen Mensch und Rechner und wie werden die Informationen mit dem Benutzer ausgetauscht?
Jeder Aspekt kann unterschiedlich bewertet werden. So kann die Fehlerhaftigkeit zum Beispiel aufgrund der Anzahl der Fehler, der Dauer der fehlerbedingten Arbeitsunterbrechung oder der Korrekturmaßnahmen, etc. bewertet werden. Jeder einzelne Bewertungsmodus verfolgt ein spezifisches Ziel und ermöglicht allein keine vollständige und zuverlässige Bewertung eines Softwaresystems.
Neben der externen, vom Benutzer wahrgenommenen Qualität, spielen andere Definitionen von Qualität, welche den internen Aufbau einer Software berücksichtigen, ebenso eine wichtige Rolle. Bei der internen Qualitätsprüfung wird der Quellcode der Entwickler genauer unter die Lupe genommen. Hierbei fallen ganz andere Aspekte ins Gewicht, so zum Beispiel:
- Komplexität: Wie komplex sind die Programmiersprache und vor allem die gewählten Algorithmen?
- Modularität: Inwieweit ist ein bestimmtes Quellcode-Segment von einem anderen abhängig?
- Wiederverwendbarkeit: Kann ein Quellcode-Segment für andere zukünftige Systeme wiederverwendet werden?
- Lesbarkeit: Kann ein Entwickler die Funktionsweise eines Quellcode-Segments leicht verstehen?
- Wartbarkeit: Bei dieser Bewertung werden verschiedene Aspekte berücksichtigt, unter anderem auch die vorher genannten, aber auch die Modifizierbarkeit des Quellcodes zur Behebung von Fehlern, Ergänzung oder Änderung von Funktionen, etc.
Auch in diesem Fall kann jeder angeführte Aspekt auf sehr unterschiedliche Weise bewertet werden. Die Lesbarkeit ist zum Beispiel an der Länge des Quellcodes, der für den Einbau einer spezifischen Funktion erforderlich ist, oder an der Menge der hinzugefügten Kommentare etc. messbar.
Sei es die interne als auch die externe Qualität sind aber erst dann bewertbar, wenn das Produkt - und somit der Quellcode - bereits (auch nur zum Teil) entwickelt wurde. Das ist auch der Grund dafür, dass nicht nur das Produkt, sondern auch das Produktionsverfahren gemessen werden muss. Nur so bieten sich verschiedene Elemente für die Entscheidung, ob die Entwicklung einer Software in Auftrag gegeben werden kann.
Die Bewertung des Produktionsprozesses gewährleistet zwar nicht die Qualität des Endproduktes, liefert jedoch Elemente, um die Fähigkeit eines Anbieters, Qualitätssoftware zu entwickeln, beurteilen zu können. Zu diesem Zweck wurden verschiedene Verfahren für die Bewertung eines Softwareentwicklungsprozesses ausgearbeitet. Das bekannteste dürfte dabei das „Capability Maturity Model Integration“ (CMMI) sein. Es berücksichtigt die Organisationsfähigkeit eines Betriebes und seine Fähigkeit, bewährte Softwareentwicklungspraktiken zu befolgen und so ein konstantes Qualitätsniveau der Systeme zu gewährleisten. Diese Methode wurde in den Achtzigerjahren im Zusammenhang mit dem Softwarebedarf des US-Verteidigungsministeriums entwickelt, war also ursprünglich für große Firmen und die Entwicklung von Softwaresystemen gedacht, die nur wenig mit den heutigen betrieblichen Softwareanforderungen zu tun haben.
Aus diesem Grund eignen sich das CMMI und ähnliche Ansätze auch nicht unbedingt für das gewöhnliche Umfeld, in dem ein Großteil der Betriebe tätig ist. Heute müssen Systeme schnell entwickelt werden und jederzeit anpassungsfähig sein, um einem kontinuierlichen geschäftlichen Wandel gerecht zu werden. Daher haben sich auch die Verfahren für die Entwicklung von Softwares in den letzten zwanzig Jahren radikal geändert; allerdings halten die Methoden zur Bewertung der Qualität der Produktionsprozesse nicht immer mit diesen Veränderungen Schritt. Die Zertifizierung eines Softwareentwicklungsprozesses ist sehr komplex und erfordert einen großen Arbeitsaufwand, den sich nur wenige Firmen aus spezifischen Applikationsdomänen (zum Beispiel aus Luftfahrt, Transportwesen, Energieproduktion, etc.) leisten können. Der Großteil der Unternehmen ist jedoch in verschiedenen Marktbereichen tätig und wendet in der Regel Entwicklungsprozesse an, die nur schwer zertifiziert werden können, sich dafür aber besser an einzelne Marktanforderungen anpassen. Heute werden vor allem sogenannte „agile“ Entwicklungsverfahren verwendet, die spezifische Modelle wie SCRUM, Kanban, Extreme Programming (XP), etc. umfassen.
Für die Qualität des Produktes und des Softwareentwicklungsprozesses gibt es mittlerweile Bezugsparameter, die in verschiedenen internationalen Standards verankert wurden, z.B. in:
- ISO/IEC 25000 - System and Software Quality Requirements and Evaluation (SQuaRE)
- ISO/IEC 33001 - Information Technology -- Process Assessment
Dabei handelt es sich um komplexe Standards, die nicht immer vollständig angewandt werden können bzw. deren vollständige Umsetzung auch nicht immer von Nutzen ist. So ist ein Kontrollsystem für ein Flugzeug sicher etwas ganz anderes als eine App für Smartphones, daher müssen auch die Entwicklungsprozesse dementsprechend verschieden sein und auf unterschiedliche Weise bewertet werden.
Kurzum ist die Qualitätsbewertung eines Softwaresystems eine komplexe Angelegenheit, die an den spezifischen Einsatzbereich und an die Anforderungen des Benutzers angepasst werden muss.
zur Person
Alberto Sillitti berät wichtige Südtiroler Unternehmen als Innovation Manager und Experte für Entwicklung und Bewertung der Softwarequalität. Er ist zudem Professor an der Fakultät für Informatik und Ingenieurwesen der Innopolis University (Russische Föderation), wo er auch Forschung im Bereich der Softwarequalität in komplexen Softwaresystemen (Cyber-physical systems, Smart city, Industry 4.0, etc.) in Zusammenarbeit mit verschiedenen internationalen Industrien, KMU und Start-ups betreibt.