Verschleißfestigkeit der Programme gilt nicht für die Merkmale Sicherheit und Handhabbarkeit; Teil 2:

Softwarequalität darf kein Zufallsprodukt sein

08.04.1982

Wachsende Softwarekosten, der zunehmende Anteil der Software am Umfang der Aufgabenerfüllung in einer Unternehmung etc. zwingen dazu, die Qualität zu sichern, um hierdurch sowohl die Kosten im Einsatz (zum Beispiel Wartungskosten), aber auch Folgekosten im Griff zu behalten. Nachdem wir im Teil t dieser Serie auf die Softwarequalität als personelles Entwicklungsproblem eingegangen sind und hinsichtlich der Frage was Softwarequalität ist, unterschiedliche Klassen von Qualitätsmerkmalen vorgestellt haben, werden in dieser Ausgabe zunächst die einzelnen Qualitätsmerkmale voneinander abgegrenzt und die gegenseitigen Interdependenzen aufgezeigt. Weiterhin werden die Wirkungen von Qualitätsmerkmalen auf die Kosten (Kosten der Fehlererkennung etc.) und die Zeit (Lebensdauer etc.) behandelt sowie die unterschiedlichen Maßnahmen zur Erreichung der Qualität eingeordnet.

Entsprechend der Strukturierung eines Softwareprojektes, insbesondere der Differenzierung unterschiedlicher Produkte des Softwareprojekts (Zwischen-, End- und Teilprodukte) sowie den individuell unterschiedlichen Anforderungen der Anwendungsumgebung eines Softwareprodukts, sind Qualitätsmerkmale zu bestimmen sowie konkrete Anforderungen zu formulieren. Folgende Qualitätsmerkmale werden unterschieden:

- Änderbarkeit

Sie umfaßt Eigenschaften des Softwareprodukts, welche die spätere Durchführung von potentiellen Änderungen (Fehlerbehebung, Anpassung, Erweiterungen) erleichtern. Die Änderbarkeit drückt sich aus im Aufwand zur Änderung des Softwareprodukts im Bedarfsfalle.

- Allgemeingültigkeit

Sie umfaßt die Eignung des Softwareprodukts zur Aufgabenlösung und -erfüllung in unterschiedlichen gleichartigen Einsatzbereichen (Abteilungen, Organisationen, Aufgabenstellungen). Die Allgemeingültigkeit drückt sich aus in der Anwendungsbreite sowie dem Aufwand zur Einführung des Softwareprodukts bei einem neuen Anwender sowie dem Aufwand zur Anpassung bei geringfügigem Erweiterungsbedarf.

- Effizienz

Sie umfaßt den Grad der Beanspruchung knapper Ressourcen durch das Softwareprodukt in der Anwendung. Die Effizienz drückt sich aus im Umfang der Leistungsabgabe pro Zeiteinheit (Durchsatz) sowie im Umfang der kapazitativen Beanspruchung der Ressourcen (Laufzeit zur Lösung einer Aufgabe, interner und externer Speicherbedarf).

- Funktionsabdeckung

Sie umfaßt den Grad der Automatisierung der Aufgabenerfüllung im geplanten Einsatzbereich durch das Softwareprodukt unter Berücksichtigung von Automatisierungsmöglichkeiten, bereits automatisieren Teilabläufen und Kosten-/Nutzaspekten. Die Funktionsabdeckung drückt sich im Gesamtaufwand zur Aufgabenerfüllung im geplanten Einsatzbereich nach Einführung des Softwareprodukts sowie den noch verbleibenden Rationalisierungsmöglichkeiten aus.

- Handhabbarkeit

Sie umfaßt Eigenschaften, insbesondere auch Funktionen des Softwareprodukts, welche die Anwendung durch Menschen erleichtert. Die Handhabbarkeit drückt sich wesentlich durch den Integrationsgrad in und die Anpassungsfähigkeit des Softwareprodukts an den natürlichen Ablauf des Aufgabenerfüllungsprozesses des Menschen aus sowie durch den Umfang der zusätzlichen Belastung des Menschen bei der Anwendung (körperliche Belastung, Ansprüche an die Fähigkeiten des Menschen).

