8软件工程第九章大同大学-3

上传人:野鹰 文档编号:2870665 上传时间:2017-07-28 格式:PPT 页数:60 大小:417.50KB
返回 下载 相关 举报
8软件工程第九章大同大学-3_第1页
第1页 / 共60页
8软件工程第九章大同大学-3_第2页
第2页 / 共60页
8软件工程第九章大同大学-3_第3页
第3页 / 共60页
8软件工程第九章大同大学-3_第4页
第4页 / 共60页
8软件工程第九章大同大学-3_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《8软件工程第九章大同大学-3》由会员分享,可在线阅读,更多相关《8软件工程第九章大同大学-3(60页珍藏版)》请在金锄头文库上搜索。

1、软件的测试与纠错,测试(testing)的目的与任务 目的:发现程序的错误 任务:通过执行程序,暴露潜在的错误 纠错(debugging)的目的与任务 目的:定位和纠正错误 任务:消除软件故障,保证程序的可靠运行,软件纠错策略,软件的纠错,1、试凑法设置可疑区,边试边瞧。例如:在可疑区域插入打印语句。2、跟踪法让带错程序“分步执行”,跟踪纠错语句。例如:for i=1 to 10; 将10误写成-10。ix=iy/(k/n); 在该语句前有: k=5,n=6; 出现错误“整数上溢” 从出错处逐句返回探寻错误的根由,称为回溯或反向跟踪。,3、归纳法从个别到整体的推理过程,从测试结果发现的错误入手

2、,分析它们之间的联系查找错误。是一种从特殊推断一般的系统化思考方法。,收集有关数据,组织数据,研究数据间的关系,纠正错误,能,能,不能,不能,列出所有已知的测试用例和程序执行结果,常用的构造线索的技术是“分类法”,分析线索之间的关系,找出矛盾,设计出错原因的假设,归纳排错法步骤,将假设与原始线索或数据进行比较,能否解释现象,证明假设。,提出假设,证明假设,4、演绎法从一般到特殊的推理过程,演绎法是一种从一般原理出发,经过排除和精化的过程,推导出结论的方法。也称“病因排除法”,列举可能的病因,排除不适当的病因,对保留的假设继续推断,纠正错误,收集更多的数据,没有剩余,不能,能,有剩余,演绎法排错

3、的步骤,有余病因,证明假设,在推理法(归纳法和演绎法)纠错中,都包含了一个称为“测试纠错”的步骤。 测试纠错就是专为纠错而安排的测试。与前面提到过的一般测试不同: 一般测试力求覆盖更多的“路径”,着眼于“面”,目的是发现错误。 测试纠错只需覆盖少数可以的“路径”,着眼于“线”和“点”,目的是找出病根。,测试纠错与一般测试的区别,1、插入打印语句例如:打印有关变量值,打印中间结果,通过打印显示程序执行路径等。2、设置断点 在程序可疑区设置断点,观察变量内容和分析程序运行情况。例如:BASIC语言中的DISPLAY,常用的纠错技术,常用的纠错技术,3、掩蔽部分程序 把不需要检查的程序掩蔽起来。 例

4、如:使用注释符号;在要掩蔽的程序段置入一个常假的选择结构中,使它总没有机会执行;用GOTO语句跳跃掩蔽的程序段。4、蛮力纠错技术 打印出内存可疑区或输出文件的全部内容,供纠错者分析使用。纠错举例:P215-220,纠错技术说明,(1)任何程序都需要在纠错后进行回归测试,用以证明程序确已改正了原有的错误,且没有引入新的错误。(2)在对复杂的程序修改前,先复制好一个副本,以便万一出现越改越乱,一发不可收拾的局面时,可以返回到修改前的程序。(3)纠错后,切记把用于纠错的辅助语句删除掉。 总之,纠错要“提倡多思,切勿紧张;除错务尽,步步为营”。,多模块程序的测试策略,软件测试策略主要考虑,如何把设计测

5、试用例的技术组织成一个系统的、有计划的测试步骤。从模块测试开始,一级一级向外扩展,直至整个系统测试完毕。在测试的各个阶段应选择适宜的白盒测试和黑盒测试方法,由软件开发人员和一个独立的测试小组(对大项目而言)共同完成测试任务。测试策略应包含测试规划、测试用例设计、测试实施和测试结果收集评估等。其中测试规划包括:测试的步骤、工作量、进度和资源等。,多模块程序的测试策略,测试的层次性 (4个层次)单元(模块)测试(unit testing)综合(集成)测试(integration testing)确认测试(validation testing)系统测试(system testing)确认测试和系统测

6、试属于高级测试。,层次测试的信息流,单元测试,单元测试,单元测试,被测模块,被测模块,集成测试,软件设计信息,已测试的模块,确认测试,已集成的模块,软件需求信息,测试步骤及策略 所有测试过程都应采用综合测试策略:即先作静态分析,再作动态测试,并事先制订测试计划。测试过程通常可分4步进行:,编码阶段,测试阶段,验收阶段,被测模块,测试报告,测试报告,测试报告,测试报告,测试报告,测试报告,从层次测试的角度,对程序错误的分类,1、语法错误编译是发现语法错误的最好工具。 2、结构性错误包括结构异常、结构不全和结构多余等错误。 举例:见下图,从层次测试的角度,对程序错误的分类,Read y,X=x+y

7、,X=y,Y0,开始,该路径没有执行的机会,多余结构:,X0,T,F,F,T,从层次测试的角度,对程序错误的分类,从层次测试的角度,对程序错误的分类,3、功能性错误 程序功能与用户需求不相符合引起的错误。 产生的原因: 或许是分析阶段定义的需求说明比较含糊; 或许是设计阶段对软件需求理解有错或设计考虑不周; 当开发过程中有过返工,多次修改过需求说明或软件设计时,更容易出现设计走样、偏离用户需求的错误。,从层次测试的角度,对程序错误的分类,4、接口错误 多模块程序之间发生的错误。 主要表现: 调用子程序或函数时,实际参数的类型、个数及顺序与形式参数不一致; 对全局变量引用不当; 相关模块对全局性

