Software Qualitätssicherung

Critical QA hat sich rein auf das Software Testing (Software QA – SQA) spezialisiert. Damit wird die Software Qualitätssicherung angestrebt. Das Software-Testing beschreibt den Vorgang der Überprüfung und Bewertung von Software und deren Qualität nach den vorab spezifizierten Anforderungen. Dadurch können Fehler, Mängel und Risiken frühzeitig entdeckt und behoben werden. Software-Testing ist ein wichtiger Bestandteil bei der Software-Entwicklung.

Durch die Einführung der ISO-Norm 9126 (Software Engineering, Product Quality) existiert ein allgemein anerkannter Qualitätsbegriff für Software. Softwarequalität ist definiert als “die Gesamtheit von Eigenschaften und Merkmalen eines Softwareprodukts oder einer Tätigkeit, die sich auf dessen Eignung zur Erfüllung gegebener Erfordernisse beziehen”.

Warum Software Qualitätssicherung?

Software befindet sich mittlerweile überall, (vor-)installiert auf Ihrem Heimrechner, Laptop, Smartphone oder in Ihrem Fitnessband. Um eine problemlose Funktionalität zu gewährleisten, ist ein vorheriges Testen der Software unabdingbar. Probleme und Fehler können dadurch behoben werden bevor eine Software an den Endnutzer gelangt.

Ohne erstmalige und wiederkehrende Testing Prüfungen kann nicht sichergestellt werden, ob das entwickelte Produkt den spezifizierten Anforderungen entspricht.

Während der Entwicklungsphase von Software ist es empfehlenswert bereits früh mit einer durchgängigen Teststrategie zu beginnen. Je früher Fehler entdeckt werden, desto schneller und einfacher können diese behoben werden. Dies wirkt sich außerdem positiv auf die Projektkosten aus, da ein Fehler, der erst spät entdeckt wird, schwieriger zu beheben ist und somit zeit- und kostenaufwändiger wird.

Produktqualität und Prozessqualität

Guter Code und Fehlerbehebungen brauchen Zeit. Testing ist mehr als ein zusätzlicher Kostenfaktor – es erhöht die Qualität der entwickelten Software und die spätere AKzeptanz des Kunden dafür. Es ist stets eine rentable Investition die Qualität zu sichern, um dem Kunden die bestmögliche Erfahrung zu bieten.

Für das Testen der Produktqualität werden zuerst die Eigenschaften der Software an sich betrachtet. Die Qualitätsmerkmale der Funktionalität und Korrektheit sind demnach sehr wichtig. Mithilfe von formalen Spezifikationen kann eine mathematisch-logische Programmverifikation als Qualitätstest durchgeführt werden.
Ist jedoch die Benutzbarkeit im Vordergrund des Software-Testings, werden Prototypen und für Anwender lesbare Dokumente genutzt, um die Software mit den Anwendern in der Testvariante validieren zu können. Die konstruktive Qualitätssicherung sorgt dafür, dass die Produkte so vorbereitet werden, dass die analytische Qualitätssicherung effektiver und effizienter durchgeführt werden kann.

Die Prozessqualität bezieht sich auf den Entstehungsprozess einer Software und wird durch vorherige Modelle gesichert. Mithilfe von standardisierten Evaluierungsmethoden wie CMMI (Capability Maturity Model Integration) oder SPICE (Software Process Improvement and Capability Determination) werden diese charakterisiert und optimiert.

Konstruktive Qualitätssicherung

Die konstruktive Qualitätssicherung wird eingesetzt, um die Entstehung von Fehlern zu verhindern. Durch vorbeugende Maßnahmen während der Entwicklung soll verhindert werden, dass Fehler und Mängel im Produkt bestehen bleiben sowie Risiken gesenkt oder sogar vermieden werden. Das Motto ist: Besser vorbeugen als heilen. Die konstruktive Qualitätssicherung basiert auf dem Einsatz von Methoden, Konstruktionsprinzipien, formalen Verfahren, Werkzeugen und Vorgehensmodellen.

Analytische Qualitätssicherung

Während der analytischen Qualitätssicherung wird versucht mit prüfenden Maßnahmen bereits entstandene Fehler zu entdecken und somit die erreichte Qualität zu bewerten. Es wird getestet, ob bestimmte Qualitätskriterien erfüllt werden. Die Prüfgegenstände bei der Softwareentwicklung sind zum Beispiel die Anforderungsspezifikation, Entwurfsdokumente, Diagramme, Quellcode, ausführbarer Code und die Testdokumente. In der analytischen Qualitätssicherung unterscheidet man zwischen den statischen und dynamischen Prüfungen.

