Software-Testing

Tipps zur Qualitätssicherung

24.08.2011 von Daniel Liebhart
Von der Einbettung eines messbaren und durchgängigen Testprozesses als Teil der IT-Strategie sind noch viele Unternehmen weit entfernt. Aus Sicht der Individualentwicklung gibt es jedoch einige einfache Praxistipps für die Software-Qualitätssicherung.

Die um sich greifende Regulierung des Entwicklungsprozesses und des IT-Betriebs führen dazu, dass sich Unternehmen zunehmend mit den Themen Testing und Qualitätssicherung auseinandersetzen. Doch die Qualitätsansprüche an Softwaresysteme fallen aufgrund der individuellen Sichtweise der Beteiligten sehr unterschiedlich aus. Die Anwender wollen ein intuitiv zu bedienendes GUI und möglichst kurze Antwortzeiten. Der Auftraggeber erwartet möglichst niedrige Kosten und eine rechtzeitige Inbetriebnahme. Für den Support ist eine weitgehend fehlerfreie Anwendung wichtig. Der Sicherheitsbeauftragte, das Controlling und andere Regelgremien wollen Anwendungen, die prüfbar und normenkonform sind. In der Theorie ist alles einfach. Man nehme die Qualitätsnormen nach ISO oder DIN, wie beispielsweise den Qualitätsbegriff nach ISO 8420, suche sich das entsprechende Qualitäts-Management-System (ISO-9000-Reihe, TQM, EFQM, IQM oder IMS) aus den über 30 verfügbaren Qualitätsmodellen aus und appliziere es auf den Software-Entwicklungsprozess.

In der Praxis sieht die Sache jedoch ganz anders aus, insbesondere in der Individualentwicklung oder der unternehmensspezifischen Erweiterung von Standardprodukten. Allein das Testen und die Verifizierung von Software kennt eine Unzahl von Standards, Methoden und Tools, die in der Praxis der Entwicklungsprojekte kaum oder nur sehr beschränkt anzuwenden sind. In der Individualentwicklung kommt hinzu, dass die Kosten, die mit der Qualitätssicherung einhergehen, nicht zu tragen sind. Es findet sich kein Kunde, der einen Aufpreis von bis zu 50 Prozent, wie beispielsweise Ian Sommerville in seinem Buch "Software Engineering" schätzt, zu zahlen bereit ist.

