第六章 单元测试与集成测试
1、什么是单元测试?
单元测试(Unit Testing),是指对软件中的最小可测试单元或基本组成单元进行检查和验证。该测试依据为软件详细设计。目的是检查每个软件单元能否正确地实现设计说明中的功能、性能、接口和其他设计约束等要求,发现单元内可能存在的各种差错。
2、什么是集成测试?
①集成测试(Integrated Testing),也叫组装测试或联合测试。②是在单元测试的基础上,将所有已通过单元测试的模块按照概要设计的要求组装为子系统或系统,并进行测试的过程。③目的是确保各单元模块组合在一起后能够按既定意图协作运行,并确保增量的行为正确。
3、简述单元测试与集成测试的区别。
从对象上看,单元测试为软件的基本单元(如函数);集成测试为(多个)模块、(多个)子系统。依据不同,单元测试为软件详细设计;集成测试为概要设计。
空间不同,单元测试为函数或类的内部实现逻辑;集成测试为接口层面的。
技术不同,单元测试为以白盒测试为主、黑盒测试为辅;而集成测试为以黑盒测试为主,白盒测试为辅。
时序不同,单元测试优先,集成测试为后。主体不同,单元测试为程序作者;集成测试为开发人员或专业测试人员。
从测试内容和测试方法两方面看,单元测试和集成测试之间有什么不同?(相关习题)
(1)测试内容不同:
1)单元测试集中于单个模块的功能和结构检验,其测试内容主要包括模块接口、局部数据结构、重要的执行路径、错误处理和边界测试;
2)集成测试集中于模块组合的功能和软件结构检验,其测试内容主要包括模块组装中可能出现的问题,即数据穿过接口可能丢失、一个模块可能破坏另一个模块的内容、子功能组装可能不等于主功能、全程数据结构问题、误差累积问题;
(2)测试的方法不同:
1)单元测试较多地使用白盒测试法,为被测模块设计驱动模块和桩模块;
2)集成测试使用渐增式测试和非渐增式测试,渐增式测试又有分为自顶向下结合法和自底向上结合法;
4、什么是静态测试?
①静态测试先于动态测试;主要是通过走查、审查等会议方式,依据模块的详细设计,将代码与缺陷检查表进行对照,查看代码是否符合标准和规范。
静态测试内容:检查算法的逻辑正确性。检查模块接口的正确性。检查调用其他模块接口的正确性。检查表达式、语句的正确性。检查常量或全局变量使用的正确性。检查输入参数是否有合法性检查。检查代码执行效率是否可以优化。检查编程风格的规范性。
5、什么是动态测试?简述动态测试的步骤。
动态测试方法是指通过运行被測程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能。这种方法由三部分组成:构造测试用例、执行程序、分析程序的输出结果。
动态测试的基本步骤为:
(1)选取程序输人定义域的有效值,或选取定义域外的无效值。
(2)决定已选输入值的预期结构。
(3)用选取的输入值执行程序。
(4)比较执行结构和预期结果。
6、简述驱动模块和桩模块在实际中的应用以及设计原则。
在单元测试中进行的测试工作主要从五个方面对被测模块进行检查。
(1)模块接口测试:对通过被测模块的数据流进行测试。为此,对模块接口,包括参数表、调用子模块的参数、全程数据、文件输入/输出操作都必须检查。
(2)局部数据结构测试:设计测试用例检查数据类型说明、初始化、缺省值等方面的问题,还要査清全程数据对模块的影响。
(3)路径测试:选择适当的测试用例,对模块中重要的执行路径进行测试。对基本执行路径和循环进行测试可以发现大量路径错误。
(4)错误处理测试:检査模块的错误处理功能是否包含有错误或缺陷。例如,是否拒绝不合理的输入;出错的描述是否难以理解、是否对错误定位有误、是否出错原因报告有误、是否对错误条件的处理不正确;在对错误处理之前错误条件是否已经引起系统的干预等。
(5)边界测试:要特别注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。此外,如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素。这类信息对进行性能评价是十分有用的。
设计原则:
- 当需要测试被测代码的功能时,不能构造桩模块;
- 使用桩模块,不能影响或约束被测代码的编译条件,即被测代码的编译和执行与桩模块的使用无关;
- 驱动模块对测试数据的使用要可重用,尽量避免对用例执行顺序的依赖。
7、单元测试模块检查的内容有哪些?
模块接口测试
局部数据结构测试
重要执行路径测试
错误处理测试
边界条件测试
8、常用的集成测试方案有哪些?各有什么优缺点?
常用的集成测试方案有:自顶向下的集成测试、自底向上的集成测试、三明治集成测试。
自顶向下的集成测试的优点:
1、优先从根节点开始测试,有助于早期实现并验证系统主要功能,给开发团队和用户带来成功的信心,也便于早期验证主要的控制和判断,避免主控程序的缺陷,确保开发进度
2、单个测试用例包含多个模块,可从整体上降低测试用例规模
3、采用递增方式展开测试,每个新的测试用例一般仅加入一个新的模块,便于缺陷定位
缺点:
1、桩模块的开发和维护工作量较大
2、难以早期发现底层模块中复杂算法的缺陷,且随着测试的进行,系统越来越复杂,底层模块的测试很难保证充分性
3、不利于测试的并行,难以充分展开人力
自底向上的集成测试的优点:
1、优先从叶子节点开始测试,有助于早期发现底层模块中复杂算法的缺陷,且驱动模块的开发有利于规范和约束系统上层模块的设计,在一定程度上增加系统可测试性
2、单个测试用例包含多个模块,可从整体上降低测试用例规模
3、多个集成测试可并行展开,确保测试工作进度
缺点:
1、驱动模块的开发和维护工作量较大
2、难以早期发现上层模块中有关逻辑和控制方面的缺陷
3、直至加入最后一个模块才能看到整个系统框架,难以早期发现时序问题和资源竞争问题
三明治集成测试的优点:结合了自顶向下和自底向上的集成的优势
缺点:1、中间的目标层可能得不到充分的测试
2、需要同时开发桩和驱动模块,这部分工作量可能是相当惊人的
3、需在子树上进行大爆炸集成,一旦发现缺陷,涉及的接口数量较多,增加了缺陷定位难度