Date of Award
6-2020
Degree Name
Doctor of Philosophy
Department
Computer Science
First Advisor
Dr. Zijiang Yang
Second Advisor
Dr. Steve Carr
Third Advisor
Dr. Chao Wang
Keywords
Software engineering, software testing, testcase generation, program synthesis, SQL synthesis
Abstract
GUIs are event-driven applications where the flow of the program is determined by user actions such as mouse clicks and key presses. GUI testing is a challenging task not only because of the combinatorial explosion in the number of event sequences, but also because of the difficulty to cover the large number of data values. To tackle this problem, we propose two algorithms: GUICat and GUICat2.
GUICat is a white-box GUI testing tool that augments traditional sequence generation techniques with concolic execution. It also has a cloud-based parallel algorithm for mitigating both event sequence explosion and data value explosion, by distributing the concolic execution tasks over public clouds such as Amazon EC2. Our experiments show that GUICat significantly outperforms state-of-theart GUI testing tools such as GUITAR.
GUICat2 is a new and efficient GUI testing framework to generate progressively longer event sequences while avoiding redundant sequences. GUICat2 identifies the redundancy among these sequences by a set of simple checks, whose reduction power matches and sometimes exceeds that of the classic techniques based on the theory of partial order reduction. Our experimental results show the new technique, while being sound and systematic, can achieve more than 10X reduction in the number of test sequences compared to the state-of-the-art GUI testing tools.
Program synthesis enables people to program computers without training in coding by automatically generating programs given specifications. We propose two program synthesis algorithms: SQLSol and GRCNN.
SQLSolhelps users to synthesize SQL queries from input-output(IO) examples. It is the first algorithm to encode the SQL synthesis problem into the constraintsolving problem. We propose an axiom that encodes the semantics of a SQL query into logic constraints, and decompose the SQL synthesis problem into two parts: problem-encoding and constraint-solving. Our algorithm supports multiple IO examples, and therefore users can add more examples to refine the solution until a correct one is found. Experimental results show that it efficiently solved 68% of the benchmarks in 3 seconds on average. For those benchmarks that SQLSol cannot solve, it terminated in 4 seconds on average.
GRCNN is a framework that synthesizes programs from images of flow charts that serve as accurate and intuitive specifications. In order doing so, we propose a deep neural network called GRCNN that recognizes graph structure from its image. GRCNN is trained end-to-end, which can predict edge and node information of the flow chart simultaneously. Experiments show that the accuracy to synthesize a program is 66.4%, and the accuracy to recognize edges and nodes are 94.1% and 67.9%, respectively. on average, it takes about 60 milliseconds to synthesize a program.
Access Setting
Dissertation-Open Access
Recommended Citation
Cheng, Lin, "Program Testing and Synthesis by Program Semantics" (2020). Dissertations. 3583.
https://scholarworks.wmich.edu/dissertations/3583