Numerical software is increasingly playing a critical role in society, and thus numerical errors in software can have disastrous consequences. However, it is very difficult to test numerical software, and numerical errors are hard to detect because they may not necessarily result in system crashes. There is a strong need for effective and practical techniques or tools to detect and prevent such errors and improve robustness of numerical software.
This project explores novel and practical techniques for testing and analyzing numerical software to detect numerical errors in order to improve its robustness. In particular, this project carries out a set of preliminary research tasks to demonstrate the feasibility of the techniques, including developing an initial public repository of numeric constraints and exploring techniques to guide, optimize, and use parallel path exploration in symbolic execution. The research in this project enhances the infrastructure for teaching and research by providing open source tools and data sets for use by students and practitioners, and for enhancement by other researchers.