单元测试与集成测试

上传人:206****923 文档编号:54848402 上传时间:2018-09-20 格式:PPT 页数:62 大小:1.14MB
返回 下载 相关 举报
单元测试与集成测试_第1页
第1页 / 共62页
单元测试与集成测试_第2页
第2页 / 共62页
单元测试与集成测试_第3页
第3页 / 共62页
单元测试与集成测试_第4页
第4页 / 共62页
单元测试与集成测试_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《单元测试与集成测试》由会员分享,可在线阅读,更多相关《单元测试与集成测试(62页珍藏版)》请在金锄头文库上搜索。

1、第五讲:单元测试与集成测试,0C202 Software Testing,5-1,提纲,导言 单元测试 单元测试考虑事项 单元测试规程 单元测试局限性 集成测试 自顶向下集成 自底向上集成 混合式集成 端到端集成测试,0C202 Software Testing,5-2,导言(1/2),按阶段进行测试是一种基本的测试策略。 单元测试(大量使用白盒测试)。 集成测试(大量使用黑盒测试,白盒测试辅助); 系统测试(软、硬件环境) 确认测试(按照需求确认),0C202 Software Testing,5-3,提纲,导言 单元测试 单元测试考虑事项 单元测试规程 单元测试局限性 集成测试 自顶向下集

2、成 自底向上集成 混合式集成 端到端集成测试,0C202 Software Testing,5-4,单元测试,单元测试(Unit testing)是对最小的软件设计单元(模块或源程序单元)的验证工作。 面向过程的设计:一个单元可能是单独的程序、函数、过程、网页以及菜单等。 面向对象的设计:单元是类,可能是基/父类、抽象类或派生/子类。,0C202 Software Testing,5-5,单元测试,使用构件级别的设计规格说明书作为指南,对重要的控制路径进行测试以发现模块内的错误。 重点放到内部处理逻辑和构件边界内的数据结构。这种测试可以对多个构件并行进行。 通常情况下,由开发者执行测试而不是由

3、最终用户执行测试,主要使用白盒测试技术,并辅助使用黑盒测试技术,如边界值分析法。,0C202 Software Testing,5-6,单元测试考虑事项,单元测试对构件的五方面进行测试: 模块或构件接口; 局部数据结构; 边界条件; 独立路径; 处理错误的路径。,0C202 Software Testing,5-7,模块或构件接口,对模块接口的测试保证在测试时进出程序单元的数据流是正确的, 接口名称,传入参数的个数、类型、顺序等是否与模块接口匹配; 模块输出或返回值或类型是否正确。 重点关注模块之间的数据输入与输出,优先开展穿越模块接口的数据流的测试。,0C202 Software Testi

4、ng,5-8,局部数据结构,对局部数据结构的检查保证临时存储的数据在算法执行的整个过程中都能维持其完整性。 另外,应该测试局部数据结构,并在单元测试时确认对于全局数据的局部影响执行。,0C202 Software Testing,5-9,边界条件,保证模块在所限定或约束处理的条件边界上能够正确执行。 边界条件的测试是利用黑盒测试技术中的边界值分析法。,0C202 Software Testing,5-10,独立路径 (1/3),覆盖控制结构中的独立路径(基本路径) 。 关注循环测试。,0C202 Software Testing,5-11,独立路径(2/3),计算中常见的错误有: (1)误解的

5、或者不正确的算术优先级; (2)混合模式的操作; (3)不正确的初始化; (4)精度不够精确; (5)表达式的不正确符号表示。,0C202 Software Testing,5-12,独立路径(3/3),比较和控制流是紧密地耦合在一起的(也就是说,控制流的转移是在比较之后发生的),测试用例应当能够发现下列错误: (1)不同数据类型的比较; (2)不正确的逻辑操作或优先级; (3)应该相等的地方由于精度的错误而不能相等; (4)不正确的比较或者变量; (5)不正常的或者不存在的循环中止; (6)当遇到分支循环的时候不能退出; (7)不适当地修改循环变量。,0C202 Software Testi

