Grundsatz 7: Auch fehlerfreie Systeme
können völlig unbrauchbar sein.
Auch die völlige Abwesenheit von Fehlern – und wir sprechen hier nur von Tests gegen existierende Anforderungen – muss nicht zwangsläufig bedeuten, dass das getestete System einsatzfähig ist. Zum einen könnten existierende Anforderungen übersehen und nicht getestet worden sein. Ein Funktionstest prüft nur gegen im Test vorgesehene Anforderungen. Zum anderen wäre es denkbar, dass einige Anforderungen in der Spezifikation nicht berücksichtigt wurden und somit auch nicht bei der Implementierung der Software – folglich auch nicht beim Test. Die frühzeitige Einbeziehung der späteren Nutzer im Entwicklungsprozess und die Nutzung von Prototypen schafft hier Abhilfe!
1.2.6 Testaufwände
weitere Kostenaspekte
Testen ist eine aufwendige und teure Entwicklungsphase. Es lohnt sich also, etwas genauer hinzuschauen und diese Phase effizient und intelligent zu gestalten, um mit dem geringstmöglichen Aufwand den bestmöglichen Reifegrad zu erzielen. Aber wo genau entstehen diese Kosten in der Softwareentwicklung?
Größere Vorhaben mit über zehn Personenjahren Entwicklungsaufwand weisen ca. 50 % Integrations- und Testaufwände über die einzelnen Phasen auf, der Rest entfällt auf die Implementierung. Bei sicherheitskritischen Systemen können Integrations- und Testaufwände auf über 80 % ansteigen.

Abb. 1-6: Verteilung Softwareentwicklungskosten
Durch die hohen Aufwände ist beim Testen von Software stets auf Effizienz und Wirtschaftlichkeit zu achten. Testing ist das wichtigste und zugleich aufwendigste analytische Qualitätssicherungsverfahren. Ineffizienzen drohen dabei letztlich von zwei Seiten:
Testautomatisierung
Zum einen von hohem personellem Aufwand während der Testdurchführung. Hier ist die Lösung die Einführung einer durchgängigen Testautomatisierung. Tests sollten ohne menschliche Interaktion 24 / 7 automatisiert durchgeführt und ausgewertet werden.
Testmethodik
Zum anderen von geringen Fehleraufdeckungsraten. Hier heißt die Lösung: Einführung einer intelligenten Testmethodik. Weg von stupidem, repetitivem »viel hilft viel« hin zu smarten, ans Problem adaptierten Testabläufen. Das Wie macht die Musik!
Bei größeren Softwareprojekten sind
methodisches und automatisiertes
Testen Pflicht.
Beide Aspekte, Testautomatisierung und Testmethodik, bilden einen wesentlichen Schwerpunkt in diesem Buch. Optimierung an dieser Stelle gleicht oftmals einem Transistoreffekt: Vergleichsweise geringe Eingriffe in den Absicherungsprozess können eine hohe Kostenwirksamkeit aufweisen.
Die Erfahrung zeigt, dass Testautomatisierung und Testmethodik mit geringeren Aufwänden reproduzierbar und prädizierbar bessere Reifegrade in der Softwareentwicklung ermöglichen.
1.3 Analytische Qualitätssicherung
QS-Maßnahmen im Überblick
Die Qualitätssicherung (QS) eines Unternehmens befasst sich mit der Einhaltung und Anwendung von dokumentierten Arbeitsprozessen. Diese haben zum Inhalt, vereinbarte Qualitätsmerkmale, und somit das Qualitätsniveau entwickelter Produkte, sicherzustellen. Grundsätzlich unterscheidet man drei Gruppen von QS-Maßnahmen:
▶Datenmanagement-Methoden: Hierbei geht es um die Einführung von Abläufen wie Softwareentwicklungsprozessen oder Vorgehensmodellen. Auch Dokumenten-/Konfigurationsmanagement und Versionsverwaltung fallen in diese Kategorie wie auch z. B. die Zertifizierung von Entwicklungswerkzeugen.
▶Konstruktive Methoden und Maßnahmen: Hierbei hat man es mit konkreten Maßnahmen für den Entwicklungsvorgang zu tun wie z. B. Anforderungsmanagement (Requirements Engineering und Management). Auch Methoden und Werkzeuge für Spezifikation, Modellierung und Entwurf fallen hierunter, zudem die Etablierung von Richtlinien wie z. B. Codierrichtlinien oder die Verabschiedung von Konventionen und Standards.
▶Analytische Methoden und Maßnahmen: Diese Kategorie umfasst alle Testverfahren, somit auch z. B. statische Analysen, die wir noch kennen lernen werden. Analytische Methoden bilden einen weiteren Schwerpunkt dieses Buchs.
Abb. 1-7 zeigt die in ISO 9126 definierten Qualitätsmerkmale für Software. Neben den offensichtlichen Qualitätsmerkmalen wie Funktionalität haben auch Änderbarkeit/Wartbarkeit und Zuverlässigkeit eine große Bedeutung. Software, die funktional einwandfrei arbeitet, aber beispielsweise (zurecht existierende) Codierrichtlinien missachtet oder unzureichend dokumentiert wurde, ist automatisch von minderer Qualität. Sie kann im weiteren Lebenszyklus kaum weiterentwickelt werden und Fehlersuche und -Behebung sind vergleichsweise aufwendig. Man spricht hier auch von interner und externer Qualität (Verhalten nach außen).

