Usage-Based Testing for Event-Driven Software Systems
Total Page:16
File Type:pdf, Size:1020Kb
Usage-based Testing for Event-driven Software Dissertation zur Erlangung des Doktorgrades der Mathematisch-Naturwissenschaftlichen Fakultäten der Georg-August-Universität zu Göttingen vorgelegt von Steffen Herbold aus Bad Karlshafen Göttingen im Juni 2012 Referent: Prof. Dr. Jens Grabowski, Georg-August-Universität Göttingen. Korreferent: Prof. Dr. Stephan Waack, Georg-August-Universität Göttingen. Korreferent: Prof. Atif Memon, Ph.D. University of Maryland, MD, USA Tag der mündlichen Prüfung: 27. Juni 2012 Abstract Most modern-day end-user software is Event-driven Software (EDS), i.e., accessible through Graphical User Interfaces (GUIs), smartphone apps, or in form of Web applica- tions. Examples for events are mouse clicks in GUI applications, touching the screen of a smartphone, and clicking on links in Web applications. Due to the high pervasion of EDS, the quality assurance of EDS is vital to ensure high-quality software products for end-users. In this thesis, we explore a usage-based approach for the testing of EDS. The advantage of a usage-based testing strategy is that the testing is focused on frequently used parts of the software, while seldom used parts are only tested sparsely. This way, the user-experienced quality of the software is optimized and the testing effort is reduced in comparison to traditional software testing. The goal of this thesis is twofold. On the one hand, we advance the state-of-the-art of usage-based testing. We define novel test coverage criteria that evaluate the testing effort with respect to usage. Furthermore, we propose three novel approaches for the usage- based test case generation. Two of the approaches follow the traditional way in usage-based testing and generate test cases randomly based on the probabilities of how the software is used. With our third test case generation approach, we take a different direction and define a heuristic that generates a test suite to optimize our usage-based coverage criteria. We evaluate our contributions to usage-based testing in two large-scale case studies that show the value of our work. On the other hand, we provide a platform-independent framework for usage-based testing that allows the application of usage-based testing to different EDS platforms. Examples for EDS platforms are concrete GUI frameworks like Qt or concrete Web application platforms, e.g., PHP-based websites running on an Apache Web server. In the past, research effort for usage-based testing has always focused on one specific EDS platform and its results were either transferred to other EDS platforms through re-implementation or not at all. Through our framework, we provide a remedy for this issue and allow an easy transfer of results between different EDS platforms. Our approach is the application of the usage-based testing techniques to an abstract notion of events and the translation between platform-specific usage events and the abstract events to gain platform independence. We provide a proof-of- concept implementation to show the feasibility of our framework in practice. Zusammenfassung Der Großteil von moderner Endnutzer Software ist eventgetrieben, das heißt durch graphis- che Benutzeroberflächen (GUIs), Smartphone Apps oder Webanwendungen. Beispiele für Events sind Mausklicks in GUI Applikationen, das Berühren des Touchscreens eines Smart- phones und Klicks auf Links in Webanwendungen. Aufgrund der hohen Durchdringung von eventgetriebener Software ist die Qualitätssicherung dieser Art von Software entscheidend um qualitativ hochwertige Endnutzersoftware zu erstellen. In dieser Arbeit betrachten wir eine benutzungsbasierte Strategie für das Testen von eventgetriebener Software. Der Vorteil von benutzungsbasierten Strategien ist, dass der Testfokus auf häufig benutzten Teilen der Software liegt, während selten benutzte Teile der Software nur sporadisch getestet werden. Hierdurch wird die durch den Benutzer wahrgenommene Softwarequalität optimiert und der Testaufwand ist reduziert im Vergleich zum intensiven Testen der kompletten Software. Das Ziel dieser Arbeit ist zweigeteilt. Auf der einen Seite wollen wir den State-of-the-Art des benutzungsbasierten Testen vorantreiben. Wir definieren neue Überdeckungskriterien für die Evaluierung des Testaufwands in Bezug auf die Benutzung. Weiterhin schlagen wir drei neue benutzungsbasierte Testfallgenerierungsansätze vor. Zwei dieser Ansätze verfol- gen die klassische Art und Weise der benutzungsbasierten Testfallerstellung. Das bedeutet das Testfälle randomisiert aufgrund der Benutzungswahrscheinlichkeiten abgeleitet werden. Unser dritter Ansatz verfolgt eine andere Richtung. Wir definieren eine Heuristik, die eine Testsuite ermittelt, welche die unsere benutzungsorientierten Überdeckungskritierien opti- miert. Wir evaluieren diese Erweiterungen des benutzungsbasierten Testens in zwei großen Fallstudien und demonstrieren dadurch den Wert unserer Arbeit. Auf der anderen Seite stellen wir ein plattformunabhängiges Framework zum be- nutzungsbasierten Testen, welches die Applikation von benutzungsorientierten Techniken auf verschiedenen eventgetriebenen Softwareplattformen erlaubt. Beispiele für event- getriebene Softwareplattformen sind Frameworks für GUIs, wie zum Beispiel Qt oder Webanwendungsplattformen, wie zum Beispiel PHP basierte Webseiten, welche auf einem Apache Webserver laufen. In der Vergangenheit war die Forschung an benutzungsori- entierten Testmethoden auf einzelne eventgetriebene Softwareplattformen beschränkt. Die Resultate mussten entweder von Hand durch Neuimplementierungen auf andere Plattformen portiert werden oder die Ergebnisse wurden bisher nicht übertragen. Unser Framework stellt eine Lösung für dieses Problem dar und erlaubt einen einfachen Transfer der Ergebnisse auf verschiedene eventgetriebene Softwareplattformen. Der Ansatz, den wir verfolgen, basiert auf der Idee, die benutzungsbasierten Testtechniken auf abstrakte Events anzuwenden und zwischen abstrakten Events und plattformspezifischen Events zu übersetzen. Um die Umsetzbarkeit unseres Frameworks zu demonstrieren, haben wir eine Proof-of-Concept Implementierung des Frameworks entwickelt. Acknowledgements During the course of my PhD studies, I was influenced by many people in various ways. I would like to use this opportunity to acknowledge and thank all. People are listed in no particular order. First, I want to thank my advisors, Prof. Dr. Jens Grabowski and Prof. Dr. Stephan Waack. Without their comments and suggestions, this thesis would not have been possible. I also want to thank Prof. Atif Memon for the opportunity to visit the University of Maryland and his comments on my work. My colleagues in Göttingen always provided an enjoyable and scientiffically inspiring environment: Lennart Obermann, Mehmet Gültas, Thomas Rings, Gunnar Krull, Ben- jamin Zeiss, Patrick Harms, Roman Asper, Philip Makedonski, Heike Jachinke, and An- nette Kadziora. I am especially grateful for the effort that Thomas Rings put into the proof reading of this thesis. I would also like to thank the remaining members of my defense committee: Prof. Dr. Carsten Damm, JProf. Dr. Konrad Rieck, and Prof. Dr. Anita Schöbel. I would like to thank all my friends and family, whose constant support and never ending inquiries as to the progress of my thesis helped me finishing it. Contents 1. Introduction 1 1.1. Scope . .2 1.2. Goals and Contributions . .2 1.3. Impact . .4 1.4. Structure of the Thesis . .4 2. Foundations 6 2.1. Probabilities and Stochastic Processes . .6 2.1.1. Notations and Properties . .6 2.1.2. First-order Markov Models . .9 2.1.3. High-order Markov Models . 12 2.1.4. Prediction by Partial Match . 14 2.2. Information Theory . 15 2.2.1. Entropy . 15 2.2.2. Entropy Rates . 16 2.2.3. The AEP and Typical Sequences . 17 2.3. Event-driven Software . 19 2.3.1. Graphical User Interfaces . 20 2.3.2. Web Applications . 27 2.4. Software Testing . 28 2.4.1. Terminology . 28 2.4.2. Event-driven Testing . 30 2.4.3. Usage-based Testing . 31 3. Advancement of Usage-based Testing 35 3.1. Usage Profiles . 35 3.1.1. First-order Markov Models . 35 3.1.2. Higher order Markov Models . 36 3.1.3. Prediction by Partial Match Models . 37 3.2. Usage Analysis . 40 3.3. Usage-based Coverage Criteria . 41 3.4. Session Generation . 42 3.4.1. Drawing from All Possible Sequences . 43 ix Contents 3.4.2. Hybrid Approach . 45 3.4.3. Heuristic . 46 4. A Framework for Usage-based Testing of Event-driven Software 49 4.1. Outline of the Framework . 49 4.2. Platform Layer . 50 4.2.1. Monitoring of Event-driven Software . 50 4.2.2. Replaying of Events . 53 4.3. Translation Layer . 53 4.3.1. Event Parsing . 54 4.3.2. Replay Generation . 55 4.4. Event Layer . 55 4.4.1. Test Oracles . 55 5. Framework Instantiation and Implementation 57 5.1. Overview . 57 5.2. Platform and Translation Layer for Windows MFC GUIs . 60 5.2.1. Usage Monitoring Through the Observation of Windows Messages 60 5.2.2. Message Filtering . 61 5.2.3. The MFC Capture Log Format . 64 5.2.4. Replaying Windows MFC GUIs Through Internal Messages . 65 5.2.5. The Event Parser for Windows MFC . 67 5.3. Platform and Translation Layer for Java JFC GUIs . 75 5.3.1. JFC Usage Monitoring with Event Listeners . 75 5.3.2. The JFC Capture Log Format . 76 5.3.3. Event Parser for Java JFC GUIs . 77 5.4. Platform and Translation Layer for PHP-based Web Applications . 77 5.4.1. Usage Monitoring with a PHP script . 77 5.4.2. The PHP Capture Log Format . 78 5.4.3. Event Parsing of PHP-based Web Applications . 78 5.5. Translation layer for GUITAR . 79 5.6. Event Layer . 80 5.6.1. Implementation and Training of Usage Profiles . 81 5.6.2. Test Oracles . 84 6. Case Studies 86 6.1. Case Study 1: Integration of the MFCMonitor into Software Products . 86 6.1.1. Goals and Hypotheses . 86 6.1.2. Evaluation Criteria . 87 6.1.3. Methodology . 87 6.1.4. Results . 89 Contents x 6.1.5. Discussion . 91 6.2. Case Study 2: Usage-Based Coverage Criteria and Test Case Generation . 92 6.2.1. Goals and Hypotheses . 92 6.2.2. Evaluation Criteria . 93 6.2.3. Data . 93 6.2.4.