Zu oft bleibt die Qualitätssicherung auf der Strecke:

Der Idealfall ist gerade das Minimum

10.06.1983

Daß Qualität nicht von selbst entsteht, wenn man nur die richtigen Leute und Werkzeuge einsetzt, erläutert Werner Schmidt, Vorstand der Softwaretest e. V. aus Ulm in seinem Beitrag zur "Qualitäts-" oder "Produktsicherung". Nicht über das "Wie", also über den technischen Inhalt der Dinge, sondern darüber, was "Qualitätssicherung" eigentlich ist und wozu sie, gebraucht wird, soll dieser Bericht Auskunft geben

Seit rund zwanzig Jahren arbeitete die Wirtschaft mit Computerunterstützung. Mitte der 60er Jahre begann in praktisch allen Anwendungsbereichen des Computers ein Prozeß der Trennung zwischen dem Computer als Maschine und der Computersteuerung.

Erst einige Jahre später zeigte sich, daß der Weg zwischen dem Wunsch, gewisse Abläufe in der Fertigung oder in der Verwaltung in den Computer zu verlagern, und der Realisierung dieser Wünsche durch eine entsprechende Programmierung mit allerlei Problemen behaftet ist. Das war die Geburtsstunde des Software-Engineerings und auch der Qualitätssicherung in der Softwareentwicklung.

Ohne Spezialisierung kein Erfolg

Zur gleichen Zeit, in der die ersten allgemeinen Lösungsansätze für eine wirksame Qualitätssicherung gefunden wurden, beginnt bereits wieder eine Spezialisierung auf diesem Gebiet.

Eine Richtung ist dabei die Unterscheidung der Software hinsichtlich ihres Anwendungs- oder Einsatzbereiches:

1. Software für Erzeugnisse Anlagen, Maschinen und Geräte, die ein Unternehmen entwickelt, herstellt und vermerktet, auch Prozeßdatentechnik genannt;

2. Software für die Unterstützung und Steuerung des Entwicklungs-, Fertigungs- und Prüfablaufs dieser Erzeugnisse, (technisch-wissenschaftliche Software);

3. Software für die Unterstützung und Steuerung der Unternehmensführung und der Ablauforganisation eines Unternehmens in der Planung, Kontrolle und Verwaltung ("kommerzielle Datenverarbeitung").

Die folgenden Erfahrungen beziehen sich weitgehend auf Software der erstgenannten Kategorie. Die Anwendung der aufgeführten "Elemente eines Qualitätssicherungssystems" auf andere Einsatzbereiche von Software ist deshalb nicht ohne Einschränkungen möglich.

Integration schließt Lücke

Wichtig für die Qualitätskontrolle von Software ist insbesondere die Aufspaltung des Entwicklungs- und Produktionsablaufs in "Hardware" und Software. Dahinter verbirgt sich die Aufteilung eines Produktes in zwei Komponenten: einen Steuerungsteil, der vorwiegend in der Software angesiedelt ist, und in einen Ausführungsteil, der Hardware.

Bei dem Vorhaben, ein Qualitätssicherungssystem für Software aufzubauen und einzufahren, besteht die Gefahr, den zweiten Schritt vor dem ersten zu tun: Qualitätssicherung muß ebenso wie alle anderen Anstrengungen in der Entwicklung, in der Produktion und im Vertrieb darauf ausgerichtet sein, die veränderten Technologien zu beherrschen. Der wesentliche Kern dieser Technologie steckt in dem Wort "System", das immer dann benutzt wird, wenn von einer Einheit, bestehend aus Steuerungsteil und Ausführungsteil, die Rede ist. Software, die Umschreibung für den Steuerungsteil, und Hardware als ausfahrender Teil eines Systems ergeben zusammen zwar Produkte, aber noch keine Systeme.

Qualitätsprüfung für Software notwendig

Obwohl ein unmittelbarer Zusammenhang zwischen Software-Engineering und Software-Qualitätssicherung besteht, sind die Ziele und auch die Inhalte der beiden Gebiete deutlich voneinander abgegrenzt:

Die Qualitätssicherung in der Software ist darauf ausgerichtet:

- die Funktionen und Leistungen der Software überprüfbar zu machen und gegebenenfalls auch zu überprüfen,

- die Personenunabhängigkeit der Software herzustellen,

- Kosten- und Terminrisiken zu verringern,

