课件05-嵌入式软件测试_第1页
课件05-嵌入式软件测试_第2页
课件05-嵌入式软件测试_第3页
课件05-嵌入式软件测试_第4页
课件05-嵌入式软件测试_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

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

文档简介

软件单元与集成测试嵌入式软件测试

第五部分软件单元与集成测试单元测试集成测试单元与集成测试环境单元测试—重要性基于软件问题报告的分析结果在嵌入式软件开发中,没有特定的缺陷类型占据主导地位需求问题及需求相关问题是主要缺陷原因(36%)归结于缺乏系统化单元测试的问题是第二大原因(22%)单元测试—对象软件的独立单元例子结构化程序设计语言中的函数或子程序面向对象语言中的类4GL的菜单或画面单元测试—特点实现-串行或并行测试方法-白盒为主单元测试—测试准备要求的文档可提交软件设计规格说明、软件接口设计规格说明源程序符合规范要求并已无错误地通过编译或汇编被测软件单元已纳入配置管理中具备了规定的单元测试环境和测试工具单元测试—通过准则命名符合规则控制流程正确变量使用无差错达到质量度量指标功能与设计说明一致性能达到软件设计指标覆盖测试达到规定的覆盖率对发现的问题已进行修改并通过回归测试单元测试—测试策略测试内容静态测试动态测试原则静态和动态测试互补,不能相互替代建议静态测试在动态测试前完成,实践中,部分动态测试可与静态测试并行单元测试—静态测试全面的静态分析选择性代码检查补充代码走查单元测试—静态测试度量收集并分析每小时审查的代码行数(LOC)每千行代码(KLOC)生成的变更请求数(CR)每小时生成的变更请求数(CR)代码审查过程花费的总时间单元测试—动态测试黑盒测试白盒测试基于数据结构的测试单元测试—动态测试被测单元单元接口局部数据结构边界条件独立执行路径错误处理的路径测试用例单元测试—接口测试调用被测单元时的实际参数与该单元的形式参数的一致性个数、属性、量纲、顺序被测单元调用子模块时,传递的实际参数与子模块的形式参数的一致性个数、属性、量纲、顺序是否修改了只作为输入值的形式参数调用其他模块时,检查其可用性和处理结果单元测试—接口测试被测单元调用内部函数时,使用参数的正确性个数、属性、量纲、顺序被测单元使用全局变量/数据的合理性是否与定义一致在单元有多个入口的情况下,是否引用了与当前入口无关的参数常数是否当作变量来传递单元测试—接口测试文件属性的正确性OPEN/CLOSE语句的正确性文件是否先打开后使用文件结束条件的判断和处理的正确性规定的I/O格式说明与I/O语句是否匹配缓冲区容量与记录长度是否匹配输入/输出错误是否检查并作了处理以及处理的正确性单元测试—接口测试输出时的文本错误内容、格式、长度等使用外部资源时,检查其可用性并及时释放资源内存、文件、硬盘、端口等单元测试—局部数据结构不正确或不一致的数据类型说明错误的变量名或函数名称变量名或函数名拼写错或缩写错误定义的变量从来没有被使用,就很可能使用了错误的变量名使用了外部变量或函数变量没有初始化或未赋值就使用初始值或缺省值错误单元测试—局部数据结构错误的类型转换不一致的数据类型数组越界非法指针下溢、上溢或是地址错误全局数据对软件单元的影响单元测试—边界条件合法数据和非法数据的正确处理边界内点和边界外点的正确处理例如测试处理n维数组的第m个元素测试循环执行到最后一次循环体测试取最大值或最小值测试数据流、控制流中刚好等于、大于或小于确定的比较值单元测试—独立执行路径独立路径是指在程序中至少引进一个新的处理语句集合或一个新条件的任一路径。在程序的控制流图中,一条独立路径是至少包含有一条在其他路径中从未有过的边的路径通过对控制流圈复杂性的分析,可导出基本的、可执行的独立路径集合单元测试—独立执行路径不可达或冗余代码错误的算法混合型计算的优先级错误精度错误比较运算错误赋值错误表达式的不正确符号表示>、>=;=、==、!=循环错误单元测试—错误处理路径错误自动检测机制资源使用前后其他模块使用前后错误处理策略抛出错误通知用户进行记录错误处理的有效性在系统干预前处理报告和记录的错误真实详细单元测试—动态测试步骤步骤1-冒烟测试步骤2-肯定测试(Positivetesting)步骤3-否定测试(Negativetesting)步骤4-专用测试步骤5-覆盖测试(Coveragetesting)步骤6-覆盖率评估步骤7-覆盖率完善与实现单元测试—①冒烟测试目标用最简单的方法执行被测单元考核最基本的能力方法基于规格说明的测试等价类划分单元测试—②肯定测试目标走查相关规格说明每个测试用例测试一或多个设计陈述覆盖全部设计陈述方法基于规格说明的测试等价类划分因果图状态转换单元测试—③否定测试目标确认软件没有做规格说明未指定事情方法边界值分析内部边界值测试错误猜测单元测试—④专用测试目标验证性能需求验证安全性需求验证保密性需求方法基于规格说明的测试单元测试—⑤覆盖测试目标验证程序控制流的正确性验证程序数据流的正确性方法语句覆盖分支覆盖条件覆盖数据流覆盖单元测试—⑥覆盖率评估目标测量覆盖率确定覆盖率目标是否实现方法覆盖率度量覆盖率分析单元测试—⑦覆盖率完善目标找出无法执行测试的路径或条件发现不可达或冗余代码补充测试并达到覆盖率目标方法覆盖率分析控制流覆盖数据流覆盖单元测试—实例1一个实数平方根的计算函数设计规格说明输入—实数输出—实数当输入0或大于0的值时,返回输入值的正数平方根当输入小于0的值时,显示错误信息"Squarerooterror-negativeinput"并返回0使用库函数Print_Line显示错误信息实例1—分析3个陈述2个约束2个用例可实现覆盖实例1—基于规格说明设计设计结果用例1输入4;返回2执行了第1个陈述用例2输入-10,返回0,用Print_Line输出"Squarerooterror-illegalnegativeinput"执行了第2和3个陈述实例1—等价类划分设计分析2个输入等价类2个输出等价类2个用例可实现覆盖输入划分输出划分I<0a≥0II≤0bError实例1—等价类划分设计设计结果用例1输入4;返回2执行了输入等价类I和输出等价类a用例2输入-10,返回0,,用Print_Line输出"Squarerooterror-illegalnegativeinput"执行了输入等价类II和输出等价类b实例1—边界值分析设计分析输入域有3个边界线输出域的边界线受输入域影响5个用例可实现覆盖输入域边界线(i)(ii)-0+|-----------------|------------------|12345

