单元测试中,所谓单元是如何划分
单元测试的对象通常是软件设计的最小逻辑单元,单元的划分在面向过程的结构化程序中一般是函数或子过程,在面向对象的程序中可以是类或类的成员函数。
软件开发中,为何要进行单元测试
进行单元测试,主要是为了在开发的过程中发现错误,发现错误越早,成本就越低,同样值得考虑的是,在单元测试中发现问题也比较容易,修正问题更容易,将软件开发的过程中,发现越晚,修复成本越高;检查代码是否符合设计和规范,这有利于将来代码的维护
单元测试的目标
目标:单元模块被正确编码
信息能否正确地流入和流出单元
在单元工作过程中,其内部数据能否保持其完整性,包括内部数据的形式,内容及相互关系不发生错误,全局变量在单元中的处理和影响
为限制数据加工而设置的边界处,能否正确工作
单元的运行能否做到满足特定的逻辑覆盖
单元测试的任务
1).检查每一条独立执行路径的测试,并保证每条语句被至少执行一次:
路经测试也称为覆盖测试。在单元测试中,最主要的测试是针对路径的测试。测试用例必须能够发现由于计算错误、不正确的判定或不正常的控制流而产生的错误
1.误解或用错了算符优先级
2.混合类型运算
3.变量初值错误
4.精度不够
5.表达式符号错误
6.其它
2).检查局部数据结构完整性:
必须测试其内部的数据能否保持完整性,包括内部数据的内容、形式及相互关系不发生错误
1.不适合或不相容的类型说明
2.变量无初值
3.变量初始化或默认值有错
4.不正确的变量名或从来未被使用过
5.出现上溢或下溢和地址异常
6.其它
3).检查模块接口是否正确:
检查进出程序单元的数据流是否正确。对模块接口数据流的测试必须在任何其他测试之前进行,因为如果不能确保数据正确的输入和输出的话,所有的测试都是没有意义的
1.输入的实际参数与形式参数是否一致(个数、属性、量纲)
2.调用其他模块的实际参数与被调模块的形参是否一致(个数、属性、量纲)
3.全程变量的定义在各模块是否一致
4.外部输入、输出
5.文件、缓冲区、错误处理
6.其它
4).检查临界数据处理的正确性:
目的是检测在数据边界处模块能否正常工作,边界测试是单元测试的一个关键任务
1.普通合法数据的处理
2.普通非法数据的处理
3.边界值内合法边界数据的处理
4.边界值外非法边界数据的处理
5.其它
5).预设的各种出错处理是否正确有效:
良好的设计应该预先估计到投入运行后可能发生的错误,并给出相应的处理措施,使得用户不至于束手无策
1.输出的出错信息难以理解
2.记录的错误与实际不相符
3.异常处理不当
4.未提供足够的定位出错的信息
5.其它
6).内存分析(内存泄漏也会导致系统崩溃)
单元的静态测试
三步曲
1.互查
2.走查
3.评审