软件测试第六次作业下半
案例二 使用基本路径法设计测试用例
- 控制流图
控制流图适用于描述程序控制流的一种图示方法。程序控制流图中只有两种图形符号——圆圈和箭头线。每一个圆圈称为流图的一个节点,代表一条或多条无分支的语句或源程序语句。

控制流图基本符号示意图

控制流程图

程序控制流图
- 圈复杂度
圈复杂度(也称为环形复杂度)是一种为程序逻辑复杂度提供定量测度的软件度量。也可将该测度用于基本路径方法,它可以提供程序集本集的独立路径数量和确保所有语句至少可以执行一次的测试用例数量上界。
计算圈复杂度的方法有三种:
- 给定流图G的圈复杂度V(G)等于控制流图中封闭区域的数量加上1个开放区域,即圈复杂度=总的区域数。
- 给定流图 G 的圈复杂度V(G),定义为V(G)=E-N+2。其中,E是流图中边的数量,N是流图中节点的数量。
程序控制流图所示的控制流图中有10条边,8个节点,则V(G)=10-8+2=4。
- 给定流图 C的圈复杂度 V(G),定义为V(G)=P+1,其中,P是流图G中判定节点的数量。
程序控制流图所示的控制流图中有3个判定节点,则V(G)=3+1=4
- 独立路径
独立路径是指,和其他的路径相比,至少引入一个新处理语句或一个新判定的程序通路,它必须至少包含一条在本次定义路径之前不曾用过的边。程序的圈复杂度V(G)值等于该程序基本路径集合中的独立路径的条数,这是确定程序中每个可执行语句至少执行一次所必需的测试用例数目的上限。
程序控制流图的圈复杂度是4,可以写出如下4条独立路径:
① 1-5;
②1-2-3-5;
③ 1-2-4-6-8-1-5;
- 1-2-4-7-8-1-5。
最后,准备测试用例,确保基本路径集中的每一条路径都能执行。
【案例描述】

第一步:绘制程序流程图和控制流图。

最值案例程序流程图

最值案例程序控制流图
第二步:根据控制流图得出圈复杂度 V(G)(独立线性路径数)。根据之前的预备知识知道计算圈复杂度 V(G) 有三种方法:
第1种方法:V(G)=总区城数=4;
第2种方法:V(G)=E-N+2(流图中的边数-节点数+2)= 10-8+2=4;第3种方法:V(G)=P+1(流图中判定节点的数量+1)= 3+1=4。第三步:根据圈复杂度V(G) 即独立路径数找出独立路径
由于圈复杂度是4、可以写出如下4条独立路径:
D1-2-4-5-8:
制流图路径设计
21-3-4-5-8;
31-3-4-6-8:41-3-4-6-7-8
第四步:根据独立路径,准备测试用例,确保基本路径集中的每一条路径都能执行。则本案例对应的测试用例有4个。
|
用例编号 |
测试步骤 |
输入数据 |
期望结果 |
备注 (执行路径) |
|
001 |
输入三个整数 |
a=2,b=1,c=3 |
max=3,min=1 |
1-2-4-5-8 |
|
002 |
输入三个整数 |
a=1,b=2,c=3 |
max=3,min=1 |
1-3-4-5-8 |
|
003 |
输入三个整数 |
a=2,b=3,c=1 |
max=3,min=1 |
1-3-4-6-8 |
|
004 |
输入三个整数 |
a=1,b=3,c=2 |
max=3,min=1 |
1-3-4-6-7-8 |
【拓展案例】

第一步:绘制源程序的流程图和控制流图。

闰年程序流程图

