2009-7-261
2
第 5章 软件测试
软件测试的概念
软件测试技术
软件测试策略
测试的管理
软件调试
软件的可靠性和可用性
3
3、系统测试有如下过程:
( 1) 功能测试:
检查集成的系统在运行时是否满足需求中指定的功能。 单元测试和集成测试的重点是构件及构件间的交互。
这里的测试不必知道正在执行哪个构件,但必须知道系统是作什么的。与功能相关的活动集合称为线程
( thread),因此这里的功能测试有时称为线程测试。
功能测试采用黑盒技术,测试用例从需求文档中产生。
如,对一个文字处理系统的测试可以检查文档创建、文档修改、文档删除等功能。 有时可分析需求的语义,用输入与输出之间或输入与转换之间的逻辑关系建立判定表来实现测试。
4
( 2) 性能测试:
针对的是非功能性需求,即测试的类型由非功能性需求的定义来决定 。
强度测试( stress test) 评价系统在短时间内到达其极限时的表现。
容量测试( volume test) 检查系统对大量数据的处理。
恢复测试( environmental test) 检查系统的容错(出错、故障、掉电等处理)能力,能否在指定时间内修正错误并重新启动系统。
安全测试( security test) 测试系统的保护措施及数据与服务的完整性、保密性等。
还有许多方面的测试,如对用户的响应时间、执行某个功能的运行时间的计时测试,系统的可用性测试等。
以上是开发人员以需求规约为依据、采用黑盒技术,
通过对系统及其目标的理解而进行的测试。开发人员的理解需要用户的认可,因此还要进行以下用户确认的测试。
5
( 1) 验收测试:
也称确认测试。指 验收软件的有效性,使用户确信他们需要的就是这个系统。有时在实际环境中进行,有时在开发环境中进行。除了检查系统功能性能外,还要进行软件配置审查,包括文档的完整性、一致性、准确性的检查,
是否具有维护阶段必需的细节。
( 2) 安装测试,在实际环境中进行的测试。测试系统的完备性及可能被现场条件影响的那些功能或非功能性特性。
还有 2种系统测试策略:
( 1) Alpha测试,软件交付用户后,用户在开发环境中由开发人员,指导,下进行的测试。
( 2) Beta测试,用户在目标环境(实际使用环境)下进行的测试。
如微软的,Windows XP” Beta 2测试版由用户免费试用,半年后测试版作废。
6
4、测试的管理
( 1)测试文档为了控制测试的复杂性并提高测试效率,需建立测试文档:
测试计划,目标,文档引用,系统输入 /出及主要处理,主要测试,进度,所需材料等。
测试说明:测试项标识,满足的需求,方法条件,测试用例,测试步骤等。
问题报告和分析报告:记录每一个测试事件,给出测试结果的完整信息,分析实际测试结果和预期结果的差异及影响,并确定问题严重等级。
见下图:
7
8
( 2)职责分配单元测试可由开发人员自己测试。一个子系统开发小组同时可以作为其它子系统小组开发的构件的测试小组。
体系结构设计人员可以作为集成测试小组,同一个测试文档可以用于测试小组间的交流。
对于后期的测试(如功能测试和性能测试)或者是质量需求极高的软件应由另一个独立的控制质量小组负责。
设计人员将模型、源代码和测试用例提供给该小组,由他们进行测试。他们将问题报告和分析报告发送给设计人员,
以便对系统作必要的修改。修改后还应进行回归测试,确保没有引入新的错误。
9
( 3)何时停止测试
“时间不够、资金不够的时候,就完成了测试。”
Musa提出了一个基于统计标准的答复:“在按照概率的方法定义的环境中,1000个 CPU小时内不出错的操作的概率大于 0.995,就有 95%的信心说我们已经进行了足够的测试。”
软件可靠性理论建立了一种基于执行时间的函数的软件故障(在测试过程中发现的错误)模型:
f(t)=(1/p)ln(l0pt+1) (参考教材 1p349)
其中 f(t)为软件在一定的测试时间 t后可能会发生故障的预期累计数目,l0为测试开始时的初始故障密度(单位时间内的故障数),p为错误被发现和修正中的故障密度的呈递减的指数。
10
瞬时的故障密度 l(t)可以使用 f(t)的导数得出:
l(t)=l0/(l0pt+1)
使用上述公式,可预测测试进程中预期的故障密度,实际的错误密度可以画在预测曲线上。如图所示:
如果在测试过程中实际收集的数据与预测曲线比较接近的话,就可估算出为了达到低的故障密度,整个测试过程所需要的时间。
软件可靠性模型给出了回答“测试什么时候完成”这种问题的有意义的指导。
11
5.5 软件调试测试是系统化的有计划的活动,而调试是一门艺术!
调试是发现错误后消除错误的过程。要根据错误的症状找出原因和位置以便改错。
( 1)一般的调试技术
插入打印语句
运行部分程序
使用调试工具
回溯法
12
( 2) 归纳法:从错误症状中找出规律,推断出错原因。
收集数据 组织数据 研究数据间的关系 提出假设证明假设纠正错误能能不能不能收集数据 组织数据 研究数据间的关系 提出假设证明假设纠正错误能能不能不能
Y e s No
W h at
W h e r e
W h e n
H ow
3 W 1 H T a b le
13
例:学生考试评卷报告。要求输出成绩排名、平均分、试题分析报告。
发现错误:对 51个学生评分? 中间值为 26(期望值 80)
对 1个学生评 分? 中间值为 1
观察分析:取奇数时出错?
打印的是中间学生的编号而非分数?
增加测试来验证上述推测。
14
( 3) 演绎法:普通? 特殊从假设中逐步排除、精化,从而导出错误原因。
列举可能的原因排除不正确的假设精化余下的假设证明假设收集更多数据 纠正错误有剩余能不能无剩余
15
5.6 软件的可靠性和可用性可靠性 (Reliability):系统在给定的时间间隔内,
根据需求说明成功地运行的概率。也可以说可靠性是系统依照需求指定的功能不失败运作的可能性。
可用性 (Usability):系统在给定的时间点上根据需求说明成功地运行的概率。也可以说可用性是当有请求时
(即在一定时刻)系统能执行有用服务的可能性。
可靠性与长期的行为有关,而可用性描述时间中某一给定点上的事情。
对于硬件,有的东西可能是高可靠的,但在时间的某一特定点上可能是不可用的。同样的概念也适用于软件系统。
16
2、提高可靠性的辅助方法可靠性、可用性是相互依赖的系统特性,都反映了用户对系统的信任程度。如果系统是不可靠的,就很难保证系统的安全性、保密性等许多特性。如果系统不可用,用户将无法接受!
提高可靠性的辅助方法:
错误避免 开发技术上采取预防手段,如避免使用易出错的语言成分(指针)。
错误检测 测试与调试。
容错 系统中嵌入自检设施。
可靠性与正常使用中发生的错误概率有关。系统中有些部分很少使用,从中删除错误对系统的可靠性提高不大。
每个用户使用系统的模式不同,对系统的可靠性就有不同的评价。如某个用户使用的输入集与易错输入集相交,他会体会到系统失败的滋味;但对于从不使用来自易错输入集的用户,系统总是可靠的!
17
习题
1、二分法检索程序的流图如右,请用基本路径测试方法设计用例,
并与黑盒技术比较。
2、什么是软件测试?
“证明程序正确”为什么不能作为软件测试的目的?
3、白盒测试技术与黑盒测试技术共同点是什么?最主要的区别是什么?
18
3、软件测试的策略包括哪些方面?描述软件测试步骤。
4、单元测试需要的两个支持构件是什么?各有什么作用?
5、集成测试有哪些具体的方法?渐增式测试与非渐增式测试各有什么优缺点?
6、系统测试包括哪些具体的测试?
7、测试管理包括哪些方面?为什么要管理?
8、软件可靠性与软件可用性有什么关系?什么时候评价软件的可靠性?
9、掌握基本路径测试、等价类划分、边界值分析、错误推测等方法,针对某一应用问题会使用这些方法设计测试用例。