单元测试

单元测试
单元测试是在软件开发过程中要进行的最低级别的测试活动,针对软件设计的最小单元——模块 。
目标:
验证代码是与设计相符合的;
跟踪需求与设计的实现;
发现设计和需求中存在的缺陷;
发现在编码过程中引入的错误 。
单元测试与集成测试的区别:
测试对象不同 。单元测试对象是实现了具体功能的程序单元;集成测试对象是概要设计规划中的模块及模块间的组合 。
测试方法不同 。单元测试中的主要方法是基于代码的白盒测试;集成测试中主要使用基于功能的黑盒测试 。
测试时间不同 。集成测试晚于单元测试 。、
测试内容不同 。单元测试主要是模块内程序的逻辑、功能、参数传递、变量引用、出错处理及需求和设计中具体要求方面的测试;集成测试主要验证各个接口、接口之间的数据传递关系,及模块组合后能否达到预期效果 。
单元测试与系统测试的区别:
单元测试输入白盒测试,从开发者的角度出发,关注的是单元的具体实现、内部逻辑结构和数据流向;系统测试属于黑盒测试,从用户角度出发,证明系统已满足用户的需要 。
单元测试使问题及早暴露,便于定位解决,属于早期测试;系统测试是一种后期测试,定位错误比较困难 。
单元测试允许多个被测单元同时进行测试;系统测试时基于需求规格说明书的 。
单元测试环境
需要用到一些辅助模块来模拟与被测模块相联系的其他模块:
驱动模块:相当于被测模块的主模块 。
桩模块:用于代替被测模块调用的子模块
单元测试策略 自顶向下的单元测试策略
从最顶层开始,把顶层调用的单元用桩模块代替,对顶层模块做单元测试 。
对第二层测试时,使用上面已测试的单元做驱动模块,并为被测模块编写新的桩模块 。
以此类推,直到全部单元测试结束 。
优点:可以在集成测试之前为系统提供早期的集成路径 。
缺点:随着单元测试的进行,测试过程会变得越来越复杂 。因为改变任何一个单元时,就必须重新测试该单元下层调用的所有单元 。
自底向上的单元测试策略
先对模块调用图上最底层的模块进行测试,使用驱动模块来代替调用它的上层模块 。
对上一层模块进行单元测试时,用已经测试的模块做桩模块,并为被测模块编写新的驱动模块 。
以此类推,直到全部单元测试结束 。
优点:无需单独设计桩模块;无需依赖结构设计;可为系统提供早期的集成途径 。
缺点:随着单元测试的不断进行,测试过程会变得越来越复杂,测试周期延长,测试和维护的成本增加 。
孤立测试
这种测试不考虑每个模块与其他模块之间的关系,分别为每个模块单独设计桩模块和驱动模块,逐一完成所有单元模块的测试 。
综合测试
考虑自底向上测试策略与孤立测试策略相结合的综合测试策略 。
测试重点
模块接口:首先应对通过模块接口的数据流进行测试,如果数据不能正确的进出,所有其他测试都是不切实际的 。测试参数的数目、次序、属性或单位系统与变元是否一致;是否修改了只作输入用的变元;全局变量的定义和用法在各个模块中是否一致 。
局部数据结构:应该仔细设计测试方案,以便发现局部数据说明、初始化、默认值等方面的错误 。
独立路径:保证模块中每条语句至少执行一次 。使用基本路径测试和循环测试有助于发现程序中因计算错误、比较不正确、控制流不适当而造成的错误 。