信息学院软件测试试题A
专业:软件工程 学号: 姓名: 成绩: 一、填空题(每空1分,共10 分)
1. 完整的测试应包括( 制定测试计划 )(设计测试方案)(测试准
备和测试环境的搭建)(执行测试 )( 测试评估 )。 2. 设计测试用例时应包括( 输入数据 )和(预期结果 )。 3. 程序插装中插入的语句可以是(打印语句 ),(计数语句),(断言
语句)。
二、选择题(每空1分,共30分)
1.为了把握软件开发各个环节的正确性和协调性,人们需要进行( ②
确认 )和(③ 验证 )工作。( ② 确认 )的目的是想证实在一
给定的外部环境中软件的逻辑正确性。它包括( ② )和( ③ ),( ③ )则试图证明在软件生存期各个阶段,以及阶段间的逻辑( ③
协调性 )、( ④ 完备性 )和正确性。 供选择的答案:
A, B. ① 操作
② 确认A ③ 验证 B ④ 测试 ⑤ 调试
C, D. ① 用户的确认 ② 需求规格说明的确认
③ 程序的确认 ④ 测试的确认
E, F. ① 可靠性 ② 独立性 ③ 协调性 ④ 完备性 ⑤ 扩充性
2.测试过程需要三类输入:(② 软件配置 )、(④ 测试配置)和(⑥ 测
试工具)。请选择正确的答案填入下图中以完成测试信息处理的全过
第 1 页 共 11 页
程。
D
E
A B F
C
供选择的答案:
A C. D F. 类
① 接口选择 ④ 测试配置
② 软件配置 ⑤ 测试环境
③ 硬件配置 ⑥ 测试工具
① 排错E ② 可靠性分析F ③ 结果分析D ④ 数据分
3.软件测试通常可分为单元测试、集成测试、确认测试和系统测试,其中确认测试主要用于发现_①需求分析_阶段的错误。在集成测试时,通常可采用自顶向下增殖式集成和自底向上增殖式集成。在自底向上增殖式集成时,对每个被集成的模块③要设
计驱动模块,但不必设计桩模块 。对那些为众多用户开发的软件
(如操作系统,编译程序),通常还要进行α测试和β测试,以发现可能只有最终用户才能发现的错误,其中,α测试是指最终用户在_②开发环境下,开发人员在场的情况下所进行的测试,β测试是指最终用户在_③用户的实际使用环境下,开发人员不在场
_的情况下所进行的测试。在软件维护阶段,当修改软件后,
除了进行常规的测试外,还应进行_④回归_测试。
供选择的答案:
A: ①需求分析 ②概要设计 ③详细设计 ④编码
第 2 页 共 11 页
B: ①不必设计驱动模块和桩(stub)模块
②不必设计驱动模块,但要设计桩模块 ③要设计驱动模块,但不必设计桩模块 ④要设计驱动模块和桩模块 C、D:①开发环境下,开发人员不在场
②开发环境下,开发人员在场
③用户的实际使用环境下,开发人员不在场 ④用户的实际使用环境下,开发人员在场
E: ①恢复 ②强度
③安装 ④回归
4.语句覆盖、判定覆盖、条件覆盖和路径覆盖都是白盒测试法设计测试用例的覆盖准则,在这些覆盖准则中最弱的准则是_①语句覆盖_,最强的准则是_③路径覆盖_。此外,还有多种黑盒测试的设计测试用例方法,如_②因果图_。
供选择的答案:
A、B: ①语句覆盖 ②条件覆盖 ③路径覆盖 C: ①ER图 ②因果图 ③DFD图
④判定覆盖 ④IPO图
5.程序的三种基本控制结构是( ② 顺序,条件,循环 )。它们的共同点是(④ 只有一个入口和一个出口 )。结构化程序设计的一种基本方法是(④ 逐步求精法)。软件测试的目的是(② 发现程序中的错误)。软件调试的目的是(① 找出错误所在并改正之 )。
供选择的答案:
A.
① 过程,子程序,分程序 ③ 递归,堆栈,队列 B.
① 不能嵌套使用 ③ 已经用硬件实现
② 顺序,条件,循环 ④ 调用,返回,转移
② 只能用来写简单的程序 ④ 只有一个入口和一个出口
第 3 页 共 11 页
C. D.
① 筛选法 ② 递归法 ③ 归纳法 ① 证明程序中没有错误 ③ 测量程序的动态特性
④ 逐步求精法
② 发现程序中的错误 ④ 检查程序中的语法错误 ② 排除存在错误的可能性 ④ 统计出错的次数
E. ① 找出错误所在并改正之 ③ 对错误性质进行分类
6.从下列关于软件测试的叙述中,选出5条正确的叙述。
( (4) )( (6) )( (7) )( (5) )( (10) ) (1) 用黑盒法测试时,测试用例是根据程序内部逻辑设计的。 (2) 尽量用公共过程或子程序去代替重复的代码段。 (3) 测试是为了验证该软件已正确地实现了用户的要求。 (4) 对于连锁型分支结构,若有n个判定语句,则有2n条路径。 (5) 尽量采用复合的条件测试,以避免嵌套的分支结构。
(6) GOTO语句概念简单,使用方便,在某些情况下,保留GOTO语句反能使写出的程序更加简洁。
(7) 发现错误多的程序模块,残留在模块中的错误也多。 (8) 黑盒测试方法中最有效的是因果图法。
(9) 在做程序的单元测试时,桩(存根)模块比驱动模块容易编写。 (10) 程序效率的提高主要应通过选择高效的算法来实现。
四、简答题(每题5分,共20分)
1. 写出软件测试与软件开发的关系
平常我们理解的软件开发可能只是代码实现。
其实软件开发是一个系统的工程。包括需求分析,设计,编码,测试,维护等等几个环节。测试是整个软件开发流程中的一个环节。。在现代软件开发的流程中,测试是贯穿于整个开发流程了,而不是只是在编码完成以后才开始的了。软件开发过程是一个自顶向下,逐步细化的过程,而测试过程则是依相反的顺序安排的 自底向上,逐步集成的过程。低一级测试为上
第 4 页 共 11 页
一级测试准备条件。首先对每一个程序模块进行单元测试,消除程序模块内部在逻辑上和功能上的错误和缺陷。再对照软件设计进行集成测试,检测和排除子系统(或系统)结构上的错误。随后再对照需求,进行确认测试。最后从系统全体出发,运行系统,看是否满足要求。
2. 为什么进行软件测试?软件测试的目的是什么?
是否需要进行软件测试取决于软件开发过程是否存在缺陷,前期的缺陷导致缺陷放大,使软件质量度低,进度、成本无法控制异常的庞大。从而得出的结论是:要尽早测试,尽早的发现问题。
软件测试的目的,第一是确认软件的质量,其一方面是确认软件做了你所期望做
的事情(Do the right thing),另一方面是确认软件以正确的方式来做了这个事情(Do it right)。第二是提供信息,比如提供给开发人员或程序经理的回馈信息,为风险评估所准备的信息。第三软件测试不仅是在测试软件软件产品本身,而且还包括软件开发的过程。如果一个软件产品开发完成之后发现了很多问题,这说明此软件开发过程很可能是有缺陷的。因此,软件测试的第三个目的是保证整个软件开发过程是高质量的。
3. 回归测试
在软件生命周期中的任何一个阶段,只要软件发生了改变,就可能给该软件带来问题。软件的改变可能是源于发现了错误并做了修改,也有可能是因为在集成或维护阶段加入了新的模块。当软件中所含错误被发现时,如果错误跟踪与管理系统不够完善,就可能会遗漏对这些错误的修改;而开发者对错误理解的不够透彻,也可能导致所做的修改只修正了错误的外在表现,而没有修复错误本身,从而造成修改失败;修改还有可能产生副作用从而导致软件未被修改的部分产生新的问题,使本来工作正常的功能产生错误。同样,在有新代码加入软件的时候,除了新加入的代码中有可能含有错误外,新代码还有可能对原有的代码带来影响。因此,每当软件发生变化时,我们就必须重新测试现有的功能,以便确定修改是否达到了预期的目的,检查修改是否损害了原有的正常功能。同时,还需要补充新的测试用例来测试新的或被修改了的功能。为了验证修改的正确性及其影响就需
第 5 页 共 11 页
要进行回归测试。 回归测试在软件生命周期中扮演着重要的角色,因忽视回归测试而造成严重后果的例子不计其数,导致阿里亚娜5型火箭发射失败的软件缺陷就是由于复用的代码没有经过充分的回归测试造成的。 回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。在渐进和快速迭代开发中,新版本的连续发布使回归测试进行的更加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的效率和有效性是非常有意义的。
4. 写出在什么情况下适宜做性能测试 实时系统和嵌入式系统
性能测试是在系统相对稳定时进行的,所以首先要进行功能测试 完成系统的集成测试,系统试运行阶段 系统运行时出现性能问题
五、设计题
1.下面是快速排序算法中的一趟划分算法,其中datalist是数据表,它有两个数据成员:一是元素类型为Element的数组V,另一个是数组大小n。算法中用到两个操作,一是取某数组元素V[i]的关键码操作getKey ( ),一是交换两数组元素内容的操作Swap( ):
int Partition ( datalist &list, int low, int high ) {
//在区间[ low, high ]以第一个对象为基准进行一次划分,k返回基准对象回放位置。 int k = low; Element pivot = list.V[low]; for ( int i = low+1; i <= high; i++ )
//基准对象
//检测整个序列,进行划分
if ( list.V[i].getKey ( ) < pivot.getKey( ) && ++ k != i )
第 6 页 共 11 页
}
Swap ( list.V[k], list.V[i] ); Swap ( list.V[low], list.V[k] ); return k;
//小于基准的交换到左侧去 //将基准对象就位 //返回基准对象位置
(1) 试画出它的程序流程图;
(2) 试利用路径覆盖方法为它设计足够的测试用例(循环次数限定为0次,1次)。(10分)
2.设要对一个自动饮料售货机软件进行黑盒测试。该软件的规格说明
如下:
“若投入5角钱或1元钱的硬币,押下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来。若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来;若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还5角硬币。”
(1) 分析其中的原因和结果,画出判定表; (2) 设计测试该软件的全部测试用例。
(10分)
3.阅读以下关于软件可靠性需求分析方面的叙述,回答问题。
某企业信息部门的李工程师正在为其下属单位开发一个应用软件,在编写软件需求规格说明书时,涉及到如何定量地描述软件可靠性的问题。
李工认为软件可靠性指的是在将要使用的指定环境下,软件能以用户可接受的方式正确运行任务所表现出来的能力。从定量角度看,似乎应当是该软件在约定的环境条件下和在给定的时间区间内,按照软件规格说明的要求,成功地运行程序所规定功能的概率。但是,他感到要具体地作定
第 7 页 共 11 页
量描述有些困难。
为此,李工查阅到了本部门某个软件需求规格说明书中有关的一段内容:
“(1)在集成与系统测试期间,由非开发组人员参与测试,每10K行可执行代码可能检测到的错误(BUG)不能大于6个;
(2)在提交使用的系统中,每 10K 行可执行代码可能保留着的错误数不能大于 8 个;
(3)在第一年工作期间,系统在99.9%的工作日期间内,应能保持100%的正常工作状态。”
在上述说明后,还有一条注解是:错误 (BUG) 可采用蒙特卡罗 (MonteCarlo) 随机植入技术进行测试。 [问题]
李工程师首先想到了曾经学到过采用蒙特卡罗随机统计技术确定不规则形状封闭图形面积的方法,即是采用一个大的矩形把待测的封闭图形完全包围在该大矩形的内部,由计算机大量生成在此矩形内均匀分布的“点”,然后,计数清点一下在大矩形内总的“点”的个数和在封闭图形内的“点”的个数,应当近似地有:
在封闭图形内的点的个数 × 已知的大矩形的面积
封闭图形的面积 = ———————————————————————
大矩形内总的点的个数
如果把这个思想应用于系统测试过程,先在某个程序中随机地人为植入10个错误(BUG),然后,由一个测试组进行测试,结果一共发现有120个错误,其中有6个是人为植入的错误。
请你估算一下这时该程序中将会遗留下多少个未被发现的隐藏错误。同时也请你简要地以提纲方式列举出采用这种错误随机植入方式来估算系
第 8 页 共 11 页
统中遗留错误所固有的局限性。
(10分)
4.简述你做过的一个软件项目,描述具体的一个测试过程,包括测试步骤、测试环境的建立、测试工具的使用。(10分)
1。测试进入时间
项目需求分析完成,用户需求说明书发布时进入。(需求分析是由PM或者专职人员进行的,用户需求说明书的编写也同样)
2。项目开发设阶段
1)阅读,理解和分析用户需求说明书,与PM讨论需求模糊,不理解的地方;提炼测试需求和测试内容。(如果你想要认真编写测试需求,建议在需求update的同时跟踪修改你的测试需求,测试需求与需求分析关联,以便后期跟踪。个人认为测试需求越详细,对后面的工作指导的作用越大)
2)根据项目计划以及测试内容,确定每一个测试阶段的工作进度安排。(这个是由PM决定的,相信每个公司都有这样的计划,毕竟那么多Build)
3)编写测试计划初稿。(这个一般都是老员工的工作,至少在我们公司PM只做需求和管理)
4)编写测试用例(一般会出一个prototype,根据计划和需求来编写)
3。项目编码阶段
1)根据软件设计说明书,完成具体的测试计划。(这个上面已经说了)
2)根据软件设计说明书,完善测试用例。(这个也是比较重要的,如果你不了解软件的设计,很多内部情况都没有办法具体描述出来。所以测试也不是那么容易的……)
3)准备测试环境。(一般都由测试人员自己搭建,开发协助)
第 9 页 共 11 页
4)制定第一阶段的测试内容。(相当于一个计划,测试人员根据测试进度安排)
5)PM,开发和测试共同确定第一阶段的产品质量。(开会,开会)
4。执行测试阶段(前面都是准备,现在才是实际操作~~)
1)DEMO可测试性的测试。(也就是冒烟测试啦)
2)执行测试用例
3)编写缺陷报告(缺陷报告的编写学问也比较大,这里不讨论)
4)填写工作日志(这个是公司规定的……)
5)提交当前阶段的测试报告。(每一个build一个报告,真的累啊……)
6)完善测试用例。
7)PM,开发和测试进行当前阶段产品的质量评审以及下一阶段的测试工作评审。(又要开会啦)
8)制定下一阶段的测试内容。(还是开会)
9)PM,开发和测试共同确认下一阶段产品的质量标准。(继续开会)
5。用户接收阶段
1)重现,确认用户使用时出现的错误。
2)编写用户手册
3)编写管理员手册
6。运行维护阶段
第 10 页 共 11 页
1)重现,确认用户反馈回来的缺陷
2)理解新需求
3)回归测试(其实回归测试每一个Build都会做的,放到最后只是觉得一个流程应该是重复的……)
搭建测试环境就是按照测试设计中设计的测试环境内容部署测试环境,具体包括:对数据库服务器、应用服务器、负载产生设备、实际运行的PC机设备等设备上的硬件、软件设备进行配置。
第 11 页 共 11 页
因篇幅问题不能全部显示,请点此查看更多更全内容