选择题(每小题2分,共50分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。请将正确选项填涂在答题卡相应位置上,答在试卷上不得分。
(1)坚持在软件开发的各个阶段实施下列哪种质量保证措施,才能在开发过程中尽早发现和预防错误,把出现的错误克服在早期
A)技术评审 B)程序测试 C)文档审查 D)管理评审
(2)经验表明,在程序测试中,某模块与其他模块相比,若该模块已发现并改正的错误数目较多,则该模块中残存的错误数目与其他模块相比,通常应该
A)较少 B)较多 C)相似 D)不确定
(3)对程序中已发现的错误进行错误定位和确定出错性质,并改正这些错误,同时修改相关的文档,称为
A)测试 B)调试 C)错误分析 D)验证
(4)同行评审,有时称为同级评审,是一种通过作者的同行来确认缺陷和需要变更区域的检查方法。它主要分为管理评审、技术评审、文档评审和
A)误差评审 B)项目评审 C)过程评审 D)组织体系评审
(5)数据流覆盖关注的是程序中某个变量从其声明、赋值到引用的变化情况,它是下列哪一种覆盖的变种
A)语句覆盖 B)控制覆盖 C)分支覆盖 D)路径覆盖
(6)程序的流程图如下图所示,采用路径覆盖法进行测试,则至少需要几个测试用例可以覆盖所有可能的路径
A)5 B)6 C)7 D)8
(7)如果一个判定中的复合条件表达式为(A > 1)or(B <= 3),则为了达到100%的条件覆盖率,至少需要设计多少个测试用例
A)1 B)2 C)3 D)4
(8)自底向上单元测试的策略是首先对模块调用图上的哪一层模块进行测试
A)最底层 B)下一层 C)最高层 D)上一层
(9)基本路径测试满足
A)语句覆盖 B)路径覆盖 C)分支覆盖 D)条件覆盖
(10)集成测试对系统内部的交互以及集成后系统功能检验了何种质量特性
A)正确性 B)可靠性 C)可使用性 D)可维护性
(11)在软件性能测试中,下列指标中哪个不是软件性能的指标
A)响应时间 B)吞吐量 C)资源利用率 D)并发进程数
(12)下列关于软件性能测试的说法中,正确的是
A)性能测试的目的不是为了发现软件缺陷
B)压力测试与负载测试的目的都是为了探测软件在满足预定性能需求的情况下所能负担的最大压力
C)性能测试通常要对测试结果进行分析才能获得测试结论
D)在性能下降曲线上,最大建议用户数通常处于性能轻微下降区与性能急剧下降区的交界处
(13)下列关于软件可靠性测试的说法中,错误的是
A)发现软件缺陷是软件可靠性测试的主要目的
B)软件可靠性测试通常用于有可靠性要求的软件
C)在一次软件可靠性测试中,执行的测试用例必须完全符合所定义的软件运行剖面
D)可靠性测试通常要对测试结果进行分析才能获得测试结论
(14)下列关于面向对象软件测试的说法中,正确的是
A)在测试一个类时,只要对该类的每个成员方法都进行充分的测试就完成了对该类充分的测试
B)在存在多态的情况下,为了达到较高的测试充分性,应对所有可能的绑定都进行测试
C)假设类B是类A的子类,如果类A已进行了充分的测试,在测试类B时不必测试任何类B继承类A的成员方法
D)对于一棵继承树上的多个类,只有处于叶节点的类需要测试
(15)下列哪种测试不属于面向对象单元测试考虑的范畴
A)成员方法的测试 B)类的测试
C)类树的测试 D)多个相互协作的类树的测试
(16)下列关于面向对象集成测试的说法中,正确的是
A)大突击集成是面向对象集成测试最常用且最有效的方法
B)自底向上集成和自顶向下集成都需要为集成测试开发大量代码
C)协作集成在任何情况下都优于自底向上集成和自顶向下集成
D)高频集成是以自底向上集成为基础,利用冒烟测试进行的集成测试
(17)在Web应用软件的分层测试策略中,下列哪个不是测试关注的层次
A)数据层 B)业务层 C)服务层 D)表示层
(18)下列关于Web应用软件测试的说法中,正确的是
A)Cookie测试是Web应用软件功能测试的重要内容
B)对于没有使用数据库的Web应用软件,不需要进行性能测试
C)链接测试是Web应用软件易用性测试的重要内容
D)Web应用软件安全性测试仅关注Web应用软件是否能够防御网络攻击
(19)下列哪一项不属于软件功能易用性测试关注的内容
A)软件界面的色彩是否协调
B)软件是否能主动禁止用户可能进行的非法操作
C)软件是否允许用户针对自己的使用习惯进行定制
D)软件是否能帮助用户减少输入中的重复劳动
(20)下列关于极限测试的说法中,正确的是
A)极限测试是一种新型的测试方法,传统的测试技术均不适用于极限测试
B)极限测试中所有的测试均是由编码人员完成的
C)与传统的软件测试相比,极限测试是一种更严格的测试
D)极限测试需要频繁地进行单元测试
(21)下列有关测试过程V模型的说法中,正确的是
A)验收测试应确定程序的执行是否满足软件设计的要求
B)系统测试应确定系统功能和性能的质量特性是否达到系统要求的指标
C)单元测试和集成测试应确定软件的实现是否满足用户需要或合同的要求
D)集成测试在编码结束前就可以开始
(22)下列哪项工作与软件缺陷管理和追踪无关
A)对缺陷应该包含的信息条目、状态分类等进行完善设计
B)通过软件系统自动发送通知给相关开发和测试人员,使缺陷得到及时处理
C)对测试用例的执行结果进行记录和追踪
D)通过一些历史曲线和统计曲线来分析和预测未来的缺陷发现情况
(23)下列有关软件问题生命周期模型状态定义的说法中,错误的是
A)“新建”表示测试中发现并报告了新的软件问题
B)“打开”表示软件问题已被确认并分配给相关开发工程师处理
C)“关闭”表示软件问题已被开发人员修复并等待测试人员验证
D)“解决”表示软件问题已被确认修复
(24)下列有关软件测试工具的说法中,错误的是
A)静态测试工具可用于对软件需求、结构设计、详细设计和代码进行评审、走查和审查
B)静态测试工具可对软件的复杂度分析、数据流分析、控制流分析和接口分析提供支持
C)动态测试工具可用于软件的覆盖分析和性能分析
D)动态测试工具不包括软件的仿真测试和变异测试
(25)计算机软件测试规范规定,软件测试的类别可分为:单元测试、集成测试以及
A)系统测试 B)验收测试
C)系统测试和验收测试 D)配置项测试、系统测试和验收测试
论述题(3题,共50分)
论述题答题必须用蓝、黑色钢笔或圆珠笔写在论述题答题纸的相应位置上。
论述题1:以下是学生选课系统中“学生查询成绩”交互行为的描述,请按要求回答问题(20分)
交互开始时终端上显示首页,用户选择“查询”请求后,显示“请输入学号”。
在用户输入学号后,系统核对学生学号:若输入的学号不正确,则显示“输入的学号不正确”,此次查询取消,回到首页;若输入的学号正确,出现“请输入课程名”。
一旦输入课程名,就开始核对课程名称:若输入的课程名不正确,则显示“输入的课程名不正确”,此次查询取消,回到首页;若输入的课程名正确,则根据“学号”和“课程名”,查询学生成绩。
若查询学生成绩成功,则显示查询到的成绩,系统询问是否继续查询:当用户选择“继续查询”后回到“请输入学号”;当用户选择“结束查询”后回到首页。
若查询学生成绩失败,则显示“查询失败”后回到首页。
(1)请画出该系统以上交互行为的状态图(应满足功能图的要求,不可画成流程图)。(10分)
(2)使用基本路径测试方法确定该状态图的测试路径。(10分)
论述题2:以下是QESuite Web Version 1.0中某测试项目的部分界面,请按要求回答问题(12分)
(1)下图是该测试项目的测试用例执行文档界面。有几个测试用例没有执行?有几个测试用例最近一次执行通过?有几个测试用例最近一次执行失败?(3分)
(2)下图是该测试项目的某软件问题报告视图。按QESuite Web Version 1.0中的软件问题生命周期定义,4号软件问题报告需要何种人员进行哪些可能的操作?5号软件问题报告需要何种人员进行哪些可能的操作?8号软件问题报告需要何种人员进行哪些可能的操作?(9分)
论述题3:针对以下C语言程序,请按要求回答问题(18分)
已知link.c源程序如下:
/*link.c程序对单向链表进行操作,首先建立一个单向链表,然后根据用户的选择可以对其进行插入节点、删除节点和链表反转操作*/
#include
#include
typedef struct list_node *list_pointer; //定义链表指针
typedef struct list_node{ //定义链表结构
int data;
list_pointer link;
}list_node;
//用到的操作函数:
list_pointer create(); //建立一个单向链表
void insert(list_pointer *p_ptr, list_pointer node); //在node后加入一个新的节点
void delete_node(list_pointer *p_ptr, list_pointer trail, list_pointer node);
//删除前一个节点是trail的当前节点node
void print(list_pointer ptr); //打印链表节点中的值
list_pointer invert(list_pointer lead); //反转链表
int main()
{
list_pointer ptr=NULL;
list_pointer node, trail;
list_pointer *p = &ptr;
int choose, location, i;
printf("you should create a link first:\n");
//建立一个单向链表:
ptr=create(); /* ptr 指向链表的第一个节点 */
print(ptr);
//根据用户的不同选择进行相应的操作:
printf("input number 0, you can quit the program\n");
printf("input number 1, you can insert a new node to link\n");
printf("input number 2, you can delete a node from the link\n");
printf("input number 3, you can invert the link\n");
printf("please input your choice\n");
scanf("%d", &choose);
while(choose!=0){
switch(choose){
case 1:
printf("you will insert a node to the link\n");
printf("please input the location of the node:\n");
scanf("%d", &location);
node = ptr;
i = 1;
while(i
node = node->link;
i++;
}
insert(p, node); /* p为指向ptr的指针 */
print(ptr);
break;
case 2:
printf("you will delete a node from the link\n");
printf("please input the location of the node:\n");
scanf("%d", &location);
node = ptr;
if(location ==1)
trail = NULL;
trail = ptr;
i = 1;
while(i
trail = trail->link;
i++;
}
node = trail->link;
delete_node(p, trail, node);
print(ptr);
break;
case 3:
printf("you will invert the link\n");
ptr = invert(ptr);
print(ptr);
break;
default:
break;
return -1;
}
printf("please input your choice\n");
scanf("%d", &choose);
}
return 0;
}
//根据用户的输入数值建立一个新的单向链表:
list_pointer create()
{
int i, current, length;
list_pointer p1, p2, head;
printf("please input the node number of the link:\n");
scanf("%d", &length);
printf("the number of the link is : %d\n", length);
printf("please input the data for the link node:\n");
i =0;
p1= p2= (list_pointer) malloc(sizeof(list_node));
head = p1;
for(i = 0; i
scanf("%d", ¤t);
p1->data = current;
p2->link = p1;
p2 = p1;
p1 = (list_pointer) malloc(sizeof(list_node));
}
p2->link = NULL;
return head;
}
……
(1)画出主函数main的控制流程图。(10分)
(2)设计一组测试用例,尽量使main 函数的语句覆盖率能达到100% 。如果认为该函数的语句覆盖率无法达到100% ,需说明原因。(8分)