Grundlagen des Softwaretestens
Inhalt dieser Lerneinheit
Im Rahmen dieser Lerneinheit werden sie mit den folgenden Themen vertraut gemacht:
Notwendigkeit des Testens
Ursachen für Softwarefehler
Rolle des Testens
Testen, Qualität und Qualitätssicherung
Testaufwand
Begriffsdefinitionen
Softwaretesten
Grundsätze des Softwaretestens
Fundamentaler-Testprozess
Psychologie des Testens
Ethische Richtlinien
Notwendigkeit des Testens
Welchen Bedrohungen setzen wir uns aus, wenn wir Software-Systeme nicht oder nicht richtig testen?
Software-Systeme haben in unserer Gesellschaft zweifelsfrei eine zunehmende Bedeutung und wir machen uns und unser Leben oder Überleben davon abhängig. Der Schaden welcher durch mangelhafte Software entsteht ist mannigfaltig und kann von Geld-, Zeit-, oder Imageverlust bis hin zur Gefährdung von Menschenleben führen.
Das Testen von Software-Systemen kann helfen, das Risiko durch schadhafte oder mangelhafte Software zu reduzieren und leistet somit einen wesentlichen Beitrag am Unternehmenserfolg.
Ursachen für Softwarefehler
Einleitend folgender Leitgedanke aus dem Requirements Engineering:
"Wer nicht weiss was er will, bekommt das was er verdient!"
Dieser so saloppe Spruch stellt den Bezug zum Requirements Engineering her. Denn wenn wir nicht wissen was wir wollen und wie wir es wollen ist die Herstellung von Qualität äusserst schwierig.
Das Requirements Engineering bildet insofern die Basis für das Softwaretesten und somit für die Qualitätssicherung.
Begründung:
Qualität wird laut der Norm DIN EN ISO 9000:2015-11 (der gültigen Norm zum Qualit) als „Grad, in dem ein Satz inh Merkmale eines Objekts Anforderungen erfüllt“ definiert. Die Qualität gibt damit an, in welchem Maße ein Produkt (Ware oder Dienstleistung) den bestehenden Anforderungen entspricht.
Also, ohne Anforderungen keine Qualitätssicherung.
Ursachen für Softwarefehler
Ursachen für Fehler begründen sich durch Fehlhandlungen von Menschen oder durch umgebungsbedingte Einwirkungen.
Mensch:
Arbeiten unter Zeitdruck
mangelhafte Ausbildung
zu grosse Komplexität
zu viele Schnittstellen
mangelhafte Kommunikation
Umgebung:
Strahlung
Schmutz
Defekte Hardware
Rolle des Testens
Intensives Testen von Systemen und Dokumentation kann helfen, das Risiko, dass Probleme im operativen Betrieb auftreten, zu reduzieren. Es kann dazu beitragen, die Qualität des Softwaresystems zu erhöhen, indem Fehler vor der Freigabe in der operativen Verwendung gefunden und behoben werden. Softwaretesten kann auch notwendig sein, um vertragliche oder gesetzliche Vorgaben oder spezielle Industrienormen zu erfüllen.
Testen verfolgt die nachfolgenden Ziele:
Fehlerwirkungen nachweisen.
Qualität bestimmen.
Vertrauen in das Programm erhöhen.
Fehlerwirkungen vorbeugen.
Testen, Qualität und Qualitätssicherung
Definition von Qualität
Qualität Gesamtheit der Merkmale und Merkmalswerte eines Produkts oder einer Dienstleistung, die sich auf deren Eignung beziehen, festgelegte oder vorausgesetzte Erfordernisse zu erfüllen. (Spillner & Linz, 2005)
Software Qualität
Software-Qualität Gesamtheit der Merkmale und Merkmalswerte eines Softwaresystem-Produkts, die sich auf dessen Eignung beziehen, festgelegte oder vorausgesetzte Erfordernisse zu erfüllen.
Idee der Qualitätssicherung
Aus Fehlern lernen
Testen zur Qualitätssicherung
Qualitätssicherung (QS) (englisch Quality Assurance (QA)) oder Qualitätskontrolle (englisch Quality Control (QC)) ist ein Sammelbegriff für unterschiedliche Ansätze und Maßnahmen zur Sicherstellung festgelegter Qualitätsanforderungen
Qualitätsmerkmale von Software
„Unter Softwarequalität versteht man die Gesamtheit der Merkmale und Merkmalswerte eines Softwareprodukts, die sich auf dessen Eignung beziehen, festgelegte oder vorausgesetzte Erfordernisse zu erfüllen“ (Ist/Soll).[1]
Qualitätsmodelle existieren zum Beispiel in der Form des ISO-Standards ISO/IEC 9126. Diese Norm definiert die in der nebenstehenden Grafik dargestellten Qualitätskriterien für Software in zweistufiger Struktur. Danach wird deutlich, dass unter Softwarequalität mehr als nur Fehlerfreiheit (die im Wesentlichen dem Kriterium Funktionalität zuordenbar ist) verstanden wird.
Die Qualitätsmerkmale benennen unterschiedliche Eigenschaften, die die Software aufweisen soll. Dies sind auf oberster Ebene:[3]
funktionale Eigenschaften, „die grundlegenden Eigenschaften zu den Funktionen der Software“ (was sie funktional leisten soll und wie),
nicht-funktionale Eigenschaften, die „das Betriebsverhalten des Softwareprodukts im täglichen Einsatz kennzeichnen.“
Während bei den nicht-funktionalen Eigenschaften zur Zuverlässigkeit, Benutzbarkeit (Usability) und Effizienz die Anforderungen einzuordnen sind, die das Softwareprodukt bei seinem Betrieb erfüllen soll, sind die Qualitätskriterien zu Änderbarkeit (Wartbarkeit) und Übertragbarkeit auf die interne Beschaffenheit der Software (i. W. des Quelltextes) ausgerichtet, die ggf. erforderliche Anpassungsmaßnahmen ermöglichen/vereinfachen soll.
Diese Kriterien stellen einen Rahmen dar, der für einzelne Softwareprodukte in individuellen Spezifikationen konkretisiert werden kann, um in der Softwareentwicklung berücksichtigt zu werden.
Bereiche der Qualitätssicherung (Massnahmenkategorien)
Organisatorische Massnahmen
Konstruktive Massnahmen
Analytische Massnahmen
Testen und Kosten
Je später ein Fehler entdeckt wird, desto teurer ist die Behebung. Werden frühe Testaktivitäten wie Reviews der Anforderungsdokumente und erstellen der Testspezifikation realisiert, verhindern diese Aktivitäten Folgefehler und tragen damit bereits zur Qualitätssteigerung bei. Die Fehlerkosten entsprechen dem Risiko-Potenzial.
Der Testaufwand (in Softwareprojekten) liegt je nach Autor zwischen 20 % und 70 % der Gesamtkosten. Pol, Koomen und Spillner beziffern sie in[1] mit 30 % bis 40 % des Gesamtbudgets. Die Streubreite wird von projektspezifischen Gegebenheiten bestimmt.
Wenn der Testaufwand für einzelne Phasen des Testprozesses betrachtet wird, ist er unterschiedlich verteilt: Mit je circa 40 % sind häufig die Test-Spezifikation und die Test-Durchführung beteiligt. Der Rest wäre für die Planung, Auswertung und den Testabschluss zu veranschlagen.
Die Testintensität sollte sich an der Höhe der Fehlerfolgekosten orientieren
Nach den "Prinzipien des Softwaretestens" (ISTQB), Grundsatz 2, ist vollständiges Testen nicht möglich (*); denn Testen kann zwar die Anwesenheit von Fehlern zeigen, nicht aber deren Abwesenheit (Grundsatz 1) - (*) weil alle Einflussgrößen, in allen möglichen Kombinationen, praktisch nicht prüfbar sind (außer bei trivialen Funktionen).
Deshalb müssen die Testaktivitäten strategisch geplant werden, um die Testintensität, somit auch den Testaufwand, "angemessen" zu wählen. Nach Juran, referenziert in[1], soll der Testaufwand so hoch sein, dass die Gesamtkosten (Testaufwand plus potenzielle Fehlerfolgekosten) auf einem möglichst niedrigen Niveau liegen. Wie die Grafik schematisch zeigt, entstehen bei zu geringer Testintensität überproportional hohe Fehlerfolgekosten, bei zu hoher Testintensität (deren Kosten linear verlaufen) sind die Testkosten im Verhältnis zur erwartbaren Reduzierung von Fehlerfolgekosten (aus noch vorhandenen Fehlern) zu hoch.
Nach ISTQB[2] soll die Höhe des Testaufwands so bemessen sein, dass die Tests genug Informationen liefern, um über die Freigabe (der Software) entscheiden zu können.
Begriffsdefinitionen
Ein Fehler kann somit als die Nichterfüllung einer festgelegten Anforderung, eine Abweichung zwischen dem Ist-Verhalten (während der Ausführung der Tests oder des Betriebs) und dem Soll-Verhalten (in der Spezifikation oder den Anforderungen) bezeichnet werden.
Eine Fehlerhandlung (Error) ist eine menschliche Handlung (etwa ein Programmierfehler eines Entwicklers), die zu einem Fehlerzustand in der Software führt.
Ein Fehlerzustand (fault) – auch Defekt oder innerer Fehler – ist ein inkorrektes Teilprogramm, eine inkorrekte Anweisung oder eine inkorrekte Datendefinition und damit die Ursache für das Auftreten einer Fehlerwirkung.
Eine Fehlerwirkung (failure) – oder äusserer Fehler – ist die Wirkung eines Fehlerzustandes, die bei der Ausführung des Testobjekts nach «aussen» in Erscheinung tritt. In der Literatur werden auch Bezeichnungen wie Fehlfunktion oder Ausfall verwendet.
Ein Mangel liegt vor, wenn eine gestellte Anforderung oder eine berechtigte Erwartung nicht angemessen erfüllt wird.
Softwaretesten
Was gehört zum Testen?
Definition zum Begriff Testen:
Testen bezeichnet den gesamten Prozess, ein Programm auf systematische Weise auszuführen, um die korrekte Umsetzung der Anforderungen nachzuweisen und um Fehlerwirkungen aufzudecken.
Testen bezeichnet jede einzelne (im Allgemeinen stichprobenartige) Ausführung des Testobjektes unter spezifizierten Bedingungen zum Zwecke des Überprüfens der (beobachteten) Ergebnisse im Hinblick auf gewisse gewünschte Eigenschaften.
Testen ist der Oberbegriff für alle Tätigkeiten und Stufen im Testprozess.
Zum Testen gehört mehr als nur das Ausführen von Tests:
Testkonzept erstellen
Planung und Steuerung der Tests
Auswahl der Testbedingungen
Testfallspezifikation
Testdurchführung
Überprüfen der Resultate
Auswertung der Ausgangskriterien
Berichte über den Testprozess und das zu testende System
Test-Abschlussarbeiten (z.B. nachdem eine Testphase abgeschlossen ist)
Ziele des Testens
Das Softwaretesten verfolg die folgenden Zielsetzungen:
Aufdecken von Fehlern
Schaffen von Vertrauen
Bestimmung der Softwarequalität
Fehlerentwicklung vorbeugen
Weitere Zielsetzungen sind:
Beim Herstellen von Tests kann ein Hauptziel sein, so viele Fehlerwirkungen wie möglich zu verursachen.
Beim Abnahmetest kann das Hauptziel darin bestehen, zu bestätigen, dass das System wie vorausgesagt funktioniert. Über die vom System erfüllten Anforderungen wird eine Vertrauensbasis geschaffen.
In manchen Fällen zielt das Testen hauptsächlich darauf ab, die Softwarequalität zu bewerten (ohne der Absicht Mängel zu beheben), um die Beteiligten über das Risiko einer Systemfreigabe zu einem bestimmten Zeitpunkt zu informieren.
Wartungstests beinhalten oft Tests, die sicherstellen sollen, dass durch die Änderung der Software keine neuen Fehler eingebaut wurden (Regressionstests).
Beim betrieblichen Abnahmetest kommt es vor allem darauf an, ein System hinsichtlich Ausprägungen wie Zuverlässigkeit, Wiederherstellbarkeit oder Verfügbarkeit zu bewerten.
Testabdeckung gegenüber den Testbedingungen (Testbedingungen sind Merkmale eines-Testobjektes, die durch Testfälle geprüft werden können).
Grundsätze des Softwaretesten
Allgemeine Grundsätze des Softwaretestens Grundsätze für das Softwaretesten Die nachfolgenden Grundsätze in Bezug auf das Testen haben sich als generelle Leitlinien etabliert. Die folgenden Texte sind aus dem ISTQB-Syllabus übernommen.
Testen zeigt die Anwesenheit von Fehlern. Mit Testen wird das Vorhandensein von Fehlerzuständen nachgewiesen. Ausreichendes Testen verringert die Wahrscheinlichkeit, dass noch unentdeckte Fehlerzustände im Testobjekt vorhanden sind. Mit Testen lässt sich jedoch keine Fehlerfreiheit beweisen. Selbst wenn im Test keine Fehlerwirkung aufgezeigt wird, ist dies kein Nachweis für Fehlerfreiheit.
Erschöpfendes (vollständiges) Testen ist nicht möglich Ein erschöpfender Test, bei dem alle möglichen Eingabewerte und deren Kombinationen unter Berücksichtigung aller unterschiedlichen Vorbedingungen ausgeführt werden, ist mit Ausnahme sehr trivialer Testobjekte nicht durchführbar. Tests können immer nur Stichproben sein. Der Testaufwand richtet sich deshalb nach Risiko und Prioritäten.
Mit dem Testen frühzeitig beginnen Testaktivitäten sollen im System- oder Softwarelebenszyklus so früh wie möglich beginnen und definierte Ziele verfolgen. Durch frühzeitiges Prüfen werden Fehler frühzeitig erkannt und Folgefehler können verhindert werden.
Häufung von Fehlern: Oft finden sich in nur wenigen Teilen eines Testobjekts die meisten Fehlerursachen. Eine Gleichverteilung der Fehlerzustände im Testobjekt ist nicht gegeben. Dort wo Fehlerwirkungen nachgewiesen wurden, finden sich meist noch weitere. Beim Testen muss flexibel auf diesen Umstand reagiert werden.
Zunehmende Testresistenz (Pesticide paradox) So wie Schädlinge gegen Pflanzenschutzmittel resistent werden, lassen Tests in ihrer Wirksamkeit nach. Werden Tests nur wiederholt, decken sie keine neuen Fehlerwirkungen mehr auf. Verbliebene oder neu eingebaute Fehlerzustände sind in den Programmteilen enthalten, die von den Tests nicht ausgeführt werden. Damit die Effektivität der Tests nicht sinkt, sind die vorhandenen Testfälle regelmässig zu prüfen und durch neue oder modifizierte Testfälle zu ergänzen. Bisher nicht geprüfte Teile der Software oder unberücksichtigte Konstellationen bei der Eingabe werden ausgeführt und somit mögliche weitere Fehlerwirkungen nachgewiesen.
Testen ist abhängig vom Umfeld Je nach Einsatzgebiet und Umfeld des zu prüfenden Systems gilt es, das Testen anzupassen. Kein System kann auf die exakt gleiche Art und Weise getestet werden. Die Intensität des Testens, die Definition der Testausgangskriterien usw. sollten bei jedem System seinem Einsatzumfeld entsprechend festgelegt werden. Sicherheitskritische Systeme verlangen andere Prüfungen als beispielsweise E-Commerce-Systeme. COTS (Commercial Off The Shelf Software) Systeme (Standardsoftware: bspw. Microsoft, SAP, Office…) wiederum stellen aufgrund der Verbreitung dieser Systeme einen anderen Anspruch an das Testvorgehen und Umgebungssetup.
Trugschluss: Keine Fehler = brauchbares System Fehlerwirkungen zu finden und Fehlerzustände zu beseitigen, garantiert noch lange nicht, dass das System auch den Vorstellungen und Erwartungen der Nutzer entspricht. Frühzeitiger Einbezug der späteren Nutzer in den Entwicklungsprozess und die Nutzung von «Prototyping» sind vorbeugende Massnahmen zur Vermeidung des Problems. Ende des Zitats aus dem Syllabus.
Fundamentaler Testprozess
Dieser fundamentale Testprozess besteht aus folgenden Hauptaktivitäten:
Testplanung und Teststeuerung.
Testanalyse und Testentwurf.
Testrealisierung und Testdurchführung.
Testauswertung und Testabschlussbericht.
Testabschluss.
Diese Aktivitäten werden auf allen Teststufen wiederholt.
Inhalte der Testplanung
Festlegen der Teststrategie
„Abstrakte Beschreibung der vorgesehenen Teststufen und der Art und Weise, wie innerhalb dieser Teststufen vorzugehen ist, für eine Organisation oder ein Programm - gültig für ein oder mehrere Projekte.“ [GTB-GLOSS]
Festlegen der Testvorgehensweise „Die Implementierung einer Teststrategie in einem spezifischen Projekt….“�
[GTB-GLOSS]
Erstellen des Testkonzepts „Ein Dokument, das u.a. den Gültigkeitsbereich, die Vorgehensweise, die Ressourcen und die Zeitplanung der beabsichtigten Tests mit allen Aktivitäten beschreibt.“ [GTB-GLOSS]
Innerhalb der Testplanung werden je Teststufe
der Testumfang bestimmt,
die Risiken des Testens ermittelt,
die Testziele bestimmt,
die Testaktivitäten mit zugeordneten Rollen und
die Testverfahren / Testmethoden festgelegt,
die Testendekriterien und
die geforderte Testabdeckung / -überdeckung definiert,
die Testmittel ausgesucht,
die Ressourcen und Termine (Meilensteine) für alle Testaufgaben und
der Detaillierungsgrad für die Testszenarien �festgelegt.
Integration und Abstimmung der Testaktivitäten in den �Software-Lebenszyklus
Festlegen von Inhalt und Form der Testdokumentation (Umfang, Detaillierungsgrad, Struktur, Templates)
Auswahl von geeigneten Metriken zur Überwachung und Steuerung (von Testvorbereitung, -durchführung, Fehlerbehebung, Risiken)
Erstellung von Vorgaben für die Testvorbereitung und -durchführung von Testszenarien, im Hinblick auf Nachvollziehbarkeit und Wiederholbarkeit
Inhalte der Teststeuerung
Messen und Analysieren der Resultate
Überwachung und Dokumentation von
Testfortschritt,
erreichter Testabdeckung und
Testendekriterien.
Korrekturmaßnahmen initiieren
Entscheidungen fällen
Weitergabe der Teststeuerungsresultate �an die Testplanung � Einarbeitung in die Testpläne
Inhalte der Testanalyse
Review der Testbasis (z.B. Anforderungen, Architektur, Design, Schnittstellen)
Identifizierung der Testobjekte/ Testbedingungen / Testkriterien
Übersetzung der allgemeinen Testziele in konkrete Testbedingungen / Testfälle
Testentwurf / Testentwurfsspezifikation
Bewertung der Testbarkeit von Anforderungen und System
Entwurf der Testumgebungsorganisation
Identifikation der benötigten Infrastruktur und Werkzeuge
Inhalte Testrealisierung und Testdurchführung
Bei der Testrealisierung und -durchführung werden aus�den Testbedingungen und logischen Testfällen konkrete Testfälle entworfen und ausgeführt.
Testrealisierung u. Testdurchführung umfassen die folgenden Hauptaufgaben:
Erstellung und Priorisierung konkreter Testfälle
Erstellung der Testdaten
Zusammenstellen von Testsuiten (Chronologische Abfolge von Testfällen)
Entwerfen der Testskript / Testdrehbuch
Vorbereitung der Testrahmen und Entwicklung von Skripten zur Testautomatisierung
Kontrolle, ob das Testsystem korrekt �aufgesetzt wurde
Sicherstellung der richtigen Konfigurationen
Ausführung der Tests
Protokollierung der Testergebnissen
Vergleich Ist-Ergebnisse / Ist-Verhalten mit den erwarteten Soll-Ergebnissen / Soll-Verhalten
Gefundene Fehlerwirkungen oder Abweichungen werden festgehalten und analysiert
Durchführung
Fehlernachtest
Regressionstest
Inhalte der Testauswertung
Testauswertung und Bericht umfassen die folgenden Hauptaufgaben:
Auswertung der Testprotokolle
Ist das Testende erreicht?
Testbericht erstellen
Testauswertung und Bericht sollen in jeder Teststufe stattfinden!
Inhalt Testabschluss
Der Abschluss der Testaktivitäten umfasst die folgenden Hauptaufgaben:
Kontrolle der Arbeitsergebnisse
Schließung der Fehlermeldungen
Abnahme des Systems dokumentieren
Dokumentation und Archivierung der Testmittel, Testumgebung und der Infrastruktur für spätere Wiederverwendung
Übergabe der Testmittel an die Wartungsorganisation
Analyse und Dokumentation von Verbesserungspotenzial (Testprozessverbesserung)
Übersicht der Projekt und Testdokumentation
Psychologie des Testens
Zu Beginn des Testprozesses sollten die Ziele und Risiken klar formuliert werden:
Durch klare Zielsetzungen für den Test kann die Effektivität der Tester verbessert werden.
Die Blindheit gegenüber eigenen Fehlern sollte beachtet werden.
Eine sachliche Kommunikation und Rückmeldung bezüglich Probleme sollte eingehalten werden.
Unabhängiges Testen und Eigenüberwachung sollten ausgewogen werden. Dabei ist sachliches kommunizieren sehr wichtig. Die Haltung bzw. Einstellung, die während der Testdurchführung und der Review-Phase benötigt wird, unterscheidet sich von der Analyse oder Entwicklung. Die richtige Einstellung befähigt die Entwickler, ihren eigenen Code zu testen.
Die Verteilung der Verantwortung auf Tester und Entwickler hat Vorteile: Man profitiert von einer unabhängigen Sichtweise geschulter und professioneller Testexperten. Deshalb ist unabhängiges Testen oft effizienter (Schutz vor Befangenheit) und kann in jeder Teststufe angewendet werden. Unabhängigkeit darf allerdings auf keinen Fall als einzige Lösung angesehen werden. Auch Entwickler können viele Fehler in ihrem eigenen Code finden.
Ethnische Richtilinien
Durch ihre Tätigkeit im Bereich Softwaretesten erhalten Personen oft Zugang zu vertraulichen und rechtlich privilegierten Informationen. Damit diese Informationen nicht missbräuchlich verwendet werden, sind ethische Leitlinien nötig. In Anlehnung an den Ethik-Kodex von ACM und IEEE stellt das ISTQB ® die folgenden ethischen Leitlinien auf.