一、选择题下列各题四个选项中,只有一个选项是正确的。
二、论述题论述题1:
在企业信息管理系统中,人员信息查询是最常见的。使用以下3个独立的查询条件:
1)员工号(ID)
2)员工姓名(Name)
3)员工邮件地址(eMail)
每个查询条件可有可无,但不能都没有;且条件的取值可以是能查到的,也可以是查不到的。当出现多个查询条件时,按ID→Name→eMail的顺序查询。如果某一条件未出现,则检查下一条件;如果某一条件出现,则检查满足该条件取值的信息是否存在:若不存在,立刻中止查询,并输出失败信息;若存在,继续下一条件查询,最后输出查询结果。要求1. 画出实现查询的程序流程图。
流程图
2. 给出一组测试路径,能覆盖程序流程图的所有分支。
覆盖程序流程图的所有分支的测试路径如下表所示;
序号 |
ID |
Name |
eMail |
1 |
有,存在 |
无 |
无 |
2 |
有,不存在 |
无 |
无 |
3 |
有,存在 |
有,存在 |
无 |
4 |
有,存在 |
有,不存在 |
无 |
5 |
有,存在 |
有,存在 |
有,存在 |
6 |
有,存在 |
有,存在 |
有,不存在 |
7 |
无 |
有,存在 |
无 |
8 |
无 |
有,不存在 |
无 |
9 |
无 |
有,存在 |
有,存在 |
10 |
无 |
有,存在 |
有,不存在 |
11 |
无 |
无 |
有,存在 |
12 |
无 |
无 |
有,不存在 |
13 |
无 |
无 |
无 |
3. QESuite Web Version 1.0中,已知某OA系统测试项目的部分信息如下:
●测试版本:总计4个测试版本,按日期排序分别为OA1.0_111009,OA1.0_111025,OA1.0_111103,OA1.0_111129。
●功能分类视图中部分待测区域及人员分配定义如下表所示:
功能区域 | 功能区域 | 测试人员 | 开发人员 |
首页 | 首页 | 张金晖 | 刘平 |
发文管理 | 发文 | 赵均 | 郑镇国 |
审核 | 赵均 | 郑镇国 |
…… | …… | …… |
会签 | 赵均 | 郑镇国 |
系统维护 | 系统维护 | 肖小军 | 张国磊 |
…… | …… | …… | …… |
下表是功能区域“发文管理/发文”下某一个软件问题的操作历史信息,请依据QESuite Web Version 1.0的软件问题生命周期定义和题中提供的相关人员分配和测试版本信息,填写表中5项空缺的操作历史信息。
操作序号 | 操作者 | 执行操作 | 操作后的问题状态 | 测试版本 |
1 | 赵均 | 新建 | 新建 | OA1.0_111009 |
2 | 赵均 | 校验/再现 | 打开/再现 | OA1.0_111009 |
3 | 郑镇国 |
| 待验/修复 | OA1.0_111025 |
4 | 赵均 |
| 打开/再现 | OA1.0_111025 |
5 | 郑镇国 | 修复/修复 | 待验/修复 | OA1.0_111103 |
6 | 赵均 | 验证/同意 | 解决/修复 | OA1.0_111103 |
7 | 赵均 |
| 打开/再现 | OA1.0_111129 |
8 | 郑镇国 | 修复/不修复 | 待验/不修复 | 无 |
9 | 赵均 | 验证/同意 |
|
|
论述题2:
下图是QEsuite Web Version 1.0的问题报告工作状态转换流程。
操作3中在打开/再现下,应由开发人员执行修复操作,操作后转为待验状态,该空填写:修复/修复。
操作4中在待验状态下,应由测试人员验证。根据操作5所示的执行操作可知,操作3中未能修复,所以操作4空填写:验证/同意。
操作7中在解决状态下,应由测试人员重新打开,该空填写:回归测试。
操作9中经验证同意不修复,操作后的问题状态应为:关闭。由于总计4个测试版本,并按日期排序,所以最后的测试版本应为:OA1.0_111129。
论述题3:
/*longIntAdd*/
#include<stdio.h>
#include<string.h>
#define LENGTH 81
void addLInt(char s1[],char s2[]);
void reverse(char s[]);
int main()
{
char intstr1[LENGTH],intstr2[LENGTH];
printf("请输入超长整数的被加数和加数:\n");
scanf("%s%s",intstr1,intstr2);
addLInt(intstr1,intstr2);
printf("超长整数和为:%s",intstr1);
return 0;
}
void addLInt(char s1[],char s2[])
{
int i=0,tmp,c=0;
char s[LENGTH];
if(strlen(s1)<strlen(s2)){
strcpy(s,s1);
strcpy(s1,s2);
strcpy(s2,s);
}
reverse(s1);reverse(s2);
while(s2[i]!=;\0'){
tmp=s1[i]-'0'+s2[i]-'0'+c;
81[i]=tmp%10+'0';
c=tmp/10;
i++;
}
while(si[1]!='\0'&&c){
tmp=s1[i]-'0'+c;
s1[i]=tmp%10+'0';
c=tmp/10;
i++;
}
If(c){
s1[i++]=c+'0';
s1[i]='\0';
}
reverse(s1);
}
void reverse(char s[])
{
int i,j,c;
for(i=0,j=strlen(s)-1;i<j;i++,j--){
c=s[i];
s[i]=s[j];
s[j]=c;
}
}4. 画出程序中函数addLInt的控制流程图;
函数addLInt的控制流程图。
5. 设计一组测试用例,使该程序addLInt函数的语句覆盖率和分支覆盖率均能达到100%。如果认为该函数的语句覆盖率或分支覆盖率无法达到100%,需说明为什么。
测试用例
a.s1:“1111111111111111” s2:“2222222222222222"
b.s1:“123456789” s2:“989”
c.s1:“989” s2:“123456789”
d.s1:“999999999999” s2:“111111”
[解析] 语句覆盖是指设计若干测试用例,运行被测程序,使得每个可执行语句至少执行一次。
语句覆盖率=被评价到的语句数量/可执行的语句数量×100%。
设计若干测试用例,运行被测程序使得每个判定的取真分支和取假分支至少评价一次。
判定覆盖率=被评价到的判定分支个数/判定分支的总数×100%。
当输入a、b、c、d中的测试用例后,语句覆盖率和分支覆盖率均为100%。