软件测试的艺术(原书第3版)
上QQ阅读APP看书,第一时间看更新

3.3.3 运算错误

1.是否存在不一致的数据类型(如非算术类型)的变量间的运算?

2.是否有混合模式的运算?例如,将浮点变量与一个整型变量做加法运算。

这种情况并不一定是错误,但应该谨慎使用,确保程序语言的转换规则能够被正确理解。看看下面的Java程序片段,显示了整数运算中可能发生的取整误差:

figure_0036_0007

3.是否有相同数据类型、不同字长变量间的运算?

4.赋值语句的目标变量的数据类型是否小于右边表达式的数据类型或结果?

5.在表达式的运算中是否存在表达式向上或向下溢出的情况?也就是说,最终的结果看起来是个有效值,但中间结果对于编程语言的数据类型可能过大或过小。

6.除法运算中的除数是否可能为0?

7.如果计算机表达变量的基本方式是基于二进制的,那么运算结果是否不精确?也就是说,在一个二进制计算机上,10×0.1很少会等于1.0。

8.在特定场合,变量的值是否超出了有意义的范围?例如,对变量PROBABILITY赋值的语句可能需要进行检查,保证赋值始终为正且不大于1.0。

9.对于包含一个以上操作符的表达式,赋值顺序和操作符的优先顺序是否正确?

10.整数的运算是否有使用不当的情况,尤其是除法?举例来说,如果i是一个整型变量,表达式2*i/2==i是否成立,取决于i是奇数还是偶数,或是先运算乘法,还是先运算除法。