29. April 2021
Seminararbeit | Testautomatisierung von KeePass mit QF-Test
"Warum zerbrechen meine automatisierten GUI-Tests?" das war die Seminarfrage eines Studenten. Damit hat er die zentrale Frage für die Testautomatisierung gestellt. Denn der Erfolg dieser, ebenso wie die tägliche Arbeit der QA, steht und fällt mit der Wiedererkennung der Objekte - oder eben deren Scheitern/Zerbrechen der Tests.
Sein Forschungsobjekt war KeePass für Windows in den Versionen 2.0 bis 2.18 (=SUT, System under test). Mit QF-Test Version erstellte er für KeePass2.00 GUI-Tests, die er in den folgenden 17 Versionen abspielte.
Wenn Tests fehlschlugen, woran lag das? Er hat drei Hauptgründe (neben Einzelgründen wie Verschwinden einer Komponente) gefunden und von all denen die Kategorie "Triviale Umbenennungen" als Hauptursache ausgemacht.
Wie repräsentativ ist sein Ergebnis für die Erfahrungen des Support-Teams von QFS?
Dort wurde mir bestätigt, dass - wenn Tests fertig sind und laufen - ebenso triviale Umbenennungen bei der Weiterentwicklung des SUT den Schwerpunkt der Anfragen im Support-Team ausmachen. Heißt, GUI Tests zerbrechen ganz oft, weil sich die Erkennungsmerkmale der Komponente geändert haben.
⇒ Also liebe Entwickler:
Bitte eineindeutige Namen oder IDs setzen und diese nie mehr anfassen.
Wie in der Seminararbeit geschrieben, "Lock Windows" zu "Lock Window" zu ändern ist für einen Entwickler und Menschen klar als "identisch" erkennbar, aber ein Testautomat stolpert darüber.
QF-Test entwickelt seine Konzepte zur Komponentenerkennung stetig weiter und optimiert den Algorithmus, um die erstellten Tests möglich robust gegen Änderungen zu machen. Es bietet verschiedene Möglichkeiten auf die Erkennung der GUI-Komponenten Einfluss zu nehmen um diese so stabil wie nur möglich zu gestalten.
Aktuell wird ein neuer Ansatz entwickelt, der es erlauben wird, den Suchbereich für eine Komponente noch dedizierter einzugrenzen, um so neben einer stabileren Erkennung durch Ausschluss von multiplen möglichen Komponenten die Test noch stabiler und darüber hinaus auch schneller zu machen. Außerdem wird die Wartbarkeit erhöht, da man keine komplexen Komponentenbäume mehr pflegen muss.