闰年程序的控制流图
第二步:根据控制流图,得出圈复杂度 V(G)=4
第三步:根据圈复杂度,得到4 条独立路径:
- 1-2-3-4-8;
- 1-2-3-5-8;
- 1-2-6-8:
- 1-7-8
第四步:根据独立路径,在输入范围内设计4个测试用例
|
用例编号 |
输入数据 |
预期结果 |
备注(执行路径) |
|
001 |
year=2000 |
leap=1 |
1-2-3-4-8 |
|
002 |
year=1900 |
leap=0 |
1-2-3-5-8 |
|
003 |
year=1004 |
leap=1 |
1-2-6-8 |
|
004 |
year=1001 |
leap=0 |
1-7-8 |
软件测试第八次作业
一、 等价类划分法
1. 把所有可能的输入数据,即程序的输入域划分为若干个不相干的子集,称为等价类;有子集的并集则构成整个输入域;每一个子集中选取少量具有代表性的数据作为测试用例
2. 等价类划分原则
1.按照区间划分
在输人条件规定了取值范围或值的个数的情况下,可以确定一个有效等价类和两个无效等价类。例如,程序输入条件为小于 100 但大于 10 的整数 ,则有效等价类为 10<x<100.两个无效等价类分别为x≤10和x>100。
2按照数值划分
在规定了一组输人数据(假设包括 n 个输入值),并且程序要对每一个输入值分别进行处理的情况下,可确定 n 个有效等价类 (每个值确定一个有效等价类)和1个无效等价类所有不允许的输入值的集合)。例如,程序输入的x从一个固定的枚举类型 1,3715中取值,且程序中对这4个数值分别进行了处理,则有效等价类为 x=1、x=3、x=7、x15,无效等价类为 x≠1、3、7、15 的值的集合。
3.按照数值集合划分
在输人条件规定了输人值的集合或规定了“必须如何”的条件下,可以确定一个有效等价类和一个无效等价类(该集合有效值之外)。例如,程序输人条件为取值为奇数的整数x,则有效等价类为x的值为奇数的整数,无效等价类为x的值不为奇数的整数
4. 按照限制条件或规则划分
在规定了输人数据必须遵守的规则或限制条件的情况下,可确定一个有效等价类(符合规则)和若干个无效等价类 (从不同角度违反规则)。例如,程序输人条件为以字符 a开头、长度为8 的字符串,并且字符串不包含 a~z之外的其他字符,则有效等价类为满足上述所有条件的字符串,无效等价类为不以 a 开头的字符串、长度不为 8 的字符串和包含了a~z之外其他字符的字符串。
3.等价类方法设计测试用例一般步骤
①划分等价类,形成等价类表,为每一个等价类规定唯一的编号
②设计一个新的测试用例,使它尽可能多地覆盖尚未覆盖的有效等价类。重复这个步骤,直到所有的有效等价类均被测试用例所覆盖。
③设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。重复这一步骤,直到所有的无效等价类均被测试用例所覆盖
④细分等价类。
二、 闰年查询工具
1. 划分等价类,形成等价类表,为每一个等价类规定唯一的编号
等价类划分示意图


闰年查询工具的等价类表

2. 设计测试用例
|
测试用例编号 |
输入数据 |
预期输出 |
覆盖的等价类 |
|
001 |
2014 |
非闰年 |
1 |
3. 设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。重
4. 复这一步骤,直到所有的无效等价类均被测试用例所覆盖
|
测试用例编号 |
输入数据 |
预期输出 |
覆盖的等价类 |
|
001 |
2014 |
闰年 |
1 |
|
002 |
-2147483649 |
超出范围 |
2 |
|
003 |
2147483649 |
超出范围 |
3 |
|
004 |
1.5 |
错误信息 |
4 |
|
005 |
(空值) |
提示录入 |
5 |
5. 细分等价类
由于在测试年份-2147483647~2147483647 时会出现以下几种情况:
• 能被4 整除,但不能被 100 整除
• 能被4 和100整除,但不能被 400 整除
• 能被 4 和100 整除,也能被 400 整除(能被 400 整除的数,如 1600)
• 不能被4整除(如 34)
因此需要细分有效等价类。同理,无效等价类中的 “非整数” 也需要细分。根据以的分析,重新修正等价类表
修正后的测试用例表
|
测试用例编号 |
输入数据 |
预期输出 |
覆盖的等价类 |
|
001 |
1996 |
闰年 |
1 |
|
002 |
200 |
非闰年 |
2 |
|
003 |
400 |
闰年 |
3 |
|
004 |
1998 |
非闰年 |
4 |
|
005 |
-2147483649 |
超出范围 |
5 |
|
006 |
2147483649 |
超出范围 |
6 |
|
007 |
1.5 |
错误信息 |
7 |
|
008 |
abc |
错误信息 |
8 |
|
009 |
(空值) |
错误信息 |
9 |
|
010 |
(空值) |
提示录入 |
10 |
【案例描述】
在各种输入条件下,测试程序的注册界面功能,其中账号规则如下:
①:账号长度为4~10位(含4位和10位)
②:账号由字符(a~z,A~Z)和数字(0~9)组成
③:不能为空,空格和特殊字符
密码规则如下:
①:密码长度为6~8位(含6位和8位)
②:密码由字符(a~z,A~Z)和数字(0~9)组成
③:不能为空,空格和特殊字符
【案例实现】
注册功能是系统中的常见功能之一,设计等价类的时候,可以从长度、非法字符、类型、空值等方面进行考虑,这里以账号、密码和确认密码为例,将三个条件作为独立的输人条件进行探讨(这里假定这三项为注册时候的必填项)。
1. 划分等价类
2. 设计有效等价类的测试用例
|
用例编号 |
输入数据 |
预期输出 |
覆盖等价类 |
||
|
账号 |
密码 |
确认密码 |
|||
|
001 |
Mary |
123456 |
123456 |
成功注册 |
1,2,3 |
3. 完整的测试用例