实例1—边界值分析设计用例1输入最大的负数,返回0,用Print_Line输出"Squarerooterror-illegalnegativeinput“执行了等价类I的下边界用例2输入仅比0小的数,返回0,用Print_Line输出"Squarerooterror-illegalnegativeinput“执行了等价类I的上边界实例1—边界值分析设计用例3输入0,返回0执行了等价类I的上边界外点,等价类II的下边界,等价类a的下边界用例4输入仅比0大的数,返回输入值的正数平方根执行了等价类II下边界内点实例1—边界值分析设计用例5输入最大的正数,返回输入值的正数平方根执行了等价类II上边界内点,等价类a的上边界实例1—分支覆盖设计分析根据规格说明,通常会有2个分支2个用例可实现覆盖实例1—分支覆盖设计设计结果用例1输入4;返回2执行了有效输入处理分支用例2输入-10,返回0,用Print_Line输出"Squarerooterror-illegalnegativeinput"执行了无效输入处理分支实例1—实现方式1IFinput<0THEN CALLPrint_Line"Squarerooterror-negativeinput“ RETURN0ELSE Usemathsco-processortocalculatetheanswer RETURNtheanswerEND_IF实例1—实现方式2IFinput<0THEN CALLPrint_Line"Squarerooterror-negativeinput“ RETURN0 ELSE IFinput=0THEN RETURN0 ELSE Usemathsco-processortocalculatetheanswer RETURNtheanswer END_IFEND_IF实例1—实现方式3Usemathsco-processortocalculatetheanswerExamineco-processorstatusregistersIFstatus=errorTHEN CALLPrint_Line"Squarerooterror-negativeinput“ RETURN0ELSE RETURNtheanswerEND_IF实例1—实现方式4IFinput<0THEN CALLPrint_Line"Squarerooterror-negativeinput“ RETURN0ELSE_IFinput=0THEN RETURN0ELSE Calculatefirstapproximation LOOP Calculateerror EXIT_LOOPWHENerror<desiredaccuracy Adjustapproximation END_LOOP RETURNtheanswerEND_IF实例1—条件覆盖设计分析假定用实现方式4的解决方案假定最多迭代10次调整实现方案:EXIT_LOOPWHEN(error<desiredaccuracy)or(iterations=10)

