[PAST EVENT] Qi Luo, Computer Science - Oral Exam for the Ph.D. Degree
Testing is commonly classified into two categories, nonfunctional testing and functional testing. The goal of nonfunctional testing is to test nonfunctional requirements, such as performance and reliability. Performance testing is one of the most important types of nonfunctional testing, where an Application Under Testing (AUT) exhibits unexpectedly worse performance (e.g., lower throughput) with some input data. During performance testing, a big and important challenge is to understand a nontrivial AUT's behaviors with large numbers of combinations of their input parameter values. Finding the particular subsets of inputs leading to performance bottlenecks and identifying those performance bottlenecks are mostly manual, intellectually intensive and laborious procedure. Moreover, for an evolving software system, some code changes may accidentally degrade performance between two released software versions. A notable problem is how to find problematic changes (out of a large number of committed changes) that may be responsible for performance regressions under certain test inputs. This proposal presents a set of approaches to automatically find specific combinations of input data for exposing performance bottlenecks and further analyze execution traces for identifying performance bottlenecks. In addition, this proposal also provides an approach that automatically estimates the impact of code changes on performance degradation between two released software versions to identify the problematic ones likely leading to performance regressions.
Functional testing is used to test the functional correctness of AUTs, e.g., checking if the output is as expected. Developers commonly write test suites for AUTs to test different functions and locate faults. During functional testing, developers rely on some strategies to order test cases for achieving a certain object, such as exposing faults faster, which is known as Test Case Prioritization (TCP). TCP techniques are commonly classified into two categories, dynamic and static techniques. A set of empirical studies have been conducted to examine and understand different TCP techniques, while there is a clear gap in existing studies that no one has compared static techniques against dynamic techniques and comprehensively examined the impact of test granularity, efficiency, and the similarities in terms of fault detection on TCP techniques. This proposal presents an empirical study to thoroughly compare static and dynamic TCP techniques in terms of effectiveness, efficiency and similarity of uncovered faults at different granularities on a large set of real-world programs. Finally, we extend this empirical study, and propose a novel approach to combine different TCP techniques for achieving better performance in terms of fault detection and an empirical comparison of the impact of real faults and mutation faults on TCPs.
Qi Luo is a Ph. D. candidate at William & Mary in the Department of Computer Science. She is advised by Dr. Denys Poshyvanyk. Her research interests are in performance testing and regression testing. Qi received a Bachelor degree in Automation from Beihang University in 2008 and a Master degree in Software Engineering from Tsinghua University in 2011. She is a student member of IEEE and ACM.