关于集成测试的相关认识(2)

发表于:2015-11-18来源:uml.org.cn作者:zhaolixin007点击数: 标签:集成测试
如此重复直到完成所有模块的测试。 一般来说,都是考虑基于系统测试功能分解的集成测试,通过树结构或文字的形式表示分解出的模块功能图。 树形图

  如此重复直到完成所有模块的测试。

  一般来说,都是考虑基于系统测试功能分解的集成测试,通过树结构或文字的形式表示分解出的模块功能图。

  树形图表示一个拥有6个模块的功能分解树,集成的顺序有多种选择:从树顶开始向下(自顶向下集成)、从树底开始向上(自底向上集成)、自顶向下和自底向上两种方式组合起来(三明治集成,或叫混合集成)。这些集成顺序都是假设模块已经通过单独测试。

  自顶向下集成从主程序(树根)开始。所有被主程序调用的下层模块都作为“桩模块”出现,桩模块就是模拟被调用模块的一次性代码。一般来说,测试人员要开发桩模块,开发了主程序所需的所有桩模块之后,就可以测试主程序,就像它是一个独立模块一样,使用适当的黑盒测试和白盒测试技术进行测试。

  上图所示为一个系统的集成过程。方框都是用来代替对应模块的桩程序,首先对主程序A进行测试,用三个桩程序代替其调用的三个模块,然后逐步采用实际的模块取代这些桩模块。如果新加入的实际模块调用其他的模块,则也需要为其开发相应的桩模块。如此反复,直到所有模块都被集成。

  为了能够准确地实施测试,应当让桩程序正确而有效地模拟子模块的功能和合理的接口,不能是只包含返回语句或只显示该模块已调用的信息,而不执行任何功能的哑桩程序。如果不能使桩程序正确地向上传递有用的信息,可以采用以下解决办法:

  将很多测试推迟到桩程序用实际模块替代了之后进行;

  进一步开发能模拟实际模块功能的桩程序;

  自底向上集成和测试软件

  自顶向下集成方式的缺点是需要建立桩程序。要使桩程序能够模拟实际子模块的功能十分困难,同时涉及复杂算法,真正输入/输出的模块一般在底层,他们是最容易出问题的模块,到测试和集成的后期才遇到这些模块,一旦发现问题导致过多的回归测试。

  优点是能够较早地发现在主要控制方面的问题。

  自底向上集成是从树的叶子开始,并编写相应的测试驱动程序来代替调用的模块。相对自顶向下集成需要开发的桩,要开发的测试驱动的数量要少些。大多数系统在接近叶模块时,都有高扇出低扇入的特点,扇出是指该模块直接调用的下级模块的个数;扇入是指直接调用该模块的上级模块的个数。但是测试驱动程序比桩程序复杂。

  上图是一个自底向上集成的过程。随着集成层次向上移动,驱动程序将大为减少。如果对程序模块结构的最上面两层模块采用自顶向下进行集成和测试,可以明显地减少驱动模块的数目,而且可以大大减少把几个系统集成起来所需要做的工作。

  自底向上集成方式的缺点是“程序一直未能作为一个实体存在,直到最后一个模块加上去后才形成一个实体”。就是说,在自底向上集成和测试的过程中,对主要的控制直到最后才接触到。

  优点是不需要桩程序,同时由于涉及到复杂算法和真正输入/输出的模块最先得到集成和测试,可以把最容易出问题的部分在早期解决。此外,自底向上集成的方式可以实施多个模块的并行测试,提高测试效率。

  混合集成测试就是把前面介绍的两种方式结合起来进行集成和测试。这样可以兼具两者的优点。下面介绍3种常见的混合式增殖方式:

  衍变的自顶向下的增殖方式:它的基本思想是强化对输入/输出模块和引入新算法模块的测试,并自底向上集成为功能相当完整且相对独立的子系统,然后由主模块开始自顶向下进行增殖测试。

  自底向上- 自顶向下的增殖测试:它首先对含读操作的子系统自底向上直至根结点模块进行集成和测试,然后对含写操作的子系统作自顶向下进行集成与测试。

  回归测试:这种方式采取自顶向下的方式测试所修改的模块及其子模块,然后将这一部分视为子系统,再自底向上测试,以检查该子系统与其上级模块的接口是否匹配。

原文转自:http://www.uml.org.cn/Test/201202024.asp