SEI.PKU构件和构件和构件软件的测试构件软件的测试2006-12-21北京大学软件研究所SoftwareInstituteinPekingUniversitySEI.PKU内容构件与构件软件测试的目的与过程测试与设计单元测试集成测试相关工具SEI.PKU构件定义软件系统中具有相对独立功能、可以明确辨识、接口由契约指定、和语境有明显依赖关系、可独立部署、且多由第三方提供的可组装软件实体软件构件须承载有用的功能,并遵循某种构件模型可复用构件(ReusableComponent)是指具有可复用价值的构件SEI.PKU构件模型CORBAEJBCOM/DCOM接口标准非二进制标准基于Java和J2EE的特定接口二进制标准是COM构件交互的核心兼容性、可移植性与标准化语言有较强的绑定,可移植性不太好基于Java语言规约,故可移植性好,兼容性较差完全没有源代码级的标准化语言绑定的概念修改和维护用CORBAIDL定义构件接口,需要额外的修改和维护不包含IDL文件,在容器与构件之间定义接口,易于修改和维护用MicrosoftIDL定义构件接口,需要额外的修改和维护平台依赖性平台独立平台独立平台依赖语言依赖性语言独立语言依赖语言独立应用传统的企业运算一般的web客户机传统的桌面应用SEI.PKU构件软件由不同的构件组装而成的软件系统构件类型commercialoff-the-shelf(COTS)(外购)完全复用in-house(已有)可能需要修改或升级newlydevelop(新开发)针对特定系统SEI.PKU基于构件的软件开发CBSD/CBSE:Component-BasedSoftwareDevelopment/Engineering自底向上的、基于预先定制包装好的构件来构造应用系统SEI.PKUCBSD的主要活动构件软件测试是保障和提高构件软件可靠性的重要手段????构件鉴定构件适配构件组装构件更新单元测试单元测试集成、系统测试集成、系统测试回归测试回归测试SEI.PKU内容构件与构件软件测试的目的与过程测试与设计单元测试集成测试相关工具SEI.PKU软件测试的对象结构化软件测试面向对象软件测试构件软件测试50年代60年代70年代80年代90年代21世纪20世纪SEI.PKU软件测试的目的软件用户软件开发者暴露软件中隐藏的错误和缺陷验证软件正确地实现用户需求SEI.PKU构件软件测试的目的9是否按照需求规约构造高质量的构件?9是否按照构件标准和构件模型构造构件?9是否选择并部署适合系统的可复用构件?9是否在系统中正确地复用构件?9是否正确地修改或升级构件?构件开发者构件复用者SEI.PKU构件与构件软件测试相关的人员构件开发者构件复用者第三方SEI.PKU构件及构件软件测试的问题异构性实现语言、操作系统、体系结构多种多样源代码不可得性以二进制形式交付的构件无源代码演化性构件升级、增减不确定一个输入序列可能会有不同的执行路径,产生不同的结果测试充分性准则SEI.PKU构件软件测试过程易测试性设计单元测试系统测试提高测试效率、降低测试难度发现构件本身的错误发现构件与应用软件交互的错误测试整个系统的功能与性能集成测试SEI.PKU内容构件与构件软件测试的目的与过程测试与设计单元测试集成测试相关工具SEI.PKU构件实例银行帐户ComponentinterfacepublicinterfaceBankingAccountextendsEJBObject{publicintvalidatePIN(Stringpin)throwsRemoteException;publicfloatgetBalance(intbankaccount)throwsRemoteException;publicintdeposit(floatamount)throwsRemoteException;publicintwithdraws(floatamount)throwsRemoteException;publicinttransfer(intfromBankingAccount,inttoBankingAccount,floatamount)throwsRemoteException;}SEI.PKU易测试性设计在集成电路上增加额外的引脚探测内部信息追踪状态BIT构件为构件增加测试接口将测试作为构件方法写入源代码设置正常模式与测试/维护模式SEI.PKU测试驱动的软件开发本质:换个角度看问题开发者——调用者功能+接口优点确定构件边界降低耦合度随时更新的文档SEI.PKU内容构件与构件软件测试的目的与过程测试与设计单元测试任务与技术不同人员的目标集成测试相关工具SEI.PKU构件定制泛化定制降低约束级别特殊定制加强约束重建定制改变输入域ComponentinterfacepublicinterfaceBankingAccountextendsEJBObject{publicintvalidatePIN(Stringpin)throwsRemoteException;publicfloatgetBalance(intbankaccount)throwsRemoteException;publicintdeposit(floatamount)throwsRemoteException;publicintwithdraws(floatamount)throwsRemoteException;publicinttransfer(intfromBankingAccount,inttoBankingAccount,floatamount)throwsRemoteException;}SEI.PKU单元测试的任务使用白盒测试确认构件的内部逻辑、数据和程序结构使用黑盒测试确认构件的外部功能、行为和接口度量其性能报告测试结果、程序错误和测试覆盖率SEI.PKU白盒测试技术视角构件内部程序结构、逻辑技术面向路径的测试数据流测试要求更加严格地测试SEI.PKU黑盒测试技术视角构件外部构件特征、行为基于构件规约构件接口限制和依赖关系构件验证历史关联构件开发者和复用者技术随机测试等价类划分边界值测试接口变异测试SEI.PKU变异测试原理使用变异算子对被测程序做微小的合乎语法的变动,例如将运算符“”用“=”替换,产生大量的新程序,每个新程序称为一个变异体根据已有的测试数据,运行变异体比较变异体和原程序的运行结果不同:该测试数据将该变异体杀死相同:该变异体是活的SEI.PKU变异测试原理(续)导致变异体不能被杀死的原因有两个:测试数据集还不够充分,通过扩充测试数据集便能将该变异体杀死该变异体在功能上等价于原程序——等价变异体杀死变异体的过程一直执行到杀死所有应该杀死的变异体或者变异充分度已经达到预期的要求变异体充分度=D/(M—E)D:已经被杀死的变异体个数M:变异体总数E:与原来程序等价的变异体个数变异充分度即为已经被杀死的变异体个数与应该被杀死的变异体的个数的比值SEI.PKU变异测试的特点优点排错能力强方便灵活,可以有选择地使用变异算子的一个子集来完成不同层次的测试分析既可以用来揭示软件中的缺陷,又可以用来衡量测试用例集的揭错能力,评估测试的充分性缺点需要大量的计算机资源来产生、存储、运行变异体,比较运行结果,分析测试充分性判断一个活的变异体是否等价于原来的程序是一个不可判定的问题,必须人工进行SEI.PKU内容构件与构件软件测试的目的与过程测试与设计单元测试任务与技术不同人员的目标集成测试相关工具SEI.PKU构件开发者测试目标尽可能揭示构件错误确认构件接口、功能、行为和性能是否满足规约在平台和操作系统环境下检查构件复用和部署SEI.PKU测试内容黑盒测试检查构件的功能和行为是否符合构件规约白盒测试揭示程序逻辑和结构、数据对象、数据结构的内部错误使用测试通过接口检查构件的功能和行为性能测试评估构件性能时间、资源部署和安装测试检查构件部署机制是否符合给定的构件模型,安装是否方便SEI.PKU构件复用者测试目标确认构件的功能和性能是否满足系统需求在特定的操作平台和环境中验证构件的使用和部署测试完全复用的构件测试修改和升级的构件SEI.PKU测试完全复用的构件部署测试检查构件是否能在系统环境下成功部署定制测试检查构件是否能按系统需求正确定制使用测试检查参数和功能调用序列黑盒测试确认构件功能和行为性能评估检查性能是否符合系统需求SEI.PKU测试修改和升级的构件复用部分的测试测试复用部分(如前)修改部分的黑盒测试功能和行为修改部分的白盒测试程序逻辑和结构错误组合测试复用部分+修改部分性能评估SEI.PKU构件单元测试的难点难以生成测试驱动和测试桩构件规约开发者和测试者的经验•往往需要更严格的测试SEI.PKU内容构件与构件软件测试的目的与过程测试与设计单元测试集成测试相关工具SEI.PKU集成测试内容构件之间的通信和交互问题构件集成的顺序如何测试新集成的构件SEI.PKU是否选择了合适的构件?三个关键问题构件是否符合系统需求?构件质量是否足够高?构件对系统其它部分是否有影响?★★★★★SEI.PKU构件的适应性修改包装对构件的包装不能改变使用该构件的程序的核心功能SEI.PKU功能分解大爆炸自顶向下自底向上三明治SEI.PKU调用图自顶向下自底向上邻近基于路径SEI.PKU回归测试人员构件开发者构件复用者内容确定变化构件规约、接口、设计、程序代码分析变化影响构件功能、接口、结构、行为选择可复用的测试用例增加新的测试用例SEI.PKU测试报告构件接口测试用例期望结果实际结果错误等级11111110★★★00000000……-10001★★……10011……transferwithdrawsvalidatePIN银行帐户SEI.PKU测试充分性准则目前没有实用的构件测试准则沿用传统软件测试的某些准则白盒测试根据实际情况提出自己的准则项目进度SEI.PKU内容构件与构件软件测试的目的与过程测试与设计单元测试集成测试相关工具SEI.PKU现有测试工具测试工具类型开发商工具名称问题管理工具RationalInc.MicrosoftCorp.ImbusAGClearQust,ClearDDTSPVCSTrackerImbusFehlerdatenbank测试信息管理工具RautionalInc.MercuryInteractiveTestManagerTestDirectory测试集管理工具EvalidRationalInc.SUNJavaTest,JavaHarnessTestSuiterTestFactoryJavaTest,JavaHarness白盒测试工具McCabe&AssociatesIBMMcCabeIQ2IBMCOBOLUnitTesterIBMATCCoverageAssistantSourceAuditAssistantDistillationAssistantUnitTestAssistant测试执行工具OCSystemsSoftbridgeAutoTesterRationalInc.SQAMercuryInteractiveSterlingSoftwareCompuwareSequeSoftwareRSWSoftwareInc.CyranoGmbhAprobATF/TestWrightAutoTesterVisualTestRobotWinRunnerVisionTestProQARunSilkTeste-TestCyranoRobotSEI.PKU现有测试工具(续)测试工具类型开发商工具名称代码覆盖分析工具CaseConsultCorp.OCSystemsIPLSoftwareProductGroupATTOLTestwareSACompuwareNuMegaSoftwareResearchRationalIncSUNParaSoftSoftwareAutomationInc.Analyzer,AnalyzerJavaAprobCantata/Cantata++