TestmanagementChanging the world one bug after amother…
Component Test
Der Komponententest (Unittest) ist der entwicklungsnahe Test von Komponenten, den kleinsten Softwareeinheiten für die eine Spezifikation vorhanden ist oder die separat getestet werden können.
Dieser Test wird meist nach der White-Box-Methodevon den Entwicklern durchgeführt.
Für den Komponententest gelten grundsätzlich keine anderen Regeln als für die nachgelagerten Teststufen. Tests werden bestenfalls verwaltet in einem Testmanagementtool. Dann lassen sich jederzeit Informationen beispielsweise über den Status, die Testabdeckung und Traceability abrufen. Für nachfolgende Teststufen fällt dann weniger Testaufwand an.
Bei der objektorientierten Programmierungsind Klassen und Methoden testbar. Bekanntermaßen besteht eine Klasse aus Variablen, den Attributen, und Methoden. Getestet wird, ob eine Klasse unter Berücksichtigung der unterschiedlichen Objektzustände richtig arbeitet. Ziel ist es, jede Methode zu testen. Ist eine Klasse abhängig von anderen Komponenten, so sind diese für den Test bereitzustellen bzw. durch Platzhalter, wie beispielsweise Subs, Mocks oder Dummies, zu ergänzen.
Für den Komponententest ist möglichst ein gemeinsames Test-Framework einzusetzen, welches auch für das Debugging verwendet werden kann.
Beim Test sind Coverage-Messungen durchzuführen, also die Abdeckung der Klassen, die Abdeckung der Methode je Klasse und die Anweisungsabdeckung innerhalb der Methoden.
Ist der Komponententest bereits automatisiert, so bietet es sich an, ihn in das Continousintegrationsystem einzubinden.
Im Zuge der Anwendung von agilen Techniken(Test first, Test-Driven-Development) werden Praktiken eingesetzt, die mit dem Test beginnen bevor programmiert wird. Das führt letztlich zu schnelleren und besseren Ergebnissen. In Scrum wird der Einsatz dieser agilen Techniken übrigens nicht verlangt. Die dazu erstellten Testfälle werden auch für den Grey-Box-Testverwendet.
Eine Komponente ist die kleinste Softwareeinheit, die für sich getestet werden kann, für die eine separate Spezifikation verfügbar ist. Komponentenintegrationstest: Testen wird durchgeführt mit dem Ziel, Fehlerzustände in den Schnittstellen und dem Zusammenwirken der integrierten Komponenten aufzudecken. Komponentenspezifikation: Die Beschreibung der Funktionalität einer Komponente in Form der Vorgabe von Ausgabewerten für spezifizierte Eingabewerte unter spezifizierten Bedingungen sowie der geforderten nicht funktionalen Eigenschaften (z.B. Ressourcennutzung).
Ein White-Box-Test ist ein Test, der auf der Analyse der internen Struktur einer Komponente oder eines Systems basiert. White-Box-Testentwurfsverfahren: Ein dokumentiertes Verfahren zur Herleitung und Auswahl von Testfällen, basierend auf der internen Struktur einer Komponente oder eines Systems.
Testmanagementwerkzeuge bieten Mechanismen zur komfortablen Erfassung, Katalogisierung und Verwaltung von Testfällen und zu deren Priorisierung. Sie erlauben, den Status der Testfälle zu überwachen, also festzuhalten und auszuwerten, ob, wann, wie oft und mit welchem Resultat (ok, nok) ein Testfall ausgeführt wurde. Sie helfen dem Testmanager, die Tests zu planen und jederzeit den Überblick von Testfällen zu behalten. Testmanagementwerkzeuge unterstützen anforderungsbasiertes Testen. Dazu bieten sie die Möglichkeit, Anforderungen (Requirements) zu erfassen oder aus Requirements-Management-Tools zu importieren und mit denjenigen Tests zu verknüpfen, die die entsprechende Anforderung prüfen. Manche Tools enthalten auch Funktionen zur Verwaltung der Defects. Testmanagementwerkzeuge werden auch für automatisierte Tests verwendet. Beispiele: HP Quality Center/ALM TestLink (mit Mantis) Microsoft Testmanager
Als Testabdeckung bezeichnet man das Verhältnis an tatsächlich getroffenen Aussagen eines Tests gegenüber den theoretisch möglich treffbaren Aussagen bzw. der Menge der gewünschten treffbaren Aussagen. Die Testabdeckung spielt als Metrik zur Qualitätssicherung und zur Steigerung der Qualität in der Softwaretechnik eine große Rolle. In der Softwaretechnik wird die Testabdeckung für unterschiedliche Bereiche der Software ermittelt. Zu diesen gehört die Abdeckung des Codes, der Daten oder der Fachlichkeit.
Rückverfolgbarkeit/Traceability bezeichnet bei Produktentwicklungen die Verfolgbarkeit von Anforderungen über den gesamten Entwicklungsprozess. Auch, die Fähigkeit, zusammengehörige Teile von Dokumentation und Software zu identifizieren, insbesondere die Anforderungen mit den dazu gehörigen Testfällen.
Unter Objektorientierung (OO) versteht man eine Sichtweise auf komplexe Systeme, bei der ein System durch das Zusammenspiel kooperierender Objekte beschrieben wird. Der Begriff Objekt ist dabei unscharf gefasst. Wichtig an einem Objekt ist nur, dass ihm bestimmte Attribute (Eigenschaften) und Methoden zugeordnet sind und dass es in der Lage ist, von anderen Objekten Informationen zu empfangen beziehungsweise an diese zu senden. Dabei muss ein Objekt nicht gegenständlich sein. Entscheidend ist, dass bei dem jeweiligen Objektbegriff eine sinnvolle und allgemein übliche Zuordnung möglich ist. Ergänzt wird dies durch das Konzept der Klasse, in der Objekte aufgrund ähnlicher Eigenschaften zusammengefasst werden. Ein Objekt wird im Programmcode als Instanz beziehungsweise Inkarnation einer Klasse definiert.
Codeüberdeckung/Coverage: Eine Analysemethode, die bestimmt, welche Teile einer Software durch eine Testsuite ausgeführt wurden und welche Teile nicht ausgeführt wurden, z.B. Anweisungs-, Entscheidungs- und Bedingungsüberdeckung.
Statische Codeanalyse: Eine Analyse des Quelltextes ohne Ausführung der Software. Statistischer Test: Ein Testentwurfsverfahren, in dem das Modell der statistischen Verteilung der Eingaben verwendet wird, um repräsentative Tests zu konstruieren.
Prüfung des Testobjekts durch Ausführung auf einem Rechner. Dynamisches Analysewerkzeug: Ein Werkzeug, das zur Ausführungszeit Informationen über den Programmcode bereitstellt. Solche Werkzeuge werden meistens genutzt, um undefinierte Zeiger zu identifizieren, Zeigerberechnungen zu prüfen und die Speicherzuteilung, -verwendung und -freigabe zu überwachen und Speicherengpässe zu kennzeichnen. Siehe auch statische Codeanalyse.
Review: Eine Bewertung eines Produkts oder eines Projektstatus. Ein Review dient dazu, Diskrepanzen zu den geplanten Ergebnissen aufzudecken und Verbesserungspotenziale zu identifizieren. Review ist ein Oberbegriff für Management Review, informelles Review, technisches Review, Code-Review, Inspektion und Walkthrough (Eine schrittweise Präsentation eines Dokuments durch den Autor, um Informationen zu sammeln und ein gemeinsames Verständnis des Inhalts aufzubauen).
Zu den Nicht-funktionalen-Tests zählen nach ISO 9126/ISO 25000 folgende Qualitätsmerkmale: Zuverlässigkeit, Benutzbarkeit (Usability) Effizienz Wartbarkeit Übertragbarkeit
Performanztest: Testen zur Bestimmung der Performanz eines Softwareprodukts. Performanztestwerkzeug: Ein Werkzeug zur Unterstützung der Performanztests. Es enthält im Wesentlichen zwei Funktionen: Lastgenerierung und Messung der Testtransaktionen. Durch die Lastgenerierung werden entweder viele Anwender oder hohe Eingabedatenvolumen simuliert. Während der Testdurchführung werden Antwortzeiten von ausgewählten Transaktionen gemessen und protokolliert. Performanz-Testwerkzeuge liefern in der Regel Berichte auf der Basis der Testprotokolle und Diagramme des Verhaltens unter Last in Relation zu den Antwortzeiten.
Continous-Integration (CI) ist ein Begriff aus der Software-Entwicklung, der den Prozess des fortlaufenden Zusammenfügens von Komponenten zu einer Anwendung beschreibt. Das Ziel der kontinuierlichen Integration ist die Steigerung der Softwarequalität. Typische Aktionen sind das Übersetzen und Linken der Anwendungsteile, prinzipiell können aber auch beliebige andere Operationen zur Erzeugung abgeleiteter Informationen durchgeführt werden. Üblicherweise wird dafür nicht nur das Gesamtsystem neu gebaut, sondern es werden auch automatisierte Tests durchgeführt und Softwaremetriken erstellt. Der gesamte Vorgang wird automatisch ausgelöst durch Einchecken in die Versionsverwaltung. Hudson und Jenkins sind Systeme zur kontinuierlichen Integration. Mit ihrer Hilfe ist es möglich, die Integration von Software zu automatisieren. Oracle hält die Namensrechte an Hudson.
Qualitätsmerkmal: Ein Satz von Eigenschaften eines Softwareprodukts, anhand dessen seine Qualität beschrieben und beurteilt wird. Ein Softwarequalitätsmerkmal kann über mehrere Stufen in Teilmerkmale verfeinert werden. Qualitätsmerkmale sind Funktionalität, Zuverlässigkeit, Benutzbarkeit, Effizienz, Änderbarkeit und Übertragbarkeit.
Eine agile Softwareentwicklung ist eine auf iterativer und inkrementeller Entwicklung basierende Softwareentwicklungsmethode, wobei sich Anforderungen und Lösungen durch die Zusammenarbeit von selbstorganisierenden und funktionsübergreifenden Teams entwickeln.
Testgetriebene Entwicklung ist eine Methode, die häufig bei der agilen Entwicklung eingesetzt wird. Bei der testgetriebenen Entwicklung erstellt der Programmierer Software-Tests konsequent vor den zu testenden Komponenten. Die dazu erstellten Testfälle werden auch als Grey-Box-Tests bezeichnet. Auch diese Art der Programmierung kann nicht jeden Fehler aufdecken, insbesondere nicht Fehler, die programmextern entstehen: Timingfehler wie Thread-Deadlocks, Fehler bei Schnittstellenkommunikation usw. Ebenfalls kann es an der nötigen Testabdeckung mangeln, wenn nicht alle potentiellen Eingaben einer Funktion getestet werden können. Fehler bei Benutzungsoberflächen sind schlecht testbar.
Testbarkeit ist der Grad, zu dem ein Software-Artefakt (ein Software-System, ein Software-Modul, ein Anforderungs- oder Entwicklungsdokument) den Test in einem gegebenen Testkontext unterstützt. Je geringer die Testbarkeit ist, desto höher ist der Testaufwand. Im Extremfall ist bei schlechter Testbarkeit der Test von Teilen der Software-Anforderungen gar nicht möglich.
Black-Box-Test bezeichnet eine Methode des Softwaretests, bei der die Tests ohne Kenntnisse über die innere Funktionsweise des zu testenden Systems entwickelt werden. Funktionales oder nicht-funktionales Testen ohne Nutzung von Informationen über Interna eines Systems oder einer Komponente. Black-Box-Tests werden eingesetzt um Fehler gegenüber der Spezifikation aufzudecken, sind aber kaum geeignet, Fehler in bestimmten Komponenten oder gar die fehlerauslösende Komponente selbst zu identifizieren. Für letzteres benötigt man White-Box-Tests. Black-Box-Testentwurfsverfahren: Ein Verfahren zur Herleitung und Auswahl von Testfällen. Es basiert auf einer Analyse der funktionalen oder nicht-funktionalen Anforderungen (Spezifikationen) einer Komponente oder Systems ohne Berücksichtigung ihrer internen Struktur.
Black-Box-Test bezeichnet eine Methode des Softwaretests, bei der die Tests ohne Kenntnisse über die innere Funktionsweise des zu testenden Systems entwickelt werden. Funktionales oder nicht-funktionales Testen ohne Nutzung von Informationen über Interna eines Systems oder einer Komponente. Black-Box-Tests werden eingesetzt um Fehler gegenüber der Spezifikation aufzudecken, sind aber kaum geeignet, Fehler in bestimmten Komponenten oder gar die fehlerauslösende Komponente selbst zu identifizieren. Für letzteres benötigt man White-Box-Tests. Black-Box-Testentwurfsverfahren: Ein Verfahren zur Herleitung und Auswahl von Testfällen. Es basiert auf einer Analyse der funktionalen oder nicht-funktionalen Anforderungen (Spezifikationen) einer Komponente oder Systems ohne Berücksichtigung ihrer internen Struktur.
Grey-Box-Tests sind Softwaretests, die durch Test-Driven-Development (TDD) entstehen. Mit dem Black-Box-Test teilt er sich die Unkenntnis über die Interna des zu testenden Systems, weil der Grey-Box-Test vor dem zu testenden System geschrieben wird.
Unittest-Framework: Ein Werkzeug, das eine Umgebung für einen Komponententest bereitstellt. In dieser Umgebung wird die Komponente isoliert oder mit geeigneten Treibern und Platzhaltern getestet. Darüber hinaus wird dem Entwickler zusätzliche Unterstützung (z.B. Debugging) zur Verfügung gestellt.
Debugging ist eine Tätigkeit des Lokalisierens/Identifizierens, Analysierens und Entfernens der Ursachen von Fehlerwirkungen in der Software.