5 集成测试.ppt_第1页
5 集成测试.ppt_第2页
5 集成测试.ppt_第3页
5 集成测试.ppt_第4页
5 集成测试.ppt_第5页
已阅读5页,还剩133页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

集成测试 内容 集成测试的必要性集成测试的方法基于分解的集成基于调用图的集成基于路径的集成案例研究面向对象软件的集成测试 什么是集成测试 集成测试亦称组装测试集成测试将经过单元测试的模块逐步进行组装和测试集成测试验证程序和概要设计说明的一致性集成测试在模块组装后查找模块间接口的错误 集成测试的必要性 良好的软件测试充分性准则应具有的基本性质非复合性 即使一个测试数据集对于软件所有的成分是充分的 也不能保证它对于整个软件是充分的非分解性 即使一个测试数据集对于整个软件是充分的 也不能保证它对于软件所有的成分是充分的 集成测试的必要性 续 一个模块可能对另一个模块产生不利的影响可能会发现单元测试中未发现的接口方面的错误将子功能合成时不一定产生所期望的主功能独立可接受的误差 在组装后可能会超过可接受的误差限度在单元测试中无法发现时序问题 实时系统 在单元测试中无法发现资源竞争问题 内容 集成测试的必要性集成测试的方法基于分解的集成基于调用图的集成基于路径的集成案例研究面向对象软件的集成测试 SATM系统 简单的自动柜员机 SATM终端 功能概述 屏幕显示15个屏幕 功能概述 续 功能键数字键盘 含 取消 键 打印凭条和插入ATM卡的槽存款和提现的通道 door 结构化分析方法 该技术基于三种互补的模型 功能模型 使用数据流图数据模型 使用E R模型控制模型 有限状态机示例SATM系统的语境图SATM系统的第1层数据流图 SATM系统的语境图 SATM系统的第1层数据流图 E R图 Page179图12 11上层SATM有限状态机 Page180图12 12PIN输入有限状态机 SATM系统的功能分解 1SATM SATM系统 1 1DeviceSense control 设备传感与控制 1 1 1Doorsenseandcontrol 通道传感与控制 1 1 1 1Getdoorstatus1 1 1 2Controldoor1 1 1 3Dispensecash1 1 2Slotsenseandcontrol 槽传感与控制 1 1 2 1Watchcardslot1 1 2 2Getdepositslotstatus1 1 2 3ControlCardRoller1 1 2 4ControlEnveloperoller1 1 2 5Readcardstrip1 2CentralbankComm 中央银行通信 1 2 1GetPINforPAN1 2 2Getaccountstatus1 2 3Postdailytransactions 1 3Terminalsenseandcontrol 终端传感与控制 1 3 1Screendriver 屏幕驱动器 1 3 2Keysensor 键盘传感器 1 4Managesession 管理会话 1 4 1Validatecard 验证卡 1 4 2ValidatePIN 验证PIN 1 4 3Closesession 关闭会话 1 4 3 1Newtransactionrequest1 4 3 2Printreceipt1 4 3 3Posttransactionlocal1 4 4Managetransaction 管理事务 交易 1 4 4 1Gettransactiontype1 4 4 2Getaccounttype1 4 4 3Reportbalance1 4 4 4Processdeposit1 4 4 5Processwithdrawal SATM系统的功能分解 续 编号方式可反映如图12 13所示的层次 见下页 Page180图12 13SATM系统的一种分解树 SATM系统的伪代码 主程序描述符合如图12 11所示有限状态机的描述该框图中的状态采用CASE语句实现 MainProgramState AwaitcardCaseStateCase1 AwaitcardScreenDriver 1 null WatchCardSlot CardSlotStatus DowhileCardSlotStatusisIdleWatchCardSlot CardSlotStatus EndwhileControlCardRoller accept ValidateCard CardOK PAN ifCardOKthenState AwaitPINElseControlCardRoller eject EndifState AwaitCardCase2 AwaitPINValidatePIN PINok PAN ifPINokthenScreenDriver 5 null State AwaitTranselseScreenDriver 4 null EndifState AwaitCard Case3 AwaitTransManageTransactionState ClosesessionCase4 ClosesessionifNewTransactionRequestThenState AwaitTransElsePrintReceiptEndifPostTransactionLocalCloseSessionControlCardRoller eject State AwaitCardEndCase State End MainprogramSATM SATM系统的伪代码 续 过程ValidatePIN基于如图12 12所示的有限状态机其中的状态指尝试PIN输入的次数 ProcedureValidatePIN PINok PAN GetPINforPAN PAN ExpectedPIN Try firstCasetryofcase1 FirstScreenDriver 2 null GetPIN EnteredPIN IfEnteredPIN expectedPINthenPINok trueelseScreenDriver 3 null endifTry secondcase2 SecondScreenDriver 2 null GetPIN EnteredPIN IfEnteredPIN expectedPINthenPINok trueelseScreenDriver 3 null endifTry third case3 ThirdScreenDriver 2 null GetPIN EnteredPIN IfEnteredPIN expectedPINthenPINok trueelseScreenDriver 4 null PINok falseendifTry secondEndCase try End ProcedureValidatePIN SATM系统的伪代码 续 过程GetPIN基于另一个有限状态机其中的状态指接收到的数字个数 在任何状态中 要么键入另一个能够键入的数字键 要么键入能够键入的取消键这些 状态 没有再使用CASE语句实现 而是压缩为while循环迭代处理 ProcedureGetPIN EnteredPIN CancelHit LocalData DigitKeys 0 1 2 3 4 5 6 7 8 9 CancelHit FalseEnteredPIN nullstringDigitRcvd 0DoWhilenot DigitRcvd 4orCancelHit keySensor keyHit ifkeyHitINDigitKeysthenEnteredPIN EnteredPIN keyhitINCREMENT DigitRcvd ifDigitRcvd 1thenScreenDriver 2 X ifDigitRcvd 2thenScreenDriver 2 XX ifDigitRcvd 3thenScreenDriver 2 XXX ifDigitRcvd 1thenScreenDriver 2 XXXX ElseCancelHit trueendifendwhileEnd procedureGetPIN 功能分解中模块之间的 使用 关系 MODULEUSESModulesSATMMainWatchCardSlotControlCardRollerScreenDriverValidateCardValidatePINManageTransactionNewTransactionrequestValidatePINGetPINforPANGetPINScreenDriverGetPINkeySensorScreenDriver 表13 1SATM单元和缩写名称 图13 1SATM功能分解树 表13 2SATM调用图的邻接矩阵 Page189有m个结点和n条边的图G V E 的邻接矩阵是一种m m矩阵 其中第i行第j列的元素是1 当且仅当结点i和结点j之间存在一条边 否则该元素是0 单元调用图 随着软件设计逐步深入 所增加的信息能够用来将功能分解树细化为单元调用图单元调用图是一种有向图 结点表示程序单元 边表示程序调用如果单元A调用单元B 则从单元A到单元B有一条有向边 图13 2SATM调用图 内容 集成测试的必要性集成测试的方法基于分解的集成基于调用图的集成基于路径的集成案例研究面向对象软件的集成测试 模块间相互依赖关系分析 相依性分析相依性是模块以各种方式相互依赖的关系关联 association 和聚集 aggregation 继承全局变量调用API服务器对象被用作消息参数的对象 模块组装的策略 非渐增式渐增式 非渐增式集成测试 急于求成 大爆炸集成测试 big bangtesting 一下子把几十个甚至上百个模块莽撞地联接在一起 bigbang 描述了这种联接的声音效果 咣 目的 通过少数测试运行检测整个系统来论证系统的稳定性 40 ThreeLevelCallHierarchy 41 Big BangIntegrationTesting UnitTestH UnitTestD UnitTestC UnitTestB UnitTestA System WideTest Allcomponentsareassembledandtestedatonce 非渐增式集成测试的特点 优点迅速完成集成测试测试用例较少缺点错误难以定位即使通过测试 许多接口错误也会隐藏应用小的 良构的系统 其模块已接受了充分的测试一个已经存在的系统 只是做了少量的修改通过复用可信赖的模块构造系统 渐增式集成测试 功能分解树自顶向下从树根结点开始向下自底向上从树叶结点开始向上三明治自顶向下与自底向上相结合 两个概念 驱动模块 driver 用以模拟被测模块的上级模块的一次性代码 桩模块 stub 也称存根程序 模拟被调用模块的一次性代码 自顶向下集成 目的从顶层开始 以控制层次的顺序增加模块以论证系统的稳定性策略从主程序 树根 开始 所有主程序的下层单元都作为 桩 stub 存根 继续在每一层按宽度优先进行 用完全的实现替代桩 并为下层设计桩直到所有模块被集成 自顶向下集成 续 模块测试结合顺序 深度优先 A B E C D F宽度优先 A B C D E F 自顶向下结合方式举例 深度优先 为SATM系统执行自顶向下集成测试 第一步是要为被主程序调用的所有单元 即WatchCardSlot 检查ATM卡槽 ControlCardRoller 控制ATM卡传送器 ScreenDriver 屏幕驱动器 ValidateCard 验证ATM卡 ValidatePIN 验证PIN ManageTransaction 管理事务 和NewTransactionRequest 新事务请求 开发桩一旦提供了SATM主程序的所有桩之后 可开始测试主程序 就像它是一个独立单元一样 可以使用合适的功能性测试和结构性测试技术 并查找缺陷在确信主程序的逻辑正确之后 我们将逐渐采用实际代码取代这些桩 桩的示例 Page192图13 3 图13 1中SATM分解树的部分自顶向下集成测试序列 自顶向下集成测试的特点 优点测试和集成可以较早的开始减少了驱动 driver 的开发如果底层接口未定义或可能修改 则可以避免提交不稳定的接口缺点桩的开发代价较大在底层模块中一个无法预料的需求可能迫使顶层模块的修改要充分测试底层模块可能比较困难适用范围增量式开发并行软件开发框架开发 自底向上集成 目的从具有最少的相依性模块开始 按照相依性的次序将模块加入 以证实稳定性策略从功能分解树的叶结点开始 向根的方向移动编写叶结点的驱动器为上一级模块编码整个系统使用根一级的模块测试 自底向上结合方式举例 Page193图13 4 图13 1中SATM分解树的部分自底向上集成测试序列 自底向上集成测试的优点 优点自底向上方式虽然需要构造驱动模块 但是它不需要构造桩模块 而构造驱动模块比构造桩模块更容易 因为驱动模块具有某种统一性 而桩模块千差万别涉及复杂算法和真正输入 输出的模块一般在底层 它们是最容易出现问题的模块 而这些模块在自顶向下的组装测试的后期才遇到 如果此时才发现错误 那么改正它所需要花费的代价就更大采用自底向上的组装方式 随着测试层次的提高 剩下的被测模块越来越少 为测试一个模块只需为该模块构造唯一的一个驱动模块 而采用自顶向下方式 则可能要构造若干个桩模块 这无疑也增加了费用叶结点的测试和集成可以并行 自底向上集成测试的缺点 缺点驱动器的开发耗费量大高层模块的可操作性和互操作性测试得不充分适用范围重要需求的模块在底层 自顶向下和自底向上比较 改进的自顶向下集成测试 自顶向下集成测试中的关键模块 是指一个复杂的模块 或者包含有新算法的模块 或者怀疑有错误倾向的模块尽早组装关键模块可以尽早发现关键错误自顶向下的集成测试的局限性之一是 涉及关键模块的一些问题不能立即被测试 必须等到控制结构完成之后 改进的自顶向下集成测试 续 改进的自顶向下集成测试 基本使用自顶向下法 但在测试早期 使用自底向上法测试少数的关键模块 在进行控制结构的集成测试时 关键模块和测试驱动模块一起被执行关键模块和所有其它模块都要经过单元测试 对于一个特定的模块 很难区分单元测试和改进的自顶向下测试对于关键模块 在进行单元测试时 把注意力集中在单元的内部功能上在集成测试阶段 把重点放在这个模块和控制程序的通讯上 三明治集成测试 是自顶向下和自底向上集成的结合系统可看作是分三层中间一层为目标层测试的时候对目标层上面的一层采用自顶向下策略对下面的一层采用自底向上的策略最后测试在目标层会合Howdoyouselectthetargetlayeriftherearemorethan3layers Heuristic Trytominimizethenumberofstubsanddrivers 61 SandwichTestingStrategy TestE TestD G H TestB E F TestA B C D E F G H TestF TestH TestA BottomLevelTests TopLevelTests TestA B C D TestG 三明治集成测试的优缺点 优点兼有自顶向下和自底向上两者的优点缺点中间层在被集成前测试不充分 内容 集成测试的必要性集成测试的方法基于分解的集成基于调用图的集成基于路径的集成案例研究面向对象软件的集成测试 基于调用图的集成 基于分解集成的缺点之一 是以功能分解树为基础如果改用调用图 则可以减缓这种缺陷 并且也向结构性测试方向发展由于调用图是一种有向图 可以利用前面介绍过的图论知识 像使用程序图那样地使用调用图基于调用图的集成测试方法成对集成测试 Pair wiseIntegrationTesting 相邻集成测试 NeighborhoodIntegrationTesting 成对集成测试 成对集成测试背后的思想 是希望使我们可以减少开发桩 驱动器的工作量 能采用实际代码替换桩 驱动器 为了不使测试过程看上去像大爆炸集成测试一样 我们限制用一个测试过程仅去测试调用图中的一对单元 即调用图中的每条边对应有一个集成测试过程对于图13 2所示的SATM调用图 有40个集成测试过程 图13 6成对集成举例 相邻集成测试 借用拓扑学中的邻接概念在有向图中 一个结点的邻居 neighborhood 包括该结点的所有直接前驱结点和所有直接后继结点这对应结点的桩和驱动器集合 图13 7相邻集成举例 表13 3SATM邻居 给定调用图中的邻居数量 每个内部结点有一个邻居 neighborhood 如果有叶结点直接连接到根结点 则还要加上一个邻居内部结点 结点 源结点 汇结点 邻居 内部结点 源结点邻居 结点 汇结点相邻集成测试可大大降低集成测试过程数量 本例中从40降至11 且减少了桩和驱动器的开发工作量 基于调用图的集成测试的优点 优点减少了驱动器 桩的开发工作接口关系测试充分测试集中于衔接的功能性测试和集成可以并行开始 基于调用图的集成测试的缺点 缺点调用或协作的关系可能是错综复杂的参与者没有被单独测试 要充分测试底层模块较困难缺陷隔离问题 尤其是对有大量邻居的情况适用范围尽快论证一个可运行的调用或协作被测系统已清楚定义了模块的调用和协作关系 内容 集成测试的必要性集成测试的方法基于分解的集成基于调用图的集成基于路径的集成案例研究面向对象软件的集成测试 新概念与扩展概念 允许语句片段作为完整语句处理 语句片段是程序图中的结点源结点程序中的源结点是程序开始执行或恢复执行处的语句片段单元中的第一个可执行语句显然是源结点源结点还会出现在紧接转移控制到其他单元的结点之后 新概念与扩展概念 续 汇结点程序执行结束处的语句片段程序中的最后一个可执行语句显然是汇结点转移控制到其他单元的结点也是汇结点模块执行路径模块执行路径是以源结点开始 以汇结点结束的一系列语句 中间没有插入汇结点 新概念与扩展概念 续 消息一种程序设计语言机制 通过这种机制一个单元将控制转移给另一个单元子程序调用 过程调用 函数引用我们约定接收消息的单元 消息的目的地 总是最终将控制返回给消息源 消息可以向其他单元传递数据 新概念与扩展概念 续 MM 路径穿插出现模块执行路径和消息的序列MM 路径的基本思想用来描述包含在不同单元之间转移控制的模块执行路径序列 这种转移是通过消息完成的MM 路径总是代表了可行的执行路径 并且这些路径要跨越单元边界在经过扩展的程序图中可以发现MM 路径 其中的结点表示模块执行路径 边表示消息 图13 8跨三个单元的MM 路径 上图中的源结点和汇结点 模块A源结点 1 5汇结点 4 6模块B源结点 1 3汇结点 2 4模块C源结点 1汇结点 5 入度为0的结点一定是源结点出度为0的结点一定是汇结点 模块执行路径 MEP A 1 MEP A 2 MEP A 3 MEP B 1 MEP B 2 MEP C 1 MEP C 2 MM 路径图 给定一组单元 其MM 路径图是一种有向图 其中的结点表示模块执行路径 边表示单元之间的消息和返回 图13 9从图13 8中导出的MM 路径图 MM 路径图的含义 MM 路径实现了超出单元边界的功能考虑MM 路径与单元的 交集 这种交集中的模块执行路径 类似于一个 MM 路径 功能的程序切片这种交集中的模块执行路径 是将此功能限制在其所在单元的内部 MM 路径的深度 长度 MM 路径末端点有两个可观察的行为准则 即消息静止和数据静止消息静止当到达一个不发送消息的结点时 消息静止发生例如图13 8中的模块C数据静止如果在一系列处理之后创建了一些存储数据 且这些数据并不会马上得到使用 那么此时 数据静止发生 SATM系统中的MM 路径 见程序 Page200 202 写出第一次尝试正确PIN输入的MM 路径 1MainProgram2State Awaitcard3CaseState4Case1 Awaitcard5ScreenDriver 1 null msg16WatchCardSlot CardSlotStatus msg27DowhileCardSlotStatusisIdle8WatchCardSlot CardSlotStatus msg39Endwhile10ControlCardRoller accept msg411ValidateCard CardOK PAN msg512ifCardOK13thenState AwaitPIN14ElseControlCardRoller eject msg615Endif16State AwaitCard17Case2 AwaitPIN18ValidatePIN PINok PAN msg719ifPINok20thenScreenDriver 5 null msg821State AwaitTrans22elseScreenDriver 4 null msg923Endif24State AwaitCard 25Case3 AwaitTrans26ManageTransactionmsg1027State Closesession28Case4 Closesession29ifNewTransactionRequest30ThenState AwaitTrans31ElsePrintReceiptmsg1132Endif33PostTransactionLocalmsg1234CloseSessionmsg1335ControlCardRoller eject msg1436State AwaitCard37EndCase State 38End MainprogramSATM 39ProcedureValidatePIN PINok PAN 40GetPINforPAN PAN ExpectedPIN msg1541Try first42Casetryof43case1 First44ScreenDriver 2 null msg1645GetPIN EnteredPIN msg1746IfEnteredPIN expectedPIN47thenPINok true48elseScreenDriver 3 null msg18Try secondendif51case2 Second52ScreenDriver 2 null msg1953GetPIN EnteredPIN msg2054IfEnteredPIN expectedPIN55thenPINok true56elseScreenDriver 3 null msg2157Try third58endif 59case3 Third60ScreenDriver 2 null msg2261GetPIN EnteredPIN msg2362IfEnteredPIN expectedPIN63thenPINok true64elseScreenDriver 4 null msg2465PINok false66Endif67EndCase try 68End ProcedureValidatePIN 69ProcedureGetPIN EnteredPIN CancelHit 70LocalData DigitKeys 0 1 2 3 4 5 6 7 8 9 71CancelHit False72EnteredPIN nullstring73DigitRcvd 074DoWhilenot DigitRcvd 4orCancelHit 75keySensor keyHit msg2576ifkeyHitINDigitKeysthenEnteredPIN EnteredPIN keyhit79INCREMENT DigitRcvd 80IfDigitRcvd 181thenScreenDriver 2 X msg2682Endif83ifDigitRcvd 284thenScreenDriver 2 XX msg2785Endif86ifDigitRcvd 387thenScreenDriver 2 XXX msg2888Endif89ifDigitRcvd 190thenScreenDriver 2 XXXX msg2991Endif92Else93CancelHit true94endif95endwhile96End procedureGetPIN SATM主程序有16个源节点1 6 7 9 11 12 15 19 21 23 27 30 32 34 35 36SATM主程序有16个汇节点5 6 8 10 11 14 17 18 20 22 26 31 33 34 35 38 示例MM 路径的UML顺序图 MM 路径复杂度 V G e n 2p其中 p是强连接区域的个数 对于结构化过程代码 永远有p 1 因此上述公式简化为V G e n 2 MM 路径复杂度 续 根据上面两个MM 路径有向图 套用公式计算得到复杂度分别为 V G1 4 3 2 3V G2 24 6 2 20 MM 路径图的特点 优点MM 路径是功能性和结构性的一种混合表达上 功能性标识方式上 结构性它与实际系统行为密切匹配 而不是靠基于分解和调用图集成的结构性路径 因此这种基于路径的集成测试能与系统测试无缝连接缺点标识MM 路径的工作量很大 内容 集成测试的必要性集成测试的方法基于分解的集成基于调用图的集成基于路径的集成案例研究面向对象软件的集成测试 次日程序 将主程序的功能分解为过程和函数对月 日和年增加了 有限的 有效性检查 Main FunctionisLeap FunctionLastDayofMonth GetDate FunctionIncrementDate FunctionPrintDate 功能分解图 调用图 单元的程序图 主程序和第一层单元 单元的程序图 续 低层单元 基于分解的集成 图13 15所示的基于分解的成对集成是有问题的 函数isLeap和lastDayOfMonth从来都没有被主程序直接调用 因此这些集成过程是空的 基于调用图的集成 如图13 16所示的基于调用图的成对集成 是对基于分解的集成的改进很明显没有了空的集成过程 因为边引用的是实际单元 基于调用图的集成 续 基于调用图的相邻集成可以通过ValidDate和lastDayOfMonth的邻居进行接下来可以集成GetDate和IncrementDate的邻居最后可以集成主程序这些邻居构成一种构建序列 基于MM 路径的集成 由于程序是数据驱动的 因此所有MM 路径都要从主程序开始 并回到主程序 2002年5月27日的第一条MM 路径 内容 集成测试的必要性集成测试的方法基于分解的集成基于调用图的集成基于路径的集成案例研究面向对象软件的集成测试 面向对象软件的集成测试 o oCalendar程序的协作图 图18 1 协作图非常类似在 集成测试 中曾经使用过的单元调用图 基于协作图的成对集成测试 协作图既支持成对集成测试 也支持相邻集成测试对于成对集成 通过向被集成的类发送消息或接收消息的独立 相邻 类进行单元 类 测试就类向其他类发送 接收消息而言 其他类必须表示为桩 所有这类额外工作都使成对的类集成难以接受 这与过程单元的成对集成一样 o oCalendar程序的成对集成测试 根据图18 1所示的协作图 可以得到以下要集成的类对 testIt和Date 为Year Month和Day建立桩Date和Year 为testIt Month和Day建立桩Date和Month 为testIt Year和Day建立桩Date和Day 为testIt Month和Year建立桩Year和Month 为Date和Day建立桩Month和Day 为Date和Year建立桩 o oCalendar程序的相邻集成测试 使用图18 1中的 无向 图 Date的邻居是整个框图 而testIt的邻居只是Date类的相邻集成肯定会降低插桩工作量 但是要付出降低诊断精度的代价如果测试用例失败 则必须在更多的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论