Tools für Entwickler
Open-Source-Editor JEdit - des Programmierers bester Freund
Mit JEdit steht Entwicklern ein kostenloser und plattformunabhängiger Text-Editor zur Verfügung. Der komplett in Java geschriebene Editor bietet Syntax-Hervorhebung für mehr als 130 Programmiersprachen. <br/> <br/> <b>CW-Fazit:</b> JEdit stellt für Programmierer einen idealen Ersatz für einfache Texteditoren wie Microsofts Notepad dar und erweist sich schnell als eine praktische Ergänzung zur eingesetzten Entwicklungsumgebung.<br /><br /><a href="http://www.computerwoche.de/knowledge_center/office_tools/1879255/" target="_blank">Zum ausführlichen Artikel</a>
Process Ko – weg mit störenden Windows-Tasks
Prozesse, die sich weder normal noch mit dem Windows-eigenen Task-Manager beenden lassen, sind gerade für Entwickler ein Ärgernis. Oft hilft nur der Reboot. Alternativ dazu kann der Experte ein kostenloses Tool wie "Process Ko" nutzen, das auch hartnäckige Routinen aus dem Speicher entfernt. <br/> <br/> <b>CW-Fazit:</b> Process Ko ist ein sehr hilfreiches Freeware-Tool für Entwickler und Tester, um Prozesse schnell zu beenden. Wer sich jedoch nicht mit den Windows-Prozesse auskennt, sollte lieber den Task-Manager nutzen.<br /><br /><a href=" http://www.computerwoche.de/product_guide/cool_tools/1858888/" target="_blank">Zum ausführlichen Artikel</a>
JMeter fühlt Web-Applications auf den Zahn
Wenn man Anwendungen entwickelt, ist man sich nie ganz sicher, wie sich diese im produktiven Einsatz verhalten und ob die Reaktionszeiten ausreichen. Eine frühzeitige Simulation mit einem Lasttest kann solche Probleme aufdecken. "Apache JMeter" erfüllt genau diese Aufgabe. <br/><br/> <b> CW-Fazit: </b> JMeter simuliert Lasttests für Anwendungen und hilft dabei, Engpässe oder Probleme frühzeitig zu erkennen. <br /><br /><a href="http://www.computerwoche.de/knowledge_center/open_source/1893501/" target="_blank">Zum ausführlichen Test</a>
Modellierung mit OpenArchitectureWare
Das Eclipse-Plug-in OpenArchitectureWare (OAW) ist ein ausgereifter Open-Source-Generator für die modellgetriebene Softwareentwicklung. Seine Stärke ist der Import vieler unterschiedlicher Modellarten: Ob klassische UML-Modelle, XML oder textbasierende DSLs (domain specific languages). <br/><br/> <b> CW-Fazit: </b> Mit OAW bekommt man alles an die Hand, um sich individuelle Templates zu erstellen. Besonders der pragmatische Ansatz mit frei definierten Modellen als DSLs hilft auch in großen Projekten flexibel und produktiv zu sein. <br /><br /><a href="http://www.computerwoche.de/knowledge_center/open_source/1889481/" target="_blank">Zum ausführlichen Test</a>
TextUML: Einfach per Text modellieren
Wem die üblichen UML-Werkzeuge zu kompliziert sind, findet in dem Open-Source-Tool TextUML einen einfachen Editor. <br/> <br/> <b>CW-Fazit:</b> Trotz seiner Einschränkungen bietet TextUML einen pragmatischen Ansatz, der den Umgang mit der UML sehr erleichtert. .<br /><br /><a href="http://www.computerwoche.de/knowledge_center/office_tools/1889468/" target="_blank">Zum ausführlichen Artikel</a>
Selenium – Blackbox-Test für Web-Applikationen
Manuelles Testen von Masken oder Funktionen ist bei Entwicklern nicht sonderlich beliebt. Selenium ist ein Framework für Blackbox-Tests von Web-Applikationen. Die Firma Thoughtworks stellt es als freie Software unter der Apache-2.0-Lizenz zur Verfügung. <br/><br/> <b> CW-Fazit: </b> Web-Entwickler können ihre Testläufe mit Selenium erheblich vereinfachen. <br /><br /><a href=" http://www.computerwoche.de/knowledge_center/office_tools/1889457/" target="_blank">Zum ausführlichen Test</a>
Xtext für domänenspezifische Sprachen
Xtext ist ein Werkzeug, um eigene Sprachen zu definieren. Es ist Teil des Eclipse Modeling Project. Aus der selbst generierte Modellsprache erzeugt Xtext einen Editor, der in Eclipse läuft. <br/><br/> <b> CW-Fazit: </b> Die Modellierung mit domänenspezifischen Sprachen reduziert ein Projekt auf das spezifische Problem und trägt damit zur besseren Kommunikation bei. Xtext ist hierfür ein einfaches, aber effizientes Tool. <br /><br /><a href="http://www.computerwoche.de/knowledge_center/software_infrastruktur/1897203/" target="_blank">Zum ausführlichen Test</a>
Überblick statt Chaos mit ThinkingRock
Das Open-Source-Werkzeug "ThinkingRock" unterstützt beim Selbst-Management nach der Methode Getting Things Done (GTD). Die Hauptseite bildet alle wesentlichen Schritte ab und dient zur Navigation. <br/><br/> <b> CW-Fazit: </b> Software als auch mit der Methode sind sehr hilfreich, sich täglich etwas besser zu organisieren. Eine tiefere Integration in Office-Programme wäre wünschenswert, zum Beispiel für das Versenden von Mails, um Aufgaben zu delegieren. <br /><br /><a href="http://www.computerwoche.de/knowledge_center/office_tools/1889472/" target="_blank">Zum ausführlichen Test</a>

Produkt- oder Prozessqualität?

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

Qualitätsmerkmale für Software nach ISO 9126.

Der Standard und seine DIN-66272-Entsprechung listet sechs Qualitätsmerkmale (Portability, Functionality, Reliability, Maintainability, Efficiency und Usability) auf und sieht eine Quantifizierung über interne und externe Metriken vor. Die Übertragbarkeit (Portability) ist der Grad der Eignung der Software, von einer Umgebung in eine andere übertragen zu werden, die Funktionalität der Abdeckungsgrad in Bezug auf die Anforderungen, die Zuverlässigkeit (Reliability) bestimmt die Fähigkeit der Software, unter bestimmten Bedingungen lauffähig zu sein, während die Änderbarkeit (Maintainability) den Änderungsaufwand spezifiziert. Die Effizienz beschreibt das Verhältnis zwischen Leistungsniveau der Software und den eingesetzten Betriebsmitteln, und die Benutzbarkeit bestimmt den Aufwand zur Nutzung der Software durch die Anwender. Allerdings sind die Metriken leider nicht festgelegt, so dass eine formale oder auch automatisierte Prüfung der Merkmale in der Praxis kaum umgesetzt worden ist.

Die Abläufe im Testprozess
Foto: Trivadis

