文档介绍:防不胜防的软件错误——例: 1963 年, 美国, 飞往火星的火箭爆炸, 损失$ 10 million. 原因: FORTRAN 循环 DO 5 I = 1, 3 误写为 DO 5 I = 1 . 3 第六章实现测试( Testing) 软件测试是保证软件质量的关键步骤, 是对软件规格说明、设计和编码的最后复审, 其工件量约占总工作量 40% 以上. (对于人命关天的情况,测试相当于其它部分总成本的 3 — 5倍)。§1. 基本概念 1、定义:测试是为了发现程序中的错误而执行程序的过程。注意: ①只能尽可能查错,不能证明程序中没有错; ②测试员与程序员不应是同一个人。 2、黑盒和白盒测试?黑盒测试( black-box , or closed-box testing): 功能测试 ( 程序接口的测试, 不关心内部结构, I->O, 需求规格说明书) Make sure that every kind of input is submitted, and the output observed matches the output expected. —— Functional testing ?白盒测试( white-box , or open-box, clear-box testing): 逻辑测试(结构测试,内部,每条可能路径) Use the structure of the program to test. —— Structural testing §1. 基本概念 14 16 16 16 10 3222????若程序执行需 10 -3 秒,则对于所有合法输入的测试大约需用一万年,而且还应测试输入非法数据的情况。主要问题:穷尽测试( complete test) 通常是不可能的。例: ( Black-box) 程序要求输入 3个整形数据。若字长16位,则各种可能输入的排列组合共有(种) 例: ( White-box) §1. 基本概念循环 20次上图所示的程序中共有 5 20? 10 14 条可能的执行通路,显然,每条通路都执行一遍是不现实的。 3、测试步骤: ( 1) 模块(单元) Component testing —— program design & coding bugs (2) 子系统 Subsystem testing —— connections between modules (3) 系统 System testing —— requirements & system design (4) 验收 Acceptance testing —— customer joins in (5) 平行运行 Parallel running —— compare the new system with the old one. 集成 Integration testing §1. 基本概念测试阶段的信息流: 测试评价调试可靠性模型软件配置测试配置测试结果可靠性预测错误正确错误率数据预期结果§2. 单元测试(白盒) 一、主要测试以下五个方面: 1、模块接口: ?内部检查: 传输参数的数目、属性、单位、次序是否匹配; 全程变量的定义是否一致; 只做输入的变元有无被修改, ……. ?外部检查: 打开、结束、关闭文件的操作; 文件和属性; I\O 错误处理; 输出拼写, …… 2、局部数据结构: 数据说明( declaration) ; 初始化与缺省值的设置; 变量名拼写; 数据类型的相容性; 上\下溢出及地址异常, ……§§ 3、重要的执行通路: 由于穷尽测试不可能,故通常针对最常见的错误设计测试方案。较常见的错误有: ?计算次序问题?不同类型混合运算(例:比较类型不同的量) ?初值设置错误?精度问题(例:精度不够导致两变量不可能相等,而程序中等待相等条件的出现) ?表达式错误?循环终止条件错误(例:次数差 1,或陷入死循环) 4、出错处理通路: 预见出现错误的条件,设置处理。较常见的问题有: ?输出的错误信息难以理解,不能确定错误位置?描述的错误与实际错误不符?处理之前系统已经干预?处理不正确§ 5、边界条件——单元测试中最后,也可能是最重要的任务,因为软件常在其边界失效。 1、代码审查( code inspection) ?从头到尾( Walk-through): 例如 Lucent Technologies 的测试策略,是由三人一组( 包括 author, reader, 和 recorder ),逐行检查源代码。?预演( Rehear