1软件测试方法和技术-Ch.6集成测试2第五章回顾①单元测试的定义与进行单元测试的重要性②单元测试的目标与任务③静态测试技术的运用④动态测试技术的运用⑤调试与评估⑥单元测试的过程与文档管理⑦单元测试的常用工具简介3集成测试过程技术相关概念集成测试策略集成测试环境46.1集成测试概述一、集成测试的含义集成测试是指根据实际情况对程序模块采用适当的的集成测试策略组装起来,对系统的接口以及集成后的功能进行正确性检验的测试工作。在单元测试的基础上,将所有模块按照概要设计要求组装为子系统或者系统进行测试,关注各个模块之间的交互是否正确。5二、集成测试与系统测试的区别1、测试对象集成测试的测试对象是由通过了单元测试的各个模块所集成起来的组件。而系统测试的测试对象,除了软件之外,还有计算机硬件及相关的外围设备、数据采集和传输机构、计算机系统操作人员等的整个系统。2、测试时间集成测试是介于单元测试和系统测试之间的测试.在测试时间上,先于系统测试。3、测试方法集成测试通常会采用灰盒测试。而系统测试通常使用黑盒测试。64、测试内容集成测试的主要内容就是各个单元模块之间的接口,以及各个模块集成后所实现的功能。而系统测试的主要内容就是整个系统的功能和性能。5、测试目的集成测试的主要目的就是发现单元之间接口的错误,以及发现集成后的软件同软件概要设计说明不一致的地方。而系统测试的主要目的就是,通过与系统需求定义相比较之后发现软件与系统定义不符合或矛盾的地方。6、测试角度集成测试工作的开展更多的是站在测试工作人员的角度上。系统测试工作的开展更多的是站在用户的角度来进行。二、集成测试与系统测试的区别7A产品子系统1子系统2硬件子系统1软件子系统1软件模块1软件模块2软件程序1软件程序2单元1单元2单元3单元4硬件子系统2软件子系统2软件模块3软件模块4(软件结构图)(软件模块结构)6-1软件结构图三、集成测试与开发的关系为了更好的了解集成测试与开发的关系,图6-1给出了软件基本结构图。8四、集成测试的重点1、各个模块连接起来后,穿过模块接口的数据是否会丢失,是否能够按期望值传递给另外一个模块;2、各个模块连接起来后,需要判断是否仍然存在单元测试时所没发现的资源竞争问题;3、分别通过单元测试的子功能模块集成到一起能否实现所期望的父功能;4、兼容性,检查引入一个模块后,是否对其他与之相关的模块产生负面影响;5、全局数据结构是否正确,是否被不正常的修改;6、集成后,每个模块的误差是否会累计扩大,是否会达到了不可接受的程度;96.2集成测试任务一、集成测试任务在把各个模块连接起来时,穿越模块接口的数据是否会丢失;各个子功能组合起来,是否能够达到预期要求的父功能;一个模块的功能是否会对另一个模块的功能产生不利的影响;全局数据结构是否有问题,会不会被异常修改;单个模块的误差积累起来,是否会放大,从而达到不可接受的程度;10二、集成测试基础分析1、体系结构分析首先,跟踪需求分析,对要实现的系统划分出结构层次图。其次,是对系统各个组件之间的依赖关系进行分析,然后据此确定集成测试的粒度,即集成模块的大小。2、模块分析一般,可从以下几个角度进行模块分析:1)确定本次要测试的模块;112)找出与该模块相关的所有模块,并且按优先级对这些模块进行排列;3)从优先级别最高的相关模块开始,把被测模块与其集成到一起;4)然后依次集成其他模块。3、接口分析接口的划分要以概要设计为基础,一般通过以下几个步骤来完成:(1)确定系统的边界、子系统的边界和模块的边界。(2)确定模块内部的接口。(3)确定子系统内模块间接口。(4)确定子系统间接口。12(5)确定系统与操作系统的接口。(6)确定系统与硬件的接口。(7)确定系统与第三方软件的接口。4、风险分析风险通常被分为3种类型:1项目风险:包括项目管理和项目环境的风险。2商业风险:它和领域的相关概念及规则息息相关。3技术风险:这是针对应用程序的具体实现而言的,主要和代码级的测试有关。风险分析是一个定义风险并且找出阻止潜在的问题变成现实的方法的过程。13通常把风险分析分为3个阶段:风险识别、风险评估和风险处理。5、可测试性分析必须尽可能早地分析接口的可测试性,提前为后续的测试工作做好准备。6、集成测试策略分析集成测试策略分析的主要任务就是根据被测对象选择合适的集成测试策略。1414基于功能分解的集成大爆炸自顶向下集成自底向上集成三明治集成6.3集成测试策略15软件集成的策略1.非增量方式(BigBang)先独立地测试好每一个软件单元,然后一次性全部组装在一起,再将整个软件作为一个整体进行测试2.增量方式从一个模块开始测试,逐步把下一个已测好的软件单元或部件,同已测好的软件部件结合起来,再测试。每测完一个就添加一个,边组装边继续测试,直到整个系统组装完毕增量方式主要包括自顶向下(又包括深度优先和广度优先)、自底向上、自顶向下与自底向上相结合(“三明治”)等方法16渐增式与非渐增式测试的区别渐增式与非渐增式测试的区别有如下几点:(1)非渐增式方法把单元测试和集成测试分成两个不同的阶段,前一阶段完成模块的单元测试,后一阶段完成集成测试。而渐增式测试把单元测试与集成测试合在一起,同时完成。17(2)非渐增式需要更多的工作量,因为每个模块都需要驱动模块和桩模块,而渐增式利用已测试过的模块作为驱动模块或桩模块,因此工作量较少。(3)渐增式可以较早地发现接口之间的错误,非渐增式最后组装时才发现。18(4)渐增式有利于排错,发生错误往往和最近加进来的模块有关,而非渐增式发现接口错误推迟到最后,很难判断是哪一部分接口出错。(5)渐增式比较彻底,已测试的模块和新的模块组装在一起再测试。19(6)渐增式占用的时间较多,但非渐增式需更多的驱动模块、桩模块,也占用一些时间。(7)非渐增式开始可并行测试所有模块,能充分利用人力,对测试大型软件很有意义。20考虑到目前计算机硬件价格下降,人工费用上升,软件错误纠正越早代价越低等特点,采用渐增式方法测试较好。也可考虑将两种方法结合起来,一些模块分别测试,然后将这些测试过的模块再用渐增式逐步结合进软件系统中去。216.3.1非增量(BigBang)方式是一种很直接、原始的组装方式,由于它一次性地把所有已通过单元测试的子模块一古脑儿地全部集成在一起,直接组装成最终的软件系统,再对之进行总体测试这种一起进行全程序的测试被贬义地称作大爆炸(BigBang)。该方式目前仍在许多场合使用,人们期望它可以带来方便、快捷的组装效果但这种方法遭到广大测试专家的批评,普遍认为它会引起混乱,因为它在发现错误后难以诊断和定位错误源的位置,又称“莽撞测试”22BigBang示意先独立地测试好每一个软件单元(b),然后一次性全部组装在一起,再将整个软件作为一个整体进行测试236.3.2增量方式又称渐增式组装首先对一个个模块分别进行模块测试,然后将这些模块逐步组装成较大的系统在组装的过程中,边连接边测试,以发现连接过程中产生的问题(如接口处)通过增量逐步组装成为最终符合预期要求的软件系统241.自顶向下方法一个模块一个模块地组装软件的方法,每组装一个都要测试一次按照控制的结构,从主控模块(主程序)开始,向下地逐个把模块连接起来集成的方式有两种:深度优先法及广度优先法深度优先法是先把结构中的一条主要的控制路经上的全部模块逐步组装起来。然后再连接其它的控制路径广度优先法是从结构的顶层开始逐层往下组装25自顶向下集成的过程步骤1)主控模块用作为测试驱动器。直接附属于主控模块的各模块全都用桩模块代替2)按照所选的组装法(即深度优先或广度优先)每次用一个真模块取代一个附属的桩模块3)当装入每个真模块时都要进行测试4)作完每一组测试后又再用一个真模块代替另一个桩模块5)可以进行回归测试(即重新再做一遍过去做过的全部或部分测试),以便肯定没有新的错误发生26自顶向下结合方式示意图ADBECF模块测试结合顺序深度优先:A、B、E、C、D、F广度优先:A、B、C、D、E、F27A测试AS2S1S3A加入B并测试ABS2BS3S4A加入E并测试ABES2BS3EA加入C并测试ABECCBS3E加入D并测试ABECDCBDE加入F并测试整体CBDEAAFS5深度优先的自顶向下集成示意Q:ABCDEF这6个子模块中,哪一个得到的测试最充分?28自顶向下方法优点:能较早发现高层模块的接口控制方面的问题初期的程序概貌可让人们较早地看到程序的功能,增强开发人员的信息缺点桩模块不可能提供完整的信息,因此把许多测试推迟到用实际模块代替桩模块之后设计较多的桩模块,测试开销大早期不能并行工作,不能充分利用人力。292.自底向上方法自底向上集成测试方法是从软件结构中最底层的、最基本的软件单元开始进行集成和测试这种组装方式是从程序模块结构的最底层的模块开始组装和测试。因为模块是自底向上进行组装,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)已经组装并测试完成,所以不再需要桩模块。在模块的测试过程中需要从子模块得到的信息可以由直接运行子模块得到。30自底向上集成的过程步骤1)由驱动模块控制最底层模块的并行测试;也可以把最底层模块组合成实现某一特定软件功能的簇,由驱动模块控制它进行测试。2)用实际模块代替驱动模块,与它已测试的直属子模块组装成为子系统。3)为子系统配备驱动模块,进行新的测试。4)判断是否已组装到达主模块。若是则结束测试,否则执行2)。自底向上进行组装和测试时,需要为被测模块或子系统编制相应的驱动模块。31一个软件结构图CA族MB族族32为每个族分别进行测试d1d2d333ABCd4d5d6族族族形成3个更大的族进一步测试34自底向上集成示意35ACBDFEEd1Cd3Fd4Bd2EDd5F自底向上集成示意36自底向上的增值方式优点:随着上移,驱动模块逐渐减少,测试开销小一些比较容易设计测试用例早期可以并行工作低层模块的错误能较早发现缺点系统整体功能最后才能看到上层模块错误发现的晚,上层模块的问题是全局问题,影响范围大。37二者的比较自顶向下自底向上优点可在测试早期实现并验证系统主要功能设计上的缺陷会尽早体现设计测试用例比较容易底层模块能够得到更为充分的测试缺点底层模块不能充分测试只有到最后程序才能作为一个整体呈现,设计缺陷难以及时被发现一般对软件结构的上层使用自顶向下结合的方法;对下层则使用自底向上结合的方法(“三明治”方法)383.混合策略(ModifiedTop-downIntegration)混合法:对软件结构中较上层,使用的是“自顶向下”法;对软件结构中较下层,使用的是“自底向上”法,两者相结合39“三明治”方法自顶向下测试的主要优点是能较早显示出整个程序的轮廓。主要缺点是当测试上层模块时使用桩模块较多,很难模拟出真实模块的全部功能,使部分测试内容被迫推迟,直至换上真实模块后才能补充测试自底向上测试则从下层模块开始,设计测试用例比较容易,但是在测试的早期无法显示出程序的轮廓针对自顶向下、自底向上方法各自的优点和不足,人们提出了自顶向下和自底向上相结合,从两头向中间逼近的混合式组装方法,并形象地称之为“三明治”方法40“三明治”方法的步骤步骤:对上层模块采取自顶向下测试对关键模块或子系统采取自底向上测试如对关键模块采取自底向上测试,就可能把输入输出模块提前组装进程序,使设计测试用例变得较为容易;或者使具有重要功能的模块早点与有关的模块相连,以便较早暴露可能存在的问题。除关键模块及少数与之相关的模块外,对其余模块尤其是上层模块仍采取自顶向下的测试方法,以便较早显示程序总体轮廓41三明治集成方法(SandwichIntegration)采用三明治方法的优点是:它将自顶向下和自底向上的集成方法有机地结合起来,不需要写桩程序因为在测试初自底向上集成已经验证了底层模块的正确性。采用这种方法的主要缺点是:在真正集成之前每一个独立的模块没有完全测试过。42改善的三明治集成方法改进
本文标题:10集成测试详解
链接地址:https://www.777doc.com/doc-3800831 .html