- Portabilität

Sie umfaßt die Eignung des Softwareprodukts für andere Hardware-/Softwarekonfigurationen. Die Portabilität drückt sich aus im Aufwand des Transports des Softwareprodukts von einer gegebenen Konfiguration auf eine bestimmte andere oder potentielle andere Hardware-/ Software-Konfiguration.

- Richtigkeit

Sie umfaßt die Übereinstimmung des Softwareprodukts mit den Vorgaben zu seiner Erstellung (Pflichtenheft Entwurf) sowie die logische Fehlerfreiheit. Die Richtigkeit drückt sich im verfügbaren Leistungsspektrum der Funktionen sowie dem fehlerfreien Ablauf der Funktionen bei korrekter Anwendung aus.

- Robustheit

Sie umfaßt die Fähigkeit eines Softwareprodukts, eine potentielle fehlerhafte Anwendung durch den Benutzer (oder sonstiges fehlerhaftes Verhalten der Umwelt) sowie Fehler im Softwareprodukt selbst während der Verarbeitung zu erkennen sowie darauf "intelligent" zu reagieren. Die Robustheit drückt sich aus in der Stabilität des Systems bei Fehlern, in der Anzeige des Fehlers sowie in der Einleitung von Maßnahmen, Fehlerfolgen möglichst zu verhindern oder zu mindern. Ferner kann auch eine Korrektur des Fehlers erfolgen.

- Sicherheit

Sie umfaßt Schutzmaßnahmen des Softwareprodukts, die einen unerlaubten Zugriff, eine unerlaubte Verwendung des Produkts oder von Daten sowie die zufällige oder nicht zulässige Zerstörung durch Dritte verhindern. Die Sicherheit drückt sich aus in organisatorischen Regelungen, die produktintern (durch Implementierung von Sperren) und -extern konkret den Schutz sicherstellen sollen.

- Testbarkeit

Sie umfaßt Eigenschaften und Funktionen des Softwareprodukts, die Maßnahmen des Testens erleichtern. Die Testbarkeit drückt sich aus in den Ergebnissen von Testmaßnahmen; dies sind die Fehleraufdeckungsgrade, insbesondere aber der Aufwand zum Testen des Softwareprodukts sowie die Reaktionszeit der Fehlerlokalisierung und -behebung bei einem Fehler.

- Verständlichkeit

Sie umfaßt den Grad, inwieweit der Inhalt, Zweck und Ziel eines Produkts einem verständigen Mitarbeiter deutlich wird (oder werden kann). Sie umfaßt Elementareigenschaften wie Nachvollziehbarkeit, Strukturierung, Lesbarkeit, Detaillierungsgrad, Selbstdokumentationsgrad. Die Verständlichkeit drückt sich aus im Aufwand zur Bearbeitung oder Anwendung des Produkts sowie in der Fehlerrate bei der Anwendung oder auch Transformation des Produkts in ein höherwertiges Produkt.

- Vollständigkeit

Sie umfaßt das Verhältnis von notwendigem (gefordertem oder sinnvollem) zu realisiertem Inhalt des Softwarezwischen- oder -endprodukts. Die Vollständigkeit drückt sich aus in der unmittelbaren Nutzbarkeit des Produkts (ohne Nacharbeit für die Bereitstellung ergänzender Daten oder Funktionen).

Die hier angeführten Qualitätsmerkmale erlauben eine zwar differenzierte Betrachtung der Qualität von Softwareprodukten. Es ist jedoch zu beachten, daß auch diese Merkmale immer noch sehr global sind und keine direkte Umsetzung in Maßnahmen der Softwareentwicklung sowie keine unmittelbare Qualitätsbewertung zulassen. Hierzu ist es zunächst notwendig, die Merkmale weiter in elementare Merkmale aufzulösen, denen schließlich jeweils Qualitätsmaße auf operationaler Ebene zugeordnet werden können.

Vielgestaltige Interdependenz

