As an experimental computer scientist, the goal of my research is to design, implement, and rigorously evaluate techniques and tools that support the creation of useful, dependable, and efficient software. My research addresses the challenges within the fields of software engineering, software testing, and computer systems. I conduct this research in collaboration with undergraduates at Allegheny College, graduate students and professors at other universities, and colleagues in industry.
My research is empirical in nature because it involves the application of the scientific method to formulate problem statements, carry out experiments, take observations, statistically analyze and visualize the data sets, and draw conclusions based on the experimental results. Each research project focuses on the development and evaluation of software artifacts that can be used in both empirical studies and real-world practice by undergraduate and graduate students, software engineers, and computer scientists in both academia and industry. In addition to supporting my professional service, my research also results in award-winning and frequently cited research papers, oft-complimented presentations, and useful free and open-source software.
My research has concentrated on several areas, examples of which are summarized in the following list that references key papers.
Database Testing: Since the database application is a complex artifact that must be verified, my PhD dissertation (Kapfhammer2007d) presented an approach for testing database applications; a notable paper derived from my dissertation is (Kapfhammer2003) . Since the schema protects the contents of a relational database, my research has also focused on testing this complex artifact, with (McMinn2016a) ,(McMinn2015) , and (McMinn2019) being examples of papers.
Web Testing: In response to the prevalence and complexity of mobile-ready web sites, my research has developed automated techniques for checking the pages in these sites. Some examples of papers describing methods for finding defects in live web sites include (Walsh2017) ,(Walsh2017a) , and (Althomali2019) .
Mutation Testing: Given the challenges associated with judging the quality of a test suite, my research has designed efficient and useful ways to perform test assessment through mutation analysis. Presenting and evaluating automated techniques for both real-world Java programs and relational database schemas, some examples of papers include (Just2012b) ,(Wright2014) , and (McMinn2019) .
Regression Testing: Since software is often incrementally developed, my work on regression testing has created automated ways to efficiently and effectively run test suites for complex programs. Some examples of papers that present and evaluate regression testing techniques include (Walcott2006) ,(Lin2014) , and (Lin2017) . Leading the way in the realistic assessment of regression testing, recent papers such as (Paterson2018) and (Paterson2019) show how to conduct rigorous experiments with faults harvested from real programs.
Search-Based Testing: Using a fitness function as a guide to a suitable solution, search-based methods have shown promise in supporting many software engineering tasks. My work has focused on creating and maintaining frameworks that support the development of search-based tools, with (McMinn2016b) being one paper. Papers such as (Conrad2010a) and (Kukunas2010a) describe and assess other search-based solutions to software engineering challenges.
Performance Evaluation: Given the importance of equipping software engineers to create efficient software, my work has concentrated on developing and studying tools that automatically assess program performance. Papers in this area include (Jones2011) ,(Burdette2012) , and (Kinneer2015) .
Research Methods: My surveys of software testing techniques provide a starting point for people exploring this field, with (Kapfhammer2004) and (Kapfhammer2010) being examples of such articles. Papers like (Kapfhammer2016) and (McMinn2016) show how I have articulated a research agenda for the field of software engineering that stresses, for instance, the need for well-tested statistical methods. I have also written papers, such as (Alsharif2018a) and (Alsharif2018b) , that explain how to replicate my research results.
Do you work in one of these areas and are you interested in collaborating with me on a project? If so, then please contact me with your ideas.