集成测试集成测试的定义也叫做组装测试、联合测试、子系统测试和部件测试。是在单元测试的基础上,将所有模块按照概要设计要求组装成为子系统或系统,进行集成测试。集成测试关注的重点模块间的数据传递是否正确?一个模块的功能是否会对另外一个模块的功能产生错误的影响?全局数据结构是否有问题,会不会被异常修改?块组合起来的功能能否满足要求?各个模块累积的误差是否会达到不可接受的程度?集成测试的必要性集成测试的首要目的是揭示构件互操作性的错误,这样系统测试就可以在最少可能被中断的情况下进行。所有的软件项目都不能跨越集成这个阶段。集成测试的意义还在于能间接地验证概要设计是否具有可行性。一些模块虽然能够单独的工作,但并不能保证连接起来也能正常工作。集成测试遵循的原则集成测试很不好把握,应针对总体设计尽早开始筹划。为了做好集成测试,需要遵循以下原则。①所有公共接口都要被测试到。②关键模块必须进行充分的测试。③集成测试应当按一定的层次进行。④集成测试的策略选择应当综合考虑质量、成本和进度之间的关系。⑤集成测试应当尽早开始,并以总体设计为基础。⑥在模块与接口的划分上,测试人员应当和开发人员进行充分的沟通。⑦当接口发生修改时,涉及的相关接口必须进行再测试。⑧测试执行结果应当如实记录。集成测试的具体内容1.功能性测试2.可靠性测试3.易用性测试4.性能测试5.维护性测试常见的集成测试故障1)配置/版本控制错误2)遗漏、重叠或冲突函数3)不一致的数据结构4)使用冲突的数据视图5)破坏全局存储或数据库数据的完整性6)由于编码错误或未预料到的运行是绑定导致的错误方法调用。7)客户发送违反服务器前提条件、顺序约束的消息。8)错误的参数或不正确的参数值。9)错误的对象和消息的绑定。10)由不正确的内存管理分配/收回引起的失败。11)不正确的使用虚拟机、OS。12)组件之间的服务。13)资源竞争。集成测试的模式渐增式测试模式与非渐增式测试模式非渐增式测试模式:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序。按程序结构图将各模块连接起来,把连接后的程序当做一个整体进行测试。渐增式测试模式:把下一个要测试的模块同已经测试好的模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。各自的优缺点集成测试的整个过程由下列3个步骤完成。①主控模块作为测试驱动器,把对主控模块进行单元测试时引入的被调用模拟子模块用实际模块替代。②依照所选用的模块集成策略(深度优先和广度优先),下层的被调用模拟子模块一次一个地被替换为真正的模块。③在每个模块被集成时,都必须立即进行测试一遍。自顶向下和自底向上集成方法驱动程序/驱动模块(driver),用以模拟被测模块的上级模块。驱动模块在集成测试中接受测试数据,把相关的数据传送给被测模块,启动被测模块,并打印出相应的结果。桩程序/桩模块(stub),也有人称为存根程序,用以模拟被测模块工作过程中所调用的模块。桩模块由被测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检验被测模块与其下级模块的接口自顶向下法(Top-downIntegration)自顶向下法的主要优缺点自顶向下集成步骤:(1)以主模块为所测模块兼驱动模块,所有直属于主模块的下属模块全部用桩模块对主模块进行测试。(2)采用深度优先(depth-first)(如图8-2-1)或广度优先(breadth-first)(如图8-2-2)的策略,用实际模块替换相应桩模块,再用桩代替它们的直接下属模块,与已测试的模块或子系统组装成新的子系统。(3)进行回归测试(即重新执行以前做过的全部测试或部分测试),排除组装过程中引起的错误的可能。(4)判断是否所有的模块都已组装到系统中,是则结束测试,否则转到(2)去执行。自底向上法(Bottom-upIntegration)自底向上法的主要优缺点自底向上集成自底向上集成的步骤如下:(1)由驱动模块控制最低层模块的并行测试;也可以把最低层模块组合成实现某一特定软件功能的簇,由驱动模块控制它进行测试。(2)用实际模块代替驱动模块,与它已测试的直属子模块组装成为子系统。(3)为子系统配备驱动模块,进行新的测试。(4)判断是否已组装到达主模块。是则结束测试,否则执行(2)。大棒集成方法(Big-bangIntegration)-大爆炸集成采用大棒集成方法,先是对每一个子模块进行测试(单元测试阶段),然后将所有模块一次性的全部集成起来进行集成测试。因为所有的模块一次集成的,所以很难确定出错的真正位置、所在的模块、错误的原因。这种方法并不推荐在任何系统中使用,适合在规模较小的应用系统中使用。三明治集成方法(SandwichIntegration)采用三明治方法的优点是:它将自顶向下和自底向上的集成方法有机地结合起来,不需要写桩程序因为在测试初自底向上集成已经验证了底层模块的正确性。采用这种方法的主要缺点是:在真正集成之前每一个独立的模块没有完全测试过。改善的三明治集成方法改进的三明治集成方法,不仅自两头向中间集成,而且保证每个模块得到单独的测试,使测试进行得比较彻底。混合策略(ModifiedTop-downIntegration)混合法:对软件结构中较上层,使用的是“自顶向下”法;对软件结构中较下层,使用的是“自底向上”法,两者相结合几种集成方法性能的比较自底向上自顶向下混合策略大棒三明治改进三明治集成早早早晚早早基本程序能工作时间晚早早晚早早需要驱动程序是否是是是是需要桩程序否是是是是是工作并行性中低中高中高特殊路径测试容易难容易容易中等容易计划与控制容易难难容易难难集成测试策略在现代复杂软件项目集成测试过程中,通常采用核心系统先行集成测试和高频集成测试相结合的方式进行;自底向上的集成测试方案在采用传统瀑布式开发模式的软件项目集成过程中较为常见。集成策略的选择应该结合项目的实际工程环境及各测试方案适用的范围进行合理的选型。集成测试人员由于集成测试不是在真实环境下进行,而是在开发环境,或是一个独立的测试环境下进行的,所以集成测试所需人员一般从开发组中选出,在开发组长的监督下进行,开发组长负责保证在合理的质量控制和监督下使用合适的测试技术执行充分的集成测试。在集成测试过程中,测试过程由一个独立测试观察员来监控测试工作。集成测试过程中应考虑邀请一个用户代表非正式地观看集成测试。小结集成测试是单元测试的逻辑扩展,即在单元测试基础之上,将所有模块按照概要设计要求组装成为子系统或系统,进行测试。集成测试的目的是确保各单元组合在一起后能够按既定意图协作运行,并确保增量的行为正确。集成测试策略包括大爆炸集成、自底向上集成、自顶向下集成、三明治集成和高频集成方法。集成策略的选择应该结合项目的实际工程环境及各测试方案适用的范围进行合理的选型。