资源描述
实验12
1. 用因果图法测试一下程序。
程序的规格说明要求:输入的第一个字符必须是#或*,第二个字符必须是一个数字,此情况下进行文件的修改;如果第一个字符不是#或*,则给出信息N,如果第二个字符不是数字,则给出信息M。
解题步骤:
1) 分析程序的规格说明,列出原因和结果。
2) 找出原因和结果之间的因果关系、原因与原因之间的关系,画出因果图。
3) 将因果图转换成决策表。
4) 根据3)中的决策表,设计测试用例的输入数据和预期输出。
a) 答:分析程序规格说明中的原因和结果:
原因
结果
c1:第一个字符是#
e1:给出信息N
c2:第一个字符是*
e2:修改文件
c3:第二个字符是一个数字
e3:给出信息M
(2)画出因果图(编号为10的中间结点是导出结果的进一步原因):
c1
c2
c3
e1
10
e2
e3
~
∨
E
~
∧
(3)将因果图转换成如下所示的决策表:
选项 规则
1
2
3
4
5
6
7
8
条件:
C1
C2
C3
10
1
1
1
1
1
0
1
0
1
1
1
0
0
1
0
1
1
1
0
1
0
1
0
0
1
0
0
0
0
0
动作:
E1
E2
E3
不可能
√
√
√
√
√
√
√
√
√
测试用例
#3
#A
*6
*B
A1
GT
(4)根据决策表中的每一列设计测试用例:
测试用例编号
输入数据
预期输出
1
#3
修改文件
2
#A
给出信息M
3
*6
修改文件
4
*B
给出信息M
5
A1
给出信息N
6
GT
给出信息N和信息M
2. 找零钱最佳组合
假设商店货品价格(R)都不大于100元(且为整数),若顾客付款(P)在100元内,现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。假定此商店的货币面值只包括:50元(N50)、10元(N10)、5元(N5),1元(N1)四种。
请结合等价类划分法和边界值分析法为上述程序设计出相应的测试用例。
答:边界:一、 分 析 输 入 的 情 形 。
1.R无效: R > 100 R<=0
2.R有效: 0 < R < = 100
此种情况下再考虑P:
2_1. P无效:P > 100 (钱给多)
2_2. P无效:P < R (钱给少)
2_3. P有效:R<= P <= 100 //无效输出: 多找钱 少找钱
二、 分 析 输 出 情 形 。
考虑输出——找零个数
这里是有效数据,关于" 找 给 顾 客 之 最 少 货币 个(张) 数"的有效取值
50:0/1
10:0/1/2/3/4
5 :0/1
1 :0/1/2/3/4
三、 分 析 规 格 中 每 一 决 策 点 之 情 形
考虑输出——找零数额(RR表示找零数额)
无效输入(不找零):
R > 100
R <= 0
0 < R < = 100 P > 100
0 < R < = 100 P < R
输出为相应错误提示信息
有效输入(找零):
0 < R < = 100 R<= P <= 100
此时考虑的输出:(RR=P-R 假设计算正确 不考虑此种情况无效输出)
0<=RR<4
5<=RR<10
10<=RR<50
50<=RR<100
RR:0、1、4、5、9、10、49、50、99
五、 为 满 足 以 上 之 各 种 情 形 , 测 试 用 例 设 计 如 下 :
1. 货品价格 = 101
2. 货品价格 = 0
3.货品价格 = -1
4. 货品价格 = 100, 付款金额 = 101
5. 货品价格 = 100, 付款金额 = 99
6. 货品价格 = 100, 付款金额 = 100 不找零
7. 货品价格 = 99, 付款金额 = 100 N1=1
8. 货品价格 = 96, 付款金额 = 100 N1=4
9. 货品价格 = 95, 付款金额 = 100 N5=1
10. 货品价格 = 91, 付款金额 = 100 N5=1, N1=4
11. 货品价格 = 90, 付款金额 = 100 N10=1
12. 货品价格 = 51, 付款金额 = 100 N10=4, N5=1,N1=4
13. 货品价格 = 50, 付款金额 = 100 N50=1
14. 货品价格 = 1, 付款金额 = 100 N50=1,N10=4,N5=1,N1=4
3. 某软件的一个模块的需求规格说明书中描述:
1) 年薪制员工:严重过失,扣年终风险金的4%;过失,扣年终风险金的2%;
2) 非年薪制员工:严重过失,扣当月薪资的8%;过失,扣当月薪资的2%。
请绘制出因果图和判定表,并给出相应的测试用例。
原因:C1. 年薪制员工
C2. 严重过失
中间状态:11. 非年薪制员工
12. 过失
结果:E1. 扣年终风险金的4%
E2. 扣年终风险金的2%
E3. 扣当月薪资的8%
E4. 扣当月薪资的2%
因果图:
C1
C2
11
12
E1
E2
E3
E4
将因果图转化为判定表:
1
2
3
4
C1
C2
11
12
1
1
0
0
1
0
1
0
0
0
1
1
0
1
0
1
E1
E2
E3
E4
1
1
1
1
测试用例:
测试用例1: 输入数据: 年薪制员工,严重过失 预期输出: 扣年终风险金的4%
测试用例2: 输入数据: 年薪制员工,过失 预期输出: 扣年终风险金的2%
测试用例3: 输入数据: 非年薪制员工,严重过失 预期输出: 扣当月薪资的8%
测试用例4: 输入数据: 非年薪制员工,过失 预期输出: 扣当月薪资的2%
4. 某软件规格说明书包含“订货单处理程序”的处理逻辑描述为:如果订货金额不足500元且未过期,则向顾客发出批准单和提货单,已过期的什么通知也不发;
如果订货金额超过500但不足1000,则发出批准单和提货单,对已经过期的发过期通知单;如果订货金额超过1000,不论是否过期,都要发出批准单和提货单。
第一步:对说明进行分析,得到原因和结果:原因:
1-----订货金额不足500;
2-----订货金额超过500但不足1000
3-----订货金额超过1000
4-----已过期
5-----未过期
结果:
21----发批准单和提货单
22----发过期通知单
23----什么通知也不发
第二步:画出因果图
将原因和结果用因果图的逻辑符号连接起来,其中编号为11的中间结点是导出结果的进一步原因。
第三步:转换成判定表
判定表(DecisionTable)是分析和表达多逻辑条件下执行不同操作的情况下的工具。判定表通常由四部分组成:
◆ 条件桩(ConditionStub):列出了问题的所有条件。
◆动作桩(ActionStub):列出了问题规定可能采取的操作。
◆ 条件项(ConditionEntry):列出针对它左列条件的取值。
◆动作项(ActionEntry):列出了在条件项的各种取值情况下应该采取的动作。
四、结束语
通过上面实例的介绍,可以得到一个快捷而简单的利用因果图设计测试用例的办法,尤其在将因果图转换成判定表时,已经变得有章可循,实际上这个办法是通用的,对于所有的实例都是可以实现的。
展开阅读全文