测试某些代码是否适用于所有输入数字?

时间:2014-05-04 19:13:16

标签: testing integer code-coverage

我有一个算法使用单个(正整数)数作为输入来产生输出。我有相反的功能,它应该完全相反,从输出返回到相同的整数。这应该是一个独特的一对一可逆映射。

我已针对某些整数进行了测试,但我希望 100%确保它适用于所有,直到已知限制。

问题在于,如果我只是测试每个整数,那么运行起来需要不合理的时间。如果我使用64位整数,这是一个很多的数字来检查我是否要检查它们。另一方面,如果我只测试每个第10或第100个数字,我最终不会100%确定。在我没有测试的90%或99%之一中可能有一些尴尬的奇怪星座。

是否有任何一般方法来识别边缘情况,以便只检查那些“有趣”或“有风险”的数字?或者我应该随机选择数字?或者以递增的增量进行测试?

或者以另一种方式提出问题,我该怎样处理这个问题,以便我100%确信每个案件都能得到妥善处理?

1 个答案:

答案 0 :(得分:0)

这种方法通常会检查计算的每个步骤是否存在潜在的缺陷。关于整数数学,即分裂的溢出,下溢和舍入误差,基本上不能准确地表示数学结果。此外,由此衍生的所有操作都会遇到类似的问题。

然后,审核过程依次查看单个步骤。例如,如果要为N个整数分配内存,则需要N倍大小的整数(以字节为单位),此乘法可能会溢出。您现在确定乘法溢出的那些值,并根据执行这些的测试创建。请注意,对于分配内存的示例,正​​确处理通常意味着该函数不会分配内存但会失败。

这背后的原理是你确定结果在某种程度上不同的每个操作的范围(例如,它溢出的地方),然后通过测试确保两个变体都有效。这会将测试的数量从所有可能的输入值减少到您预期会出现显着差异的值。