Software Numerical Instability Detection and Diagnosis by Combining Stochastic and Infinite-Precision Testing | IEEE Journals & Magazine | IEEE Xplore

Software Numerical Instability Detection and Diagnosis by Combining Stochastic and Infinite-Precision Testing


Abstract:

Numerical instability is a well-known problem that may cause serious runtime failures. This paper discusses the reason of instability in software development process, and...Show More

Abstract:

Numerical instability is a well-known problem that may cause serious runtime failures. This paper discusses the reason of instability in software development process, and presents a toolchain that not only detects the potential instability in software, but also diagnoses the reason for such instability. We classify the reason of instability into two categories. When it is introduced by software requirements, we call the instability caused by problem . In this case, it cannot be avoided by improving software development, but requires inspecting the requirements, especially the underlying mathematical properties. Otherwise, we call the instability caused by practice. We design our toolchain as four loosely-coupled tools, which combine stochastic arithmetic with infinite-precision testing. Each tool in our toolchain can be configured with different strategies according to the properties of the analyzed software. We evaluate our toolchain on subjects from literature. The results show that it effectively detects and separates the instabilities caused by problems from others. We also conduct an evaluation on the latest version of GNU Scientific Library, and the toolchain finds a few real bugs in the well-maintained and widely deployed numerical library. With the help of our toolchain, we report the details and fixing advices to the GSL buglist.
Published in: IEEE Transactions on Software Engineering ( Volume: 43, Issue: 10, 01 October 2017)
Page(s): 975 - 994
Date of Publication: 21 December 2016

ISSN Information:

Funding Agency:


1 Introduction

The rapid advancement of technology makes modern personal computers and devices powerful in computing. Hence, complex numerical algorithms become affordable and are widely applied in our daily software. Ensuring the correctness of numerical computing is important for software reliability. On the other hand, it is also very challenging. In particular, the unique and complex computation logic in numerical computing often poses new challenges in software testing and verification. Furthermore, truncations due to the limited representation precision happen all the time in numerical computing so that numerical errors are inevitably accumulated during propagation of values. Thus, for modern numerical software, we need not only methods of numerical analysis, but also tools that help us build and test numerical programs, especially their stabilities in the presence of numerical errors.

Contact IEEE to Subscribe

References

References is not available for this document.