您的当前位置:首页软件测试复习题

软件测试复习题

2020-06-09 来源:世旅网
电子科大成都学院《软件测试》复习题及参考答案

一、 简要说明错误、缺陷、失效、事故、测试、测试用例等基本概念,运用图示说明测试

生命周期及瀑布模型中的抽象和测试级别,列出典型的测试用例信息。并谈谈你对测试的认识。 参考答案:

基本概念见书P2-3,只需要简要叙述即可。 测试生命周期见P3图1-1。

瀑布模型的抽象和测试级别见P12图1-10。 典型的测试用例信息见P4图1-2。

对测试的认识至少应从以下几个方面谈:1,测试的重要性;2,测试的复杂性;3,测试生命周期;4,测试用例的开发与执行等。

二、 阅读以下程序,回答后面问题。 八皇后问题的子问题。在一个8*8的棋盘上放置8个皇后,要求任意两个皇后不能立即吃掉对方(即不在同一行、同一列或同一斜线上)。下面的程序仅仅实现其中一部分,即给定两个皇后的位置,看它们是否能吃掉对方。

01 Program TwoQueenOfEightQueen '判断给定的两个皇后是否冲突 02 Dim x1, y1, x2, y2 As Integer

03 Output(\"请输入两个皇后的坐标,第一个皇后的第一个坐标值为-1表示结束程序\") 04 Input(x1, y1, x2, y2)

05 While (x1 <> -1) '<>表示“不等于”

06 If (1 <= x1 <= 8) AND (1 <= y1 <= 8) AND (1 <= x2 <= 8)

AND (1 <= y2 <= 8) Then '判断输入是否合法

07 If (x1 = x2) Then

08 Output(\"冲突,它们在同一行\") 09 Else

10 If (y1 = y2) Then

11 Output(\"冲突,它们在同一列\") 12 Else

13 If (x1 - x2 = y1 - y2) Then

14 Output(\"冲突,它们在同一斜线上\") 15 Else

16 Output(\"未发生冲突\") 17 EndIf 18 EndIf 19 EndIf

20 Else '不合法输入

21 Output(\"坐标值必须介于1-8之间,请重新输入:\") 22 EndIf

23 Input(x1, y1, x2, y2) '进行下一次输入 24 EndWhile

25 Output(\"****程序结束****\") 26 End TwoQueenOfEightQueen

对于该程序:

a, 画出程序图及DD-路径图;

b, 给出一组基路径及对应于这些基路径的测试用例。

c, 简要叙述结构性测试覆盖指标C0,C1的特点。根据C0,C1的要求设计相应的测试用例,用表格的形式分别列出满足C0,C1测试用例。

d, 说明那些功能测试手段可以发现给定坐标值不合法的缺陷?那些结构性测试覆盖可以发现这类缺陷?

解:a, 程序图如下,为方便起见省略Else语句及Dim语句 1 3 4 5 6

7 21

8 10

11 13

14 16

17

18

19

22 23 24 25 26

DD-路径图只需要合并程序图的3,4号结点及23,24号节点,图略。

b, 从程序图易知,基路径数 = 圈数 + 1 = 6,一组基路径及其对应的测试用例如下表所示: 基路径 相应的测试用例,格式:,… <1, 3, 4, 5, 25, 26> <-1, 2, 2, 2> <1, 3, 4, 5, 6, 21, 22, 23, 24, 5, 25, <1, 0, 2, 2>, <-1, 2, 2, 2> 26> <1, 3, 4, 5, 6, 7, 8, 19, 22, 23, 24, 5, <3, 1, 3, 5>, <-1, 2, 2, 2> 25, 26> <1, 3, 4, 5, 6, 7, 10, 11, 18, 19, 22, <2, 5, 3, 5>, <-1, 2, 3, 4> 23, 24, 5, 25, 26> <1, 3, 4, 5, 6, 7, 10, 13, 14, 17, 18, <1, 3, 2, 4>, <-1, 2, 3, 4> 19, 22, 23, 24, 5, 25, 26> <1, 3, 4, 5, 6, 7, 10, 13, 16, 17, 18, <1, 1, 2, 4>, <-1, 2, 3, 4> 19, 22, 23, 24, 5, 25, 26>

c, C0,C1的特点见书P130,前者是节点遍历,后者是边遍历。

为达到语句覆盖C0和DD-路径覆盖C1,仅需要同一个最小化的测试用例(不唯一):

<1, 0, 2, 2>, <3, 1, 3, 5>, <2, 5, 3, 5>, <1, 3, 2, 4>, <1, 1, 2, 4>, <-1, 2, 2, 2>(注意:这是由于本题的特殊性即循环的存在导致)。

d, 边界值测试及等价类测试中的健壮性测试均可发表该类缺陷,

三、 阅读以下程序,回答后面问题。 我的收入(虚拟版)。我的月收入由以下几部分组成:工资(salary,不超过10000,超过800部分扣税10%)、津贴(bonus,不超过10000,超过500部分扣税15%)和课时费(forClass,不超过10000,直接扣税20%)。由于学校放假,有三个月2,7,8不上课,所以不能领到课时费;另外,12月会多发一个月的工资。根据我的各项收入和月份计算当月实际收入,其实现见程序MyIncome。

01 Program MyIncome '我的收入虚拟版

02 Dim salary, bonus, forClass, finalIncome As Real 03 Dim month As Integer

04 Output(\"请输入工资、津贴、课时费和月份\") 05 Input(salary, bonus, forClass, month)

06 While NOT (0 <= salary <= 10000) AND (0 <= bonus <= 10000)

AND (0 <= forClass <= 10000) AND (1 <= month <= 12)

07 Output(\"输入不合法,请重新输入工资、津贴、课时费和月份\") 08 Input(salary, bonus, forClass, month) 09 EndWhile

10 Case month 11 Case 2, 7, 8:

12 If (salary > 800) Then

13 salary = 800 + (salary - 800) * (1 - 0.1) 14 EndIf

15 If (bonus > 500) Then

16 bonus = 500 + (bonus - 500) * (1 - 0.15) 17 EndIf

18 forClass = 0 '没有课时费 19 Case 12:

20 salary = salary * 2 '发两个月工资 21 If (salary > 800) Then

22 salary = 800 + (salary - 800) * (1 - 0.1) 23 EndIf

24 If (bonus > 500) Then

25 bonus = 500 + (bonus - 500) * (1 - 0.15) 26 EndIf

27 forClass = forClass * (1- 0.2)

28 Else: '其它月份 29 If (salary > 800) Then

30 salary = 800 + (salary - 800) * (1 - 0.1) 31 EndIf

32 If (bonus > 500) Then

33 bonus = 500 + (bonus - 500) * (1 - 0.15) 34 EndIf

35 forClass = forClass * (1- 0.2)

36 EndCase

37 finalIncome = salary + bonus + forClass 38 Output(\"最终收入为\39 End MyIncome

问题:

a, 列出salary的定义-使用路径(最多考虑一次循环,不需列完,但要涉及每个定义、使用节点)并说明它们是否定义-清除的。

b, 简要叙述等价类的概念以及如何划分等价类。 c, 以该程序为例,说明从输入值如何划分等价类。 d,现增加如下需求:实际的收入还有可能进一步扣税:收入高于2000的部分扣税5%,高于4000的部分加扣10%。

为该需求增加相应伪代码。

e, 从输出值如何划分等价类,以及怎样才能合理划分该问题的等价类。

参考答案:

a, Salary的定义节点包括:5, 8, 13, 22, 30,使用节点包括:6, 12, 13, 20, 21, 22, 29, 30, 37 其定义使用路径及是否清除如下表所示: 定义–使用路径 <5, 6> <8, 9, 6, 10, 11, 12, 13>> 是否清除 Y Y <13, 14, 15, 17, 18, 36, 37> <22, 23, 24, 26, 27, 36, 37> <30, 31, 32, 34, 35, 36, 37> <5, 6, 10, 11, 12, 13> <5, 6, 10, 19, 20> <5, 6, 10, 19, 20, 21> <20, 21, 22> <5, 6, 10, 28, 29> <5, 6, 10, 28, 29, 30> Y Y Y Y(注意:语句13先使用,后定义) Y N Y Y Y b, 在集合U上的等价关系可将U分解为互不相交的一组非空子集,这些子集的并是整个集合。这组子集称为U的一个划分,而各个子集称为建立在该等价关系上的等价类。 在软件测试过程中,应该根据输入变量、输出变量的值进行比较自然的划分。

c, 基于输入变量的等价类可以进行如下考虑:

salary, bonus有下界、上界及上税界限,它们均能把合法区域划分成2个,而把整个区域划分成4个,forClass仅有下界和上界,它仅有一个合法区域,但能把整个区域划分成3个。month有下界和上界,另外其合法区域被划分成3个,因此能把整个区域划分成5个。考虑基于输入变量的等价类时,可认为它们是相互独立的,可得到下表: 等价值测试类型 用例数量 弱一般 弱健壮 实例 Max(2, 2, 1, 3) = <400, 400, 5000, 2>, <400, 400, 5000, 12>, 3 <6000, 6000, 5000, 6> Max(2 + 2, 2 + 2, <-1, -1, -1, 0> 1 + 2, 3 + 2) = 5 <400, 400, 5000, 2>, <400, 400, 5000, 12>, <6000, 6000, 5000, 6>, <10001, 10001, 10001, 13> 2*2*1*3=12 <400, 400, 5000, 2>, <400, 400, 5000, 12>, <400, 400, 5000, 6>, <400, 6000, 5000, 2>, <400, 6000, 5000, 12>, <400, 6000, 5000, 6>, …, <6000, 6000, 5000, 6> 强一般 强健壮 (2 + 2) * (2 + 2) * <-1, -1, -1, 0>, <-1, -1, -1, 2>, (1 + 2) * (3 + 2) = <-1, -1, -1, 12>, <-1, -1, -1, 6>, 240 <-1, -1, -1, 13>, <-1, -1, 5000, 0>, …, <10001, 10001, 10001, 13>

d, 伪代码插入37行之后: 38 if (finalIncome > 4000) 39 finalIncome = 2000 + 2000*0.95 + (finalIncome - 4000)*0.9 40 else if (finalIncome > 2000) 41 finalIncome = 2000 + (finalIncome - 2000)*0.95

根据输出值域(37行的finalIncome值)可将分为三个等价类:

finalIncome <= 2000, 2000 < finalIncome <= 4000, 4000 < finalIncome

对合理地划分该问题的等价类,需要同时考虑到定义域与值域。实际上,强健壮等价类测试并不需要,从强一般等类测试就足够了。

四、 对于货币转换器系统(见书P266)。

a. 列出该应用程序所有的输入输出事件。

b. 什么是原子系统功能?说明该程序有那些原子系统功能? c. 如果进行GUI系统测试,应测试那些内容?

d. 说明如何使用功能性测试手段对其进行测试?测试的依据是什么?

参考答案: a. 见P267

b. 原子系统功能定义见P213

该系统原子系统功能见P304表19-4 s1-s8.

c. 首先应测试各原子系统功能,然后执行合适的线索集合,如: 先输入美元,再选择国家,再按“计算”按钮; 输入美元后不选择国家,直接按“计算”按钮, ...。

d. 在以上测试的基础上,增加对0美元,-1美元,1美元,以及x美元(所接受数的上界)等的测试,其依据是健壮性边界值测试。

因篇幅问题不能全部显示,请点此查看更多更全内容