2009年3月全国计算机等级考试四级软件测试工程师笔试真题
一、选择题
1在指定条件下使用时,软件产品维持规定的性能水平的能力。这是指软件外部质量的
A:效率 B:易用性 C:功能性 D:可靠性
可靠性:在指定条件下使用,软件产品维持规定的性能水平的能力;
效率:在规定条件下,相对于所用的资源的数量,软件产品可提供适当性能的能力;
易用性:在指定条件下使用,软件产品被理解、学习、使用和吸引用户的能力;
功能性:当软件在指定条件下使用,软件产品提供明确的和隐含要求的功能的能力。 D
2:程序独立测试的人员应是
A:程序员自己 B:同一开发组的测试成员 C:第三方测试人员 D:同一开发组的其他成员
3: 如果一个软件产品的功能或特性没有实现,包括主要功能部分丢失,次要功能完全丢失,或错误的声明,这是属于()
A:致命的错误 B:严重的错误 C:一般的错误 D:微小的错误
严重的错误:指功能或特性没有实现,主要功能部分丧失,次要功能完全丧失,或致命的错误声明;
致命的错误:指造成系统或应用程序崩溃、死机、系统悬挂,或造成数据丢失、主要功能完全丧失等;
一般的错误:指不太严重的错误,这样的软件缺陷虽然不影响系统的基本使用,但没有很好的实现功能,没有达到预期的效果;
微小的错误:指一些小的问题,对功能几乎没有影响,产品及属性仍可使用。 B
4:有一段小程序,对数组A[n]中所有正整数和负整数求累加和,negat和posit分别返回负整数和正整数的累加和()
int maxInt=32767,minInt=-32768;
negat=0;posit=0;
for (int i=0;i<n;i++)
if(A[i]<0&&A[i]>=minInt-negat)negat=negat+A[i];
else if(A[i]>0&&A[i]<=maxInt-posit)posit=posit+A[i];
可能的测试路径数是
对与嵌套型分支结构,若有N个判定语句,则存在N+1条不同的路径。 B
5: 下图是一个判定路径覆盖图,其中用“◇”表示判定语句,用“ ”表示处理语句,用“○”表示判定汇合点,用“●——●”表示判定路径,若有一个测试用例覆盖了判定路径A、B、E、H,则判定路径覆盖为
A:57.1% B:78.6% C:90% D:100%
DDP覆盖率公式:DDP覆盖率=被评价到的判定路径数量/程序中判定路径总数×100%=4/7×100%=57.1%。A
6: 人们从长期的测试工作经验得知,大量的错误是发生在输入范围的 () A
A:边界上 B:内部 C:外部 D:相互作用上
7:单元测试的测试对象不包括 ()
A:设计单元 B:各个操作 C:内部消息序列 D:场景 D
8: 一个好的程序实现是要考虑各种可能出错的条件,并进行适当的出错处理,即预设各种出错处理的 () A:现象 B:策略 C:通路 D:场景
一个好的设计应能预见各种出错条件,并进行适当的出错处理,即预设各种出错处理通路。 C
9: 正向测试的测试用例用于验证被测单元的功能和性能指标是否能够兑现,而反向测试的测试用例则是要检查被测单元是否做了
A:应该做的事情 B:不该做的事情 C:有错误的事件 D:有性能缺陷的事情
集成测试中的逆向测试包括分析被测接口是否实现了需求规格没有描述的功能,检查规格说明中可能出现的接口遗漏,或者判断接口定义是否有错误,以及可能出现的接口异常错误,包括接口数据本身的错误、接口数据顺序错误等。 B
10: 在基于调用图的集成中,有一种集成策略就是对应与调用图的每一条边建立并执行一个集成测试会话,即对有调用关系的两个程序单元进行集成测试,这样可以免除驱动和桩的编写,这种集成策略是
A:持续集成 B:三明治集成 C:成对集成 D:相邻集成
成对集成的思想就是免除驱动/桩模块的开发,使用实际代码代替驱动模块和桩模块;三明治集成:把系统划分成三层,中间一层为目标层,测试的时候,对目标层上面的一层使用由顶向下的集成策略,对目标层下面的一层使用自底向上的集成策略,最后测试在目标层会合;相邻集成就是对每个邻居建立并执行一个集成测试会话 C
11: 以下哪种软件测试不属于软件性能测试的范畴
A:配置测试 B:健壮性测试 C:失效恢复测试 D:负载测试
软件性能测试的分类:性能测试、并发测试、压力测试、可靠性测试、负载测试、配置测试、失效恢复测试。 B
12: 以下目标中,哪个是软件性能测试的目标
A:检查软件的容错能力 B:发现压力下软件功能的缺陷
C:发现软件的安全漏洞 D:检查用户界面是否易于使用
软件性能测试的目标:发现缺陷、性能调优、能力检验与规划。 B
13: 以下关于软件可靠性测试的说法中,正确的是
A:软件运行剖面的定义需要符合软件的实际运行情况
B:测试用例的生成必须采用白盒测试方法
C:软件可靠性测试通常能够比黑盒测试发现更多的错误
D:软件可靠性测试必须在集成测试中实施
人们通过软件运行剖面来刻画软件实际运行情况。对于具体每个测试用例的设计,可靠性测试需要的测试用例与普通的软件测试并无不同,关键是要保证用于可靠性测试的测试用例集要完全符合运行剖面的定义。可靠性测试的目的是进行软件可靠性的预测 A
14:以下关于面向对象软件测试的说法中,正确的是
A:面向对象软件只能采用白盒测试,不能采用黑盒测试
B:测试一个类时,该类成员方法的任何一个消息序列都是合理的测试用例
C:若类B是类A的子类,针对类B的测试用例可以包含对类A的成员方法的调用
D:等价类划分是一种类树层次的测试技术
在设计每个类的测试用例时,不仅要考虑调用各个成员方法的输入参数,还要考虑如何设计调用的序列,而有的测试序列会在某些成员方法执行时因为不能满足方法正常执行的前提条件而导致方法处于不正常的工作状态,这些测试序列不是合理的测试序列。类B继承类A,合理的使用继承时类B的实例应该也是类A的实例,对类B的实例的测试应该已经包括其作为类A实例的测试,但如果继承使用不合理,还需要按照类A的规格说明对类A重新进行测试。等价类划分是一种方法层次的测试。 C
15:以下关于面向对象程序集成测试的说法中,错误的是
A:大突击集成只进行一轮,无需增量集成
B:与大突击集成相比,自底向上集成通常有助于得到更高的测试充分性
C:基干集成在任何情况下都优于自底向上集成
D:无论是自底向上集成还是自顶向下集成,都需要为集成测试开发相应代码
大突击集成只进行一轮,无需进行增量式集成;与大突击集成相比,自底向上集成中测试的充分性容易得到保证;基干集成的优点是:集中了自底向上集成、自顶向下集成和大突击集成三者的优点,而对三者的缺点也进行了控制,更适合于大型复杂项目的集成。 C
16: 以下哪种测试属于面向对象程序集成测试考虑的范畴
A:针对一个类的多个成员方法间协作的测试
B:针对一个成员方法的不同输入情况的测试
C:针对多个类的多个实例间协作的测试
D:针对一个类树上多个类间继承的测试
集成策略需要关注如何充分测试类间的各种连接。 C
17:以下关于Web应用软件测试的说法中,正确的是
A:链接测试是Web应用软件测试的一项内容
B:Web应用软件测试通常不考虑安全性测试
C:与传统软件相比,Web应用软件测试更简单
D:Web应用软件只能进行黑盒测试,不能进行白盒测试
Web应用软件的系统测试包括性能测试、易用性测试、内容测试、安全性测试、接口测试等;功能测试包括链接测试、表单测试和Cookie测试。 A
18:以下关于Web应用软件测试的说法中,错误的是
A:内容测试是Web应用软件测试的一项重要内容
B:Cookie安全性测试是Web应用软件安全性测试的一项重要内容
C:并发测试是Web应用软件性能测试的一项重要内容
D:表单测试是Web应用软件性能测试的一项重要内容
Web应用软件的系统测试包括性能测试、易用性测试、内容测试、安全性测试、接口测试等;功能测试包括链接测试、表单测试和Cookie测试。安全性测试包括服务器端的内容安全性、客户端的内容安全性、Cookie安全性和日志功能;性能测试包括并发测试、负载测试和压力测试、配置测试和性能调优。 D
19: 以下哪一项不属于软件易用性测试关注的范畴
A:软件界面的色彩是否协调
B:软件是否能在多种操作系统下运行
C:软件是否支持用户根据自己的需要进行定制
D:软件是否能主动引导用户使用相互关联的功能
易用性测试包括易安装性测试、功能易用性测试以及用户界面测试;易安装性测试包括安装手册的易用性、安装的自动化程度、安装的灵活性、安装中断的处理、修复安装和卸载、多环境安装的支持;功能易用性测试包括业务符合度、功能定制性、功能的关联度、数据的共享度、用户约束的合理度;用户界面测试包括界面整体测试、界面元素测试、输入测试。A选项属于界面整体测试的合理性测试;B选项属于易安装性测试;C选项属于功能易用性测试的功能定制性。D选项是在静态关联下具有的 D
20: 以下哪一项属于兼容性测试关注的范畴
A:办公软件在异常退出时是否会破坏正在处理的文档
B:杀毒软件在清除病毒时是否会破坏办公软件的文档
C:软件同类功能的使用风格是否一致
D:软件提供的功能与用户手册的说明是否一致
与其他软件的兼容性包括与其他支撑软件的兼容性、与其他同类软件的兼容性和与不同类软件的兼容性。同类软件间的互操作:当存在多个同类软件时,用户一般希望它们之间可以互操作,用户因此可以充分利用各个软件的优势;不同类的软件间通常不存在交互和冲突,因此通常不存在兼容性的问题,但对于一些特殊情况需要加以考虑。 B
21: 下列有关软件测试设计的说法中,正确的是
A:测试方案应考虑是否可行、是否有效和是否能够达到预期的测试目标
B:基于判定表的测试用例设计方法是白盒测试用例设计方法
C:测试方案设计中可以忽略软件系统的实际使用环境
D:测试开发不是测试用例设计的工作内容
软件测试设计的要点:所设计的测试技术方案是否可行,是否有效和是否能达到预期的测试目标;所设计的测试用例是否完整,边界条件是否考虑,其覆盖范围能达到多高;所设计的测试环境是否和用户的实际使用环境比较接近;白盒测试的用例设计的方法:采用逻辑覆盖的结构测试用例的设计方法;基于程序结构的域测试用例设计方法;数据流测试用例设计方法;根据对象状态或等待状态变化来设计测试用例;基于程序错误的变异来设计测试用例;基于代数运算符合的测试用例设计方法。测试开发是测试用例设计的一部分工作内容。 A
22: 下列有关测试项目结束与定稿测试报告的说法中,正确的是
A:测试执行完成,测试人员向测试负责人提交测试报告后,测试项目就可以结束了
B:对当前软件产品存在的缺陷进行逐个分析,认定剩余缺陷对产品质量无重大影响后,即可定稿测试报告
C:审查测试全过程,检查测试计划和内容无遗漏后,即可定稿测试报告
D:当所有测试计划内容完成,测试覆盖率达到要求以及产品质量达到定义的标准,即可定稿测试报告
测试项目结束的阶段性标志是将测试报告或质量报告发送出去,并得到测试经理或项目经理的认可。需要完成的管理操作:①审查测试全过程。在原来跟踪的基础上,要对测试项目进行全过程、全方位的审视,检查测试计划、测试用例是否得到执行,检查测试是否有遗漏。②对当前状态的审查。包括产品缺陷和过程中没有解决的各类问题。对产品目前存在的缺陷进行逐个的分析,了解对产品质量影响的程序,从而决定产品的测试是否能告一段落。③结束标识。根据上述两项的审查进行评估,如果所有测试内容完成,测试的覆盖率达到要求以及产品质量达到已定义的标准,就可以定稿测试报告。④项目总结。通过对项目中的问题分析,找出流程、技术和管理中存在的问题根源,避免今后再度发生并获得项目成功经验。 D
23: 下列有关自动测试的基本概念中,错误的是
A:仅有自动测试执行而无自动比较,则不算是完全自动化测试
B:自动比较的内容可以是:文本、格式化数据、电子邮件信息、数据库内容等
C:自动比较的局限性在于自动比较可能没有人工比较灵活性高
D:自动比较海量数据、屏幕输出等信息不是计算机能够胜任的自动工作
如果仅执行自动测试,而不进行自动比较,就不算是自动化测试;自动比较的内容可能是多种类型的:文本信息、专用格式化数据、屏幕输出内容、电子邮件信息、发送到硬件设备的数据或信号、通过网络发送到其他机器和进程的信息、数据库的内容等;自动比较的局限性在于办公自动比较可能没有人工比较灵活。 D
24:以下关于软件回归测试的说法中错误的是
A:软件变更后,应对软件变更部分的正确性和对变更需求的符合性进行测试
B:软件变更后,首先应对变更的软件单元进行测试,然后再进行其他相关的测试
C:软件变更后,不必再对软件原有正确的功能、性能和其他规定的要求进行测试
D:对具体的软件,可以根据软件测试合同及软件的重要性、完整性级别对回归测试内容进行剪裁
回归测试的目的是测试软件变更之后,变更部分的正确性和对变更需求的符合性,并测试软件变更之后,对软件原有正确的功能、性能和其他规定的要求不产生损害。在变更之后,首先应对变更的软件单元进行测试,然后再进行相关的测试;软件测试规范规定,对具体的软件可根据软件测试合同及软件的重要性、完整性级别的对上述各类软件测试的内容进行裁剪。 C
25: 以下说法中错误的是
A:验收测试是以需方为主的测试,其对象是完整的、集成的计算机系统
B:验收测试的技术依据是软件研制合同(或用户需求或系统需求)
C:进行验收测试的软件必需已经通过系统测试
D:验收测试一般应由软件的需方组织,不可以委托第三方测试机构实施
验收测试是以需方为主的测试,其对象是完整的、集成的计算机系统。验收测试一般由软件的需方组织,由独立于软件开发的人员实施。如果验收测试委托第三方实施,一般应委托国家认可的第三方测试机构。软件验收测试的技术依据是软件研制合同。其测试工作应满足被验收测试的软件已通过系统测试 D
二、论述题 (共3题,共50分)
1: 一个栈(Stack)对象有三种状态:S1——栈空;S2——栈非空也非满;S3——栈满。转换到各个状态的条件如下:
S1:(t0)创建栈对象时初始化,这是系统做的;
(t1)在S2状态下执行置空运算setEmpty();
(t2)在S3状态下执行置空运算setEmpty();
(t3)在S2状态下执行出栈运算Pop();
S2:(t4)在S1状态下执行进栈运算Push();
(t5)在S3状态下执行出栈运算Pop();
S3:(t6)在S2状态下执行进栈运算Push()。
为简化问题,假设栈Stack的容量为2,栈元素的数据类型为整数。要求
1.根据题意,画出栈对象的状态迁移图;
2.计算该状态迁移图的McCabe环路复杂性;
3.确定基本的测试路径,要求测试路径从S1出发最后回到S1,同时在状态转换时注明转换条件。
2: 某测试项目中的测试执行阶段按计划在3天后结束,将进入测试总结阶段。
(1).测试管理人员通过QESuite Web version 1.0测试过程管理工具观察到部分测试用例的设计状况和执行状况如下表,请从测试用例设计和测试用例执行2个方面说明观察到的问题和需要尽快开展的相关测试工作。
(2).该项目当前的软件问题处理状况如下:
测试项目当前剩余处在“待验”状态的软件问题有105个,处在“新建”状态的软件问题有14个,处在“打开”状态的软件问题有151个。已知该测试组的软件问题日常处理能力是90个软件问题/工作日,开发组日常修复软件问题的能力是40个软件问题/工作日。请说明软件问题报告处理方面说明存在的问题和需要尽快开展的相关开发和测试工作。
答;(1)子系统客户端容量未设计测试用例。登录与退出测试用例未执行,即时消息的个人设置功能的测试用例未执行完,其中还有6个未执行;测试用例设计存在问题:功能区域划分不详细,客户端容量的测试用例没有覆盖到,用例覆盖不全面。测试执行存在问题:存在未执行的用例。
(2).存在问题是开发组和测试组不能在2天后完成工作。
根据题中描述的数据,开发组中要修改的问题数是14+151=165,需要修改时间是160/40=4天;测试组即便新建的问题不需要修改,需要时间是:(105+151)/90=3天。
3: 已知C源程序如下:
/*A simple mailing list example using an array of structures. */
#include
#include
#define MAX 4
struct addr {
char name[30];
char street[40];
char city[20];
unsigned long int zip;
} addr_list[MAX];
void init_list(void), enter(void);
void deleteAddr(void), list(void);
int menu_select(void), find_free(void);
int main(void)
{
char choice;
init_list();/*initialize the structure array */
for(;;){
choice=menu_select();
switch(choice){
case 1:enter();
break;
case 2:deleteAddr();
break;
case 3:list();
break;
case 4:exit(0);
}
}
return 0;
}
/* Initialize the list. */
void init_list(void)
{
register int t;
for(t=0;t
}
/* Get a menu selection.*/
int menu_select(void)
{
char s[80];
int c;
printf("1. Enter a name\n");
printf("2. Delete a name\n");
printf("3. List the file\n");
printf("4. Quit\n");
do {
printf("\nEnter your choice:");
gets(s);
c=atoi(s);
}while(c<1||c>4);
return c;
}
/* Input addresses into the list. */
void enter(void)
{
int slot;
char s[80];
slot=find_free();
if(slot==-1){
printf("\nList Full");
return;
}
printf("Enter name:");
gets(addr_list[slot].name);
printf("Enter street:");
gets(addr_list[slot].street);
printf("Enter city:");
gets(addr_list[slot].city);
printf("Enter zip:");
gets(s);
addr_list[slot].zip = strtoul(s, \0, 10);
}
/* Find an unused structure.*/
int find_free(void)
{
register int t;
for(t=0; addr_list[t].name[0]&&t
if(t==MAX) return -1; /* no slots free */
return t;
}
/* Delete an address.*/
void deleteAddr(void)
{
register int slot;
char s[80];
printf("enter record #:");
gets(s);
slot=atoi(s);
if(slot>=0 && slot < MAX)
addr_list[slot].name[0]=\0;
}
/* Display the list on the screen.*/
void list(void)
{
register int t;
for(t=0;t
if(addr_list[t].name[0]){
printf("%s\n",addr_list[t].name);
printf("%s\n",addr_list[t].street);
printf("%s\n",addr_list[t].city);
printf("%lu\n\n",addr_list[t].zip);
}
}
printf("\n\n");
}
1.画出main函数的控制流程图;
2.设计一组测试用例,使该程序所有函数的语句覆盖率尽量达到100%。如果认为该程序的语句覆盖率无法达到100%,需说明原因。
答案:
1.int main(void)
{ Char choice;
Init_list();
for(;;){
choice=menu_select();
switch(choice){
case 1: enter();
break;
case 2: deleteAddr();
break;
case 3: list();
break;
case 4: exit(0);
}
}
Return 0;
}
Void init_list(void)
{
Register int t;
For (t=0;t
Addr_list[t].name[0]=\0;①
}
Int menu_select(void)
{
Char s[80];
Int c;
Printf("1.Enter a name\n");
Printf("2.Delete a name\n");
Printf("3.List the file\n");
Printf("4.Quit\n");②
Do{
Printf("\nEnter your choice:");
Gets(s);
C=atoi(s);③
}while(c<1||c>4);
Return c;④
}
Void enter(void)
{
Int slot;
Char s[80];
Slot=find_free();
If(slot==-1) {
Printf("\Nlist FULL");
Return; ⑦ }
Printf("Enter name:");
Gets(add_list[slot].name);
Printf("Enter street:");
Gets(addr_list[slot].street);
Printf("Enter city:");
Gets(addr_list[slot].city);
Printf("Enter zip:");
Gets(s);
Addr_list[slot].zip=strtoul(s,\0,10); ⑧
}
Int find_free(void)
{
Register int t;
For(t=0;addr_list[t].name[0] && t
If(t==MAX) return -1; ⑤
Return t; ⑥
}
Void deleteAddr(void)
{
Register int slot;
Char s[80];
Printf("enter record # :");
Gets(s);
Slot=atoi(s); ⑨
If(slot>=0 && slot
Addr_list[slot].name[0]=\0; ⑩
}
void list(void)
{
Register int t;
for(t=0;t
If(addr_list[t].name[0]){
Printf("%s\n",addr_list[t].name);
Printf("%s\n",addr_list[t].street);
Printf("%s\n",addr_list[t].city);
Printf("%lu\n\n",addr_list[t.zip]);
}
}
Printf("\n\n");
}S1: t
S2: c<1||c>4
S3: addr_list[t].name[0] && t
S4:slot==-1
S5: slot>=0&&slot
S6: addr_list[t].name[0]
(2).测试用例:
TEST1:输入:在"Enter your choice:"后输入:1;
输出:"1.Enter a name"
"2.Delete a name"
"3.list the file"
"4.Quit"
"List Full"
Test2:输入:在"Enter your choice:"后输入:1;
在"Enter name:" 后输入:王明
在 "Enter street :" 后输入:王府井
在 "Enter city: :" 后输入:北京
在 "Enter zip: :" 后输入:4121500
输出:"1.Enter a name"
"2.Delete a name"
"3.list the file"
"4.Quit"
Test3:输入:在"Enter your choice:"后输入:2;
在"Enter record $:" 后输入:4;
输出:"1.Enter a name"
"2.Delete a name"
"3.list the file"
"4.Quit"
Test4:输入:在"Enter your choice:"后输入:3;
输出:"1.Enter a name"
"2.Delete a name"
"3.list the file"
"4.Quit"
王明
王府井
北京
4121500
Test4:输入:在"Enter your choice:"后输入:4;
输出:无输出,系统退出
不能达到100%,一些独立的路径如此程序中的【输入】,往往不是完全孤立的,有时候它是程序正常的控制流的一部分,这时,这些路径的测试可以是另一条路径测试的一部分。
本文来源:https://www.2haoxitong.net/k/doc/8fb94348227916888486d7b7.html
文档为doc格式