:实例1—条件覆盖设计设计结果(1/2)用例110次迭代,所有迭代:error>desiredaccuracy用例22次迭代,第1次迭代:error>=desiredaccuracy,第2次迭代:error<desiredaccuracy实例1—条件覆盖设计设计结果(2/2)其他用例2个条件都为true或false实例1—数据流覆盖设计项目定义使用1InputtoroutineBythemathsco-processor2Co-processorstatusTestforstatus=error3ErrormessageByPrint_Line

4RETURN0Bythecallingunit5Answerbyco-processorRETURNtheanswer6RETURNtheanswerBythecallingunit实例1—数据流覆盖设计设计结果用例1输入4;返回2执行了定义-使用对1,2,5,6用例2输入-10,返回0,用Print_Line输出"Squarerooterror-illegalnegativeinput"执行了定义-使用对1,2,3,4实例1—内部边界值分析分析假定用实现方式4的解决方案:CalculatefirstapproximationLOOPCalculateerrorEXIT_LOOPWHENerror<desiredaccuracyAdjustapproximationEND_LOOPRETURNtheanswer:实例1—内部边界值分析设计结果用例1误差仅大于desiredaccuracy用例2误差等于desiredaccuracy用例3误差仅小于desiredaccuracy单元测试—困惑单元测试工作量大,发现问题少单元测试—原则在可能且合理的情况下,充分测试边界条件包括大量负载情况单元测试—原则不要为明显没有缺陷的代码编写测试用例例如基于代码结构,完全出于实现覆盖目标的测试单元测试—原则代码库1代码库2识别缺陷修复缺陷修补代码库

1测试代码库

