自顶向下的集成—软件测试核心技术(14)

发表于:2020-9-03 10:07

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:51Testing教研团队    来源:51Testing软件测试网原创

  11.2.2 自顶向下的集成
  自顶向下的集成的目的是从顶层控制开始,采用同设计顺序一样的思路对被测系统进行测试,以验证系统的接口稳定性。
  自顶向下的集成采用了和设计一样的顺序对系统进行测试,它在第一时间对系统的控制接口进行了验证。假定你正使用一个迭代式或增量式的方法开发一个系统,该系统中控制结构的模型与树一样,其中顶层的组件负责控制,采用自顶向下的集成方法首先测试顶层的组件,然后逐步测试底层的组件。自顶向下的集成可以采用深度优先(depth-first)策略和广度优先(breadth-first)策略。
  这里使用图11-4(a)所示模型来描述该方法的具体策略。
  (1)以主模块为所测模块兼驱动模块,所有属于主模块的下属模块用桩模块替换,对主模块进行测试。
  (2)采用深度优先(见图11-5)或广度优先(见图11-6)策略,用实际模块替换相应桩模块,再用桩模块代替它们的直接下属模块,与已测试的模块或子系统组装成新的子系统。
图11-5  深度优先组装方式
  (3)进行回归测试(重新执行以前做过的全部测试或部分测试),排除组装过程中引起错误的可能性。
图11-6  广度优先组装方式
  (4)判断是否所有的模块都已组装到系统中。如果已组装到系统中,则结束测试;否则,执行步骤(2)。
  图11-5和图11-6中,s1、s2、s3、s4、s5代表桩模块,集成顺序为自左到右、由上到下。
  自顶向下的集成的优点如下。
  ●在测试过程中较早地验证了主要的控制点和判断点。在一个功能划分合理的程序模块结构中,判断常常出现在较高的层次里,因而较早就能遇到。如果主要有控制问题,尽早发现这类问题能够减少以后的返工,所以这是十分必要的。
  ●如果选用深度优先组装方式,可以首先实现和验证一个软件完整的功能,可先对逻辑输入分支进行组装和测试,检查并避免潜藏的错误和缺陷,验证其功能的正确性,为以后对主要分支的组装和测试提供了保证。
  ●不仅功能可行性较早得到证实,还能够给开发者和用户带来成功的信心。
  ●最多只需要一个驱动模块(顶层组件的驱动器),减少了驱动器开发的费用。特定组件的驱动器一般使用难以编码的测试用例,并且与组件的接口高度耦合,这种设置限制了驱动器和测试包的复用。而采用自顶向下的策略,最多只需要维护一个顶层模块的驱动器,尽管也会遇到不可复用的问题,但维护工作量将小很多。
  ●由于和设计顺序的一致性,因此可以和设计并行进行。如果目标环境可能存在改变,该方法可以比较灵活地适应。
  ●支持故障隔离。例如,假设A模块的测试正确执行,但是加入B模块后,测试执行失败,那么可以确定,要么B模块有问题,要么A模块和B模块的接口有错误。
  自顶向下的集成的缺点如下。
  ●桩的开发和维护成本较高。因为在每个测试中都必须提供桩,并且随着测试配置中使用的桩的数目增加,所以维护桩的成本将急剧上升。
  ●底层组件中一个无法预计的需求可能会导致许多顶层组件的修改,这破坏了先前构造的部分测试包。
  ●推迟了底层组件行为的验证,同时为了能够有效地进行测试,需要控制模块具有比较高的可测试性。
  ●随着底层模块的不断增加,整个系统越来越复杂,导致底层模块的测试不充分,尤其是那些重用的模块。
  自顶向下的集成方法适用于大部分采用结构化编程方法的软件产品,且产品的结构相对比较简单。一般对于大型复杂的项目往往会综合采用多种集成测试方法。对于具有如下属性的产品,可以优先考虑自顶向下的集成测试策略。
  ●控制结构比较清晰和稳定。
  ●高层接口变化比较小。
  ●底层接口未定义或经常可能被修改。
  ●控制模块具有较大的技术风险,需要尽早验证。
  ●希望能够尽早看到产品的系统功能行为。
  另外,在极限编程(extreme programming)中使用探索式开发风格时,也可以采用自顶向下的集成测试策略。
  11.2.3 自底向上的集成
  自底向上的集成的目的是从具有最小依赖性的底层组件开始,按照依赖关系树的结构,逐层向上集成,以检测整个系统的稳定性。
  自底向上的集成中,从程序模块结构中最底层的模块开始组装和测试。因为模块是自底向上进行组装的,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)已经组装并测试完成,所以不再需要桩模块。在模块的测试过程中,需要从子模块得到的信息可以通过直接运行子模块得到。
  自底向上的集成的步骤如下。
  (1)从模块依赖关系树中的底层叶子模块开始,可以把两个或多个叶子模块合并到一起进行测试,或者把只有一个子节点的父模块与其子模块结合在一起进行测试。
  (2)使用驱动模块对步骤(1)中选定的模块(或模块组)进行测试。
  (3)用实际模块代替驱动模块,与已测试的直属子模块组装成一个更大的模块组进行测试。
  (4)重复上面的行为,直到系统的顶层模块加入已测系统中。
  以图11-4(a)所示模型为例,该集成测试策略如图11-7(a)~(f)所示。
