软件精度和效率测试是测试软件质量的两个重要非功能方面。精度测试测试算得对不对、准不准,效率测试测试跑得快不快、省不省资源。
精度测试看测试算得准不准
精度测试是将软件的计算输出和数学真实的结果进行比对,并判断误差是不是在可接受范围内。
1. 和真值的比对
测试需要确立一个高精度的参考标准(如使用无限精度数学包或高精度参考实现计算出的真值),将被测软件的计算结果和之对比。不是结果是不是完全相等而是误差是不是小于预设的容差。如对于sqrt() 这类标准函数,容差要求可能是0,但对于复杂的数值算法,则需要根据函数特性和输入值设定合理的容差范围。
2. 误差度量标准
为了量化精度会使用一系列误差标准:
绝对误差:计算值和真值之差的绝对值。
相对误差:绝对误差和真值之比,更能反映在数值较大时的精度水平。
平均相对误差:在一批测试用例上相对误差的平均值,用于测试整体精度。
3. 边界极端情况测试
测试必须包括那些最容易暴露精度问题的输入:
特殊值:零、负零、无穷大、非数字。
极小/极大值:接近浮点数精度下限的非常小的数以及极大的数。
定义域边界:函数定义域的临界点,如 asin(1) 或刚好超出定义域的 asin(1.0000001)。
条件数高的区域:某些函数在特定输入区间会对微小扰动极其敏感(条件数很大),需要测试如一个函数在x接近1时,舍入误差可能被急剧放大。
4. 有效位和舍入测试
测试计算结果的有效数字位数是不是符合需求规格,以及舍入规则(如四舍五入)是不是正确。
效率测试是测试跑得快不快、省不省资源
在国家标准(GB/T 25000系列)中,这一般对应性能效率特性,主要测试在指定条件下软件的时间表现和资源消耗。
1. 时间特性
测量软件处理任务的速度。
响应时间:从用户发起请求到收到完整响应所经历的时间,是用户感知最直接的标准。
处理时间:系统内部完成一项特定任务所耗费的时间。
吞吐量/TPS(每秒事务数):单位时间内系统成功处理的请求或事务的数量,反映系统的整体处理能力。
2. 资源利用性
考虑软件在执行功能时对系统资源的消耗水平。
CPU占用率:计算资源消耗水平。
内存占用率:内存消耗量及其增长趋势,可用于发现内存泄漏。
磁盘I/O:读写操作的速率和等待时间。
网络带宽占用:数据传输对网络资源的消耗。
3. 容量和可扩展性
系统承载极限。
并发用户数:系统在满足性能标准的前提下,能同时支持的最大用户规模。
负载拐点:随着负载增加,性能标准开始显著劣化的临界点,用于确定系统的容量上限。
4. 稳定性和恢复能力
系统在压力下的持久性和韧性。
稳定性:在长时间不断负载下,各项性能标准是不是能保持平稳。
恢复时间:系统从过载或故障状态恢复到正常服务水平所需的时间。
精度测试数值计算的正确性,通过比对真值、度量误差并包括边界条件来保证结果的可靠性。效率测试测试运行时的性能表现,量化考虑速度、资源消耗和容量极限。在一些计算密集型场景(如AI算子、科学计算)中需要联合考虑,在可接受的精度损失范围内追求极致的效率提升。