Qualitätsmanagement in der Softwareentwicklung

Unter „Softwareentwicklung“ versteht man alle Tätigkeiten, die ausgeführt werden müssen, um ein Softwareprodukt zu erzeugen. Dazu gehören Anforderungsanalyse, Entwurf, Implementierung und Integration, Wartung, Konfigurationsmanagement, Qualitätssicherung und Dokumentation. „Qualitätsmanagement“ bezeichnet die Planung, Steuerung und Kontrolle von Qualität.

Was bedeutet „Qualität“?

Einige Fachleute verstehen unter „Qualität“ die Abwesenheit von Fehlern. Unsere alltäglichen Erfahrungen mit Softwareprodukten bestimmter Hersteller weisen allerdings darauf hin, dass Software sehr fehlerhaft und dennoch erfolgreich sein kann. Offenbar verfügen diese Produkte über andere „Qualitäten“ als Fehlerlosigkeit. Und offenbar bewegen diese anderen Qualitäten die überwältige Mehrheit von Computernutzern weltweit, diese Produkte trotz ihres offensichtlich hohen Fehleranteils zu erwerben und jahrelang damit zu arbeiten.

In der Softwareentwicklung ist die Zusammenarbeit mit den Anwendern die Basis für Qualität!

Im allgemeinen wird unter „Qualität“ das Ausmass verstanden, in dem ein Gegenstand geeignet ist, Anforderungen zu erfüllen. Diese Anforderungen können sich bei Software auf Benutzerfreundlich-keit, Kompatibilität, Portierbarkeit, Integrationsfähigkeit, Performanz, Wart- und Erweiterbarkeit sowie auf viele andere Aspekte beziehen. Damit ist auch klar, dass „Softwarequalität“ für verschiedene Benutzer völlig unterschiedliche Dinge bedeuten kann. Unter Berücksichtigung der jeweiligen Rahmenbedingungen müssen Anforderungen festgelegt werden, die beschreiben, was in einer spezifischen Situation unter „Qualität“ verstanden werden soll.

Es lassen sich zwei verschiedene Perspektiven des Qualitätsmanagements in der Softwareentwicklung unterscheiden. Die erste Perspektive fokussiert auf das Softwareprodukt, die zweite auf die  Softwareentwicklung selbst – oder anders formuliert: auf den Prozess der Entwicklung der Software bzw. auf den Softwareprozess.

Bei der produktorientierten Perspektive werden zunächst Anforderungen an das Softwareprodukt formuliert. Diese Anforderungen dienen als Leitlinien zur Entwicklung der Software und als Kriterien zur Bewertung des entwickelten Produktes. In der Regel werden diese Anforderungen im Rahmen der Anforderungsanalyse formuliert und z. B. in Form eines Pflichtenhefts dokumentiert. Im Rahmen der Qualitätssicherung wird
überprüft, inwiefern das entwickelte Produkt diese Anforderungen erfüllt.

Bei der prozessorientierten Perspektive werden Anforderungen an den Prozess der Softwareentwicklung formuliert. Diese Anforderungen dienen sowohl als Vorgaben z. B. für die Gestaltung einzelner Softwareprojekte als auch als Bewertungskriterien für einen Softwareprozess, z. B. im Rahmen der Zertifizierung eines Qualitätsmanagementsystems.

Selbstverständlich besteht zwischen der produkt- und der prozessorientierten Perspektive eine enge Verbindung. Es handelt sich lediglich um unterschiedliche Perspektiven auf den selben Gegenstand, nämlich die Softwareentwicklung . Die Verfechter beider Perspektiven haben das selbe Ziel, sie setzen lediglich unterschiedliche Schwerpunkte bei der Wahl ihrer Mittel.

Die Verfechter der prozessorientierten Perspektive gehen davon aus, dass ein qualitativ hochwertiger Prozess (das heisst ein Prozess, der die an ihn gestellten Anforderungen erfüllt) mit einer hohen Wahrscheinlichkeit auch ein qualitativ hochwertiges Produkt hervorbringt. Demzufolge konzentrieren sie sich auf die Gestaltung des Softwareprozesses. Die Verfechter der produktorientierten Perspektive gehen davon aus, dass zur Erreichung eines qualitativ hochwertigen Softwareproduktes die Überprüfung der Anforderungen an das Produkt höchste Priorität haben sollte. Demzufolge betonen sie die Qualitätssicherung des Produktes – in der Regel in Form von Tests oder Inspektionen.

In der Praxis der Softwareentwicklung werden beide Perspektiven miteinander kombiniert. Die Unterscheidung der Perspektiven dient in erster Linie zum besseren Verständnis der unterschiedlichen Ansätze zur Verwirklichung des Qualitätsmanagements in der Softwareentwicklung.

Es geht um den ganzheitlichen Ansatz und darum diesen auch zu leben!

Produktorientiertes Qualitätsmanagement

Im Rahmen der produktorientierten Perspektive lassen sich im wesentlichen zwei verschiedene Massnahmenbündel unterscheiden: die dynamische Qualitätssicherung (oder anders formuliert, das Testen) und die statische Qualitätssicherung. (Daneben gibt es noch formale Verifikation und symbolische Ausführung. Da diese Ansätze jedoch nur in Spezialbereichen verwendet werden, wird hier nicht näher darauf eingegangen.)

Dynamische Qualitätssicherung (Softwaretesten)

Softwaretesten bedeutet Überprüfen von Software durch Ausführen eines Testobjektes (z. B. eines Softwaremoduls) mit Testdaten. Softwaretesten wird deshalb auch als „dynamische Qualitätssicherung“ bezeichnet. Das Ziel des Testens besteht darin, Fehler zu finden. Fehler sind Abweichungen von den Anforderungen. Softwaretests sind nicht geeignet, die Sicherheit, Korrektheit oder Qualität eines Softwareproduktes
nachzuweisen. Softwaretests können lediglich Abweichungen von den Anforderungen (= Fehler) aufzeigen. Selbst wenn bei umfassenden und sehr gründlichen Softwaretests keine Fehler gefunden wurden, heißt das nicht, dass das getestete Objekt keine Fehler enthält.

Jedem Softwaretest liegt folgende Struktur zugrunde:

  • Definition von Testfällen
  • Auswahl einer Testdatenkombination
  • Definition des erwarteten Ergebnisses
  • Ausführen des Testobjekts mit einer Testdatenkombination
  • Vergleich des erwarteten mit dem tatsächlichen Ergebnis

Weicht das erwartete von dem tatsächlichen Ergebnis ab, liegt ein Fehler vor.