Wie bereits dargestellt wurde, ist die Qualität nicht als Einheit zu verstehen, die sich durch Abspalten von Teilen dieser Einheit aufteilen laßt in unterschiedliche isolierte Qualitätsmerkmale. Vielmehr ist Qualität ein mehrdimensionales Gebilde, dessen Merkmalselemente teils neutrale, teils ergänzende, teils konkurrierende Beziehungen zueinander aufzeigen (siehe Abb. 1). Die Gewichte ihrer Beziehungen sind abhängig vom Inhalt eines jeden Qualitätsmerkmals, insbesondere aber von den realen Anforderungen an die Qualitätsmerkmale und damit von der Gewichtung des Merkmals in der geplanten Einsatzumgebung des Softwareprodukts.

Qualität ist eine Zielgröße im Software-Entwicklungsprozeß, die einerseits zwar Kosten verursacht, aber andererseits auch - normalerweise in größerem Maße - die Kosten reduziert. Durch die Realisierung von Qualitätsanforderungen werden Kosten verursacht; denn eine erhöhte Handbarkeit oder Effizienz erfordert beispielsweise bestimmte Maßnahmen der Konstruktion sowie der Analyse, um etwa Abweichungen festzustellen und Korrekturmaßnahmen einzuleiten.

Qualität beeinflußt das Verhalten oder die Wirkung des Softwareprodukts und damit den Aufwand zur Transformation von Zwischenprodukten sowie den Aufwand zur Anwendung, Wartung und Übertragung von Softwarezwischen oder -endprodukten. Abb. 2 gibt einen Überblick über einige wesentliche Kostenarten, die bei der Betrachtung des Einflusses der Qualität auf Kostenfaktoren Berücksichtigung finden müssen.

Die Wirkung der Qualität kann an dieser Stelle nur tendenziell aufgezeigt werden. Es ist zu beachten, daß ein Qualitätsmerkmal eigentlich nur in Verbindung mit dem zugehörigen Produkttyp sowie der Einsatzumgebung eine detaillierte Aussage zuläßt. Zu differenzieren sind global die projektinternen Entwicklungskosten sowie die projektexternen Kosten. Qualitätsmerkmale von Zwischenprodukten verursachen in der Regel bei der Erstellung des Zwischenprodukts Kosten und erhöhen damit die Gesamtkosten des entsprechenden Zwischenprodukts, sie wirken aber meist bereits während des Softwareentwicklungsprojekts positiv und mindern die gesamten Projektkosten (siehe Verständlichkeit und Vollständigkeit bezogen auf Softwarezwischenprodukte).

Eine weitere Aufwands- oder Nutzengröße neben den Kosten ist die Zeit. Die Zeit, im wesentlichen die Entwicklungsdauer sowie die Lebensdauer (oder auch die Einsatzhäufigkeit des Softwareprodukts), ist ebenfalls abhängig von den Qualitätsanforderungen sowie den realisierten Qualitätsmerkmalen. Global ist festzustellen, daß erhöhte Qualität die Entwicklungsdauer eines Softwareprodukts mehrt; andererseits kann die Entwicklungsdauer aber analog den Entwicklungskosten auch verkürzt werden. Dies ist in der Regel bei Qualitätsmerkmalen von Zwischenprodukten gegeben, die zusätzlichen Aufwand in einer Phase des Softwareprojekts bereits in nachfolgenden Phasen kompensieren oder dazu führen, daß die Einsparungen größer sind als die getätigten Aufwendungen (siehe Vollständigkeit, Testbarkeit, Änderbarkeit und Verständlichkeit in Abb. 2).

Aussonderung als letzte Möglichkeit

Die einmal erreichte Qualität gilt es dann zu halten oder zu verbessern. Es wird vielfach behauptet, ein wesentliches Merkmal von Software gegenüber Hardware sei, daß Software nicht verschleiße. Implizit wird dann eigentlich auch die Meinung vertreten, Qualität bleibe konstant. Dies trifft sicher bei einigen Merkmalen zu, wie Richtigkeit, Robustheit, Effizienz (immer vorausgesetzt, die Umgebung bleibt die gleiche). Beiden Qualitätsmerkmalen Sicherheit und Handbarkeit aber ist dies zweifelhaft.