Eine grundlegende Schwierigkeit ist, dass die Tests dieser Merkmale - wenn überhaupt - nur mit großem Aufwand möglich sind und immer im Gesamtkontext des Systems gesehen werden müssen. Wesentlich einfacher ist es dagegen, Tests im Rahmen der einzelnen Phasen der Softwareentwicklung vorzunehmen. Konkret bedeutet dies, dass im Rahmen der Projektphasen die entsprechenden Tätigkeiten für das Qualitäts-Management eingeführt werden.

Dazu findet in einem pragmatischen Ansatz während der ersten Projektphasen (Analyse und Grobspezifikation) die Qualitätsplanung statt. Sie umfasst die Festlegung der Merkmale und Messwerte sowie die Ausführungsszenarien in Form von Testplänen. Die Qualitätssicherung, also die Maßnahmen zur Abwicklung der Qualitätskontrolle, wird anschließend während der Feinspezifikation definiert. Die Qualitätskontrolle selbst findet während der restlichen Projektphasen statt. Es gibt jedoch auch einen Nachteil dieses Vorgehens: In realen Projekten werden die Testphasen oft als zeitlicher Puffer für die Entwicklung verwendet, so dass Testpläne und Testfälle schnell von der Projektrealität überholt werden und damit zum Papiertiger verkommen. Trotzdem ist dieses Vorgehen einfach und sinnvoll und stellt lediglich eine einfache Erweiterung des normalen Projekt-Management-Prozesses dar.

Das Fehlerproblem

Ein zentraler Ansatz für das Testing könnte sein, dass Fehlerursachen, Auftretenswahrscheinlichkeiten, Häufigkeiten und Ort bekannt wären. Leider existieren nur sehr wenige Fehlerstatistiken. Selbst die viel zitierte "Chaos"-Studie der Standish Group, die zumindest den Erfolg von Softwareprojekten auflistet, ist vom renommierten Honorarprofessor und Autor des "Journal of Systems and Software", Robert L. Glass, vollständig in Frage gestellt worden. Er hat nachgewiesen, dass die Zahlen keinerlei statistischen Wert besitzen. Die Standish-Zahlen sind durch den Bericht "A Replicated Survey of IT Software Project Failures" der Universität Ottawa und Maryland aus dem Jahr 2008 vollständig widerlegt worden. Es gibt allerdings Untersuchungen für einzelne Systeme. So haben die Statistiken der AT&T-Mitarbeiter Perry und Evangelist gezeigt, dass bis zu 66 Prozent aller Fehler in den Schnittstellen auftreten. Meistens handelt es sich dabei um Konstruktionsfehler (13 Prozent), nichtadäquate Funktionalität (13 Prozent), mangelhafte Fehlerbehandlung (15 Prozent) und schlechtes Postprocessing (10 Prozent). Es sind genau die Schnittstellen, die viel zu oft vernachlässigt und in modernen Modellierungsmethoden auch zu wenig detailliert erfasst werden. Allein schon die explizite Modellierung eines Schnittstellenablaufs mit den Schritten Exportieren, Validierung der exportierten Daten, Transformation, Konversion, Validierung der zu importierenden Daten und Import in das Zielsystem hilft, fehlerhafte Schnittstellen zu vermeiden. Eine für die Praxis sehr nützliche Richtlinie hierfür ist die "Top 10 Defect Reduction List" von Barry Boehm.

Was wirklich gut funktioniert

Jedes Testhandbuch und jeder Leitfaden für das Testen von Software enthalten den Satz: Es kann gar nicht genug getestet werden. Leider ist dies ein schlechter Ratgeber in einer Situation, in der Kosten und Zeit die zentrale Rolle bei der Erstellung und beim Unterhalt von Softwaresystemen spielen. Deshalb empfiehlt sich ein pragmatisches Vorgehen, das sechs wichtige Instrumente beinhaltet: Entwicklungsrichtlinien zur Fehlervermeidung, die unterschätzten Reviews, eine Änderung der Unit-Test-Praxis, der kluge Einsatz automatisierter Test-Tools, der Ausbau von Tracing und Logging und die vollständig getrennte Prüfung der Datenqualität.

Testmethoden auf einen Blick

Foto: Trivadis

Architecture & Design Inspections: Inspektionen werden auch Reviews, Walkthroughs oder Audits genannt. Dabei werden die zu testenden Artefakte (Dokumente oder Code) durch Fachpersonal geprüft. Die Prüfung kann mittels formeller Methoden, wie beispielsweise nach Fagan, oder in freien Verfahren erfolgen.

Unit-Test: Mittels Unit-Test (auch Modul- oder Komponententest genannt) werden einzelne Komponenten einer Anwendung geprüft. Unit-Tests werden oft im Rahmen der Softwareentwicklung vorgenommen.

