当先锋百科网

首页 1 2 3 4 5 6 7

单元测试

  单元测试是在软件开发过程中要进行的最低级别的测试活动,针对软件设计的最小单元——模块。

目标:

  • 验证代码是与设计相符合的;
  • 跟踪需求与设计的实现;
  • 发现设计和需求中存在的缺陷;
  • 发现在编码过程中引入的错误。
单元测试与集成测试的区别:
  • 测试对象不同。单元测试对象是实现了具体功能的程序单元;集成测试对象是概要设计规划中的模块及模块间的组合。
  • 测试方法不同。单元测试中的主要方法是基于代码的白盒测试;集成测试中主要使用基于功能的黑盒测试。
  • 测试时间不同。集成测试晚于单元测试。、
  • 测试内容不同。单元测试主要是模块内程序的逻辑、功能、参数传递、变量引用、出错处理及需求和设计中具体要求方面的测试;集成测试主要验证各个接口、接口之间的数据传递关系,及模块组合后能否达到预期效果。
单元测试与系统测试的区别:
  • 单元测试输入白盒测试,从开发者的角度出发,关注的是单元的具体实现、内部逻辑结构和数据流向;系统测试属于黑盒测试,从用户角度出发,证明系统已满足用户的需要。
  • 单元测试使问题及早暴露,便于定位解决,属于早期测试;系统测试是一种后期测试,定位错误比较困难。
  • 单元测试允许多个被测单元同时进行测试;系统测试时基于需求规格说明书的。
单元测试环境

  需要用到一些辅助模块来模拟与被测模块相联系的其他模块:

  驱动模块:相当于被测模块的主模块。

  桩模块:用于代替被测模块调用的子模块。

单元测试策略

自顶向下的单元测试策略
  • 从最顶层开始,把顶层调用的单元用桩模块代替,对顶层模块做单元测试。
  • 对第二层测试时,使用上面已测试的单元做驱动模块,并为被测模块编写新的桩模块。
  • 以此类推,直到全部单元测试结束。
优点:可以在集成测试之前为系统提供早期的集成路径。

缺点:随着单元测试的进行,测试过程会变得越来越复杂。因为改变任何一个单元时,就必须重新测试该单元下层调用的所有单元。

自底向上的单元测试策略
  • 先对模块调用图上最底层的模块进行测试,使用驱动模块来代替调用它的上层模块。
  • 对上一层模块进行单元测试时,用已经测试的模块做桩模块,并为被测模块编写新的驱动模块。
  • 以此类推,直到全部单元测试结束。
优点:无需单独设计桩模块;无需依赖结构设计;可为系统提供早期的集成途径。

缺点:随着单元测试的不断进行,测试过程会变得越来越复杂,测试周期延长,测试和维护的成本增加。
孤立测试

这种测试不考虑每个模块与其他模块之间的关系,分别为每个模块单独设计桩模块和驱动模块,逐一完成所有单元模块的测试。

综合测试

  考虑自底向上测试策略与孤立测试策略相结合的综合测试策略。

测试重点

  • 模块接口:首先应对通过模块接口的数据流进行测试,如果数据不能正确的进出,所有其他测试都是不切实际的。测试参数的数目、次序、属性或单位系统与变元是否一致;是否修改了只作输入用的变元;全局变量的定义和用法在各个模块中是否一致。
  • 局部数据结构:应该仔细设计测试方案, 以便发现局部数据说明、初始化、默认值等方面的错误。
  • 独立路径:保证模块中每条语句至少执行一次。使用基本路径测试和循环测试有助于发现程序中因计算错误、比较不正确、控制流不适当而造成的错误。
  • 出错处理通路:好的设计应该能遇见出现错误的条件,并且设置适当的处理错误的通路,以便在真的出现错误时执行相应的出错通路或干净的结束处理。
  • 边界条件:软件时常会在边界上失败,边界测试运用边界值分析技术对边界值及其左右设计测试用例,可以帮助发现错误。

集成测试

  集成测试时值根据实际情况对程序模块采用适当的集成测试策略组装起来,对系统的接口以及集成后的功能进行正确性检验。
集成测试与系统测试的区别:
  • 测试对象不同:集成测试对象是由通过了单元测试的各个模块所集成起来的构件;系统测试对象则除了软件之外,还包括计算机硬件及相关的外设、数据采集和传输机构、支持软件、系统操作人员等整个系统。
  • 测试时间不同:集成测试先与系统测试。
  • 测试方法不同:集成测试通常采用白盒和黑盒相结合的测试方法;系统测试通常使用黑盒测试。
  • 测试内容不同:集成测试主要测试各个单元模块之间的接口及各模块及集成后的功能;系统测试主要是测试整合系统的功能和性能。
  • 测试目的不同:集成测试是为了发现单元间接口的错误,以及发现集成的软件同概要设计规格说明不一致的地方;系统共测试是为了找出软件与系统定义不符合或矛盾的地方。
  • 测试角度不同:集成测试是站在测试人员的角度上进行的;系统测试是站在用户的角度进行的。
集成测试的策略
  • 一次性集成方式:把所有系统构建一次性集成到一起进行测试,不考虑构建之间的相互依赖性或可能存在的风险,其主要目的是在最短的时间内把系统组装起来,使用最少的测试来验证整个系统。
  • 自顶向下的增量式集成方式:从顶层控制开始,采用与设计一样的顺序,将模块按系统结构的层次,沿控制层次自顶向下逐步集成测试,以验证系统的接口稳定性。
  • 自底向上的增量式集成方式:从程序模块结构的最底层模块开始集成和测试,目标是检测整个系统的稳定性。
  • 混合的增量式:对软件结构中较上层使用自顶向下方法,对软件结构中较下层使用自底向上方法。