Einfache Sicherheitsregelungen können bereits kurzfristig zunächst zu einer hohen Sicherheit führen. Mit der Zeit lernen jedoch die Benutzer das System kennen und spüren zwangsläufig auch Schwächen oder Lücken im Sicherungssystem auf. Die Sicherheit des Softwareprodukts nimmt ab. Die Handbarkeit wird wesentlich bestimmt von den Anforderungen des Benutzers. Diese aber steigen ständig mit der Dauer seiner DV-Erfahrung sowie insbesondere durch technische Neuerungen oder Möglichkeiten der Rationalisierung und Verbesserung. Mit steigenden Anforderungen nimmt die Handbarkeit zu.

Die Qualität verursacht also Aufwand. Aufwand fallt sowohl in der Softwareentwicklung wie auch im Betrieb der Software an. Sinkt die Qualität unter ein bestimmtes Maß (zu hohe Fehlerrate, zu hoher Aufwand der Änderung der Software zwecks Anpassung an Anforderungen), so kann schließlich die Neuentwicklung der Software und Ablösung des alten Softwaresystems die letzte Möglichkeit sein, ein qualitätsgerechtes Softwareprodukt zu erhalten.

Andere Ziele - andere Wege

Geht man einmal davon aus, daß der Softwareentwickler weiß, in welchem Umfang und welche Art von Softwarequalität er anstrebt, dann stellt sich unmittelbar im Anschluß daran die Frage, wie diese Qualität erreicht werden kann. Diese Reihenfolge, die als Prinzip des Software-Engineering in Bezug auf Anforderungen und Entwurf immer wieder gefordert, aber so selten eingehalten wird (werden kann), ist auch hier unbedingt notwendig und durchaus realisierbar. In Abhängigkeit von den angestrebten Inhalten für Qualitätsmerkmale (etwa hohe Wartbarkeit oder hohe Robustheit) sind jeweils unterschiedliche Maßnahmen zu ergreifen.

Die Gesamtheit der Aktivitäten, die zur Sicherstellung der angestrebten Softwarequalität herangezogen werden können, werden als "Qualitätssicherung" bezeichnet. Qualitätssicherung umfaßt "alle Tätigkeiten im Software-Lebenszyklus, die konkret und bewußt auf die Erreichung von Qualität ausgerichtet sind".

Die Qualitätssicherung ist nicht auf den Software-Entwicklungsprozeß begrenzt, sondern bezieht sich auf Einsatz und Anwendung und insbesondere auf die Wartung von Softwareprodukten. Die Notwendigkeit dieser Sichtweise ergibt sich dadurch, daß Softwarequalität keine einmal erreichte, feste Größe ist, sondern im Laufe der Zeit (Anwendung) beziehungsweise durch Pflege/Erweiterung (Wartung) die einmal gewonnene Qualität eines Softwareprodukts sowohl positiv als auch negativ beeinflußt werden kann.

Konstruktiv und analytisch

Die Gesamtheit der Maßnahmen zur Qualitätssicherung kann in zwei Klassen untergliedert werden:

- Konstruktive Maßnahmen

Konstruktive Maßnahmen sind alle Maßnahmen, die während der Entwicklung und Wartung von Softwareprodukten angewendet werden, um das Entstehen von Fehlern oder minderer Qualität zu vermeiden und allgemein die Qualitätsanforderungen zu erfüllen.

- Analytische Maßnahmen

Analytische Maßnahmen setzen stets an konkreten Softwareprodukten (Zwischen- oder Endprodukten) an und zielen darauf ab, Aussagen über die Qualität dieser Softwareprodukte zu machen und gegebenenfalls zusätzlich erforderliche konstruktive oder weitere analytische Maßnahmen zu veranlassen.