Abb. 1-7: Qualitätsmerkmale von Software nach ISO 9126
Qualitätsmanagement (QM)
Die Qualitätssicherung ist eingegliedert in das Qualitätsmanagement (QM) eines Unternehmens. Hierunter sind alle organisatorischen Maßnahmen zur Steuerung und Lenkung eines Unternehmens im Hinblick auf die Qualität seiner Produkte zu verstehen. Dies beinhaltet neben der Festlegung der Qualitätsziele auch die Qualitätsplanung sowie alle Maßnahmen der Qualitätssicherung und Qualitätsverbesserung. In Branchen wie der Automobilindustrie oder Raumfahrt ist die Umsetzung eines QM aufgrund potenzieller Gefährdungen von Menschen und Gütern sogar gesetzlich vorgeschrieben. Sehr verbreitet ist die Normenreihe ISO 9000 Quality Management Standards [4] mit dem Standard ISO / IEC 90003 Software Engineering [5], der die Anwendung der Richtlinien der ISO 9001 [6] auf den Softwarebereich festlegt.
Die analytische Qualitätssicherung umfasst eine ganze Reihe von Techniken zur Analyse der internen und externen Qualität von Software.
statische und dynamische
QS-Maßnahmen
Unterschieden wird zwischen statischen und dynamischen Techniken, wobei statische Techniken im Gegensatz zu den dynamischen für die Analyse keine Ausführung des SUT erfordern. Der klassische Funktionstest ist also eine dynamische Technik, die klassische Codeanalyse ein statischer Vertreter. Darüber hinaus gibt es je nach Ausrichtung, Testziel und Analyseobjekt noch eine Menge weiterer Techniken, die unten dargestellt werden. Im weiteren Verlauf dieses Kapitels werden die wichtigsten Techniken kurz vorgestellt, auf einige davon wird in Kap. 4 »Statischer Test« und Kap. 5 »Dynamischer Test« noch detailliert eingegangen.

Abb. 1-8: Übersicht Analytische Qualitätssicherungsmaßnahmen
1.3.1 Reviews
Ein wichtiger Vertreter statischer Analysetechniken sind Reviews. Hierbei handelt es sich um strukturierte Gruppenprüfungen, d. h., eine Gruppe mit der Analyse beauftragter Personen begutachtet verschiedene Entwicklungsdokumente, allen voran natürlich Quellcode und Spezifikationen, aber auch Vertrag, Testdokumente u. a. können Analysegegenstand sein.
Reviews gehören zu den
effektivsten QS-Maßnahmen.
In der Regel sind Reviews die einzige Möglichkeit, die Semantik von Dokumenten (»ergibt das eigentlich Sinn?«) zu überprüfen. Kein Test- oder Codeanalysewerkzeug wird je eine Antwort auf diese Frage geben können. Aber gerade solche »sinnlosen« Fehler in den frühen Entstehungsphasen von Software sind später nur mit erheblichem Aufwand zu beseitigen.
Читать дальше