Many computations, such as image processing, machine learning, and engineering simulations are inherently approximate -- they trade off quality of results for better performance. However, approximation also introduces new challenges when reasoning about program behaviors and finding bugs. At present, testing in this area requires more principled and effective approaches. Simultaneously, approximation itself provides an effective new basis for innovations in the well-trodden field of testing, thereby making testing more efficient and valuable. The project will develop a bi-directional integration of testing and automated approximation, new approach for developing and optimizing an increasingly important class of programs. The results will be embodied in open source tool sets and rigorously evaluated using open-source and proprietary applications. New educational and course materials will be developed for courses on compilers, program analysis and software engineering.
More concretely, the project will develop a set of techniques and tools for testing approximate programs, including a test specification language and techniques for automated migration of existing tests to the new language, techniques for dynamic approximate-program analysis, and techniques for optimal approximation discovery. Moreover, the project will develop approximate computing techniques to improve the performance of regression testing and mutation testing.