1新的隐藏缺陷!!!相依关系单元测试—原则代码库1代码库2识别缺陷修复缺陷所有测试通过后,修补所有代码库测试所有代码库相依关系集成测试—对象软件部件的组装过程;组装得到的软件部件。集成测试—目的检验软件单元和软件部件之间的接口关系验证软件部件是否符合设计要求集成测试—图示Component#1OperationsandFunctionswithI/OinputinterfaceoperationComponent#2OperationsandFunctionswithI/Ooutputoperation集成测试—技术要求(1/3)应对软件部件进行必要的静态测试,并先于动态测试;软件部件的每个特性应被至少一个正常的测试用例和一个被认可的异常测试用例覆盖;测试用例的输入应至少包括有效等价类值、无效等价类值和边界数据值;应采用增量法,测试组装新的软件部件;应逐项测试软件设计文档规定的软件部件的功能、性能等特性;集成测试—技术要求(2/3)应测试软件部件之间、软件部件和硬件之间的所有接口;应测试软件单元和软件部件之间的所有调用,达到100%的测试覆盖率;应测试软件部件的输出数据及其格式;应测试运行条件(如数据结构、输入/输出通道容量、内存空间、调用频率等)在边界状态下,进而在人为设定的状态下,软件部件的功能和性能;集成测试—技术要求(3/3)应按设计文档要求,对软件部件的功能、性能进行强度测试;对安全性关键的软件部件,应对其进行安全性分析,明确每一个危险状态和导致危险的可能原因,并对此进行针对性的测试。可根据软件测试任务书(合同或项目计划)及软件部件的重要性、安全性关键等级等要求对上述内容进行裁剪。集成测试—进入条件具有软件需求规格说明(包含接口需求规格说明)、软件设计文档(含接口设计文档)、软件单元测试报告、被测软件部件的源程序和可执行代码;待测试的软件单元和部件已纳入软件受控库;待集成的软件单元已通过单元测试;软件部件源代码通过编译或汇编;具备了满足要求的集成测试环境和测试工具。集成测试—焦点部件/模块间的接口测试全局数据结构测试软件功能模块的功能测试性能测试边界和人为条件下的性能集成测试—重点寻找的缺陷软件系统结构的设计和构造在子系统层次上被集成的功能或操作组件/模块之间的接口和相互作用资源集成环境集成集成测试—因交互问题快速单元(独立)慢下来(组合)误差放大(如,舍入)由于协调问题带来的接口错误对于实时系统同步问题(死锁、活锁、资源竞争)集成测试—动态测试内容全局数据结构测试全局数据结构的完整性适合性方面对软件设计文档分配给软件部件的每一项功能逐项进行测试。必要时,测试组装成的中间功能模块的功能集成测试—动态测试内容准确性方面对软件部件中具有准确性要求的功能和精度要求的项(如,数据处理精度、时间控制精度、时间测量精度)进行测试。集成测试—动态测试内容互操作性方面(1/2)测试两种接口:所加入的软件单元和部件与已存在的软件单元和部件之间的接口;软件部件与支持其运行的其他软件部件、例行程序或硬件设备件的接口。对接口的输入和输出数据的格式、内容、传递方式、接口协议等进行测试。集成测试—动态测试内容互操作性方面(2/2)测试软件部件的控制信息,如,信号或中断的来源,信号或中断的目的,信号或中断的优先级,信号或中断的表示格式或表示值,信号或中断的最小、最大和平均频率,响应方式和响应时间等。集成测试—动态测试内容容错性方面测试软件部件对错误输入、错误中断、漏中断等情况的容错能力,并考虑通过仿真平台或硬件测试设备形成一些人为条件,测试软件部件的功能、性能的降级情况。集成测试—动态测试内容时间特性方面测试软件部件的运行时间,算法的最长路径下的计算时间。必要时,可考虑测试组装成的中间功能部件的运行时间。资源利用性方面测试软件部件运行占用的内存空间。必要时,可考虑测试组装成的中间功能部件运行占用的内存空间。集成测试—结束条件(1/2)已按要求完成了规定的测试任务;实际测试过程遵循了原定的软件部件测试计划和软件部件测试说明;详细、客观地记录了测试过程和测试中发现的所有问题;测试文档齐全、符合规范;测试工作通过了软件部件测试评审;测试的全过程自始至终在控制下进行;集成测试—结束条件(2/2)测试中的异常有合理解释或正确有效的处理;全部的测试文档、测试用例、测试软件、被测软件部件和评审结果已纳入配置管理。集成测试—策略非渐增式集成(大爆炸集成)渐增式集成自顶向下集成自底向上集成多层结构式测试(三明治式测试)高频集成集成策略—实例ABCDGFE层I层II层III集成策略—大爆炸集成图示Test

ATestA,B,C,D,E,F,GABCDGFE层I层II层IIITest

BTest

CTest

GTest

ETest

FTest