【拓展案例】
请根据下面的手机号码和电子邮箱的规则,补充上述案例的测试用例。
手机号码:中国地区手机号长度 11 位,以 13/14/15/17/18/19 开头;
电子邮箱 包括“@”和“.” 邮箱的长度为6~30。
1.划分等价类

2.完整测试用例

软件测试第九次作业
一、 边界值方法
边界值测试是从输入域测试中衍生出来的。边界的条件落在等价类的边界上、边界外和边界内,边界值测试是对等价类测试的一个补充,但不同于等价类测试。由长期测试工作经验得知,大量的错误是发生在输入域或输出域的边界上,因此针对各种边界情况设计测试用例,可以查出更多的错误。
边界值分析方法的理论基础是假定大多数的错误是发生在各种输入条件的边界上,如果在边界附近的取值不会导致程序出错,那么其他取值导致程序出错的概率会很小。
二、 边界值
1.上点:就是边界上的点,如果该域的边界是封闭的,上点就在域范围内;果域的边界是开放的,上点就在域范围外。
2.离点:就是离上点最近的一个点,如果域的边界是封闭的,离点就在域范围外;如果域的边界是开放的,离点就在域范围内。
3.内点:顾名思义,就是在域范围内的任意一个点。
三、 网上银行
【案例描述】
某网上银行的登录界面如图所示,登录名称是卡号或者手机号,请为其设计测试用例。

【案例分析】
由于卡号和手机号都是纯数字的,根据计算机基础知识,这里包含了隐藏的边界----ASCII码。
在表中,数字0~9的ASCII值是48-57,斜杠字符(/)在数字0的前面,而冒号(:)在数字9的后面。

【案例实现】

