我们设计与开发了一组随机方法与高精度计算相结合的检测诊断工具来自动分析与诊断软件中的数值稳定性错误。它首先通过程序变换技术将待测软件中的数值模块自动转为高精度数值计算。原始待测软件的数值模块一般是按照IEEE-754标准来构建的,由于精度限制,其数值表示与计算一般会引入误差,在我们的检测诊断框架中我们称之为低精度(或者普通精度)计算。通过计算的代换,我们将原始待测软件转换成为能获得精确结果的高精度数值计算。它的基本思想是将软件中每一个浮点数值在运行时动态改变占用的内存大小,每当其精度不足时,高精度计算会自动增加对应数值的内存占用,从而保证软件输出精确结果。即当用户需要有限精度的软件输出时,高精度计算会保证输出中的每一位有效数字都是准确的,但这是以消耗数百倍,甚至数千倍系统计算资源为代价的。
经过第一步的程序变换,我们获得了和原始普通精度软件相对应的高精度程序。对于原始软件,我们引入了低精度扰动技术来模拟程序的计算误差,并分析误差对软件输出结果的影响。该扰动技术在测试过程中随机修改浮点数值有效数字末尾的比特串,并观察软件输出的波动状况。如果软件输出结果的波动很大,则意味着软件中各变量的数值误差对其输出结果的影响很大,即数值软件在稳定性上存在不足。
在我们工具的最后一步,我们通过自动获得数值计算的条件数来度量低精度扰动与高精度扰动的波动状况,并进一步由比对普通精度程序与高精度程序的执行路径来定位发生稳定性问题的实现模块,从而为软件的设计开发人员提供准确的检测诊断信息与有效的修复提示。
备注: 本工作发表于IEEE Transactions on Software Engineering,英文标题为“SoftwareNumerical Instability Detection and Diagnosis by Combining Stochastic andInfinite-precision Testing”,论文下载URL: http://ieeexplore.ieee.org/document/7792694
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!