一、 简要说明错误、缺陷、失效、事故、测试、测试用例等基本概念,运用图示说明测试
生命周期及瀑布模型中的抽象和测试级别,列出典型的测试用例信息。并谈谈你对测试的认识。 参考答案:
基本概念见书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,一组基路径及其对应的测试用例如下表所示: 基路径 相应的测试用例,格式: 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个。考虑基于输入变量的等价类时,可认为它们是相互独立的,可得到下表: 等价值测试类型 用例数量 弱一般 弱健壮 实例 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美元(所接受数的上界)等的测试,其依据是健壮性边界值测试。 因篇幅问题不能全部显示,请点此查看更多更全内容