问答题
一个大学信息学院学生管理系统软件,其学生文件Student记录的部分属性包括Name、Num、Age、Sex、Dept等,其中:
Name(学生名)要求最少2个字符,最多8个字符;
Num(学号)要求是10位无符号整数,取值范围为2010200001~2010203335;
Age(年龄)要求是2位无符号整数,取值范围为12~99;
Sex(性别)是枚举型,只有两个取值male(男)、female(女);
Dept(系名)是枚举型,取值可以是AT(自动化系)、CS(计算机系)、ET(电子系)、MN(微纳电子系)、SW(软件学院)。
现有一个新开发的查询程序,要求输入学生年龄的上限A、性别S、系名D,利用文件Student查询所有年龄小于A岁且性别为S的D系的学生并输出这些学生的姓名和年龄。
请针对此程序完成以下工作:
问答题
给出该查询程序的查询条件表达式。
【正确答案】Age<=A AND Sex==S AND Dept==D
THEN输出学生的姓名和年龄;
【答案解析】
问答题
用等价类测试方法给出输入条件的等价类表。
【正确答案】条件等价类表
输入条件 |
有效等价类 |
无效等价类 |
年龄上限A |
12<=上限A<=99 |
上限A<12, 上限A>99 |
性别S |
(male, female)枚举值 |
枚举以外的值 |
系名D |
(AT, CS, ET, MN, SW)枚举值 |
枚举以外的值 |
|
【答案解析】
问答题
某8位数计算机,其十六进制常数定义为:以0X或0x开头的十六进制整数,其值的范围是-7f~7f(表示十六进制时大小写字母不加区别),如0X13,0X6A,-0x3C。
问题:根据上述条件使用等价类划分的方法设计测试用例。
【正确答案】1.划分等价类并编号,如表1所示。
{{B}}表1 等价类及编号{{/B}}
|
输入数据 |
有效等价类 |
无效等价类 |
十六进制整数 |
1.以0X或0x开头 的1~2位数字串 |
3.非0X或非0x开头的数字串 4.含非数字且(a, b, c, d, e, f) 以外的字符 5.多于5个字符 |
2.以-0x开头的 1~2位数字串 |
6.-后跟非0的多位数字串 7.-0后跟数字串 8.-后多于3个数字 |
十六进制整数范同 |
9.在-7f~7f之间 |
10.小于-7f 11.大于7f |
|
2.为有效等价类设计测试用例,表中有3个有效等价类,设计测试用例如表2所示。
{{B}}表2 测试用例{{/B}}
|
测试数据 |
期望结果 |
覆盖范围 |
0X23 |
显示有效输入 |
1,9 |
-0X5 |
显示有效输入 |
2,9 |
3.为无效等价类设计测试用例,表中有8个无效等价类,设计测试用例如表3所示。
{{B}}表3 测试用例{{/B}}
|
测试数据 |
期望结果 |
覆盖范围 |
82 |
显示无效输入 |
3 |
0x123456 |
显示无效输入 |
5 |
-012 |
显示无效输入 |
7 |
-0x80 |
显示无效输入 |
10 |
5g |
显示无效输入 |
4 |
-23 |
显示无效输入 |
6 |
-0x123 |
显示无效输入 |
8 |
0x80 |
显示无效输入 |
11 |
【答案解析】
问答题
某函数包含3个变量:month, day, year。函数的输出是输入日期后一天的日期。例如:若输入为2008年3月7日,则函数输出应为2008年3月8日。要求函数的变量输入month、day、year均为整数值,并且满足条件:1=<month<=12,1=<day<=31,2001=<year<=2008。
采用等价类法为该函数设计测试用例,写出具体的等价类划分。
【正确答案】有效等价类:
M1={month: 1=<month<=12}
D1={day: 1=<day<=31}
Y1={year: 2001=<year<=2008}
无效等价类:
M2={month: month<1}
M3={month: month>12}
M4={month: month非数字}
D2={day: day<1}
D3={day: day>31}
D4={day: day非数字}
Y2={year: year<2001}
Y3={year: year>2008}
Y4={year: year非数字}
{{B}}表1 等价类表格{{/B}}
|
输入条件 |
有效等价类 |
无效等价类 |
标识符个数 |
1个(1),多个(2) |
0个(3) |
标识符字符个数 |
1~8个(4) |
0个(5),大于8个(6),大于80个(7) |
标识符组成 |
字母(8),数字(9) |
非字母数字字符(10),保留字(11) |
标识符第一个字符 |
字母(12) |
非字母(13) |
标识符使用 |
先说明后使用(14) |
未说明已使用(15) |
{{B}}表2 弱一般等价类测试用例{{/B}}
测试用例 |
a |
b |
c |
预期输出 |
WN1 |
5 |
5 |
5 |
等边三角形,属等价类R1 |
WN2 |
2 |
2 |
3 |
等腰三角形,属等价类R2 |
WN3 |
3 |
4 |
5 |
不等边三角形,属等价类R3 |
WN4 |
4 |
1 |
2 |
非三角形,属等价类R4 |
{{B}}表3 追加的弱健壮等价类测试用例(针对无效等价类){{/B}}
|
测试用例 |
a |
b |
c |
预期输出 |
WR1 |
-1 |
5 |
5 |
a取值不在所允许的取值值域内 |
WR2 |
5 |
-1 |
5 |
b取值不在所允许的取值值域内 |
WR3 |
5 |
5 |
-1 |
c取值不在所允许的取值值域内 |
WR4 |
201 |
5 |
5 |
a取值不在所允许的取值值域内 |
WR5 |
5 |
201 |
5 |
b取值不在所允许的取值值域内 |
WR6 |
5 |
5 |
201 |
c取值不在所允许的取值值域内 |
{{B}}表4 追加的强健壮等价类测试用例(不良输入){{/B}}
|
测试用例 |
a |
b |
c |
预期输出 |
SR1 |
-1 |
5 |
5 |
a取值不在所允许的取值值域内 |
SR2 |
5 |
-1 |
5 |
b取值不在所允许的取值值域内 |
SR3 |
5 |
5 |
-1 |
c取值不在所允许的取值值域内 |
SR4 |
-1 |
-1 |
5 |
a、b取值不在所允许的取值值域内 |
SR5 |
5 |
-1 |
-1 |
b、c取值不在所允许的取值值域内 |
SR6 |
-1 |
5 |
-1 |
a、c取值不在所允许的取值值域内 |
SR7 |
-1 |
-1 |
-1 |
a、b、c取值不在所允许的取值值域内 |
【答案解析】
问答题
以试卷评分和成绩统计的程序为例,说明采用边界值法设计测试用例的过程。
试卷评分和成绩统计的程序规格说明如下:
程序的输入条件由80个字符的记录组成。所有这些记录分为3组:
(1)标题;
(2)各题的标准答案记录(1~999道题);
(3)学生的答卷描述。
程序的输出有4个报告:
(1)按学生学号排序,每个学生的成绩和等级报告;
(2)按学生的成绩进行排序;
(3)平均分数及标准偏差报告;
(4)试题分析报告。
【正确答案】下面使用边界值分析法设计测试用例,如表1和表2所示。
{{B}}表1 输入条件边界分析表{{/B}}
|
输入条件 |
测试用例 |
输入文件 |
空输入文件 |
标题 |
无标题 只有1个字符 具有80个字符 |
出题个数 |
出了1道题 出了50道题 出了51道题 出了100道题 出了999道题 没出问题 题目数是非数值型 |
答案记录 |
标题记录后没有标准 答案记录 标准答案记录多1个 标准答案记录少1个 |
学生人数 |
学生人数0 学生人数1 学生人数200 学生人数201 |
学生答案 |
文件中第一个学生 文件中最后一个学生 |
|
{{B}}表2 输出条件边界值分析表{{/B}}
|
输出条件 |
测试用例 |
学生得分 |
所有学生得分相同 所有学生得分不同 一个学生得0分 一个学生得100分 |
输出报告1、2 |
编号最小和最大的学生 学生人数打印一页 学生人数打印一页后尚多一人 |
输出报告3 |
平均值取最大值 平均值取最小值 差距最大 差距最小 |
输出报告4 |
所有学生答对1题 所有学生答错1题 所有学生答对最后1题 所有学生答错最后1题 |
|
【答案解析】
问答题
NextDate函数的判定表测试用例设计。
NextDate函数要求函数的输出是输入日期后一天的日期。例如:若输入为2008年3月7日,则函数输出应为2008年3月8日。
问题:对上述函数采用判定表方法设计测试用例。
【正确答案】问题分析:NextDate函数的3个变量之间在输入定义域中存在一定的逻辑依赖关系,由于等价类划分和边界值分析测试都假设了变量是独立的,如果采用上述两种方法设计测试用例,那么这些依赖关系在机械地选取输入值时可能会丢失。而采用判断表法则可以通过使用“不可能动作”的概念表示条件的不可能组合,来强调这种依赖关系。
为了获得下一个日期,NextDate函数执行如下操作:
(1)如果输入日期不是当月最后一天,则把day变量的值加1。
(2)如果输入日期是1~11月份中某月地最后一天,则把day变量的值复位为1,month变量的值加1。
(3)如果输入日期是12月的最后一天,则day变量和month变量的值都复位为1,year变量的值加1。
(4)关于最后一天的判断:
·如果是有31天的月份(1,3,5,7,8,10,12),day变量值为31;
·如果是有30天的月份(4,6,9,11),day变量值为30;
·如果是有29天的月份(闰年的2月),day变量值为29;
·如果是有28天的月份(非闰年2月),day变量值为28。
根据所执行的操作,可列出NextDate函数的动作桩:
a1:不可能;a2:day加1;a3:day复位;a4:month加1;a5:month复位:a6:day加1
考虑到判断表的规模,条件使刚month、day、year变量的等价类。在以下等价类集合上建立判断表。
(1)对于month变量的取值
M1: {month: month有30天}
M2: (month: month有31天,12月除外}
M3: {month: month有12月}
M4: {month: month有2月}
(2)对于day变量的取值
D1: {day:1≤day≤27}
D2: {day: day=28}
D3: {day: day=29}
D4: {day: day=30}
D5: {day: day=31}
(3)对于year变量的取值
Y1: {year: year是闰年}
Y2: {year: year不是闰年}
(4)month变量的有效等价类:
M1: {month=4,6,9,11}
M2: {month=1,3,5,7,8,10}
M3: {month=12}
M4: {month=2}
(5)day变量的有效等价类:
D1: {1≤day≤26}
D2: {day=27}
D3: {day=28}
D4: {day=29}
D5: {day=30}
D6: {day=31}
(6)year变量的等价类:
Y1: {year是闰年}
Y2: {year不是闰年}
(7)考虑各种有效的输入情况,程序中可能采取的操作有以下6种:
a1: day+1
a2: day=2
a3: day=1
a4: month+1
a5: month=1
a6: year+1
【答案解析】
问答题
以自动饮料售货机为例,利用因果图法设计测试用例,为简化问题,假设售货机所有饮料的价格都是5角钱,其规格如下:
若投入5角钱或1元钱的硬币,按下“橙汁”或“啤酒”按钮,则相应的饮料就送出来。然而,如果售货机没有零钱找,则“零钱找完”红灯亮,这时再投入1元硬币并按下饮料按钮后,饮料不送出来,而且1元硬币也退出来;若有零钱找,则“零钱找完”红灯灭,在送出饮料的同时退还5角硬币。
问题:分析上述规格,采用基于因果图的方法设计测试用例。
【正确答案】(1)分析上面的规格说明,列出所有的原因和结果,并给每个原因和结果赋予一个标识符。
原因:1.售货机有零钱找
2.投入1元硬币
3.投入5角硬币
4.按下“橙汁”按钮
5.按下“啤酒”按钮
结果:21.售货机“零钱找完”红灯亮
22.退还1元硬币
23.找回5角硬币
24.送出橙汁饮料
25.送出啤酒饮料
(2)进一步分析语义,找出原因与结果之间、原因与原因之间的对应关系,根据这些关系画出因果图,如下图所示。
[*]
因果图
其中建立了4个中间结点,表示处理的中间状态:
11.投入1元硬币并按下饮料按钮
12.按下“橙汁”或“啤酒”的按钮
13.应当找5角钱并且售货机有零钱找
14.钱已付清
由于2与3、4与5不能同时发生,分别加上约束条件E。
(3)将因果图转换为判定表,如下表所示,并根据表中的每一列设计测试用冽。
[*]
【答案解析】