6、ng,5-13,处理错误的路径 (1/2),对所有处理错误的路径进行测试(Try Catch, Throw处理机制)。好的软件设计中错误条件是可以预料的,而且当错误真的发生的时候,错误处理路径被建立,以重定向或者干脆终止处理。 但要避免把错误处理过程加到软件中去,但从不进行测试。,0C202 Software Testing,5-14,处理错误的路径 (2/2),在错误处理部分应当考虑的潜在错误: (1)对错误描述费解。 (2)所报的错误与真正遇到的错误不一致。 (3)在错误处理之前错误条件先引起系统干涉造成系统异常。 (4)例外条件处理不正确。 (5)错误描述没有提供足够的信息来帮助确定错误

7、发生的位置(程序设计中建立错误日志、运行日志、出错信息表)。,0C202 Software Testing,5-15,单元测试规程 (1/5),单元测试通常看成为是附属于编码步骤。在源代码级的代码被开发、复审、和语法正确性验证之后,单元测试用例设计就开始了。 对设计信息的复审可能能够为建立前面讨论过的每一类错误的测试用例提供指导,每一个测试用例都应当和一系列的预期结果联系在一起。,0C202 Software Testing,5-16,单元测试规程 (2/5),开发驱动器(driver)或/和程序桩(stub)。 在面向对象的程序里,模仿对象(mock objects)技术取代程序桩(stub

8、) 。模仿对象是以一种可控方式来模拟真实对象行为的仿真对象。 (模仿外接数据源),0C202 Software Testing,5-17,单元测试规程 (3/5),驱动器和程序桩都是单元测试中的额外的开销,必须开发但又不和最终软件一起交付。 驱动器和程序桩的简单程度反映了模块设计高内聚、低耦合的程度。,0C202 Software Testing,5-18,单元测试规程 (4/5),单元测试通常是被自动执行,但可能仍由手工进行的。 自动化方法能有效地实现隔离一个单元并验证其正确性。,0C202 Software Testing,5-19,单元测试规程 (5/5),成为程序员创建具有松偶合高内聚

9、代码体的一个动力。 设计模式、单元测试和重构常结合使用以便形成最理想解决方案。,0C202 Software Testing,5-20,单元测试局限性,单元测试不能捕获程序中的每一个错误。根据定义,单元测试只测试单元自身的功能。 因此它不捕获集成错误、性能问题或其它任何系统范围的问题。 另外,要预料现实中被测程序可能接受到的输入的所有特殊情况是一项不易之事。 对于任何非平凡的软件块要测试所用的输入组合是不现实的。,0C202 Software Testing,5-21,提纲,导言 单元测试 单元测试考虑事项 单元测试规程 单元测试局限性 集成测试 自顶向下集成 自底向上集成 混合式集成 端到端

10、集成测试,0C202 Software Testing,5-22,集成测试 (1/3),单独的软件模块被结合在一起,作为一个群接受测试。 什么时候进行集成测试? (1)由若干单元或模块要组成一个构件; (2)由若干构件组成为一个工件; (3)由若干工件组成为一个系统。集成测试被定义为在单元测试与系统测试之间级别的测试。,0C202 Software Testing,5-23,集成测试 (2/3),接口连接问题: 数据可能在通过接口的时候丢失; 一个模块可能对另外一个模块产生无法预料的副作用; 当子函数被联到一起的时候,可能不能达到期望中的功能; 累计单个模块中可以接受的不精确性; 全局数据结构

11、可能也会存在问题。,0C202 Software Testing,5-24,集成测试 (3/3),集成测试构造程序并实施测试以发现与接口连接有关的错误, 目标是把通过了单元测试的模块拿来,构造一个在设计中所描述的程序结构。 有两种集成测试策略: 瞬时集成测试和增量集成测试。,0C202 Software Testing,5-25,瞬时集成测试 (1/2),经历单元测试阶段,把模块组合成一个最终系统,并观察它是否运转正常。 难于定位错误。 错误修正过程中错误无限循环。,0C202 Software Testing,5-26,瞬时集成测试 (2/2),开发小程序的时候都会用到瞬时集成测试技术,但对