【拓展案例】
如果在某信息系统中,假设用户名只能输入a~z,A~Z的字符,请参考ASCII表,给出用边界值法检查用户名字符合法性的关键性数据。
【案例分析】
a~z 对应 97~122
A~Z:对应的ascii码65~90
单引号‘在小写a的前面,左大括号在小写字母z的后面,@在大写字母A的前面,左中括号[在大写字母Z的后面
【案例实现】

四、 判定表法
1.定义
等价类,边界值分析法一般是对单一输入进行测试用例分析的方法。判定表是对其的一种补充,对于多种输入之间存在的组合关系并且对应执行不同动作,进行测试用例的分析的方法。
2.判定表构成例子
阅读指南表

填完后的阅读指南表

3.判定表构成

(1)条件桩
列出了问题的所有条件。除了某些问题对条件的先后次序有特定要求外,通常条件的顺序是无关紧要的,可以任意调换。上面的案例中的条件桩就是罗列的三个问题。如“觉得疲倦?”。
(2)动作桩
列出了问题可能采取的动作,这些动作的排列顺序一般也没有具体的要求。上面的案例中的动作桩就是针对三个问题罗列的四个建议,如“重读”。
(3)条件项
针对条件桩给出的条件列出所有可能的取值。如果有三个条件,就会有 2种取值的组合。可以按照相关的顺序依次进行罗列,如“111”“110”“101”等,直至“000”。
(4)动作项 (Action Entry)
和条件项紧密相关,列出在条件项的各种取值情况下应该采取的相应动作。
判定表中贯穿条件项和动作项的一列就是一条规则。如在填完后的阅读指南表中的第1列 (以灰底列为第1列)就是一条规则,它表示如果觉得疲倦、感兴趣和糊涂,就会采取休息的动作这张表中总共有8条规则。
4.简化判定表
观察填写的判定表,发现第1,2列不论条件3的选项是什么结果都是休息。也就是说,表中两条或者多条规则具有相同的动作,就可以考虑将表简化。
化简后的判定表

最终表

五、 打印机的判定表
1.列出所有的条件和动作
条件桩:
驱动程序是否正确?
是否有纸张?
是否有墨粉?
动作桩:
打印内容
提示没有纸张
提示没有墨粉
提示程序驱动程序不对
2.确定规则个数
假如有n个条件,每个条件有两个取值(0,1),故有2n种规则。本案例中条件共有3个,规则的个数为23=8.
3.填入条件项
4.填入动作项
打印机问题的判定表

打印机问题简化后的判定表

六、 文件命名问题
【案例描述】
软件的需求规格说明为:
文件名的第一个字符必须是A或者B,第二个字符必须是数字。满足上述条件,则修改文件。若第一个字符不为A或B,则输出错误信息X;若第二个字符不为数字,则输出错误信息Y。
【案例实现】
1.列出所有的条件和动作
条件桩:
第一个字符是A
第一个字符是B
第二个字符是数字
动作桩:
修改文件
输出错误信息X
输出错误信息Y
2.确定规则个数
本案例条件共3个,所以规则个数为23=8
3.填入条件项
4.填入动作项
文件命名问题判定表

5.化简
文件命名问题化简后判定表

6.设计测试用例

七、 拓展案例
【案例描述】
维修机器的问题描述为:“对于功率大于 50马力 (1马力=0.735kW)的机器,并且维修记录不全或已经运行 10 年以上的机器,应给予优先的维修处理。”请使用判定表法区计 相关的测试用例。
【案例实现】
1. 列出所有条件和动作
条件桩:
功率大于50马力
维修记录不全
已经运行10年以上
动作桩:
优先维修处理
次要维修处理
2. 确定规则个数
本案例规则个数为23=8
3. 填入条件项
4. 填入动作项
机器维修问题判定表

5. 化简

6. 设计测试用例

软件测试第十次作业
一、 百度帐号登录
E约束(Exclusive or)。表示两个或两个以上原因不会同时成立,两个中最多有一个可能成立

例如,登录百度账号的时候,除了用传统的账号和密码外,还可以使用 QQ、新浪微博等方式。如果将后三种登录方式作为原因的话,它们之间就存在着E 约束。登录不能同时使用短信、QQ和新浪微博,但可能既不使用短信,也不使用 OQ,也不使用新浪微博,而是使用了账号和密码的方式

二、 大学生网购调查
I约束 (Im)。表示多个原因中至少有一个必须成立。

例如,在一份大学生网购调查问卷中,有如图所示的选项,询问大家一般在哪些网站购物。这里可以同时选择多个选项,但是不能一个都不选。

三、 QQ注册表单
R约束(Request)。原因c1出现时,原因c2也必须出现;c1 不出现时,c2不可能出现。

例如,填写QQ注册表单的过程中,需要选择省份和相应的地区,这时选定某个省份(如北京)后,地区后面会出现其对应的地区名称,如图所示。这里的省份和地区这两个原因中就存在着R约束。

四、 自动售货机软件
1.因果图法的基本步骤:
采用因果图法设计测试用例的步骤:
① 分析软件规格说明描述中,哪些是原因 (即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。
② 分析软件规格说明中的语义,找出原因与结果之间对应的关系,并根据这些关系画出因果图。
③ 由于语法或环境限制,有些原因与原因之间、原因与结果之间的组合情况不可能出现,为表明这些特殊情况,在因果图上用一些记号表明约束或限制条件。
④ 将因果图转换为判定表。
⑤ 将判定表中的每一列取出来作为依据,设计测试用例
【案例描述】
设计一款处理单价为1元5角的盒装饮料的自动售货机软件。若投入1元5角硬币,按下“可乐”“雪碧”等按钮,相应的饮料就送出来。若投人的是2元硬币,在送出饮料的同时,退还5角硬币。
【案例分析】
1.分析案例说明,列出原因和结果。
根据需求,可以分析出,自动售货机的业务中一共存在4个条件和4 个结果,分别是:
原因
① 投人1元5角硬币
② 投人2元硬币
③ 按下“可乐”按钮
④ 按下“雪碧”按钮
结果:
① 退还5角硬币
② 送出“可乐”饮料
③ 送出“雪碧”饮料
整理之后的原因和结果表
|
原因编号 |
原因 |
结果编号 |
结果 |
|
C1 |
投入1元5角硬币 |
e1 |
退还5角硬币 |
|
C2 |
投入2元硬币 |
e2 |
送出“可乐”饮料 |
|
C3 |
按下“可乐”按钮 |
e3 |
送出“雪碧”饮料 |
|
C4 |
按下“雪碧”按钮 |
2.分析原因和结果的对应关系,并画出因果图。比如,以分析送出“可乐”饮料的原因和结果为例。当投人1元5角硬币并按下“可乐”按钮时,可以送出可乐饮料:投人2元硬币并按下“可乐”按钮时,也会送出可乐饮料,绘制的因果图如因果图1所示。
这时不难发现,这两组连线中有共同部分,即从 c3 指向e2 的一条线,因此,为了减少原因至结果的线条,避免后续绘图中存在过多的交叉线,可以设置一个中间节点 m1,表示已经投币,从而将因果图改成如因果图2所示

后面继续分析原因和结果的关系,补充完善因果图,最后完成的因果图如因果图3所示。其中又增加了一个中间节点 m2,表示已经按了按钮

3.在因果图上标识原因之间的约束条件。在此案例中,原因 el 和2 不能同时满足因此符合E约束,同理,原因3 和4 也不能同时满足,因此也符合约束,完善后的因果图如因果图4所示

4.将因果图转换为判定表。

5.将判定表的每一列取出来作为依据

【拓展案例】
使用因果图法分析中国象棋中走马的实际情况,马走日字形 (邻近交叉点无棋子),遇到对方棋子可以吃掉,遇到本方棋子不能落到该位置。(注:这里忽略吃的子是对方老将游戏结束的情况)
【案例分析】
象棋走马的规则为:
① 如果落点在棋盘外,则不移动棋子:
② 如果落点与起点不构成日字形,则不移动棋子;
③ 如果落点处有已方棋子,则不移动棋子:
④ 如果在落点方向的邻近交叉点有棋子(绊马腿),则不移动棋子;
⑤ 如果不属于①~④条,且落点处无棋子,则移动棋子;
⑥ 如果不属于①~④条,且落点处为对方棋子,则移动棋子并除去对方棋子;
【案例实现】1.分析走马规则,列出原因和结果。
原因:
① 落点与起点构成日字;
② 落点方向的邻近交叉点无棋子
③ 落点在棋盘上;
④ 落点处无棋子:
⑤ 落点处为对方棋子
⑥ 落点处为已方棋子
结果:
① 移动棋子:
② 移动棋子,并除去对方棋子;
③ 不移动棋子
整理之后的原因和结果见表

2.分析原因和结果的对应关系,并画出因果图。这里增加了中间节点 10,表示可以移动棋子必须具备的基本条件,如因果图1示。

3.在因果图上标识原因之间的约束条件。这里的 c4、eS 和 6 之间存在着 E 约束,而结果e1、e2和e3 之间存在着0约,将这些在因果图中补充完整后的图如因果图2所示

象棋走马问题判定表

象棋走马问题测试用例

【案例小结】
因果图法能够帮助我们按照一定步骤,高效地选择测试用例,设计多个输人条件组合用例;因果图分析还能为我们指出软件规格说明描述中存在的问题。但是它也存在着一些缺点:
① 输人条件与输出结果的因果关系,有时难以从软件需求规格说明书得到
② 即使得到了这些因果关系,也会因为因果关系复杂导致因果图巨大,测试用例数目极其庞大。