Software has become a critical infrastructure in our society with its pervasive use in all kinds of products from home appliances to automobiles, from individual pacemakers and smart phones to air traffic control systems and high-end computers in large-scale power grids. During software development, the build process is vital to make sure that a software product is correctly and reliably constructed and configured in accordance with different users' operation environments, operating systems, platforms, and devices. To reliably build a software product, a build tool is used to execute build code to generate the executable and deliverable files according to the rules specified in the build files. As a software project evolves over time, build code continually evolves and is defect-prone due to the high rate of changes and complexity of the build files. The complexity of build code leads to two important issues. First, the maintenance of complex build code has imposed much extra effort on software developers. Second, its complexity is a source for configuration and build errors in software development.
This project aims to improve software reliability with a comprehensive approach to develop a scientific foundation for build code analysis to provide automatic supports for 1) build code maintenance and 2) detecting, testing, and locating configuration and build errors. We will first examine configuration and build code errors and related maintenance tasks in real-world projects. Second, we will develop a scientific foundation with novel concepts, techniques, and algorithms for build code static analysis, build code smell and configuration error detection, refactoring, and change analysis. Third, we will investigate a foundation for build code dynamic analysis and leverage it to support fault localization in build code given a reported build failure. Finally, a theoretical foundation and tool supports (e.g. semi-automatic test generation) for build code testing will be developed. Our research will fundamentally advance the body of knowledge in theoretical foundation for software building, build code analysis and maintenance. Our results will lead to more reliable software and improvement in code quality as well as in the developers' productivity. Our validation efforts involve students and professionals, promoting teaching and training in information assurance and software reliability.