问答题
以下是一个自动饮料售货机软件的操作规格说明,请按要求回答问题。
设要对一个自动饮料售货机软件进行黑盒测试。该软件的规格说明如下:
“有一个处理单价为1元5角钱的盒装饮料的自动售货机软件。若投入1元5角硬币,按下“可乐”、“雪碧”或“红茶”按钮,相应的饮料就送出来。若投入的是2元硬币,在送出饮料的同时退还5角硬币。”
问答题
【正确答案】
【答案解析】首先分析软件中出现的所有原因和结果,并将其标号。
原因:
1.投入1元5角硬币
2.投入2元硬币
3.按“可乐”按钮
4.按“雪碧”按钮
5.按“红茶”按钮
结果:
21.退还5角硬币
22.送出“可乐”饮料
23.送出“雪碧”饮料
24.送出“红茶”饮料
中间状态:
11.已投币
12.已按钮
然后根据上述原因和结果,以及各状态问的关系,画出因果图,如下图所示。

【正确答案】
【答案解析】将上述因果图转换为判定表,如表15所示,每一列可以作为确定测试用例的依据。
表15 判定表
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
输入 |
输入1元5角硬币 |
(1) |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
输入2元硬币 |
(2) |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
按“可乐”按钮 |
(3) |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
按“雪碧”按钮 |
(4) |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
按“红茶”按钮 |
(5) |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
中间结点
|
已投币 |
(11)
|
1
|
1
|
1
|
1
|
1
|
1
|
1
|
1
|
0
|
0
|
0
|
已按钮 |
(12) |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
输出
|
退还5角硬币 |
(21) |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
送出“可乐”饮料
|
(22)
|
1
|
0
|
0
|
0
|
1
|
0
|
0
|
0
|
0
|
0
|
0
|
送出“雪碧”饮料 |
(23) |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
送出“红茶”饮料 |
(24) |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
|
[解析]
对自动软件售货机的软件进行基于因果图的黑盒测试,首先根据软件的规格说明,找出所有可能的原因和结果,以及两者之间的联系,画出因果图。然后根据基于因果图的黑盒测试方法,将因果图转换为判定表,设计测试用例即可。
问答题
【正确答案】
【答案解析】根据源程序易得流程图,如下图所示。

问答题
设计测试用例,分别使函数的各种逻辑覆盖率尽量达到100%。如果认为该函数的某种逻辑覆盖率无法达到100%,需要说明原因。 |
【正确答案】
【答案解析】经过分析不难知,上面这个程序包含:
1)5个语句:每行一个语句;
2)3个条件:a>0;b<0;c>0;
3)4个分支:有两个if语句,每个if语句有两个分支;
4)6个条件组合:条件表达式(a>0) || (b<0)共有两个条件a>0和b<0,故有4个条件组合;条件表达式(c>0)只有一个条件c>0,故有两个条件组合。所以该程序共有6个条件组合;
5)4条路径:从程序的入口到出口的路径共有4条,分别是:
Path1:1—2—3—5—6—8
Path2:1—2—3—5—7—8
Path3:1—2—4—5—6—8
Path4:1—2—4—5—7—8
【正确答案】
【答案解析】这个程序有3个输入:a、b、c,其输入数据组合是非常大的。下面对该程序分别应用不同的逻辑覆盖准则,设计测试用例。
首先根据源程序画出程序流图比较容易,然后分析学过的所有的逻辑覆盖(如语句覆盖,分支覆盖,路径覆盖等),分析针对每种逻辑覆盖的标准来设计测试用例。通过设计测试用例来体现各种逻辑覆盖之间的关系。
1.语句覆盖
根据语句覆盖准则,只需要采用两个输入数据组合:(a,b,c)=(1,1,1)、(-1,1,1),便可以把该程序的所有5个语句执行一遍。
2.分支覆盖(判定覆盖)
根据分支覆盖准则,只需要采用两个输入数据组合:(a,b,c)=(1,1,-1)、(-1,1,1),便可以把该程序的所有4个分支走遍。但未考虑b<0的情况,故不满足条件覆盖。说明满足分支覆盖的测试用例未必满足条件覆盖。
3.条件覆盖
根据条件覆盖准则,只需要采用两个输入数据组合:(a,b,c)=(1,1,-1)、(-1,-1,1),便可以把该程序的3个条件的真假情况都覆盖到。由于表达式(a>0)||(b<0)的计算值都为真,不会执行else语句,即不满足分支覆盖和语句覆盖。说明满足条件覆盖的未必满足分支覆盖和语句覆盖。
4.条件组合覆盖
根据条件组合的覆盖准则,只需要采用4个输入数据组合:(a,b,c)=(1,-1,1)、(1,1,1)、(-1,1,-1)、(-1,-1,-1),便可以把该程序的6个条件组合情况覆盖到。但执行的路径数只有2个,故不满足路径覆盖。说明满足条件组合的覆盖不一定满足路径覆盖。
5.路径覆盖
根据路径覆盖的准则,只需要采用4个输入数据组合:(a,b,c)=(1,1,1)、(1,1,-1)、(-1,1,1)、(-1,1,-1),便可以把该程序的所有4条路径都覆盖。路径覆盖是最强的覆盖准则。