Während die konstruktiven Maßnahmen insbesondere in der ersten Hälfte der 70er Jahre im Vordergrund der Betrachtung standen, hat sich doch die Einsicht durchgesetzt, daß diese alleine nicht ausreichen, sondern analytische Maßnahmen in jedem Fall erforderlich sind. Die Bedeutung konstruktiver Maßnahmen wurde beispielsweise durch die These hervorgehoben, daß allein durch die Wahl geeigneter Konstruktionsmethoden die Fehlervermeidung möglich sei (E. Dijkstra); hier wurde jedoch relativ schnell erkannt, daß - insbesondere in der industriellen Produktion von Software diese These nicht realistisch ist. Während die konstruktiven Maßnahmen insbesondere in der ersten Hälfte der 70er Jahre im Vordergrund der Betrachtung standen, hat sich doch die Einsicht durchgesetzt, daß diese alleine nicht ausreichen, sondern analytische Maßnahmen in jedem Fall erforderlich sind. Die Bedeutung konstruktiver Maßnahmen wurde beispielsweise durch die These hervorgehoben, daß allein durch die Wahl geeigneter Konstruktionsmethoden die Fehlervermeidung möglich sei (E. Dijkstra); hier wurde jedoch relativ schnell erkannt, daß insbesondere in der industriellen Produktion von Software diese These nicht realistisch ist.

Die Bedeutung konstruktiver Maßnahmen soll aber hier nicht geschmälert oder womöglich unter den Tisch gekehrt werden; sie können zur Vermeidung von Fehlern beitragen, nicht aber deren Entstehen garantiert verhindern; ferner können sie insbesondere analytische Maßnahmen erleichtern (Verbesserung der Testbarkeit). Fehlervermeidung und Erleichterung analytischer Maßnahmen sind somit wesentliche Kriterien zur Auswahl und Gestaltung konstruktiver Maßnahmen.

Die analytischen Maßnahmen dienen zur Fehlererkennung, -lokalisierung und -behebung; sie verifizieren oder falsifizieren, daß geforderte Funktionen oder Eigenschaften eines Softwareprodukts mit den realisierten Funktionen und Eigenschaften übereinstimmen.

Entsprechend den Grundfunktionen, die funktional zusammengehörige Klassen von Tätigkeiten innerhalb eines Softwareprojekts darstellen und Bestandteil aller Phasen des Projekts sind, können die Aufgaben der Qualitätssicherung in folgende Komponenten untergliedert werden:

-Qualitätsplanung

Die Hauptaufgabe der Qualitätsplanung ist die Definition der Qualitätsanforderungen; diese werden operationalisiert in Form von Qualitätszielen. Darüber hinaus ist die Festlegung der Vorgehensweise zur Erreichung der Qualitätsziele erforderlich. Hier werden sämtliche Maßnahmen der Durchführung determiniert, die geeignet sind, zur Erreichung der Qualitätsziele für ein Softwareprodukt beizutragen.

-Qualitätsdurchführung

Die Qualitätsdurchführung umfaßt alle Tätigkeiten zur Realisierung des Geplanten. Hierzu gehören Tätigkeiten des Konstruierens, Prüfens und Dokumentierens.

-Qualitätskontrolle

Die Qualitätskontrolle dient zum einen der Feststellung der vorhandenen Qualität eines Softwareprodukts und Initiierung möglicherweise notwendiger Korrekturmaßnahmen; zum anderen kann die Qualitätskontrolle zur ausschließlichen Feststellung der vorhandenen Qualität zwecks Bewertung eines Softwareprodukts herangezogen werden (Freigabe oder Abnahme von Zwischen-/Endprodukten).

Konstruktive und analytische Maßnahmen sind in allen Phasen des Software-Entwicklungs- und -Wartungsprozesses anwendbar; insbesondere die analytischen Maßnahmen sollten so früh wie möglich im Software-Entwicklungsprozeß angewendet werden, um mögliche Fehler frühzeitig zu erkennen. Hervorzuheben ist, daß nur die Kombination von konstruktiven und analytischen Maßnahmen eine sinnvolle Qualitätssicherung ermöglicht. Auf die konstruktiven Maßnahmen soll an dieser Stelle nicht weiter eingegangen werden.