软件验证技术
案例2 windows2000中文输入法的 漏洞 2
软件验证
1.定义:
指通过检查和提供客观证据来表明软件已经满足 规定的需求。
2.作用:
确保软件质量和降低软件成本的重要手段,关系 到软件的整个生存周期
3.软件验证的方式:
测试 证明
3
进行软件测试的原因
任何工业产品在出厂前都要经过严格的质量检 验,软件产品也不例外,在编码和调试完成之后, 还需要进行严格的测试! 软件开发的前面各阶段都已经采取了各种方法 和技术进行质量保证,为什么还要进行软件测试? 由于软件是一种高密集度的智力产品,比一般 的硬件产品更复杂和难以控制。虽然在前阶段的 开发过程中,采取了相应的措施,但仍然不可避 免的会存在错误。 还得提醒一下同学们:软件测试是很困难的, 必须要有一整套的方法和技术进行指导。
如果我们站在用户的角度,替他们设想,就应 当把测试活动的目标对准揭露程序中存在的错误。 在选取测试用例时,考虑那些易于发现程序错误 的数据。
13
设计测试的目标是想以最少的时间和人 力系统地找出软件中潜在的各种错误和缺 陷。如果我们成功地实施了测试,就能够 发现软件中的错误。 测试的附带收获是,它能够证明软件的 功能和性能与需求说明相符合。此外,实 施测试收集到的测试结果数据为可靠性分 析提供了依据。 测试不能表明软件中不存在错误,它只 能说明软件中存在错误。
14
5.1.1 测试观点
Grenford J. Myers 就软件测试 目的提出的以下观点:
1. 测试是程序的执行过程,目的在于
发现错误; 2. 一个好的测试用例在于能发现至今 未发现的错误; 3. 一个成功的测试是发现了至今未发 现的错误的测试。
15
测试的定义是为了发现程序中的错误而执 行程序的过程,正确认识测试的目标是十分 重要的,测试目标决定了测试方案的设计。 如果为了表明程序是正确的而进行测试,就 会设计一些不易暴露错误的测试方案;相反, 如果测试是为了发现程序中的错误,就会力 求设计出最能暴露错误的测试方案。
测试是一项周期长、成本高的软件工程活动。 一般的软件开发组织要将30%-40%的项目精力投 入到测试之中,一些人命关天的软件其测试费用往 往更高。 测试无法保证测试后的软件不再有错误。 测试过程中将产生下述基本文档: (1)测试计划:确定测试范围、方法和需要的 资源等。 (2)测试过程:详细描述与每个测试方案有关 的测试步骤和数据,包括测试数据及预期的结果。 (3)测试结果:把每次测试运行的结果写入文 档,如果运行出错,则应产生问题报告,并且通过 调试解决所出现的问题。 6
9
软件测试的特点
1、软件测试的开销大 按照Boehm的统计,软件测试的开销大约占总成本的 30%-50%。例如:APPOLLO登月计划,80%的经费用 于软件测试。 2、不能进行“穷举”测试 只有将所有可能的情况都测试到,才有可能检查出所 有的错误。但这是不可能的: 例:程序P有两个整型输入量 X、Y,输数学方法来确保软件正确性 的活动。
由于软件本身的复杂性,程序正确性证明 还远未达到实用化的阶段。
7
5.1 软件测试基础
软件测试的目的: 以最少的代价发现软件分析、设计、编码 中存在的各种不同类型的错误,从而提高软 件质量,降低软件成本。
8
程序错误
1、较小错误:只对系统输出有一些非实质性影响。 如,输出的数据格式不合要求等。 2、中等错误:对系统的运行有局部影响。如输出 的某些数据有错误或出现冗余。 3、较严重错误:系统的行为因错误的干扰而出现 明显不合情理的现象。比如开出了0.00元的支票, 系统的输出完全不可信赖。 4、严重错误:系统运行不可跟踪,一时不能掌握 其规律,时好时坏。 5、非常严重的错误:系统运行中突然停机,其原 因不明,无法软启动。 6、最严重的错误:系统运行导致环境破坏,或是 造成事故,引起生命、财产的损失。
11
因此,他们会不自觉地选择那些导致程 序失效概率小的测试用例,回避那些易于 暴露程序错误的测试用例。同时,也不会 着意去检测、排除程序中有可能包含的付 作用,以致有可能潜含着诸如把边长为(0, 0,0 )的输入判成等边三角形的错误。
12
显然,这样的测试对完善和提高软件质量毫无 价值。
因为在程序中往往存在着许多预料不到的问题, 可能会被疏漏,许多隐藏的错误只有在特定的环 境下才可能暴露出来。如果不把着眼点放在尽可 能查找错误这样一个基础上,这些隐藏的错误和 缺陷就查不出来,会遗留到运行阶段中去。
4
测 试
测试分为静态测试和动态测试。
静态测试(评审) 对软件进行的分析 定义 和检查 特点 不执行程序 执行 软件开发的各阶段 时期 结束之前 测试 软件开发的各种文 对象 档 动态测试 通过运行软件来检查其 动态行为和运行结果的 正确性。 运行程序 编码之后,软件开发的 一个单独阶段 代码
5
测 试
X Y P Z
在32位机上运行。所有的测试数据组(Xi,Yi)的数 目为:232×232=264假设1毫秒执行1次,如要进行完全 10 测试,共需5亿年。
测试目的
基于不同的立场,存在着两种完全不同的测试目 的。 从用户的角度出发,普遍希望通过软件测试暴露 软件中隐藏的错误和缺陷,以考虑是否可以接受该 产品。 而从软件开发者的角度出发,则希望测试成为表 明软件产品中不存在错误的过程,验证该软件已正 确地实现了用户的要求,确立人们对软件质量的信 心。
第五章 软件验证技术
•5.1 软件测试基础 •5.2 代码复审 •5.3 白盒测试 •5.4 黑盒测试
•5.5 单元测试
•5.6 集成测试 •5.7 确认测试 •5.8 系统测试 •5.10调试 •5.11小结
1
软件中的错误
案例1 “爱国者”在载赫蓝的失败
1991年2月25日,一枚伊拉克飞毛 腿导弹击中了沙特阿拉伯载赫蓝 的一个军营,杀死了美国陆军第 十四军需分队的28名士兵。 政府调查指出该次失败归咎于导 弹系统时钟内的一个软件错误。 在此之前,爱国者导弹连在载赫 蓝已经连续工作了100小时。至此, 导弹的时钟已经偏差了三分之一 秒,相等于600米的距离误差。