12、大型程序不太适用。 瞬时集成方法有这样几个缺点: (1)对独立组件测试需要驱动程序和树桩程序的支持; (2)由于组件一次性结合,很难找出错误的原因; (3)不容易辨别接口错误和其他类型的错误。 所以,我们推荐使用增量集成策略。,0C202 Software Testing,5-27,增量集成,程序先分成小的部分进行构造和测试,这个时候错误比较容易分离和修正;接口也更容易进行彻底地测试;而且也可以应用一种系统化的测试方法。 增量集成测试会有格外的开销,但会大大减少发现和改正错误的时间。,0C202 Software Testing,5-28,0C202 Software Testing,5-29

13、,自顶向下的集成 集成方式:深度优先、广度优先,自顶向下集成,在现实中一般是结合使用深度优先、宽度优先进行测试。 初始阶段所有的模块可能只是提供部分功能,这可以用宽度优先技术进行测试。 当模块越来越精化,模块的功能也越来越全,可以对一个模块进行深度优先测试而同时所有的模块进行宽度优先测试。,0C202 Software Testing,5-30,自顶向下集成,集成过程: 主控模块作为测试驱动器,所有的程序桩由直接隶属于主控模块的各模块替换。 根据深度或广度优先,子模块的程序桩依次地被替换为真正的模块。 在每一个模块集成的时候都要进行测试。 在完成了每一次测试之后,又一个程序桩被真正的模块替换。

14、 可以用回归测试来保证没有引进新的错误。 循环继续进行,直至这个系统结构被构造完成。,0C202 Software Testing,5-31,自顶向下集成,自顶向下的优点: (1)对高层行为进行早期确认: (2)至多只需一个驱动程序; (3)每步可以只加一个模块; (4)支持深度优先和宽度优先。 自顶向下的缺点: (1)对低层行为确认比较晚; (2)对缺少的元素需要编写树桩程序; (3)测试案例的输入和输出可能很难明确表示。,0C202 Software Testing,5-32,自底向上集成 (1/3),一旦各个独立的模块测试完毕,把它们组合起来形成一组模块,称为造件(build)。 一组造

15、件再由第二个测试装置进行测试。这个过程将继续直到造件中包括整个应用系统。 因为自底向上集成,在进行时要求所有隶属于某个给定层次的模块已经开发,不再需要程序桩。,0C202 Software Testing,5-33,自底向上集成 (2/3),步骤: 低层模块组合成能够实现软件特定子功能的造件(builds),有时也称为簇(clusters)。 编写测试装置(供测试用的控制程序)来协调测试用例的输入输出。 对簇进行测试。 撤去测试装置,沿着程序结构的层次向上对造件进行组合。,0C202 Software Testing,5-34,0C202 Software Testing,5-35,自底向上的

16、集成示例,自底向上集成 (3/3),优点: (1)对底层行为早期进行确认; (2)不需要写程序桩; (3)对一些子树而言比较容易明确表示输入,比较容易解释对其他的输出。 缺点: (1)推迟对高层行为的确认; (2)需要驱动程序; (3)当组合子树的时候,一大堆元素要进行集成。,0C202 Software Testing,5-36,混合式集成 (1/2),结合了自顶向下和自底向上。 如:小组或个人可以对自己开发的模块采用自底向上测试,然后再由集成小组进行自顶向下测试。,0C202 Software Testing,5-37,混合式集成 (2/2),步骤: 用程序桩独立地测试用户界面。 用驱动程序测试最低层功能模块。 集成整个系统对中间层进行测试。,0C202 Software Testing,5-38,0C202 Software Testing,5-39,混合式集成示例,三种增量测试策略的比较,0C202 Software Testing,5-40,混和增量集成,风险驱动:从最关键或最复杂的模块开始进行集成,逐步加入它们调用或被调用的模块。 进度驱动:一旦模块就绪,比如,以某种方式可以获得或编码完成,就马上进行集成。 功能或线程驱动:选择跟某一个功能或线程有关的模块进行集成,逐步加入其他功能或线程。,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 幼儿/小学教育 > 其它小学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号