In der statischen Prüfung werden Prüfungsgegenstände nicht ausgeführt. Es kann als manuelles Verfahren durchgeführt werden, welches aus Durchsichten und Inspektionen besteht oder automatisch durch Quelltextanalyse und Modellprüfung.

Dynamische Prüfungen werden auch einfach als “Software-Tests” bezeichnet. Durch das Ausführen von Prüfgegenständen, welches in der Regel Programmcodes sind, sollten Fehler gefunden werden. Durch folgende Tests kann dies durchgeführt werden: Dynamische Verfahren (Test), Defekttest, Testautomatisierung, Benutzbarkeitstest, Lasttest und Akzeptanztest. Bei der Eingabe wird das Testergebnis der Ausführung mit dem erwarteten, vorher festgelegten Ergebnis verglichen.

Software-Testing

Die zentrale Aufgabe beim Software-Testing ist die Überprüfung der Testobjekte nach Funktion gemäß der vorher festgelegten Spezifikationen. Es gibt verschiedene Testverfahren für unterschiedliche Ziele. Sollen nur die Spezifikationen und nicht die Realisierung der Software behandelt werden, spricht man von einem black-box Testverfahren oder funktionalen Testverfahren. Dabei werden Testfälle so ausgesucht, dass sie möglichst alle charakteristischen oder fehlerträchtigen Kombinationen von Eingaben beinhalten. Testverfahren, die nur die Programmstruktur untersuchen, heißen white-box Tests oder strukturelle Testverfahren. Hier werden Testfälle so ausgewählt, dass zum Beispiel alle Anweisungen oder sämtliche Programmverzweigungen mindestens einmal ausgeführt werden. Strukturelle Testverfahren werden zusätzlich zu funktionalen Testverfahren benötigt, um plötzliche Fehler wie zum Beispiel nicht ausführbare beziehungsweise nicht erreichbare,Programmteile, unerwartete Sonderbehandlungen spezieller Eingaben und ähnliches aufzudecken.
Im folgenden Teil werden unterschiedliche Testverfahren beschrieben.

Unit Test

Der Unit Test, der auch Modul- oder Komponententest genannt wird, stellt sicher, dass jede Codezeile richtig funktioniert, indem einzelne Komponenten wie Codezeilen oder Codebereiche einer Anwendung geprüft werden. Diese werden unabhängig voneinander getestet, um festzustellen, dass die Bereiche das ausführen, was sie nach vordefinierten Eigenschaften tun sollen. Diese Testart wird normalerweise vom Entwickler definiert, der auch den Quellcode schreibt. Durch den Komponententest kann in kürzerer Zeit ein sauberer Code mit weniger Fehlern entwickelt werden. Es ist nicht ratsam hier jede einzelne Codezeile der gesamten Software zu testen. Eine ca. 50 prozentige Abdeckung des Codes ist jedoch sehr empfehlenswert.

Integrationstests

Integrationstests sind eine logische Weiterentwicklung der Unit Tests. Um das funktionieren von zwei Schnittstellen zu überprüfen werden zwei Software-Komponenten, die bereits durch Unit Tests qualitätsgesichert wurden, in der Testumgebung zusammengefügt. Die Verbindung zwischen den beiden Software-Bausteinen wird mit allen beteiligten Subsystemen auf Funktionalität getestet. Das Ziel des Tests ist es Fehler in den Schnittstellen und Verbindungen zu integrierenden Komponenten zu finden.

Akzeptanztests

Der Akzeptanztest, der auch Abnahmetest oder User Acceptance Test (UAT) genannt wird, wird genutzt um zu testen, ob die Software aus Sicht des Benutzers wie beabsichtigt funktioniert. Das Ziel ist es, dass der User die Software akzeptiert. Häufig werden dazu Vorabversionen in einer Beta-Tests-Phase genutzt. In einem Beta-Test werden Testszenarien hergestellt, nach einem Testplan werden Testfälle erstellt und der Akzeptanztest durchgeführt. Die Testergebnisse geben an, in welchem Maße die Kundenanforderungen erfüllt worden sind. Anders kann ein Beta-Test auch ohne Testszenarien durchgeführt werden mit sehr viel mehr Endkunden was eine Gliederung und Sichtung der gemeldeten Nutzer Probleme sowie eine Analyse über eingehende Logs welche vorher verbaute wurden voraussetzt.

Graphical User Interface (GUI) Tests

Der GUI Test untersucht die Grafische Schnittstelle zum Anwender einer Software. Dabei werden die Oberflächen, die für den Anwender sichtbar sind auf Funktionalität getestet und überprüft, ob alle für die Anwendung definierten Spezifikationen eingehalten werden.