D集成策略—大爆炸集成前提被测部件在通过部件范围的测试后,只有少量单元加入或修改被测部件较小并具有良好可测试性,每个单元都经过充分测试被测部件中的单元紧密连接,无法分别测试测试不考虑单元之间的相依性或风险集成策略—大爆炸集成缺点调试困难大量废弃代码关键的与一般的外围模块没有区分直到开发周期的很晚时间用户才能看到产品集成失败带来的风险较大集成策略—自顶向下集成首先开发和测试在最高控制层的单元,下层单元用桩实现继续在每一层按宽度或深度优先进行,用真正的单元代替桩,并建立更下一层桩每一个单元集成进来的时候都要进行测试用回归测试保证没有引入新错误以这种方式继续,直到被测部件中的所有桩已经被真正的实现替代并得到了测试集成策略—广度优先TestATestA,B,C,DTestA,B,C,D,E,F,GABCDGFE层I层II层IIITestBTestCTestDStubs1TestETestFTestGStubs2集成策略—深度优先TestATestA,B,E,FTestA,B,C,D,E,F,GABCDGFE层I层II层IIITestA,B,E,F,CTestA,B,E,F,C,DTestA,BStubs1Stubs2Stubs3Stubs4TestBTestETestFTestCTestDTestG集成策略—自顶向下集成优点可以依据部件的功能需求开始测试不需要开发驱动器缺点需要建立和维护大量的桩,用桩模拟所有的情况有时是困难的底层单元的变化会影响上层已集成的单元集成策略—自底向上集成第一阶段对底层模块编码,并使用驱动模块对其测试;底层模块组合成能够实现软件特定子功能的簇,写驱动模块对簇进行测试;移走驱动模块,沿着程序结构的层次向上对簇进行组合,使用驱动模块对其测试;以这种方式继续集成直到整个部件使用真实的主控制模块进行测试。集成策略—自底向上集成TestFTestETestGTestCTestCluster2(D,G)TestCluster1(B,E,F)TestA,B,C,D,E,F,GABCDGFE层I层II层IIITestBTestDTestADriverA1Driver

A2集成策略—自底向上集成优点不需要桩模块可并行测试缺点需要驱动模块部件中处于顶层的重要簇或功能可能在较晚才得到测试,如UI设计上问题往往到最终测试才能发现集成策略—自底向上集成场景面向对象系统实时系统有严格性能要求的系统集成策略—多层结构式测试自顶向下策略与自底向上策略相结合以三层视角看待被测部件处于中间的目标层目标层之上的层目标层之下的层测试在目标层会合集成策略—多层结构式测试TestETestD,GTestB,E,FTestFTestGTestA底层测试TestA,B,C,DTestA,B,C,D,E,F,GABCDGFE层I层II层III顶层测试TestBTestDTestCDriverA1DriverA2Stubs1TestA,B,C,D集成策略—多层结构式测试当部件结构多于3层时,如何选择目标层?探索法尝试使桩和驱动器数量最小化集成策略—多层结构式测试优点顶层和底层测试可以并行进行缺点在没有完成集成之前无法测试完整的部件在没有完成集成之前无法充分测试接口需要同时使用桩和驱动器集成策略—改进多层结构式并行测试:用驱动器和桩测试中间层用桩测试顶层用驱动器测试底层并行测试:顶层访问中间层(用顶层单元代替驱动器)底层被中间层访问(用底层单元代替桩)集成策略—改进多层结构式TestFTestETestBTestGTestDTestATestCTestB,E,FTestD,GTestA,CTestA,B,C,D,E,F,GABCDGFE层I层II层III集成策略—高频集成特征适用于时间紧且复杂度高的软件自底向上/自顶向下的集成方式每日构建与冒烟测试(DailyBuildandSmokeTesting)冒烟测试从头到尾检测整个系统(当前状态下)。它不一定必须是穷举的,但是应该能够暴露主要问题。冒烟测试应该是足够充分的,如果构件通过了冒烟测试,就可以假定该构件已经足够稳定,可以继续进行更加彻底的测试。-McConnel,S.集成策略—高频集成前提可得到一个稳定的增量大多数有意义的增量可在频率间隔内产生测试包和代码并行开发并保持当前有效必须进行自动化测试必须使用配置管理工具集成策略—高频集成

温馨提示

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

评论

0/150

提交评论