Qualitäten – Softwarequalität

1. Einführung

Die Bedeutung von Software in unserem Alltag nimmt immer mehr zu. Auch technische Systeme wie Automobile sind heute ohne Software nicht mehr denkbar. Komplexe Fahrerassistenzsysteme wie Abstandsregeltempomat oder Spurhalteassistent sind durch die weitgehende Realisierung in Software schneller und kostengünstiger umzusetzen, aber auch einfacher zu ändern. Demgemäß ist autonomes Fahren ohne Software ist undenkbar.
Allerdings hat Software eine unangenehme Eigenschaft: Bei ihrer Entwicklung werden besonders viele Fehler gemacht, die sich im fertigen Produkt als fehlerhafte Funktionalität zeigen. Im harmlosesten Fall führt das zu einem Schaden am Ruf des Herstellers, wie beispielsweise bei über Mobilfunk angreifbaren Fahrzeugen von BMW oder Chrysler, bei denen glücklicherweise niemand zu Schaden kam, weil verantwortungsbewusste Sicherheitsforscher die Fehler aufdeckten. Die resultierenden Kosten für die Aktualisierung der Software in allen Fahrzeugen waren aber nicht zu vernachlässigen, da teilweise Rückrufe in die Werkstätten notwendig waren. Auf der anderen Seite kann fehlerhafte Software aber auch Personenschäden, also Verletzung oder Tod von Menschen bedeuten, wie der Fall der unerwünschten Beschleunigungen bei Toyota gezeigt hat. Im Gerichtsprozess zu einem Unfall eines Toyota Camry, bei dem ein Mensch getötet und einer verletzt wurde, zeigten Gutachter, dass die unerwünschte Beschleunigung auf fehlerhafte Software zurückzuführen war. Toyota wurde zur Zahlung von drei Millionen Dollar Schadensersatz verurteilt. Und das war nur einer von mehreren Fällen.
Software sollte also aus ethischen, aber auch aus wirtschaftlichen Überlegungen heraus eine möglichst hohe Qualität besitzen. Dazu zählt sicherlich, dass Software möglichst wenig Fehler haben sollte. Aber ist das schon alles? Im Folgenden wird zunächst der Begriff Softwarequalität genauer definiert. Anschließend wird gezeigt, wie man Softwarequalität in der Praxis messbar macht. Abschließend werden Qualitätssicherungsmaßnahmen vorgestellt, mit denen eine möglichst hohe Softwarequalität erreicht werden kann.

2. Definition

Qualität hat viele Aspekte. Glass unterscheidet beispielsweise fünf verschiedene Sichten, unter den man Qualität betrachten kann: die transzendente, die produktbezogene, die benutzerbezogene, die herstellungsbezogene und die kostenbezogene. Zwei dieser Sichten tauchen in einer von vielen akzeptierten Definition der Softwarequalität im Standard IEEE 610.12-1990 auf. Dort wird software quality definiert als:

(1) The degree to which a system, component, or process meets specified requirements.

(2) The degree to which a system, component, or process meets customer or user needs or expectations.

Die erste Definition entspricht der produktbezogenen Sicht, die zweite der benutzerbezogenen. Da die Benutzer eines Softwaresystems typischerweise sehr heterogen sind, ist es aber meistens unmöglich, eine eindeutige systemspezifische Definition der gewünschten benutzerbezogenen Qualität anzugeben. Es hat sich daher bewährt, der produktbezogenen Sicht zu folgen, d. h. hohe Qualität liegt dann vor, wenn alle dokumentierten Anforderungen in hohem Umfang erfüllt sind.
Zu beachten ist, dass die Definition sowohl Anforderungen an das Produkt, also die entwickelte Software, als auch Anforderungen an den Entwicklungsprozess der Software umfasst. Entsprechend unterscheidet man Produktqualität und Prozessqualität. Außerdem kann man unterscheiden zwischen Eigenschaften des Produkt, die von außen wahrnehmbar sind (externe Qualität) und Eigenschaften des Produkts, die nur den Entwicklern zugänglich sind (interne Qualität). Die interne Qualität wird dann wichtig, wenn es darum geht, die Software zu erweitern, Fehler zu beheben oder sonstige Änderungen vorzunehmen. Sie darf nicht vernachlässigt werden, denn Änderungen machen in der Praxis mehr als die Hälfte des Gesamtaufwands für Software über ihre Lebenszeit aus.

3. Messung

Um Softwarequalität messbar zu machen, haben sich Qualitätsmodelle bewährt, die alle relevanten Aspekte, die sich in Anforderungen an die Software wiederfinden sollten, umfassen. Dabei gibt es zwei wesentliche Ansätze: generische Qualitätsmodelle oder Vorgehensmodelle. Generische Modelle sind quasi ein Baukasten, aus dem man sich die gewünschten Eigenschaften für das konkrete Produkt auswählt, während Vorgehensmodelle einen Prozess beschreiben, wie man zu einem maßgeschneiderten Qualitätsmodell für ein konkretes Produkt kommt. Das bekannteste Vorgehensmodell ist Goal-Question-Metric (GQM). Beide Ansätze liefern am Schluss einen Satz an Maßen, sog. Metriken, mit denen Qualitätseigenschaften der Software gemessen werden können.

4. Qualitätssicherung

Software hat bestimmte Eigenschaften, die es Menschen sehr schwer machen, bei ihrer Entwicklung keine Fehler zu machen. Selbst die beste bekannte Software aus der Raumfahrt enthält immer noch Restfehler. Es hat sich allerdings gezeigt, dass zum einen über eine brauchbare Vorgehensweise bei der Entwicklung der Software die Wahrscheinlichkeit der Entstehung von Fehlern reduziert werden kann, und man durch geeignete Maßnahmen die meisten der trotzdem gemachten Fehler finden kann. Die dazu notwendigen Qualitätssicherungsmaßnahmen werden unterschieden in drei Bereiche: organisatorische, konstruktive und analytische. Organisatorische Maßnahmen stellen sicher, dass die Entwicklung sinnvoll organisiert wird, beispielsweise durch Einhaltung von Prozessnormen wie Automotive SPICE. Die konstruktiven Maßnahmen stellen sicher, dass die Entwicklung auf bewährte Strukturen zurückgreift und typische Fehler vermeidet, z. B. durch Einhaltung von Programmierrichtlinien wie MISRA-C. Beide Bereiche setzen also an der Fehlerentstehung an. Die analytische Qualitätssicherung hingegen hat die Aufgabe, vorhandene Fehler zu identifizieren. Die bekanntesten Ansätze sind hier Review, statische Analyse und Test. Das aus dem Projektmanagement bekannte magische Dreieck aus Qualität, Kosten und Zeit legt allerdings nahe, dass nicht beliebig viel Aufwand in Qualität investiert werden darf, da sonst die Kosten explodieren und die angestrebten Auslieferungstermine nicht eingehalten werden können. Es ist also letztlich ein wirtschaftlicher Kompromiss zwischen Qualitätssicherungskosten und Fehlerkosten nötig.

Ralf Reißing