8、数据的说明互相矛盾等。接口错误是集成测试的重点。,程序错误的分类小结,(1)上述四类错误,可以通过测试来发现,用纠错来改正。(2)除上述4类错误外,还有一类系统错误。 系统错误与被测程序赖以运行的计算机系统有关,它虽然不属于被测程序的错误,却能影响程序的测试与运行。 系统错误分为系统程序本身错误和对系统使用不当错误。,单元测试,目的 通过模块测试,使其代码达到模块说明书的需求。 任务 (1) 对模块代码进行编译,发现并纠正其语法错误;(2) 进行静态分析,验证模块结构及其内部调用序列是否正确;(3) 确定模块的测试策略,并据此设计一组测试用例和必要的测试软件;(4) 用选定的测试用例对模块进行

9、测试,直至满足测试终止标准为止;(5) 测试的重点应放在模块内部的重要执行路径、出错处理路径和局部数据结构,也要重视模块的对外接口。(6) 编制单元测试报告。,单元测试的技术,单元测试的对象是软件设计的最小单位模块。 单元测试的依据是详细设计描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。 单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试。,单元测试的内容,单元测试内容包括:1) 模块接口测试;2) 模块局部数据结构测试;3) 模块边界条件测试;4) 模块中所有独立执行通路测试;5) 模块的各条错误处理通路测试。 模块接口测试是单元测试的基础。只有在

10、数据能正确流入、流出模块的前提下,其他测试才有意义。,测试接口考虑的因素,输入的实际参数与形式参数的个数是否相同;输入的实际参数与形式参数的属性是否匹配;输入的实际参数与形式参数的量纲是否一致;调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同;调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配;调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致;调用预定义函数时所用参数的个数、属性和次序是否正确;是否存在与当前入口点无关的参数引用;是否修改了只读型参数;对全程变量的定义各模块是否一致;是否把某些约束作为参数传递。,测试接口考虑的因素(续),如果模块内包括外部输入

11、输出,还应该考虑下列因素: 文件属性是否正确;OPEN/CLOSE语句是否正确;格式说明与输入输出语句是否匹配;缓冲区大小与记录长度是否匹配;文件使用前是否已经打开;是否处理了文件尾;是否处理了输入/输出错误;输出信息中是否有文字性的错误。,单元测试的内容(续),局部数据结构往往是错误的根源,应仔细设计测试用例,力求发现下面几类错误: 不合适或不相容的类型说明; 变量无初值; 变量初始化或省缺值有错;不正确的变量名(拚错或不正确地截断); 出现上溢、下溢和地址异常。,单元测试的内容(续),在模块中应对每一条独立执行路径进行测试,单元测试的基本任务是保证模块中每条语句至少执行一次。 此时设计测试

12、用例是为了发现因错误计算、不正确的比较和不适当的控制流造成的错误。 此时基本路径测试和循环测试是最常用且最有效的测试技术。,单元测试的内容(续),计算中常见的错误包括:误解或用错了算符优先级;混合类型运算;变量初值错;精度不够;表达式符号错。,单元测试的内容(续),比较判断与控制流常常紧密相关,测试用例还应致力于发现下列错误:不同数据类型的对象之间进行比较;错误地使用逻辑运算符或优先级;因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等;比较运算或变量出错;循环终止条件不合适或不可能出现;迭代发散时不能退出;错误地修改了循环变量。,单元测试的内容(续),一个好的设计应能预见各种出错

13、条件,并预设各种错误处理通路,错误处理通路同样需要认真测试,测试应着重检查下列问题:输出的错误信息难以理解;记录的错误与实际遇到的错误不相符;在程序自定义的错误处理段运行之前,系统已介入;异常处理不当;错误陈述中未能提供足够的定位错误信息。,单元测试实施步骤,实施步骤:1、编译2、静态分析器检查3、代码评审4、动态测试测试驱动模块测试桩模块 在确定测试用例的同时,应给出对应的期望结果。 应为测试模块开发一个驱动模块(driver)和(或)若干个桩模块(stub)。,辅助模块概念,考虑到被测模块与其它模块的联系,因此测试时需要使用两类辅助模块来模拟其他模块。,驱动模块(driver) 模拟主程序

14、功能,用于向被测模块传递数据,接收、打印从被测模块返回的数据。,桩模块(stub) 又称为假模块,用于模拟那些由被测模块所调用的下属模块功能。,一般,驱动模块比桩模块容易设计,但都是额外开销。测试方法以白盒法为主。,集成(组装)测试,集成测试的原因: 1、单元测试中使用了测试软件(驱动模块和桩模块),不能与所替代的模块完全等效。 2、多模块个程序之间,可能有比较复杂的接口。有些全局性数据在引用中可能出现问题。 3、有些在单个模块中可以允许的误差,组装后的积累误差可能达到不能容忍的地步,或者模块的分功能正常,组装后也可能产生不了预期的综合功能。,集成(组装)测试,目的 将经过单元测试的模块逐步组装成具有良好一致性的完整的程序。 任务 制订集成测试实施策略。 确定集成测试的实施步骤,设计测试用例。 逐一地添加模块,进行测试。,集成(组装)测试步骤,自顶向下测试 先广后深实施步骤 先深后广实施步骤 由底向上测试 混合方式测试(sandwich testing) 对上层模块采取自顶向下测试 对关键模块或子系统采取由底向上测试,自顶而下增值,M1,M4,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号