Abstract
For the last 20 years, the development of new Internet services has drastically changed the ways people interact with each other and across organizations. This phenomenon coined a new term "Web 2.0", which characterizes an updated model of content generation on the Web. Instead of static pages, Web 2.0 allows
... read more
the creation of content dynamically. To achieve this, modern web clients have to perform complex JavaScript computations and manipulate web pages by means of HTML and CSS. This approach significantly complicates the process of web applications testing. Furthermore, market competition forces web developers to release new versions of applications with potential quality risks because exhaustive pre-production testing of the applications is impossible. The main goal of this thesis is to develop a new testing framework for Web 2.0 applications based on client-side logging. Logs are supposed to capture the complete sequences of user actions leading to application failures. Our logging approach is capable of tracking the application events at various interaction levels. For example, user actions at the UI level correspond to high-level events, whereas function calls are considered as low-level events. In this thesis, we suggest a new type of testing oracles formed by equivalent executions that are in application logs. These oracles express such properties as commutativity and idempotence. First, mined from logs, and then confirmed by the developers, algebraic properties can be used for the monitoring and validation of new application executions. In order to use algebraic properties effectively, testing oracles should be executable. Depending on the event abstraction level, the executability may require additional input data such as function parameters and HTML context in the case of JavaScript application. In this thesis, we propose an evolutionary-based test data generation framework for JavaScript functions interacting with the DOM. Our framework achieves high branch coverage by genetically manipulating the program's input data. Algebraic oracles can be additionally exploited for the minimization of logs containing application failures. We can simplify such error logs by presenting our algebraic oracles as an event reduction system. This approach is able to significantly decrease the number of steps necessary to reproduce the original application failures. Moreover, combined with another failure simplification techniques known as "delta debugging'" (DD), our approach is able to decrease the number of iterations required by the DD to find an optimal solution. All components of our testing framework have been prototyped and empirically validated. For the validation, we used several real-world web applications developed with the help of popular web technologies such as JavaScript, HTML5 and Adobe Flex.
show less