图11-7  自底向上的集成
  图11-7中,d1、d2、d3、d4、d5代表驱动模块,集成顺序为由左到右。
  自底向上的集成的优点如下。
  ●允许对底层模块行为的早期验证。可以在任何一个叶子节点已经就绪的情况下进行集成测试。
  ●在工作的最初可能会并行进行集成,在这一点上比使用自顶向下的集成效率高。
  ●由于驱动模块是额外编写的,而不是实际模块,因此对实际被测模块的可测试性要求比自顶向下的集成策略要小得多。
  ●减少了开发桩模块的工作量,毕竟在集成测试中,开发桩模块的工作量远比开发驱动模块的工作量大得多。但是为了模拟一些中断或异常,可能还需要设计一定的桩模块。
  ●支持故障隔离。
  自底向上的集成的优点如下。
  ●驱动模块的开发工作量庞大(可以通过对已测试组件的复用来降低该成本)。
  ●对高层的验证推迟到了最后,设计上的错误不能及时发现,尤其对于那些控制结构在整个体系中非常关键的产品。
  ●随着集成到了顶层,整个系统将变得越来越复杂,并且对于底层的一些异常将很难覆盖,而使用桩将简单得多。
  自底向上的集成适用于大部分采用结构化编程方法的软件产品中,且产品的结构相对比较简单。一般对于大型复杂的项目往往会综合采用多种集成测试方法。对于具有如下属性的产品,可以优先考虑自底向上的集成测试策略。
  ●采用契约式开发(design by contract)。
  ●底层接口比较稳定。
  ●高层接口变化比较频繁。
  ●底层模块较早完成。
  11.2.4 三明治集成
  三明治集成的目的是综合自顶向下的集成测试策略和自底向上的集成测试策略的优点。
  三明治集成有时也称混合式集成。由于自顶向下的集成测试策略和自底向上的集成测试策略都有各自的缺点,因此自然而然地想到综合这两者优点的混合测试策略。三明治集成就是这样一种方法,它把系统划分成3层,即顶层、中间层和目标层,中间层为目标层。测试时,对目标层上面的一层使用自顶向下的集成测试策略,对目标层下面的一层使用自底向上的集成测试策略,最后测试在目标层汇合。
  使用图11-4(a)所示模型,其中目标层为B、C、D。目标层上面一层是A,下面一层是E、F。使用三明治集成的具体步骤如下。
  (1)对目标层上面的一层使用自顶向下的集成测试策略,因此测试A,使用桩代替B、C、D。
  (2)对目标层下面的一层使用自底向上的集成测试策略,因此测试E、F,使用驱动代替B、D。
  (3)把目标层下面的一层与目标层集成,因此测试(B,E)、(D,F),使用驱动代替A。
  (4)把3层集成到一起,因此测试(A,B,C,D,E,F)。
  三明治集成的步骤如图11-8所示。
  注意,我们在进行三明治集成时,需要尽可能减少驱动和桩模块的数量。例如,在上面的例子中,我们把目标层下面一层与目标层先集成,而不是把目标层上面一层与目标层先集成,这是因为这样可以减少桩模块的设计。
  三明治集成的优点如下。
  综合了自顶向下和自底向上的两种集成测试策略的优点。
图11-8  三明治集成的步骤
  三明治集成的缺点如下。
  ●中间层在集成前测试不充分。
  ●三明治集成的使用范围是大部分软件开发项目。
  11.2.5 修改过的三明治集成
  修改过的三明治集成旨在弥补三明治集成不能充分测试中间层的缺点,尽可能提高测试的并行性。
  修改过的三明治集成的具体步骤如下。
  (1)并行测试目标层及其上面一层、下面一层。其中对目标层上面一层使用自顶向下的集成测试策略,对目标层下面一层使用自底向上的集成测试策略,对目标层使用独立测试策略(需要驱动和桩)。
  (2)并行测试目标层与目标层上面一层的集成以及目标层与目标层下面一层的集成。
  修改过的三明治集成的步骤如图11-9所示。
  修改过的三明治集成的优点如下。
  ●具有三明治集成的所有优点,且能对中间层尽早进行比较充分的测试。
  ●并行度比较高。
  修改过的三明治集成的缺点如下。
  中间层如果选取不恰当,则可能会有比较大的驱动模块和桩模块的设计工作量。
图11-9  修改过的三明治集成的步骤
  修改过的三明治集成的使用范围是大多数软件开发项目。

查看《软件测试核心技术 从理论到实践》全部连载章节
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号