目录
|
集成测试是指在单元测试的基础上,将所有模块按照设计要求组装成为子系统或系统,进行测试。
集成测试最简单的形式是:把两个已经测试过的单元组合成一个组件,测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合为程序的更大部分。方法是测试片段的组合,并最终扩展成进程,将模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。此外,如果程序由多个进程组成,应该成对测试它们,而不是同时测试所有进程。
集成测试测试组合单元时出现的问题。通过使用要求在组合单元前测试每个单元并确保每个单元的生存能力的测试计划,可以知道在组合单元时所发现的任何错误很可能与单元之间的接口有关。这种方法将可能发生的情况数量减少到更简单的分析级别。一个有效的集成测试有助于解决相关的软件与其它系统的兼容性和可操作性的问题。
集成测试是在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。也就是说,在集成测试之前,单元测试应该已经完成,集成测试中所使用的对象应该是已经经过单元测试的软件单元。这一点很重要,因为如果不经过单元测试,那么集成测试的效果将会受到很大影响,并且会大幅增加软件单元代码纠错的代价。
集成测试是单元测试的逻辑扩展。在现实方案中,集成是指多个单元的聚合,许多单元组合成模块,而这些模块又聚合成程序的更大部分,如分系统或系统。集成测试采用的方法是测试软件单元的组合能否正常工作,以及与其他组的模块能否集成起来工作。最后,还要测试构成系统的所有模块组合能否正常工作。集成测试所持的主要标准是《软件概要设计规格说明》,任何不符合该说明的程序模块行为都应该加以记载并上报。
所有的软件项目都不能摆脱系统集成这个阶段。不管采用什么开发模式,具体的开发工作总得从一个一个的软件单元做起,软件单元只有经过集成才能形成一个有机的整体。具体的集成过程可能是显性的也可能是隐性的。只要有集成,总是会出现一些常见问题,工程实践中,几乎不存在软件单元组装过程中不出任何问题的情况。从表中可以看出,集成测试需要花费的时间远远超过单元测试,直接从单元测试过渡到系统测试是极不妥当的做法。
活动 | 输入 | 输出 | 参与角色和职责 |
---|---|---|---|
制定集成测试计划 | 设计模型 设计模型 | 集成测试用例 测试过程 | 测试设计员负责设计集成测试用例和测试过程 |
实施集成测试 | 集成测试用例 测试过程 工作版本 | 测试脚本(可选) 测试过程(更新) | 测试设计员负责编制测试脚本(可选),更新测试过程。 |
驱动程序或稳定桩 | 设计员负责设计驱动程序和装,实施员负责实施驱动程序和桩 | ||
执行集成测试 | 测试脚本(可选) 工作版本 | 测试结果 | 测试员负责执行测试并记录测试结果 |
评估集成测试 | 集成测试计划 测试结果 | 测试评估摘要 | 测试员负责会同及成员、编码员、设计员等有关人员(具体化)评估此次测试,并生成测试评估摘要。 |
集成测试的目标是按照设计要求使用那些通过单元测试的构件来构造程序结构。单个模块具有高质量但不足以保证整个系统的质量。有许多隐蔽的失效是高质量模块间发生非预期交互而产生的。以下两种测试技术是用于集成测试:
1、功能性测试。使用黑盒测试技术针对被测模块的接口规格说明进行测试。
2、非功能性测试。对模块的性能或可靠性进行测试。
另外,集成测试的必要性还在于一些模块虽然能够单独地工作,但并不能保证连接起来也能正常工作。程序在某些局部反映不出来的问题,有可能在全局上会暴露出来,影响功能的实现。此外,在某些开发模式中,如迭代式开发,设计和实现是迭代进行的。在这种情况下,集成测试的意义还在于它能间接地验证概要设计是否具有可行性。
1、在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;
2、各个子功能组合起来,能否达到预期要求的父功能;
3、一个模块的功能是否会对另一个模块的功能产生不利的影响;
4、全局数据结构是否有问题;
5、是采用何种系统组装方法来进行组装测试;
6、组装测试过程中连接各个模块的顺序;
7、模块代码编制和测试进度是否与组装测试的顺序一致;
8、测试过程中是否需要专门的硬件设备;
9、单个模块的误差积累起来,是否会放大,从而达到不可接受的程度。
因此,单元测试后,有必要进行集成测试,发现并排除在模块连接中可能发生的上述问题,最终构成要求的软件子系统或系统。对子系统,集成测试也叫部件测试。
任何合理地组织集成测试,即选择什么方式把模块组装起来形成一个可运行的系统,直接影响到模块测试用例的形式、所用测试工具的类型、模块编号和测试的次序、生成测试用例和调试的费用。通常,有两种不同的组装方式:一次性组装方式和增值式组装方式。
根据IEEE标准 集成测试划分为4个阶段:计划阶段,设计阶段,实现阶段,执行阶段(实施阶段)
1、时间安排 概要设计完成评审后大约一个星期;
2、输入 需求规格说明书 概要设计文档 产品开发计划路标;
3、入口条件 概要设计文档已经通过评审;
4、活动步骤:
(1)定被测试对象和测试范围;
(2)评估集成测试被测试对象的数量及难度,即工作量;
(3)确定角色分工和作任务;
(4)标识出测试各阶段的时间,任务,约束等条件;
(6)考虑和准备集成测试需要的测试工具,测试仪器,环境等资源;
(7)考虑外部技术支援的力度和深度,以及相关培训安排;
(8)定义测试完成标准;
5、输出 集成测试计划;
6、出口条件 集成测试计划通过概要设计阶段基线评审;
1、时间安排详细设计阶段开始;
2、输入需求规格说明书概要设计集成测试计划;
3、入口条件概要设计基线通过评审;
4、活动步骤:
(1)被测对象结构分析;
(2)集成测试模块分析;
(3)集成测试接口分析;
(4)集成测试策略分析;
(5)集成测试工具分析;
(6)集成测试环境分析;
(7)集成测试工作量估计和安排。
5、输出集成测试设计(方案);
6、出口条件集成测试设计通过详细设计基线评审。
1、时间安排在编码阶段开始后进行;
2、输入需求规格说明书概要设计集成测试计划集成测试设计;
3、入口条件详细设计阶段;
4、活动步骤:
(1)集成测试用例设计;
(2)集成测试代码设计(如果需要);
(3)集成测试脚本(如果需要);
(4)集成测试工具(如果需要);
5、输出集成测试用例集成测试规程集成测试代码集成测试脚本集成测试工具;
6、出口条件测试用例和测试规程通过编码阶段基线评审。
1、时间安排单元测试已经完成后就可以开始执行集成测试了;
2、输入 需求规格说明书概要设计集成测试计划集成高度设计集成测试例集成测试规程集成测试代码(如果有)集成测试脚本集成测试工具详细设计代码单元测试报告;
3、入口条件单元测试阶段已经通过基线化评审;
4、活动步骤执行集成测试用例回归集成测试用例撰写集成测试报告;
5、输出集成测试报告;
6、出口条件集成测试报告通过集成测试阶段基线评审。
集成测试的实施方案有很多种,如自底向上集成测试、自顶向下集成测试、Big-Bang集成测试、三明治集成测试、核心集成测试、分层集成测试、基于使用的集成测试等。常见的有:
自顶向下集成(Top-Down Integration)方式是一个递增的组装软件结构的方法。从主控模块(主程序)开始沿控制层向下移动,把模块一一组合起来。分两种方法:
第一:先深度:按照结构,用一条主控制路径将所有模块组合起来;
第二:先宽度:逐层组合所有下属模块,在每一层水平地沿着移动。
组装过程分以下五个步骤:
步骤一:用主控模块作为测试驱动程序,其直接下属模块用承接模块来代替;
步骤二:根据所选择的集成测试法(先深度或先宽度),每次用实际模块代替下属的承接模块
步骤三:在组合每个实际模块时都要进行测试;
步骤四:完成一组测试后再用一个实际模块代替另一个承接模块;
步骤五:可以进行回归测试(即重新再做所有的或者部分已做过的测试),以保证不引入新的错误。
自底向上的集成(Bottom-Up Integration)方式是最常使用的方法。其他集成方法都或多或少地继承、吸收了这种集成方式的思想。自底向上集成方式从程序模块结构中最底层的模块开始组装和测试。因为模块是自底向上进行组装的,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)事前已经完成组装并经过测试,所以不再需要编制桩模块(一种能模拟真实模块,给待测模块提供调用接口或数据的测试用软件模块)。自底向上集成测试的步骤大致如下:
步骤一: 按照概要设计规格说明,明确有哪些被测模块。在熟悉被测模块性质的基础上对被测模块进行分层,在同一层次上的测试可以并行进行,然后排出测试活动的先后关系,制定测试进度计划。图2给出了自底向上的集成测试过程中各测试活动的拓扑关系。利用图论的相关知识,可以排出各活动之间的时间序列关系,处于同一层次的测试活动可以同时进行,而不会相互影响。
步骤二: 在步骤一的基础上,按时间线序关系,将软件单元集成为模块,并测试在集成过程中出现的问题。这里,可能需要测试人员开发一些驱动模块来驱动集成活动中形成的被测模块。对于比较大的模块,可以先将其中的某几个软件单元集成为子模块,然后再集成为一个较大的模块。
步骤三: 将各软件模块集成为子系统(或分系统)。检测各自子系统是否能正常工作。同样,可能需要测试人员开发少量的驱动模块来驱动被测子系统。
步骤四: 将各子系统集成为最终用户系统,测试是否存在各分系统能否在最终用户系统中正常工作。
方案点评: 自底向上的集成测试方案是工程实践中最常用的测试方法。相关技术也较为成熟。它的优点很明显: 管理方便、测试人员能较好地锁定软件故障所在位置。但它对于某些开发模式不适用,如使用XP开发方法,它会要求测试人员在全部软件单元实现之前完成核心软件部件的集成测试。尽管如此,自底向上的集成测试方法仍不失为一个可供参考的集成测试方案。
核心系统先行集成测试法的思想是先对核心软件部件进行集成测试,在测试通过的基础上再按各外围软件部件的重要程度逐个集成到核心系统中。每次加入一个外围软件部件都产生一个产品基线,直至最后形成稳定的软件产品。核心系统先行集成测试法对应的集成过程是一个逐渐趋于闭合的螺旋形曲线,代表产品逐步定型的过程。其步骤如下:
步骤一: 对核心系统中的每个模块进行单独的、充分的测试,必要时使用驱动模块和桩模块;
步骤二: 对于核心系统中的所有模块一次性集合到被测系统中,解决集成中出现的各类问题。在核心系统规模相对较大的情况下,也可以按照自底向上的步骤,集成核心系统的各组成模块。
步骤三: 按照各外围软件部件的重要程度以及模块间的相互制约关系,拟定外围软件部件集成到核心系统中的顺序方案。方案经评审以后,即可进行外围软件部件的集成。
步骤四: 在外围软件部件添加到核心系统以前,外围软件部件应先完成内部的模块级集成测试。
步骤五: 按顺序不断加入外围软件部件,排除外围软件部件集成中出现的问题,形成最终的用户系统。
方案点评: 该集成测试方法对于快速软件开发很有效果,适合较复杂系统的集成测试,能保证一些重要的功能和服务的实现。缺点是采用此法的系统一般应能明确区分核心软件部件和外围软件部件,核心软件部件应具有较高的耦合度,外围软件部件内部也应具有较高的耦合度,但各外围软件部件之间应具有较低的耦合度。
高频集成测试是指同步于软件开发过程,每隔一段时间对开发团队的现有代码进行一次集成测试。如某些自动化集成测试工具能实现每日深夜对开发团队的现有代码进行一次集成测试,然后将测试结果发到各开发人员的电子邮箱中。该集成测试方法频繁地将新代码加入到一个已经稳定的基线中,以免集成故障难以发现,同时控制可能出现的基线偏差。使用高频集成测试需要具备一定的条件: 可以持续获得一个稳定的增量,并且该增量内部已被验证没有问题; 大部分有意义的功能增加可以在一个相对稳定的时间间隔(如每个工作日)内获得; 测试包和代码的开发工作必须是并行进行的,并且需要版本控制工具来保证始终维护的是测试脚本和代码的最新版本; 必须借助于使用自动化工具来完成。高频集成一个显著的特点就是集成次数频繁,显然,人工的方法是不胜任的。
高频集成测试一般采用如下步骤来完成:
步骤一: 选择集成测试自动化工具。如很多Java项目采用Junit+Ant方案来实现集成测试的自动化,也有一些商业集成测试工具可供选择。
步骤二: 设置版本控制工具,以确保集成测试自动化工具所获得的版本是最新版本。如使用CVS进行版本控制。
步骤三: 测试人员和开发人员负责编写对应程序代码的测试脚本。
步骤四: 设置自动化集成测试工具,每隔一段时间对配置管理库的新添加的代码进行自动化的集成测试,并将测试报告汇报给开发人员和测试人员。
步骤五: 测试人员监督代码开发人员及时关闭不合格项。
按照步骤三至步骤五不断循环,直至形成最终软件产品。
方案点评: 该测试方案能在开发过程中及时发现代码错误,能直观地看到开发团队的有效工程进度。在此方案中,开发维护源代码与开发维护软件测试包被赋予了同等的重要性,这对有效防止错误、及时纠正错误都很有帮助。该方案的缺点在于测试包有时候可能不能暴露深层次的编码错误和图形界面错误。