Lektion 4: Qualitätskontrolle Flashcards
Fragmentierung der Hard- und Software
die Vielfalt an Hard- und Software bei Endgeräten.
Bei den manuellen Testverfahren wird die App von potenziellen Benutzern getestet. Dazu werden Testszenarien erstellt und die App anhand eines festgelegten Testplans von den Benutzern getestet und bewertet. Bei der Durchführung gibt es drei Möglichkeiten, welche?
- klassisch über eine unternehmensinterne Abteilung zur Qualitätssicherung,
- über externe Agenturen zur Qualitätssicherung (Outsourcing) und
- mittels Crowd-Testing, bei dem die Testpersonen über externe Dienstleister bereitgestellt werden.
Code-Repository
In einem Code-Repository wird die aktuelle Quellcode-Version aufbewahrt und gebündelt. Es dient dazu, den Quellcode zu strukturieren und zu verwalten.
Debugging
Beim Debugging geht es darum, Fehler im Quellcode zu finden, zu diagnostizieren und zu beheben.
Unit-Test
Bei einem Unit-Test wird die Funktionalität einzelner Module oder Komponenten einer Anwendung getestet.
Um diese Fehler im Quellcode leicht auffindbar zu machen, sind in den Entwicklungsumgebungen, wie z. B. in Android Studio oder XCode, sogenannte Debugger integriert. Gerade wenn die Zeilenzahl im Quellcode ansteigt und die Komplexität zunimmt, ist das Debugging-Tool eines der wichtigsten Hilfsmittel bei der Programmierung. Durch das Debugging werden auch schwer auffindbare und versteckte Programmierfehler im Quellcode schnell erkannt und lassen sich sicher beheben. Das gilt nicht nur für Tippfehler, sondern auch für logische Fehler, z. B. bei Berechnungen. Debugger werden dabei hauptsächlich für die folgenden Aufgaben eingesetzt, welche?
- Programmablauf steuern: Anhand von Breakpoints (Haltepunkten) kann zur Laufzeit (bei Ausführung der App) an zuvor definierte Zeilen im Quelltext navigiert werden. Das Programm stoppt jeweils an diesen Punkten und kann dann schrittweise durch das Verarbeiten von Befehlen fortgesetzt werden.
- Daten betrachten: Verfügbare Variablen können mit dem Debugger ausgelesen werden. Welche Variablen betrachtet und inspiziert werden können, ist dabei abhängig von der Stelle im Code, an der die Codeausführung gestoppt wird.
- Ausdrücke auswerten: Zur Laufzeit kann vom Debugger jeder beliebige Ausdruck ausgewertet werden. Entwickler können die zu berechnenden Ausdrücke dabei frei vorgeben und es können alle verfügbaren Variablen in den Ausdrücken benutzt werden, die an dem jeweiligen Haltepunkt verfügbar sind.
Das Debugger-Fenster unterteilt sich wiederum in drei Bereiche:
- Frames: In Frames wird der Aufrufstapel (Call Stack), also die Methodenaufrufe, die bis zum Breakpoint ausgeführt wurden, angezeigt. Die zuletzt aufgerufene Methode befindet sich dabei ganz oben.
- Variables: Variables zeigt die zu diesem Zeitpunkt sichtbaren Variablen. Wenn die Variable auf ein Objekt referenziert, dann kann der Objektbaum über den grauen Pfeil aufgeklappt und durch diesen navigiert werden. Bei Variablen mit einfachen Werten wird der Wert der Variable hingegen direkt angezeigt.
- Watches: Dem Watches-Bereich können beliebige Variablen hinzugefügt werden, um sie zu untersuchen.
Der Debugger verfügt über ein eigenes Menü. Am oberen Fensterrand befinden sich die Buttons Step Over, Step Into, Force Step Into und Step Out. Was bedeuten sie jeweils?
- Step Over: springt über die Zeile, in der die App angehalten wurde. Alle Befehle und Methodenaufrufe dieser Zeile werden dabei sofort ausgeführt. Sobald die nächste Zeile erreicht wird, stoppt die Ausführung automatisch.
- Step Into: führt alle Befehle der aktuellen Zeile bis zum ersten Methodenaufruf der Zeile aus. In diese Methode wird hineingesprungen und hier an der ersten Zeile der Methode angehalten.
- Force Step Into: ist Step Into sehr ähnlich. Allerdings kann zudem in extern definierte Methoden (z. B. Bibliotheksmethoden) hineingesprungen werden.
- Step Out: springt aus der aktuellen Methode, in der die Ausführung aktuell gestoppt ist, heraus. Die Befehle dieser Methode werden jedoch noch ausgeführt. Anschließend wird an die übergeordnete Stelle im Code gesprungen, und zwar an die Stelle, von der vorher in die Methode gesprungen wurde. Nach dem Rücksprung wird die Ausführung direkt wieder angehalten.
Wie bei der Entwicklung anderer Hard- und Softwareprodukte auch, sollte die App frühzeitig von potenziellen Benutzern getestet werden. Dabei kann zwischen welchen drei grundlegenden Entwicklungsphasen unterschieden werden, in denen die Tests stattfinden?
- Konzeptions- und Designphase,
- Implementierungsphase und
- Veröffentlichungsphase.
Der Anteil manueller Testverfahren höher als bei Desktopanwendungen aufgrund der Sensoren und Aktoren. Dennoch gibt es Bestandteile einer App bei denen ein automatisiertes Testverfahren sinnvoll ist. Welche sind das?
- Anwendungslogik der App
- Zusammenspiel versch. Funktionen im Backendsystem testen
- Anwendungsszenarien von sehr häufig durchgeführten Interaktionen
Im traditionellen Testverfahren zwischen welchen zwei Phasen der Maßnahmen zur Qualitätssicherung unterschieden, welche?
Produktfokus und Prozessfokus.
In der Prozessfokus-Phase wird konstruktiv vorgegangen, das bedeutet, es geht darum, die Anwendung vor Fehlern zu schützen. In dieser Phase stellen Softwaretester sicher, dass z. B. Richtlinien und Standards eingehalten werden und die passenden Entwicklungsmethoden, Sprachen und Werkzeuge verwendet werden. Darüber hinaus helfen sie dem Entwicklerteam, die definierten Prozesse einzuhalten, um die Entstehung von Fehlern zu verhindern.
In der Produktfokus-Phase hingegen wird analytisch vorgegangen, d. h. mit dem Ziel, Fehler zu finden. Diese Phase unterteilt sich wiederum in statisches und dynamisches Testen.
In welche weiteren Phasen wird die Produktfokus-Phase unterteilt?
- in statisches Testen
-dynamisches Testen- White-Box-Testing
-Debugging
-Unit-Tests - Black-Box-Testing
-Usability-Tests
-Monkey-Tests
- White-Box-Testing
Diese Phase unterteilt sich wiederum in statisches und dynamisches Testen.
Beim statischen Testen wird der Code bzw. die Anwendung nicht ausgeführt. Das bedeutet, die Entwickler oder Softwaretester überprüfen den Quellcode, bevor dieser im Code-Repository gespeichert wird. Man spricht dann von einem Code-Review. Darüber hinaus überprüfen sie auch alle anderen Dokumente oder Spezifikationen vor der Umsetzung anhand von statischen Analysewerkzeugen. Beim dynamischen Testen geht es darum, zu testen, wie sich der Quellcode verhält, wenn er ausgeführt wird. Hier wird zwischen dem White- und Black-Box-Testing unterschieden. Beim White-Box-Testing ist der Quellcode bei der Entwicklung der Testfälle bekannt und steht hierbei auch im Vordergrund. Das bedeutet, es wird die Funktionsweise des Quellcodes getestet. Beispielsweise wird mit diesem Testverfahren der Kontrollfluss oder der Datenfluss der Anwendung getestet. Zu den typischen White-Box-Tests gehören das Debugging oder auch sogenannte Unit-Tests. Anhand von White-Box-Tests kann somit lediglich geprüft werden, ob der Code korrekt ausgeführt wird. Da es sehr aufwendig wäre, externe Softwaretester einzuarbeiten, werden diese Tests meist durch die Entwickler selbst durchgeführt (Vollmer 2017). Beim Black-Box-Testing sind der Quellcode und Interna der App, wie z. B. Methoden oder Attribute, nicht bekannt. Hier geht es darum, zu testen, ob die Funktionen die Spezifikationen und Anforderungen erfüllen. Typische Tests sind hier Usability- oder Monkey-Tests. Bei einem Monkey-Test handelt es sich um einen Stress- und Robustheitstest. Beispielsweise wird dabei anhand von automatisierten Aktionen getestet, ob das System auch bei schnell hintereinander ausgeführten Aktionen oder der Eingabe großer Datenmengen stabil läuft
Was sind Remote-Tests aus der Konzeptions- und Designphase?
Ein Remote-Test findet nicht im Labor statt, sondern Testleiter und Testperson sind räumlich voneinander getrennt. Die Test Person befindet sich etwa in ihrem natürlichen Umfeld und testet die Anwendung über eine spezielle Remote-Software.
Sowohl Low-Fidelity- als auch realitätsgetreue High-Fidelity-Prototypen lassen sich dabei recht einfach mithilfe gängiger Prototyping-Software, wie z. B. Sketch (2021), Axure (2021), Flinto (2021) oder Figma (2021), entwerfen. Die Prototypen werden dann im Hinblick auf die Qualität der Usability und der User Experience von potenziellen Benutzern aus den relevanten Zielgruppen getestet (Vollmer 2017).
Prototyping-Tools, wie z. B. Figma, ermöglichen es auch, den App-Prototypen als Klick-Dummy über ein mobiles Gerät zu starten, sodass er sich für die Testpersonen nahezu wie eine reale App anfühlt. Darüber hinaus verfügen die meisten dieser Tools auch über Kommentarfunktionen. Das bedeutet, es können auch ohne Probleme Remote-Tests durchgeführt werden. Die Testpersonen starten den Prototypen dann über den mobilen Webbrowser und haben die Möglichkeit, einzelne Elemente zu testen und zu bewerten. Das hat insbesondere den Vorteil, dass die App im vorgesehenen Nutzungskontext, z. B. von unterwegs, getestet werden kann. Neben den relativ ressourcenschonenden Remote-Tests sollten aber zusätzlich auch traditionelle Usability-Tests im Labor durchgeführt werden.
Nenne die Benutzertests aus den verschiedenen Phasen 1. Konzeptions- und Designphase, 2. Implementierungsphase, 3. Veröffentlichungsphase
- Konzeptions- und Designphase -> Remote-Tests z.B. erstellt mit Figma
- Implementierungsphase -> Funktionstests, Benutzbarkeitstests
- Veröffentlichungsphase -> Feedback u. Bewertungen von Nutzern im App Store
Was macht man in Funktionstests und was in Benutzbarkeitstests aus der Implementierungsphase?
Funktionstests:
Manuelle Funktionstests auf einem mobilen Endgerät. Dabei werden sämtliche Funktionen der App von potenziellen Benutzern anhand von zuvor definierten Anwendungsfällen und funktionalen Anforderungen sowie den dazugehörigen Testfällen und -szenarien strukturiert und systematisch getestet. Funktionstests beziehen sich auf das Ein- und Ausgabeverhalten der App, aber z. B. auch auf die Navigation oder die Datenverarbeitung.
Benutzbarkeitstests:
Überprüfung aller Anforderungen an die Usability. Darüber hinaus kann geprüft werden, ob die App überflüssige Elemente enthält oder ob noch wesentliche Elemente und Funktionen fehlen. Hier ist es wichtig, dass die App unter realen Alltagsbedingungen von möglichst unerfahrenen Benutzern und nicht im Labor getestet wird. Getestet wird dabei beispielsweise, ob die Benutzer die einzelnen Elemente der Benutzeroberfläche richtig interpretieren.