Qualitätssicherung in der SW-Entwicklung

Die Eigenschaften von Programmiersprachen und -methoden haben einen großen Einfluß auf die sicherheitsbezogene Zuverlässigkeit eines Systems, die nicht nur für Flugsicherung, Reaktorsicherheit und Militärtechnik zunehmend relevant ist, sondern auch bei der Programmierung von Maschinen- und Anlagensteuerungen, z.B. in der Pharma-Industrie.

Die Menge in elektr. Systemen eingesetzter SW verdoppelt sich ca. alle 18 Monate.

Die SW-Erstellung selbst unterliegt damit in zunehmendem Maße dem Zwang zu hoher Produktivität.

SW ist im Gegensatz zu HW jedoch inhärent fehleranfällig, Programme sind nicht stetig (kleine Fehler können große Auswirkungen haben...)

Es kristallisieren sich deshalb zwei scheinbar konkurrierende Gründe für das Scheitern von SW-Projekten heraus:

  • Termine und damit Entwicklungskosten werden überschritten
  • Nachträgliche Fehlerbehebungs- und Änderungskosten entstehen im erheblichen Umfang

Die Ursachen liegen darin begründet, daß die SW-Erstellung oftmals zu wenig von ingenieurmäßigen Prinzipien (systematischem SW-Engineering) geleitet ist:

  • Forderungen sind nicht konkret genug spezifiert, es werden keine Qualitätsziele festgelegt
  • Es erfolgt kein strukturierter Entwurf sondern es wird weitgehend improvisiert ("schnelle Anfangs-Lösungen" werden empirisch ausgebaut...)
  • Prüfbarkeit und vor allem Dokumentation werden stark vernachlässigt (der "echte Programmierer" braucht keine Kommentare...)

Qualitätssicherung findet i.A. erst am Ende des Entwicklungs-Prozesses statt (Abnahmetest..), begleitende QM-Maßnahmen fehlen meist völlig.

Dabei zeigt die Erfahrung, daß die Kosten zur Beseitigung eines Fehlers exponentiell mit dem Zeitverzug bis zu seiner Entdeckung steigen !

Als ein Grundprinzip ingenieurmäßiger SW-Entwicklung ergibt sich damit die

  • Notwendigkeit systematischer Fehlervermeidung

Im Sinne eines modernen Projekt- und Qualitätsmanagements müssen deshalb Kosten, Termintreue und Qualität gleichberechtigte Forderungen sein !

Fehler die nicht gemacht werden können, brauchen nicht behoben zu werden

QM muß integraler Bestandteil jeder SW-Entwicklung sein

  • Ein konstruktives integriertes QM sichert frühzeitige Fehlererkennung/-verhinderung und die realistische Beurteilung des Projektfortschritts

Strukturierter Entwurf, Strukturierte Programmierung (Top-Down-Prinzip)

Der Programmierer muß durch konsequente Planung des Entwicklungsprozesses und die genaue Beachtung der Regeln des modularen und strukturierten Entwurfs entlastet werden

Nachvollziehbarkeiteit und Übersichtlichkeit als fundamentale Entwurfsprinzipien

Programmierrichtlinien stellen sicher, daß "nicht alles gemacht wird, was möglich ist" (Beschränkung auf das Notwendige, Komplexitäts- und Aufwandsreduktion, Vermeidung "künstlicher" Kompliziertheit) und damit die verläßliche und vorhersagbare Programmausführung durch robuste und sichere Programmkonstrukte

Leztlich muß der Grundstein für die Einhaltung von Qualitätskriterien wie Wartbarkeit, Portierbarkeit aber auch Brauchbarkeit von Beginn an gelegt und überwacht werden

Der Entwicklungsprozeß wird dazu in abgrenzbare Phasen eingeteilt, deren Übergänge (Milestones) Meßpunkte für die Qualität darstellen.

Die Überwachung eines SW-QM-Systems beim Auftragnehmer und ein parallel zur Entwicklung stattfindender Qualitäts-Nachweis (Verifikation, Validation) bietet letztendlich die entscheidenden Kostenvorteile gegenüber “schnellen Projekten” mit einer reinen nachgelagerten Abnahmeprüfung