论文部分内容阅读
【摘 要】软件测试过程必须分步骤进行,每个步骤在逻辑上是前一个步骤的继续。大型软件系统通常由若干个子系统组成,每个子系统又由许多模块组成。通常,大型软件系统的测试步骤基本由以下四个步骤组成:单元测试、集成测试(组装测试)、确认测试和系统测试,而集成测试出于重要位置,所以显得尤其重要,本文就集成测试做些探讨。
【关键词】软件测试策略;集成测试
一、引言
软件设计测试方法有各种技术。实践表明,使用每种方法均可设计出一组有用的测试方案,但没有一种方法足以产生一组完善的测试方案。对每种方法而言,均有自身特长,因而用一种方法设计出的测试方案对某些类型的错误可能容易发现,但对另一些类型的错误不一定容易发现。所以,在实际工作中,总是把它们结合起来使用,形成综合的测试策略,以满足不同测试阶段和不同程序的需要。不过,软件测试过程必须分步骤进行,每个步骤在逻辑上是前一个步骤的继续。大型软件系统通常由若干个子系统组成,每个子系统又由许多模块组成。大型软件系统的测试步骤基本由以下四个步骤组成:单元测试、集成测试(组装测试)、确认测试和系统测试。
二、测试策略中的集成测试设计
集成测试也称组装测试,综合测试或联合测试。集成测试是按设计要求把通过单元测试的各个模块组装在一起之后进行测试,以便发现与接口有关的各种错误。在进行集成测试时,常需考虑的有关问题有:数据经过接口是否会丢失;一个模块对另一模块是否造成不应有的影响;几个子功能组合起来能否实现主功能;误差不断积累是否达到不可接受的程度;全局数据结构是否有问题。集成测试分为非渐增式测试和渐增式测试。
(一)非渐增式测试
非渐增式测试方法是先分别测试每个模块,再把所有模块按设计要求放在一起,结合成所要的程序再进行测试。
(二)渐增式测试
渐增式测试是把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下下一个应该测试的模块结合进来测试,这种测试每次增加一个模块。这种方法实际上同时完成单元测试和集成测试。
1.自顶向下结合
自顶向下结合是一种递增的装配软件结构的方法。这种方法被日益广泛地采用,它需要连接程序,但不需要驱动程序。它是从主控制模块(“主程序”)开始,沿着软件的控制层次向下移动,从而逐渐把各个模块结合起来。把主控模块所属的那些模块都装配到结构中去时,有两种方法可供选择。
(1)深度优先策略
参看图1,深度优先策略先组装在软件结构的一条主控制通路上的所有模块。主控路径的选择决定于软件的应用特性。如,选取最左边的路径,先结合模块M1、M2和M5,接着是M8,如果M2的某个功能需要,可结合M6,然后再构造中央和右侧的控制通路。
图1 图2
(2)宽度优先策略
宽度优先策略是沿软件结构水平地移动,把处于同一个控制层次上的所有模块组装起来。对于图2来说,先结合模块M2、M3和M4(代替存根程序S4),接着是M5、M6和M7(代替存根程序S7)这一层,如此继续进行下去,直到所有模块都被结合进来为止。
(3)自顶向下综合测试可归纳为以下五个步骤
A .用主控制模块做测试驱动程序,用连接程序代替所有直接附属于主控制模块的模块。
B.依据所选集成策略(深度优先或宽度优先),每次只用一个实际模块替换一个桩模块。
C.每集成一个模块立即测试一遍。
D.只有每组测试完成后,才用实际模块替换下一个桩模块。
E.为避免引入新错误,须不断进行回归测试(即全部或部分地重复已做过的测试)。
这一过程从第二步开始就不断进行,直到整个程序结构构造完毕。在图1中,实线表示已部分完成的结构,若采用深度优先策略,下一步就要用M7来替代桩模块S7。S7本身可能又带桩模块,随后将被对应的实际模块一一替代。
(4)自顶向下集成局限性的解决方法
自顶向下集成的优点在于能尽早地对程序的主要控制和决策机制进行检验,因而能较早发现错误。其缺点在于测试较高层模块时,低层处理采用桩模块替代,这并不能够反映实际情况,重要数据不能及时回送到上层模块,因而测试并不充分和完善。所以这种方法有它的局限性,若遇到此类问题,测试人员可选择以下几种方法解决之:
A.把某些测试推迟到用真实模块替代桩模块之后进行。这将使我们对一些特定的测试和特定模块的装配之间的对应关系失去某些控制,在确定错误原因时会比较困难。
B.开发能模拟真实模块的桩模块。此法无疑要大大增加开销。
C.从层次结构的底部向上装配软件。此种方法较切实可行,下面专门介绍。
2.自底向上结合
自底向上测试是从软件结构最低层的模块开始组装和测试,当测试到较高层模块时,所需的下层模块均已具备,因而不再需要桩模块。
自底向上综合测试可归纳为以下四个步骤:
(1) 把低层模块组合成实现一个特定软件子功能的族,见图2中模块族1、2、3。
(2) 为每个族设计一个驱动软件,作为测试的控制程序,以协调测试用例的输入和输出。图3中,虚线接的框D1、D2、D3是各个族的驱动程序。
(3) 对模块族进行测试。
(4) 按结构向上次序,用实际模块替换驱动程序,将模块族结合起来组装成新的模块族,再进行测试,直至全部完成。例如,在图3中,族1、族2上属于Ma,因而去掉D1和D2将这两个族直接与Ma接口;同样族3与Mb接口前将D3去掉;Ma与Mb最后与Mc接口。
采用自底向上方法,越向上层分别测试,所需驱动程序越少。而且,若软件结构的最上两层用自顶向下结合的方法进行装配,则将大大减少驱动程序的数目,同时族的组装也会大大简化。
自顶向下方法不需驱动模块的设计,可在程序测试的早期实现并验证系统的主要功能,及早发现上层模块的接口错误。但自顶向下方法必须设计存根模块,使低层关键模块中错误发现较晚,并且不能在早期很快且充分地展开测试的人力。自底向上方法与自顶向下方法相比较,它的优缺点与自顶向下方法恰恰相反。一般在实际应用中,采用两种方法相结合的混合法,即对软件结构的较上层使用自顶向下的结合方法,对下层使用自底向上的结合方法,以充分发挥两种方法的优点,尽量避免其缺点。
三、结论
集成测试是按设计要求把通过单元测试的各个模块组装在一起之后进行测试,以便发现与接口有关的各种错误。相对单元测试,集成测试注重宏观组织。
软件测试中集成测试尤为重要,但这是不够的,还必须设计形成综合的测试策略,一般的做法是,用黑盒法设计基本的测试方案,再利用白盒法补充一些必要的测试方案。具体地说,可用以下策略结合各种方法:
(1) 在任何情况下都应该使用边界值分析的方法。
(2) 必要时用等价划分法补充测试方案。
(3) 必要时用错误推测法补充测试方案。
(4) 如果在程序的功能说明中含有输入条件的组合,最好在一开始就用因果图法,然后再按以上(1)、(2)、(3)步聚进行。
(5) 对照程序逻辑,检查已设计出的设计方案。可以根据对程序可靠性的要求采用不同的逻辑覆盖标准,如果现有测试方案的逻辑覆盖程度没达到要求的覆盖标准,则应再补充一些测试方案。
【关键词】软件测试策略;集成测试
一、引言
软件设计测试方法有各种技术。实践表明,使用每种方法均可设计出一组有用的测试方案,但没有一种方法足以产生一组完善的测试方案。对每种方法而言,均有自身特长,因而用一种方法设计出的测试方案对某些类型的错误可能容易发现,但对另一些类型的错误不一定容易发现。所以,在实际工作中,总是把它们结合起来使用,形成综合的测试策略,以满足不同测试阶段和不同程序的需要。不过,软件测试过程必须分步骤进行,每个步骤在逻辑上是前一个步骤的继续。大型软件系统通常由若干个子系统组成,每个子系统又由许多模块组成。大型软件系统的测试步骤基本由以下四个步骤组成:单元测试、集成测试(组装测试)、确认测试和系统测试。
二、测试策略中的集成测试设计
集成测试也称组装测试,综合测试或联合测试。集成测试是按设计要求把通过单元测试的各个模块组装在一起之后进行测试,以便发现与接口有关的各种错误。在进行集成测试时,常需考虑的有关问题有:数据经过接口是否会丢失;一个模块对另一模块是否造成不应有的影响;几个子功能组合起来能否实现主功能;误差不断积累是否达到不可接受的程度;全局数据结构是否有问题。集成测试分为非渐增式测试和渐增式测试。
(一)非渐增式测试
非渐增式测试方法是先分别测试每个模块,再把所有模块按设计要求放在一起,结合成所要的程序再进行测试。
(二)渐增式测试
渐增式测试是把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下下一个应该测试的模块结合进来测试,这种测试每次增加一个模块。这种方法实际上同时完成单元测试和集成测试。
1.自顶向下结合
自顶向下结合是一种递增的装配软件结构的方法。这种方法被日益广泛地采用,它需要连接程序,但不需要驱动程序。它是从主控制模块(“主程序”)开始,沿着软件的控制层次向下移动,从而逐渐把各个模块结合起来。把主控模块所属的那些模块都装配到结构中去时,有两种方法可供选择。
(1)深度优先策略
参看图1,深度优先策略先组装在软件结构的一条主控制通路上的所有模块。主控路径的选择决定于软件的应用特性。如,选取最左边的路径,先结合模块M1、M2和M5,接着是M8,如果M2的某个功能需要,可结合M6,然后再构造中央和右侧的控制通路。
图1 图2
(2)宽度优先策略
宽度优先策略是沿软件结构水平地移动,把处于同一个控制层次上的所有模块组装起来。对于图2来说,先结合模块M2、M3和M4(代替存根程序S4),接着是M5、M6和M7(代替存根程序S7)这一层,如此继续进行下去,直到所有模块都被结合进来为止。
(3)自顶向下综合测试可归纳为以下五个步骤
A .用主控制模块做测试驱动程序,用连接程序代替所有直接附属于主控制模块的模块。
B.依据所选集成策略(深度优先或宽度优先),每次只用一个实际模块替换一个桩模块。
C.每集成一个模块立即测试一遍。
D.只有每组测试完成后,才用实际模块替换下一个桩模块。
E.为避免引入新错误,须不断进行回归测试(即全部或部分地重复已做过的测试)。
这一过程从第二步开始就不断进行,直到整个程序结构构造完毕。在图1中,实线表示已部分完成的结构,若采用深度优先策略,下一步就要用M7来替代桩模块S7。S7本身可能又带桩模块,随后将被对应的实际模块一一替代。
(4)自顶向下集成局限性的解决方法
自顶向下集成的优点在于能尽早地对程序的主要控制和决策机制进行检验,因而能较早发现错误。其缺点在于测试较高层模块时,低层处理采用桩模块替代,这并不能够反映实际情况,重要数据不能及时回送到上层模块,因而测试并不充分和完善。所以这种方法有它的局限性,若遇到此类问题,测试人员可选择以下几种方法解决之:
A.把某些测试推迟到用真实模块替代桩模块之后进行。这将使我们对一些特定的测试和特定模块的装配之间的对应关系失去某些控制,在确定错误原因时会比较困难。
B.开发能模拟真实模块的桩模块。此法无疑要大大增加开销。
C.从层次结构的底部向上装配软件。此种方法较切实可行,下面专门介绍。
2.自底向上结合
自底向上测试是从软件结构最低层的模块开始组装和测试,当测试到较高层模块时,所需的下层模块均已具备,因而不再需要桩模块。
自底向上综合测试可归纳为以下四个步骤:
(1) 把低层模块组合成实现一个特定软件子功能的族,见图2中模块族1、2、3。
(2) 为每个族设计一个驱动软件,作为测试的控制程序,以协调测试用例的输入和输出。图3中,虚线接的框D1、D2、D3是各个族的驱动程序。
(3) 对模块族进行测试。
(4) 按结构向上次序,用实际模块替换驱动程序,将模块族结合起来组装成新的模块族,再进行测试,直至全部完成。例如,在图3中,族1、族2上属于Ma,因而去掉D1和D2将这两个族直接与Ma接口;同样族3与Mb接口前将D3去掉;Ma与Mb最后与Mc接口。
采用自底向上方法,越向上层分别测试,所需驱动程序越少。而且,若软件结构的最上两层用自顶向下结合的方法进行装配,则将大大减少驱动程序的数目,同时族的组装也会大大简化。
自顶向下方法不需驱动模块的设计,可在程序测试的早期实现并验证系统的主要功能,及早发现上层模块的接口错误。但自顶向下方法必须设计存根模块,使低层关键模块中错误发现较晚,并且不能在早期很快且充分地展开测试的人力。自底向上方法与自顶向下方法相比较,它的优缺点与自顶向下方法恰恰相反。一般在实际应用中,采用两种方法相结合的混合法,即对软件结构的较上层使用自顶向下的结合方法,对下层使用自底向上的结合方法,以充分发挥两种方法的优点,尽量避免其缺点。
三、结论
集成测试是按设计要求把通过单元测试的各个模块组装在一起之后进行测试,以便发现与接口有关的各种错误。相对单元测试,集成测试注重宏观组织。
软件测试中集成测试尤为重要,但这是不够的,还必须设计形成综合的测试策略,一般的做法是,用黑盒法设计基本的测试方案,再利用白盒法补充一些必要的测试方案。具体地说,可用以下策略结合各种方法:
(1) 在任何情况下都应该使用边界值分析的方法。
(2) 必要时用等价划分法补充测试方案。
(3) 必要时用错误推测法补充测试方案。
(4) 如果在程序的功能说明中含有输入条件的组合,最好在一开始就用因果图法,然后再按以上(1)、(2)、(3)步聚进行。
(5) 对照程序逻辑,检查已设计出的设计方案。可以根据对程序可靠性的要求采用不同的逻辑覆盖标准,如果现有测试方案的逻辑覆盖程度没达到要求的覆盖标准,则应再补充一些测试方案。