集成测试详解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3 对每个模块群进行测试; 4 删除测试使用的驱动模块,用较高层模块把模块群组织成为完成更大功能的新模块 群。 从第一步开始循环执行上述各步骤,直至整个程序构造完毕。 下图说明了上述过程。首先“原子”模块被分为三个模块群,每个模块群引入一个驱动 模块进行测试。因模块群 1、模块群 2 中的模块均隶属于模块 Ma,因此在驱动模块 D1、D2 去掉后,模块群 1 与模块群 2 直接与 Ma 接口,这时可对 MaD3 被去掉后, M3 与模块群 3 直接接口,可对 Mb 进行集成测试,最后 Ma 、 Mb 和 Mc 全部集成在一起进行测试。
2 集成测试的策略和方法
2.1 集成测试的策略
一个集成测试策略必须回答三个问题: � 哪些模块是集成测试的重点? � 模块接口应该以什么样的顺序进行检测? � 应该使用哪种测试设计技术检测每个接口? 对于哪些模块是集成测试的重点?模块接口应该以什么样的顺序进行检测?要根据项目的 实际情况和系统架构设计人员一起确定下来, 应该使用哪种测试设计技术检测每个接口相关 功能?就是要应用不同的集成测试方法和技术:
2.2 集成测试的方法
集成测试有两种不同的方法,非增式测试和增式测试。 ①非增式测试:在配备辅助模块的条件下,对所有模块进行个别的单元测试。然后在此基础 上,按程序结构图将各模块联接起来,把联接后的程序当作一个整体进行测试。典型的测试 方法有大爆炸集成测试。非增式测试的做法是先分散测试,再集中起来一次完成集成测试。 如果在模块的接口处存在错误, 只会在最后的集成时一下子暴露出来, 便于找出问题和修改。 其次,增式测试使用了较少的辅助模块,也就减少了辅助性测试工作。并且一些模块在逐步 集成的测试中,得到了较为频繁的考验,因而可能取得较好的测试效果。总的说来,增式测 试比非增式测试具有一定的优越性。 ②增式测试:它的集成是逐步实现的。主要有两种实施顺序: � 自顶向下增式测试表示逐步集成和逐步测试是按结构图自上而下进行的。 � 自底向上增式测试表示逐步集成和逐步测试是按结构图自下而上进行的。
下面主要介绍两种方法,其他方法只做简单的介绍。
1 自顶向下集成: 2.2. .2.1
1 以主控模块作为测试驱动模块, 把对主控模块进行单元测试时引入的所有桩模块用实 际模块替代; 2 依据所选的集成策略(深度优先或广度优先) ,每次只替代一个桩模块; 3 每集成一个模块立即测试一遍; 4 只有每组测试完成后,才着手替换下一个桩模块; 5 为避免引入新错误,须不断地进行回归测试(即全部或部分地重复已做过的测试) 。
2.2.2 自底向上集成
自底向上测试是从“原子”模块(即软件结构最低层的模块)开始组装测试,因测试到 较高层模块时,所需的下层模块功能均已具备,所以不再需要桩模块。 自底向上综合测试的步骤分为: 1 把低层模块组织成实现某个子功能的模块群(cluster) ; 2 开发一个测试驱动模块,控制测试数据的输入和测试结果的输出;
1.2 其它说明
一般的集成测试故障包括: � 配置/版本控制问题。 � � � � � � � � � � � � � 遗漏、重叠或冲突的函数。 文件或数据库使用不正确的或不一致的数据结构。 文件或数据库使用冲突的数据视图/用法。 破坏全局存储或数据库的数据完整性。 由于编码错误或未预料到的运行时绑定导致的错误方法调用。 客户发送违反服务器前提条件的消息。 客户发送违反服务器的顺序约束的消息。 错误的对象和消息的绑定(多态目标) 。 错误参数或不正确的参数值。 由不正确的内存管理分配 /回收引起的失败 不正确的使用虚拟机、ORB 或 OS 服务。 IUT 试图使用目标环境的服务, 而该服务对目标环境的指定版本已经过时或不向上 兼容。 IUT 试图使用目标环境的新服务,而该目标环境的当前版本不支持该服务。
自底向上集成方法不用桩模块, 测试用例的设计亦相对简单, 但缺点是程序最后一个模 块加入时才具有整体形象。它与自顶向综合测试方法优缺点正好相反。因此,在测试软件系 统时,应根据软件的特点和工程的进度,选用适当的测试策略,有时混和使用两种策略更为 有效,上层模块用自顶向下的方法,下层模块用自底向上的方法。 由上面的介绍可以看出,自顶向下测试的主要优点在于它可以自然地做到逐步求精, 一 开始便能让测试者看到系统的雏形。 这个系统模型的检验有助于增强程序人员的信心, 它的 不足是一定要提供桩模块。并且在输入、输出模块接入系统以前,在桩模块中表示测试数据 有一定困难。由于桩模块不能模拟数据,如果模块间的数据流不能构成有向的非环状图, 一 些模块的测试数据难于生成。同时观察和解释测试输出往往也是困难的。另一方面,自底向 上测试的优点在于, 由于驱动模块模拟了所有调用参数, 即使数据流并未构成有向的非环状 图,生成测试数据也没有困难。如果关键的模块是在结构图的底部,自底向上测试是有优越 性的。自底向上方法的缺点在于,当最后一个模块尚未开始测试时,还没有呈现出被测软件 系统的雏形。由于最后一层模块尚未设计完成时,无法开始测试工作,因而设计与测试工作
� 全局数据结构是否有问题; � 单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。 集成测试有时要构造桩( STUB)和驱动(DRIVER) ,所谓桩就是指一个构件的部分实现, 比如我们要测试一只笔能否写字,就要拿来一张纸,这张纸就是测试笔时所使用的桩。驱动 是指一个类、主程序或外部软件系统,它将测试实例应用于被测构件,还是用测试笔写字的 例子,只有笔(待测系统)和纸(桩)还不能实现写字,还必须有一只手拿着笔才可以, 这 时的手即是驱动。
不能交叉进行。
3 其它集成样式 2.2. .2.3
� 大爆炸集成: 是通过少数测试运行检测整个系统来论证系统的稳定性。 大爆炸集成将所 有的模块集合在被测系统之中, 而不考虑构件之间的相依性或风险。 应用一个系统范围 的测试包以证明最低限度的可操作性。 协作集成: 通过向被测试系统中加入模块的集合证明稳定性, 该集成被要求支持一个特 定的协作。协作中包括的模块按照在一个处理线程、一个事件 -响应路径或关键性能目 标中的隶属关系来选择。 如果不存在协作上的顺序约束, 系统范围责任的测试包应该使 用协作集成或往返场景测试。 � 基干集成:结合了自顶向下集成、自底向上集成和大爆炸集成的元素,以验证紧密耦合 的子系统之间的互操作性。 测试设计问题是首先识别支持应用控制的模块、 基干和应用 子系统,测试的顺序也是基于这个分析。 层次集成: 层次集成使用增量式的方法验证一个层次体系结构中的稳定性。 层次集成结 合了自顶向下集成和自底向上集成的元素。 测试设计必须识别层次并确定对每个层应用 哪种集成方法。 客户服务器集成: 论证客户和服务器之间交互的稳定性。 从单独测试客户和服务器开始, 然后在范围内使用受控增加直到所有接口被测试。测试方案必须识别客户和服务器。 客 户 /服务器交互可以用任意适合的测试设计样式建模。扩充式用例测试和往返场景测试 都适用。对双重星型网络,基本的集成策略是检测客户- 服务器对。在三重星型网络中, 我们检测客户- 服务器和服务器- 服务器配置,随后是客户 -服务器 - 服务器配置。 分布服务集成: 论证松散耦合的同等模块之间的交互的稳定性。 从单独测试一些结点开 始,然后在范围内使用受控增加,直到所有接口被测试。集成测试一个分布式系统关心 的是验证远程主机之间的接口是最低限度可操作的。 寻找一个测试包, 它给一个分布式 系统的聚合行为以充分的可信度,是一个更加困难的问题。 � 高频集成: 频繁地将新代码和一个已经稳定化的基线集成在一起, 以免集成故障不能被 发现,以及防止运行的、稳定化的基线的偏差。测试可以使用任意适合的系统范围的测 试样式来开发:协作集成、往返场景测试等。
集成测试
目录
1 集成测试的概述....................................................................... 1 1.1 集成测试的定义...............................................................1 1.2 其它说明...........................................................................2 2 集成测试的策略和方法...........................................................3 2.1 集成测试的策略...............................................................3 2.2 集成测试的方法...............................................................3 2.2.1 自顶向下集成:...................................................... 3 2.2.2 自底向上集成.......................................................... 4 2.2.3 其它集成样式.......................................................... 5 3 集成测试的实践....................................................................... 6 3.1 联想软件的集成测试工作........................................... 6 3.1.1 集成测试前的工作的说明...................................... 8 3.1.2 集成测试的实施过程中要注意的问题..................9 3.1.3 集成测试的结束.................................................... 12 3.2 实例应用......................................................................12
从第二步开始,循环执行上述步骤,直至整个程序结构构造完毕。下图中,实线表示已部分 完成的结构,若采用深度优先策略,下一步将用模块 M7 替换桩模块 S7,当然 M7 本身可 能又带有桩模块,随后将被对应的实际模块一一替代。 自顶向下集成的优点在于能尽早地对程序的主要控制和决策机制进行检验, 因此较早地 发现错误。缺点是在测试较高层模块时,低层处理采用桩模块替代,不能反映真实情况, 重 要数据不能及时回送到上层模块,因此测试并不充分。解决这个问题有几种办法,第一种是 把某些测试推迟到用真实模块替代桩模块之后进行,第二种是开发能模拟真实模块的桩模 块;第三种是自底向上集成模块。第一种方法又回退为非增量式的集成方法,使错误难于定 位和纠正, 并且失去了在组装模块时进行一些特定测试的可能性; 第二种方法无疑要大大增 加开销;第三种方法比较切实可行,下面专门讨论。
1 集成测试的概述
1.1 集成测试的定义
系统( SYSTEM)是由构件( COMPONENT)组成,软件构件是可以在任何物理范围内定 义。根据不同的软件构件(构件在本文和模块的意思是一样的)的定义(即集成测试的粒度 的定义)也就确定了集成的范围。如下表: 构件(集成的焦点) 系统(集成的范围) 方法 类 簇 子系统 类 簇 子系统 系统 典型的构件间的接口(集成故障的位置) 实例变量 类内消息 类间消息 类间消息 包间消息 进程间通信 远程过程调用 ORB 服务 OS 服务 集成测试也叫做组装测试或联合测试。 它是在单元测试的基础上, 将所有模块按照设计要求 组装成为系统时的测试活动。集成测试就是探寻导致模块交互错误的模块错误。
� �
构件之间冲突,例如当进程 Y 运行时,线程 X 就会崩溃。 资源竞争:目标环境不能分配象征性装载所需要的资源,例如:一个用例可能打开
Байду номын сангаас
6 个窗口,但是 IUT 在打开 5 个以后就崩溃了。 注: IUT 指被测试的代码,也称为被测实现。 集成测试的内容主要包括: � � � 在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失; 一个模块的功能是否会对另一个模块的功能产生不利的影响; 各个子功能组合起来,能否达到预期要求的父功能;