- die Qualitätsmerkmale der Software nachzuweisen.

Es ist und bleibt Aufgabe der Softwareentwicklung, (in Abgrenzung zur Qualitätssicherung), die geforderten oder die gesetzten Qualitätsmerkmale zu erreichen:

- Benutzerfreundlichkeit,

- Wartbarkeit,

- Sicherheit,

- Portabilität etc.

Entwicklung kontra Qualität

Zwischen Softwareentwicklung und der Qualitätssicherung gibt es auf Grund dieser Aufgabenstellung eine weitgehende gegenseitige Abgrenzung, aber auch überlagerte Aufgaben, an denen beide gemeinsam arbeiten. Die Zielsetzungen beider Gruppen können aber durchaus. miteinander konkurrieren, so zum Beispiel, wenn die Forderung nach Wartbarkeit und nach einer hohen, Performance gleichzeitig bestehen. Ein Softwareentwickler würde bei hohen Performance-Anforderungen fast naturgemäß zur Verwendung einer maschinennahen Assemblersprache tendieren, während der Qualitätssicherer eine höhere Programmiersprache geradezu als Pflichtübung ansieht.

Dem Management einer Softwareentwicklung fällt nun die Aufgabe zu, die konkurrierenden Zielsetzungen der beiden Gruppen auszugleichen. Erschwert wird diese Aufgabe noch durch die Forderung der Anwender nach einem möglichst großen Leistungsumfang der Software und den Restriktionen des ausführenden Unternehmens, mit möglichst wenig Zeit und Geld für die Softwareentwicklung auszukommen.

Bei der Aufgabenstellung für die Qualitätssicherung von Software kann man nach dem fundamentalen Grundsatz der Software vorgehen:

"Erst die WAS-Beschreibung, dann die WIE-Beschreibung."

Unter der "WAS-Beschreibung" versteht man die Aufgabeninhalte, unter der "WIE-Beschreibung" die Durchführung der Aufgaben, die Abläufe und Prozeduren.

Aus der Zielsetzung der Qualitätssicherung Software leiten sich die folgenden Aufgabengruppen ab:

1. Aufgaben, die ausschließlich durch die Qualitätssicherung erfüllt werden;

2. Aufgaben die zusammen mit der Softwareentwicklung durchgeführt werden; und

3. Aufgaben, die in enger Zusammenarbeit mit dem Management durchgeführt werden.

Zur ersten Gruppe gehören:

- Die Erarbeitung von Richtlinien und Standards für die Softwareentwicklung und für die Qualitätssicherung. Jedes Unternehmen muß prüfen, ob Standard-Vorgehensweisen und "Quasi-Standard-Abläufe", wie sie in der einschlägigen Fachliteratur beschrieben sind, auf das eigene Haus übernommen werden können.

Diese Standard- und Richtlinien haben das Ziel, die Abläufe innerhalb der Softwareentwicklung transparent, also überprüfbar zu gestalten. Daß dieses Vorhaben auf den Widerspruch bei der Softwareentwicklung trifft, ist damit vorprogrammiert. Es läßt sich jedoch unschwer beweisen, daß ohne einen transparenten Entwicklungsgang keine Qualitätssicherung möglich ist.

Ohne Transparenz keine Sicherung

Allein in den letzten 5 Jahren hat sich die Praxis der Softwareentwicklung in Teilen zweimal geänderte Spezifikationen, insbesondere Modulspezifikationen, wurden noch vor fünf Jahren ausnahmslos informal dokumentiert. Zwischenzeitlich hat sich die Verwendung einer Pseudo-Programmiersprache, kurz Pseudo-Code genannt, weitgehend durchgesetzt. Der Trend geht zur Zeit weiter in dieser Richtung, also zur noch strengeren und formaleren Spezifikation bis hin zur völlig formalen, algebraischen Spezifikation.

- Mit der Erarbeitung von Verfahrensbeschreibungen hängt die Teilaufgabe "Auswahl und Qualifikation von Methoden und Tools für die Softwareentwicklung" eng zusammen. Es ist fraglos ein heikles Thema, die Auswahl der Entwicklungswerkzeuge nicht allein dem Entwickler zu überlassen. Doch gibt es zwingende Gründe für die Auswahl durch eine neutrale Stelle. Ein gewichtiger Grund ist die Vermeidung der Methoden- und Tool-Vielfalt, die in der Softwareentwicklung zu Teilprodukten führt, die an den Naht- und Übergangsstellen nicht ineinander passen.

