第11章 软件测试
Software Engineering
2. 黑盒法测试方案设计
等价划分法
边界值分析法 错误推测法
Software Engineering
(1)等价划分
思想:将程序的所有输入数据划分为不同的区域,
同一区域中各个输入数据对于揭露程序中的错误是 等价的,称为等价类。然后从每一个等价类中选取 少数有代表性的数据做为测试用例。
空表、一行、多行
x∈A={a1,a2,…,an}
等价类的细化
x∈Z Z+, 0, Z-
Software Engineering
建立等价类表
输入条件 有效等价类 无效等价类
. . .
. . .
. . .
Software Engineering
设计步骤
划分等价类,建立等价类表 设计测试用例
边界值分析的规则
值的范围
值的个数
x∈[a,b]
a~b 1 0 -1 π/2 0 -π/2
a-1, a, b, b+1
a-1, a, b, b+1
_π 2 1 0 -1 π 2
输出等价类 sin x
有序集
[1, n]
[0, n-1]
错位
Software Engineering
【例】string integer
测试目的:检测的功能 测试用例:测试数据
测试 a+b≤c 时的输出 1,2,3
预期结果
input is invalid
小规模测试 → 大规模测试 “穷举测试”不可能
Pareto原理:80%error —— 20%module 错误的群集现象
独立第三方测试 保存测试报告
Software Engineering
考虑输出等价类 联合使用等价划分、边界值分析方法
【例2】string integer
(计算机字长16位,二进制补码表示)
函数说明 Function strtoint(dstr: shortstr):integer; 参数类型说明 type shortstr = array [1..6] of char; 假设不考虑PASCAL编译程序可过滤的错误
使用和维护时期
退 役
Software Engineering
第10章 软件测试
软件测试的目标是什么?应遵循哪些准则? 有哪些软件测试方法? 何为黑盒测试?有哪些方法?
何为白盒测试?有哪些方法?
软件测试步骤如何? 软件纠错(调试)有哪些方法? 面向对象软件测试的特点如何? 软件可靠性
处理边界情况最易出错 选择边界值作test cases,暴露error的可能性大
刚好等于等价类边界值
稍小于
稍大于 "Bugs lurk in corners and congregate at boundaries ..." —— Boris Beizer
Software Engineering
3. 测试阶段的信息流向
软件配置 测试结果 错误 正确
测试
测试配置
评价
预期结果 错误率
纠错
可靠性 模型
可靠性预测
测试阶段的信息流
Software Engineering
二、软件测试方法
程序正确性证明
静态测试 动态测试
Error !
Software Engineering
1. 程序正确性证明
0
„000000‟ → 0
(0, 32767]内的正整数 „ 32767‟ → 32767
非法输出等价类
< -32768 >32767
„-32769‟ → 错!下溢
‘ 32768‟ → 错!上溢
Software Engineering
边界值分析方法的评价
边界值→test cases,易发现错误
有效输入等价类
合法输出等价类
1~6个数字字符串(最高位非0) „1‟→1 最高位为0的数字串 最高位左邻是负号的数字串 „000001‟ →1 „-00001‟ →-1
[-32768, 0)内的负整数 0 „000000‟ →0 (0, 32767]内的正整数
无效输入等价类
测试步骤
系统测试
Software Engineering
测试:保证软件质量的主要手段
程序正确性证明
未达到对大规模软件进行验证的实用阶段 只能证明程序功能正确,不能证明其动态特性
是符合要求的
过程复杂,本身可能出错
软件质量只要靠测试保证
Software Engineering
软件工程 Software Engineering
第十章 软件测试
武汉大学 计算机学院
思考?
软件测试能否保证软件的正确性?如果能,为什 么?如果不能,为什么还要强调软件测试的重要 性呢?
Software Engineering
软件生存期
软件计划 需求分析
软件设计
实现(编码)
测试
维护
定义时期
开发时期
手工执行检查
Software Engineering
3. 动态测试
黑盒测试 —— 功能测试
函数 f (x1, x2, …, xn) = (y1, y2, …, ym)
功能
着眼点:接口 时机:后期、集成测试、确认测试
黑盒测试的目的: 功能是否正常使用? 输入 → 正确输出? 保持外部信息的完整性?
Software Engineering
最高位右有数字&其它字符 ‘1**2‟ →填充错
等价划分法的评价
选用等价类中典型值/任意值作为test cases
没有选用某些高效率的测试方案
Software Engineering
(2)边界值分析(Boundary Value Analysis,BVA)
Software Engineering
软件开发时期的三个阶段
信息描述
功能描述
数据设计
设计
行为描述 其他需求 过程设计
实现
程序模块
测试
集成并确认 的软件
Software Engineering
一、软件测试基础
测试工作量约占开发总工作量的40%以上
测试内容
文档 程序 单元测试(模块测试) 集成测试(综合测试) 确认测试(有效性测试)
黑盒测试
Make sure that every kind of input is submitted, and the output observed matches the output expected. —— Functional testing
在软件接口上进行测试 测试功能需求的有效性 测试集中于软件信息域(输入域—输出域)
Software Engineering
穷尽测试(complete test)
包含所有可能情况的测试
a, b, c: integer
计算机字长16位 → 可能取值有216
可能的排列组合216 ×216 ×216≈ 3×104 3×104次
1ms/次
=
无效输入的情况没有测试,更容易发生错误
1万 年 !
设计一新测试方案,尽可能多覆盖尚未被覆盖的有效
等价类,重复,直至全部覆盖 —— 减少test cases
设计一新测试方案,覆盖且仅覆盖一个无效等价类,
重复,直至全部覆盖 —— 避免无效测试 例:文件名 —— 以字母为首的字母数字串 test case: 9A*B
Software Engineering
输入条件
第一个字符 标识符组成 标识符字符数 标识符个数 标识符的使用
有效等价类
字母(1)
无效等价类
非字母(2) 0个(8) ,>8个(9),>80个(10) 0个(13) 未说明就使用(15)
字母(3) ,数字(4) 非字母非数字(5) ,保留字(6) 1~8个(7) 1个(11) ,多个(12) 先说明后使用(14)
a=3,b=4,c=5 a=3,b=3,c=4 a=3,b=3,c=3
正常情况
c a b
异常情况
合理的不等边三角形 合理的等边三角形 合理的等腰三角形
a+b≤c a≤0 a∈N a是字符型 排列次序相关
Software Engineering
排列次序相关
例:
Pascal中规定:“标识符是由字母开头的后
跟字母或数字的任意组合构成,有效字符 数为8个,最多字符数为80个”。并且规定: “标识符必须先说明后使用,在同一个说 明语句中,标识符至少有一个”
根据上述说明,用等价划分法设计测试用
例。
Software Engineering
第一步:划分等价类,作出等价类表
非法输出等价类
空字符串(全是空格) 左部填充非空格也非0的 最高位右有数字&空格 负号与最高位之间有空格
„
‟→错!没有数字 < -32768 „-54321‟→错!下溢
‘*****1‟ →填充错 >32767 ‘654321‟→错!上溢 ‘1 2‟ →填充错 ‘- 12‟ →负号位置错
等价类
有效等价类 无效等价类
输出等价类
优点:可以滤掉同类数据,提高测试效率
划分:试探性、经验
Software Engineering