一、单元测试
1.定义: 单元测试是对软件基本组成单元进行的测试,如函数(function或procedure)或一个类的方法(method)。
2.单元定义:单元具体有一些基本属性,如明确的功能、规格定义,明确的与其他部分的接口定义等,可清晰地与同一程序的其他单元划分。
在传统的结构化编程语言中,如C语言,进行测试的单元一般是函数或子过程;在面向对象的语言中,如C++,进行测试的基本单元是类或类的方法。
3.基本单元:基本单元不一定是指一个具体的函数(function或procedure)或一个类的方法(method),在具体实现时,也可能对应的是多个程序文件中的一组函数。
4.对象:文档和代码。
5.目的:文档和需求是否一致/代码本身的逻辑检测/文档和代码的一致性。
例1:一个求绝对值函数,文档:当输入参数x>=0时,return x,否则return -x; 代码中写成x>0时,return x,否则return -x;
例2:对于定义的指针变量,不初始化就直接引用。该指针变量所指向的地址是运行时随机产生的,该地址又可能是只能系统访问的内存地址或者其它软件所使用的内存地址,这种情况下会产生错误;
二、单元测试关注重点
1.单元的接口(静态测试)
单元接口就是输入和输出对应关系的集合;对单元进行动态测试无非就是给这个单元一个输入,然后检查输出是否和预期一样。
驱动单元:
a.接收测试数据,包含测试用例输入和预期输出;
b.把测试用例输入传送给要测试的单元;
c.将被测单元的实际输出和预期输出进行比较,得到测试结果;
d.将测试结果输出到指定位置;
如:测试加法函数
void driver(){
int sum=0;
sum=add(1,1); //b
if (2==sum) //c
printf(“ok!n”); //d
else
printf(“fail!n”);
}
2.单元测试策略
a.孤立的测试策略
方法:不考虑每个模块与其他模块之间的关系,为每个模块设计桩模块和驱动模块。每个模块进行独立的单元测试,如下图所示:
缺点:随着被测单元一个一个被加入,测试过程将变得越来越复杂,并且开发和维护的成本将增加;
c.自底向上测试
方法:先对模块调用层次图上最低层的模块进行单元测试,模拟调用该模块的模块做驱动模块,然后再对上面一层做单元测试,用下面已被测试过的模块做桩模块。依此类推,直到测试完所有模块。
1.对全新的代码或修改多的代码进行单元测试。
2.单元测试根据单元测试计划和方案进行, 排除测试的随意性。
3.必须保证单元测试计划、单元测方案、单元测试用例等经过评审。
4.当测试用例的测试结果与预期结果不一致时,单元测试的执行人员需如实记录实际的测试结果。
5.只有当测试计划中的结束标准达到时,单元测试才能结束。
6.对被测单元需达到一定的代码覆盖率要求。
学习资源分享
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!