Ein anderer, gleichfalls wichtiger Grund ist die Qualifikation von Methoden und Tools vor ihrer Verwendung. Von den vielen Methoden, die unter dem Titel "Methoden zur Softwareentwicklung" angeboten werden, befinden sich nur ganz wenige, die dieses Prädikat überhaupt verdienen. Hier ist mehr als Skepsis angebracht, hier muß eine Qualitätssicherung vorgeschaltet werden, damit die Methoden und Tools zur Problemlösung in der Softwareentwicklung beitragen können und nicht selbst zum Problem werden.

Formale Prüfung dämmt Fehler ein

Der zweite Block der Aufgaben, die ausschließlich in den Verantwortungsbereich der Qualitätssicherung gehören, ist

- die Überprüfung der Entwicklungsergebnisse und

- die Fehlererfassung, Fehlerauswertung und die Einleitung der Fehlerbehebung.

Die Überprüfung der Entwicklungsergebnisse wiederum hat zwei Komponenten:

- die formale Überprüfung und

- die inhaltliche Überprüfung.

In der formalen Überprüfung können Abweichungen der Entwicklungsergebnisse von den vorgegebenen Richtlinien und Standards festgestellt werden. Dazu gehört auch die Überprüfung der Software auf entwurfskonforme Implementierung. So muß vor der eigentlichen Programmierung ein Entwurf existieren, in dem die Aufgabenstellung (das "WAS") und der Lösungsweg (das "WIE") beschrieben sind.

Eine formale Überprüfung von Entwicklungsergebnissen gibt es praktisch im gesamten Bereich der industriellen oder ingenieurmäßigen Produktion. In der Softwareentwicklung hat sich diese Maßnahme als besonders wirksam erwiesen: Sie zeigt deutlich und zweifelsfrei Abweichungen vom planmäßigen, also von dem als richtig erkannten Vorgehen auf. In der Praxis kann die formale Überprüfung der Entwicklungsergebnisse die möglichen Fehlerquellen während des Entwicklungsablaufs erheblich eindämmen.

Früherkennung durch "Design Review"

Die inhaltliche Überprüfung erfordert einen anderen Ansatz in der Vorgehensweise als die formale Überprüfung. Durch diese Maßnahme wird versucht, eventuelle Abweichungen vom Entwicklungsziel möglichst früh zu erkennen und Lösungsalternativen aufzuzeigen.

Eine der Durchführungsmaßnahmen der inhaltlichen Überprüfung von Software-Entwicklungsergebnissen, ist das sogenannte Design Review, bei dem die späteren Anwender der Software zusammen mit den Softwareentwicklern den dokumentierten Lösungsansatz diskutieren und auf die Eignung zur Erfüllung der Benutzerforderungen überprüfen. Hier fällt der Qualitätssicherung die Aufgabe zu, den Ablauf des Reviews zu steuern.

Während aller dieser Überprüfungen der Entwicklungsergebnisse, zeichnet die Qualitätssicherung alle erkannten Abweichungen auf. Diese Protokolle bilden die Basis der Fehlererfassung und Fehlerauswertung. Von der Fehlerart her wird zunächst in

- Anforderungsfehler

- Entwurfsfehler

- Spezifikationsfehler

- Codierfehler und

- Testfehler

unterschieden.

Im Anschluß an die Fehlererfassung kann über eine Fehlerauswertung die Fehlerursache gefunden werden.

Jedoch steckt die Fehlerauswertung wegen der Schwierigkeiten der Fehlerklassifizierung, also der Frage nach der Fehlerursache, noch in Anfangsschwierigkeiten.

Unmittelbar mit der Fehlerbehandlung ist die Konfigurationskontrolle der Software verbunden. Softwareentwicklung ist der Prozeß der stufenweisen Abstraktion und verfeinerten Spezifikation von Anwendervorstellungen über den Ablauf einer Computerunterstützung. Deshalb sind die Niederschriften in den einzelnen Abstraktionsebenen, die mit. "Entwicklungsphasen" gleichzusetzen sind, ebenso Bestandteil der Software, wie die Konstruktionszeichnungen und Schaltpläne einer Leiterkarte zur "Hardware" gehören.

