今天老师在软件工程中讲了单元代码测试这一环节,首先给我们一个小函数,要我们分析它怎么样,代码如下:
int Largest(int list[], int length)
{
int i,max;
// if(a.length=0)||(a=null) 加上这行代码后,是程序更加严谨。
//return 0;
for(i = 0; i < (length – 1); i ++ )
{
if(list[i] > max)
{
max=list[i];
}
}
return max;
}
针对这个函数我觉得有几点可以说的。
1.输入数组数值范围影响程序正常运行。
如输入 -1,-2,-3
1, 2, 3
0
0 -1 -2
257442424, 23133342, 4242424
2.加上一条判断语句(如上)会更健壮。
以下是网络上大师们上的总结,觉得有些道理,我给搬过来了。
1.模块接口测试。
2.模块局部数据结构测试。
3.模块边界条件测试。
4.覆盖测试5.出错处理检测
下面分别说明5点种的各个小点。
1.模块接口测试中,我们应该注意。
1.1模块输入参数的个数是否和形参相等。
1.2模块输入参数的属性是否匹配。
1.3模块输入参数的使用单位是否和形参的使用单位一致。
1.4调用其他模块时,实际参数个数是否和被调参数个数一致。
1.5调用其他模块时,实际参数属性是否和被调参数属性一致。
1.6调用其他模块时,实际参数使用单位是否和被调参数使用单位一致。
1.7在有多入口时,是否引用了当前入口中无关的参数。
1.8是否修改了只作为输入值的形参。
1.9各模块对全局变量的定义是否一致。
1.10是否把某些常数当做变量定义来传递。
如果有输入/输出,考虑下面:文件属性是否正确。
open/close语句是否正确。
缓冲区大小与记录值是否匹配。
文件使用前是否已经打开
文件结束条件是否正确。
输入/输出错误处理是否正确。
输入信息中是否有文字性错误信息。
2.模块局部数据结构测试。
2.1不正确或不相溶的类型说明。
2.2不正确的初始化或缺省值。
2.3不正确的变量名,如拼写错误和缩写错误。
2.4上、下溢,地址异常。
3.模块边界条件测试。
边界测试是最最容易出错的地方,我们应该充分测试。
这点我只举例说明
比如,N维数组的第N个元素
循环到最后一次
这里我们也可以运用我们黑盒测试中的边界值方法,虽然用例上不一样,但是思想上是一致的。我继续说明下,为什么?
首先,我们知道了内部逻辑,就不能用黑盒的方法去设计了。但是,我们可以这样去想象,一些可能和边界有关的数据类型,我们是不是应该考虑他的max,min,最长,最短,最高,最低。
Z路径测试告诉我们是循环执行一次和不执行,但是循环最后一次呢?他能迭代出我们要的数据吗?打个问号,至少我测试时就发现最后一次有时候就取不到。
4.覆盖测试运算符错用或误用。
混合类型运算。大数据向小数据转换,没有加强转。
初始化错误。
计算精度不够。
表达式中符号表达错误。
不同数据类型进行了比较。
逻辑运算符号和优先级使用错误。
本身数据应该等,但是由于精度,却不相等。
变量本身有错。
不终止循环或终止不正确。
迭代时不正确
错误的修改了循环控制变量。
运行发生的错误是否很难理解
指明的错误于实际的错误是否一致
出错后,并没有处理便直接引入系统进行。
异常处理是否得当。
错误描述中是否提供了足够的相关定位信息。