Systemtest: Mit einem Systemtest werden alle Komponenten einer Anwendung, die neu, geändert oder von einer Änderung betroffen sind, geprüft. Ein Systemtest erfordert meist mehrere Durchläufe und ist daher ein wichtiger Kandidat für automatisierte Testläufe. Systemtests fallen oft in den Bereich dedizierter Testabteilungen.

Integrationstest: Der Integrationstest prüft das System mit allen notwendigen Komponenten und umgebenden Systemen. Begleitet werden sie häufig von speziellen Tests wie Compatibility-, Performance-, Stress- und Load-Tests. Integrationstests sind die Aufgabe von dediziertem Testpersonal oder der Administration. Ihre Abnahme wird oft "Operational Acceptance" genannt.

User-Acceptance-Test: Diese Tests werden oft auch Betatests, Anwendungstests oder auch End-User-Tests genannt. Sie erfolgen durch die Anwender.

Product Verification: Diese Art von Test wird auch Abnahmetest genannt. Grundlegende Eigenschaft der Product Verification ist die Tatsache, dass unter produktiven Bedingungen mit den entsprechenden Mengengerüsten (Daten, Benutzer, Konfiguration etc.) getestet wird.

Übersicht: Was lässt sich wie und womit testen

Systemeigenschaften und deren Testbarkeit

Eigenschaft

Erklärung

Testbarkeit

Testmittel

Performance (Reaktionszeit/Durchsatz)

Garantie der geforderten Antwortzeiten.

Schwierig, nur im Betrieb möglich.

Performance-Test im Rahmen von Integrationstests.

Sicherheit

Schutz vor nicht autorisiertem Zugriff und mutwilliger Zerstörung.

Sehr schwierig, nur punktuell möglich.

Security-Audits und Reviews.

Verfügbarkeit

Ein System muss zur Verfügung stehen und dabei definierte Mindestanforderungen erfüllen.

Schwierig, mittels Statistiken (Uptime, MTBF, RTO, RPO) im Betrieb.

Betriebsstatistik, Messung nur im laufenden Betrieb über die Zeit möglich.

Usability

Einsetzbarkeit für den vorgesehenen Zweck.

Schwierig, erfordert sehr gute Anforderungsdefinitionen.

User-Acceptance-Test (UAT).

Stabilität

Die Anwendung muss stabil laufen und darf auch unter großer Belastung ihren Dienst nicht teilweise oder ganz einstellen.

Sehr schwierig, Fehlersituationen treten oft nur punktuell auf.

Lasttests.

Skalierbarkeit

Die Anwendung muss ausgebaut werden können.

Sehr schwierig, Simulation sehr komplex.

Keine.

Integrierbarkeit

Ein System muss sich nahtlos in eine existierende Umgebung einfügen lassen.

Machbar, jedoch erst in späten Projektphasen.

Integrationstest.

Portabilität

Unterstützung verschiedener Plattformen.

Machbar, oft durch separate Entwicklungssysteme gewährleistet.

Systemtest auf verschiedenen Plattformen.

Wartbarkeit

Nachweis definierter Wartungsschnittstellen und klare Struktur.

Machbar unter Einbezug des Betriebspersonals.

Reviews.

Wiederverwendbarkeit

Systemteile müssen sich für andere Systeme wiederverwenden lassen.

Schwierig: Gefahr der falschen Generizität.

Keine.

Barry Boehms Richtlinien zur Fehlervermeidung

Ausblick

In Zukunft wird die Qualitätssicherung von Software und Systemen integraler Bestandteil der IT-Governance eines Unternehmens werden. IT-Governance wird heute in vielen Unternehmen mit dem Ziel formuliert, den Wildwuchs, die Heterogenität und die Kosten der betrieblichen Informationssysteme in den Griff zu bekommen. Größere Unternehmen und Verwaltungen definieren Richtlinien, etablieren IT-Governance-Boards und Kennzahlen (Key-Performance-Indikatoren) zur Steuerung, Messung, Kontrolle und Überwachung der IT-Prozesse. Die Integration des Qualitäts-Managements wird dann zum Instrument der Messung und Kontrolle. Das Software-Artefakt der Zukunft wird der Service sein, der auf Unternehmensebene auch die qualitätsrelevante Größe darstellt. Bis dahin sind eine pragmatische Umsetzung von Qualitätsnormen auf Prozessebene und der Einsatz einer klugen Sammlung aus Fehlervermeidungs- und Testvorgehen die besten Mittel, um die durchschnittliche Qualität einer Anwendung zu vertretbaren Kosten zu erhöhen.

Und bei der ganzen Testerei sollte eine grundlegende Tatsache niemals vergessen werden: "Tests können nur die Anwesenheit von Fehlern aufzeigen, nicht ihre Abwesenheit" (Dijkstra). (ue)