- Die Konfigurationskontrolle hat die Aufgabe, die Zustände der Entwicklungsergebnisse, also Dokumente und Programme, formal und inhaltlich zu erfassen und bezüglich der Änderungen zu kontrollieren. Die Änderungsursache ist dabei nur von untergeordneter Bedeutung sie ergibt sich aus der Fehlerbehandlung.

Die Erfahrung im Umgang mit Dokumenten und Programmen hat gezeigt, daß Konfigurationskontrolle ohne maschinelle Unterstützung wirtschaftlich nicht durchführbar ist. Der Trend in der Softwareentwicklung geht eindeutig hin zur möglichst frühen Computernutzung, das heißt, daß bereits Anforderungs- und Entwurfsspezifikationen im Computer gespeichert werden.

Das kommt zwar einerseits einer wirksamen Konfigurationskontrolle sehr entgegen, stellt aber neue Probleme an die Qualitätssicherung: Jeder Entwickler kann Änderungen vor allem unkontrollierte Änderungen - sehr leicht und ohne fremde Hilfe einfügen, wenn die Konfigurationskontrolle nicht wachsam genug ist.

Die bisher beschriebenen Aufgaben lagen ausschließlich im Verantwortungsbereich der Qualitätssicherung; es gibt aber auch funktionale Anforderungen an das Qualitätssicherungssystem, die sich mit den Aufgaben der Softwareentwicklung und mit den Aufgaben des Managements überschneiden.

- Die Entwicklung von spezifischen, also projekt- oder unternehmensspezifischen Werkzeugen zur Softwareentwicklung erfolgt in enger Zusammenarbeit mit der Entwicklung. Die Aufgabenteilung könnte so aussehen, daß die Qualitätssicherung die Anforderungen an die Werkzeuge spezifiziert und die Entwicklung diese Anforderungen realisiert. Durch diese Aufgabenteilung wird die Einheitlichkeit und damit die Transparenz der Softwareentwicklung gewährleistet.

Produktsicherung leistet Managementarbeit

Es gibt noch einen anderen Aspekt, der diese Aufgabenteilung sinnvoll erscheinen läßt. Bei der zwangsläufig notwendigen Umorientierung in den Entwicklungsabteilungen, Software als ein Produkt zu betrachten und nicht mehr als das persönliche Know-how der Programmierer anzusehen, kommen Probleme an die Oberfläche, für die es innere, halb der Entwicklung keine Lösungsansätze gibt.

Neue Ideen in die Softwareentwicklung hineinzutragen ist hier die Aufgabe der Qualitätssicherung, die sich am Gesamtergebnis einer Softwareentwicklung orientiert, also daran, wie gut es gelingt, die Anwenderforderungen auf ein Programm umzusetzen. Dieses Gesamtergebnis ist ein Unternehmensziel, zu dem nicht nur die Entwicklungsanstrengungen beitragen, sondern auch die Planung, der Produktvertrieb, die Kontrolle der Kosten und Termine.

Zu diesem Aufgabenteil leistet die Qualitätssicherung Managementarbeit. Während das Management die Planung und Entwicklungsvorgaben eher formal überwacht, beobachtet und kontrolliert die Qualitätssicherung die Entwicklungsergebnisse vorwiegend inhaltlich. Es ist also sehr naheliegend, daß das verantwortliche Management und die Qualitätssicherung hier eng zusammenarbeiten. Die Gefahr, daß die Qualitätssicherung als Managementinstrumentarium mißbraucht wird, besteht durchaus, insbesondere, dann, wenn das Management gegenüber der Entwicklung Schwächen zeigt.

Um diesen Aufgabenbereich, bei dem es darum geht, die Unternehmensziele während der relativ großen Entwicklungszeiten, die in aller Regel mehrere Monate bis mehrere Jahre betragen, nicht zu vernachlässigen, muß die Qualitätssicherung selbst streng geführt werden, damit sie ihre eigenen Aufgaben erfüllt und nicht zum Erfüllungsgehilfen des Managements wird.

Die schwierigste Aufgabe bei der Einrichtung einer Qualitätssicherung ist die Gestaltung der Aufbauorganisation. Während man bei der Beschreibung der funktionalen Aufgaben auf weitgehendes Neuland trifft, bei dem nur wenige bestehende Grenzen berührt werden, ist in jedem Unternehmen eine fixierte Organisationsstruktur anzutreffen. Und in dieser Struktur ist nur ganz selten eine Lücke, ein Platzhalter für die Qualitätssicherung Software gelassen worden.

Run auf die Kästchen

Bevor jedoch der große Run auf die Kästchen in den Organigrammen beginnt, sollten Überlegungen angestellt werden, wie sich aus der funktionalen Aufgabenstellung die organisatorische Verankerung ableiten läßt.

Erkennbar sind drei Hauptanforderungen, die erfüllt sein müssen, wenn die Ziele der Qualitätssicherung erreicht werden sollen, die sich wiederum an den Anforderungen an das Unternehmen ergeben:

1. Die Unabhängigkeit der Qualitätssicherung von der Softwareentwicklung muß gegeben sein. Diese Unabhängigkeit läßt sich auf verschiedene Weise organisatorisch verankern.

2. Qualitätssicherung in der Software erfordert eine Spezialisierung auf drei wesentliche Komponenten:

- Technologie, Methoden und Verfahren der Softwareentwicklung

- begleitende Überprüfung der Entwicklungsergebnisse; dies bedeutet zumindest eine temporäre Spezialisierung auf die jeweiligen Projekte:

- Konfigurationskontrolle und Konfigurationsmanagement, die allein in der Lage ist, die Entwicklungsergebnisse zu handhaben, also zu steuerbaren Produkten zu machen. Ohne wirksame Konfigurationskontrolle bleiben Entwicklungsergebnisse im Stadium der Entwicklung das heißt an vielen Punkten offen.

3. Die Qualitätssicherung in der Software erfordert, daß ein meßbarer Prozentsatz des Entwickungsaufwands in die Qualitätssicherung gesteckt wird. Dieser Aufwand ist zunächst eine Investition - genauso wie die Entwicklung der Software selbst eine Investition ist - deren Gewinn in Form von verringertem Entwicklungsrisiko und deutlich reduzierten Kosten in der Fehlerbehebung meßbar wird.

Restfehler gering halten

Dieser Anteil hängt in erster Linie davon ab, wie hoch die Qualitätsanforderungen an die zu entwickelnd Software ist. Darunter ist zuvorderst die Restfehlerrate zu sehen, die nach Abschluß einer Softwareentwicklung noch in der Software verbleibt.

Je geringer die Zahl der Restfehler, desto geringer sind die Wartungskosten eines Softwareproduktes, die im Durchschnitt etwa da Fünf- bis Siebenfache der Entwicklungskosten betragen, Investiert man also in die Qualitätssicherung, sinkt die Restfehlerzahl, dafür steigen die Kosten der Entwicklung.

Orientierungswerte dafür zu geben, wie hoch die Investition in die Qualitätssicherung in Abhängigkeit von Ergebnis sein muß, ist erst dann möglich, wenn hierüber gesicherte, Erfahrungen vorliegen.

Ein Rezept gibt es nicht

Aus diesen drei Forderungen die Organisation, also an die Aufbauorganisation der Qualitäts-Software läßt sich eine Struktur ableiten, die geeignet ist, die funktional Aufgaben wirksam und wirtschaftlich zu erfüllen. Vereinfacht dargestellt könnte eine Qualitäts-Software-Organisation für Software aussehen:

1. der Qualitätssoftware-Verantwortliche berichtet nicht dem Entwicklungsmanagement, sondern, der Unternehmensleitung

2. die Qualitätssoftware-Abteilung ist groß genug, alle Aufgaben in der notwendigen Tiefe zu erfüllen,

3. eine Unterteilung, oder zumindest eine Unterscheidung in den Einzelaufgaben ist erkennbar und die Qualitätssoftware-Mitarbeiter sind nicht "Mädchen für alles".

Dies ist keineswegs eine Idealvorstellung, sondern eine Minimalvorstellung, ohne deren Realisierung lediglich die Entwicklungskosten erhöht werden, auf der Risiko- und Fehlerbehebungsseite aber keine Einsparungen zu verzeichnen sind.

Ein Rezept für den Aufbau eines Qualitätssicherungssystems für Software, das für alle individuellen Anforderungen paßt, gibt es nicht. Es liegt im Geschick des Managements und der Unternehmensleitung, aus den notwendigen funktionalen Anforderungen und organisatorischen Maßnahmen diejenigen Elemente herauszugreifen, die für eine gegebene Aufgabenstellung ausreichend sind.