软件测试工程师试题
一、填空
1、软件测试阶段的基本任务应当是根据软件开发各阶段的 和程序的 ,精心设计一批“高产”的测试用例,利用这些测试用例 ,找出软件中潜藏的各种错误和缺陷。
2、测试用例不仅要选用合理的测试输入数据,还需要选用不合理的测试输入数据,这样能更多地 ,提高程序的可靠性。对于不合理的测试输入数据,程序应 ,并给出相应的提示。
3、动态测试指通过 发现错误。对软件产品进行动态测试时使用黑盒测试法和 法。
4、静态测试指 不在机器上运行,而是采用 和 的手段对程序进行检测。
5、黑盒测试依据 ,检查程序是否满足 。因此,黑盒测试由称为功能测试或 测试。
6、白盒测试以检查处理过程的细节为基础,对程序中尽可能多的 进行测试,检查内部 和 是否有错,程序的 与预期的状态是否一致。
7、在基本路径测试中,独立路径是指包括一组以前没有处理过的 的一条路径。从程序图来看,一条独立路径是至少包含有一条 的边的路径。
8、在单元测试中,驱动模块的作用是用来模拟被测模块的 。它的工作是接受 ,以上层模块调用被测模块的形式 被测模块,接收被测模块的 并输出。
9、在单元测试中,桩模块用来代替被测模块的 。其作用是 的信息。
10、错误的群集现象是指模块错误发现率与模块的残留错误数成 关系。
二、选择题
1、在软件测试中,下面说法中错误的是( )。
A. 测试是为了发现程序中的错误而执行程序的过程
B. 测试是为了表明程序是正确的
C. 好的测试方案是极可能发现迄今为止尚未发现的错误的方案
D. 成功的测试是发现了至今为止尚未发现的错误的测试
2、软件测试的目的是( )。
A. 试验性运行软件
B. 发现软件错误
C. 证明软件正确
D. 找出软件中全部错误
3、软件测试用例主要由测试输入数据和( )两部分组成。
A. 测试计划
B. 测试规则
C. 测试的预期结果
D. 以往测试记录分析
4、与设计测试用例无关的文档是( )。
A. 项目开发计划
B. 需求规格说明书
C. 软件设计说明书
D. 源程序
5、软件测试是软件质量保证的主要手段之一,测试的成本已超过( )的30%以上。因此,提高测试的有效性非常重要。
A. 软件开发成本
B. 软件维护成本
C. 软件开发成本和维护成本
D. 软件研制成本
6、“高产”的测试是指( )。
A. 用适量的测试用例说明被测试程序正确无误
B. 用适量的测试用例说明被测试程序符合相应的要求
C. 用适量的测试用例发现被测试程序尽可能多的错?
D. 用适量的测试用例纠正被测试程序尽可能多的错误
7、如果想要进行成功的测试,为其设计测试用例主要依赖于( )。
A. 黑盒测试方法
B. 测试人员的经验
C. 白盒测试方法
D. 错误推测法
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. 概要设计
D. 详细设计
15、确认测试计划是在( )阶段制定的。
A. 可行性研究与计划
B. 需求分析
C. 概要设计
D. 详细设计
16、软件的组装测试最好是由( )承担,以提高组装测试的效果。
A. 该软件的设计者
B. 该软件开发组的负责人
C. 该软件的编程者
D. 不属于该开发组的人员
17、( )是简化了的模拟较低层次模块功能的虚拟子程序。
A. 过程
B. 函数
C. 仿真
D. 桩
18、( )是指为查明程序中的错误和缺陷,可能使用的工具和手段。
A. 调试技术
B. 测试技术
C. 跟踪法
D. 动态测试
19、从已发现故障的存在到找到准确的故障位置并确定故障的性质,这一过程称为( )。
A. 错误检测
B. 故障排除
C. 调试
D. 测试
20、在程序设计的过程中应为程序调试做好准备,主要体现在( )方面。
A. 采用模块化、结构化的程序设计方法设计程序
B. 编写程序时要为程序调试提供足够的灵活性
C. 根据程序调试的需要,选择并安排适当的中间结果输出和必要的断?
D. 以上全是
21、统计资料表明,软件测试的工作量占整个软件开发工作量的( )。
A. 30%
B. 70%
C. 40%~50%
D. 95%
22、软件测试计划是一些文档,它们描述了( )。
A. 软件的性质
B. 软件的功能和测试用例
C. 软件的规定动作
D. 对于预定的测试活动将要采取的手段
23、IBM公司的统计资料表明,使用静态测试的方法最高可以查出在测试中查出的全部软件错误的( )。
A. 80%
B. 70%
C. 50%
D. 35%
24、黑盒测试方法的优点是( )。
A. 可测试软件的特定部位
B. 能站在用户立场测试
C. 可按软件内部结构测试
D. 可发现实现功能需求中的错误
25、白盒测试方法的优点是( )。
A. 可测试软件的特定部位
B. 能站在用户立场测试
C. 可按软件内部结构测试
D. 可发现实现功能需求中的错误
26、等价类划分完成后,就可得出( ),它是确定测试用例的基础。
A. 有效等价类
B. 无效等价
C. 等价类表
D. 测试用例集
27、由因果图转换出来的( )是确定测试用例的基础。
A. 判定表
B. 约束条件表
C. 输入状态表
D. 输出状态表
三、选择填空题
1、从供选择的答案中选出应填入下列( )中的字句。
软件测试的目的是( A )。为了提高测试的效率,应该( B )。使用白盒测试方法时,确定测试数据应根据( C )和指定的覆盖标准。与设计测试数据无关的文档是( D )。
软件的集成测试工作最好由( E )承担,以提高集成测试的效果?BR>供选择的答案:
A.① 评价软件的质量② 发现软件的错误
③ 找出软件中的所有错误④ 证明软件是正确的
B.① 随机地选取测试数据
② 取一切可能的输入数据作为测试数据
③ 在完成编码以后制定软件的测试计划
④ 选择发现错误的可能性大的数据作为测试数据
C.① 程序的内部逻辑② 程序的复杂程度
③ 使用说明书④ 程序的功能
D.① 该软件的设计人员② 程序的复杂程度
③ 源程序④ 项目开发计划
E.① 该软件的设计人员② 该软件开发组的负责人
③ 该软件的编程人员④ 不属该软件开发组的软件人员
2、从供选择的答案中选出应填入下列( )中的字句。
为了把握软件开发各个环节的正确性和协调性,人们需要进行( A )和( B )工作。( A )的目的是想证实在一给定的外部环境中软件的逻辑正确性。它包括( C )和( D ),( B )则试图证明在软件生存期各个阶段,以及阶段间的逻辑( E )、( F )和正确性。
供选择的答案:
A, B.① 操作 ② 确认 ③ 验证 ④ 测试 ⑤ 调试
C, D.① 用户的确认 ② 需求规格说明的确认
③ 程序的确认 ④ 测试的确认
E, F.① 可靠性 ② 独立性 ③ 协调性 ④ 完备性 ⑤ 扩充性
3、从供选择的答案中选出应填入下列( )中的字句。
测试过程需要三类输入:( A )、( B )和( C )。请选择正确的答案填入下图中以完成测试信息处理的全过程。
供选择的答案?
A~C.① 接口选择② 软件配置③ 硬件配置
④ 测试配置⑤ 测试环境⑥ 测试工具
D~ F.① 排错 ② 可靠性分析 ③ 结果分析 ④ 数据分类
4、请从供选择的答案中选出应填入下列( )中的字句。
程序的三种基本控制结构是( A )。它们的共同点是( B )。结构化程序设计的一种基本方法是( C )。软件测试的目的是( D )。软件调试的目的是( E )。
供选择的答案:
A.① 过程,子程序,分程序 ② 顺序,条件,循环
③ 递归,堆栈,队列 ④ 调用,返回,转移
B.① 不能嵌套使用 ② 只能用来写简单的程序
③ 已经用硬件实现 ④ 只有一个入口和一个出口
C.① 筛选法 ② 递归法 ③ 归纳法 ④ 逐步求精法
D.① 证明程序中没有错误 ② 发现程序中的错误
③ 测量程序的动态特性 ④ 检查程序中的语法错误
E.① 找出错误所在并改正之 ② 排除存在错误的可能性
③ 对错误性质进行分类 ④ 统计出错的次数
5、从供选择的答案中选出同下列各条叙述关系最密切的字句。
(1) 对可靠性要求很高的软件,例如操作系统,由第三者对源代码进行逐行检查。
(2) 已有的软件被改版时,由于受到变更的影响,改版前正常的功能可能发生异常,性能也可能下降。因此,对变更的软件进行测试是必要的。
(3) 在意识到被测试模块的内部结构或算法的情况下进行测试。
(4) 为了确认用户的需求,先做出系统的主要部分,提交给用户试用。
(5) 在测试具有层次结构的大型软件时,有一种方法是从上层模块开始,由上到下进行测试。此时,有必要用一些模块替代尚未测试过的下层模块。
供选择的答案:
A~E:① 仿真器 ② 代码审查 ③ 模拟器 ④ 桩
⑤ 驱动器 ⑥ 域测试 ⑦ 黑盒测试 ⑧ 原型
⑨ 白盒测试 ⑩ 退化测试
6、从供选择的答案中选出应填入下面叙述的( )内的正确答案。
软件测试方法可分为黑盒测试法和白盒测试法两种。
黑盒测试法是通过分析程序的( A )来设计测试用例的方法。除了测试程序外,它还适用于对( B )阶段的软件文档进行测试。
白盒测试法是根据程序的( C )来设计测试用例的方法。除了测试程序外,它也适用于对( D )阶段的软件文档进行测试。
白盒法测试程序时常按照给定的覆盖条件选取测试用例。( E )覆盖比( F )覆盖严格,它使得每一个判定的每一条分支至少经历一次。( G )覆盖既是判定覆盖,又是条件覆盖,但它并不保证使各种条件都能取到所有可能的值。( H )覆盖比其他条件都要严格,但它不能保证覆盖程序中的每一条路径?BR> 单元测试一般以( I )为主,测试的依据是( J )。
供选择的答案:
A, C:① 应用范围 ② 内部逻辑 ③ 功能 ④ 输入数据
B, D:① 编码 ② 软件详细设计 ③ 软件总体设计 ④ 需求分析
E~H:① 语句 ② 判定 ③ 条件 ④ 判定/条件
⑤ 多重条件 ⑥ 路径
I: ① 白盒法 ② 黑盒法
J: ① 模块功能规格说明 ② 系统模块结构图 ③ 系统需求规格说明
7、从供选择的答案中选出应填入下面叙述的( )内的正确答案。
集成测试也叫做( A )或( B )。通常,在( C )的基础上,将所有模块按照设计要求组装成为系统。子系统的集成测试特别称为?nbsp; D ),它所做的工作是要找出子系统和系统需求规格说明之间的( E )。需要考虑的问题是:在把各个模块连接起来的时侯,穿越模块接口的数据是否会( F ); 一个模块的功能是否会对另一个模块的功能产生不利的影响;各个( G )组合起来,能否达到预期要求的( H );( I )是否有问题;单个模块的误差累积起来是否会放大。
供选择的答案:
A~D.① 单元测试 ② 部件测试 ③ 组装测试
④ 系统测试 ⑤ 确认测试 ⑥ 联合测试
E~I.① 子功能 ② 丢失 ③ 父功能
④ 局部数据结构 ⑤ 全局数据结构 ⑥ 不一致
⑦ 一致
8、从供选择的答案中选出应该填入下列叙述的( )内的正确答案。
软件测试中常用的静态分析方法是( A )和( B )。( B )用于检查模块或子程序间的调用是否正确。分析方法(白盒方法)中常用的方法是( C )方法。非分析方法(黑盒方法)中常用的方法是( D )方法和( E )方法。( E )方法根据输出对输入的依赖关系设计测试用例。
供选择的答案:
A~B:① 引用分析 ② 算法分析 ③ 可靠性分析 ④ 效率分析
⑤ 接口分析 ⑥ 操作分析
C~E:① 路径测试 ② 等价类 ③ 因果图 ④ 归纳测试
⑤ 综合测试 ⑥ 追踪 ⑦ 深度优先 ⑧ 调试
⑨ 相对图
9、从供选择的答案中选出应填入下面叙述的( )内的正确答案。
等价类划分是一种典型的( A )方法,也是一种非常实用的重要的测试方法。使用这一方法,完全不考虑程序的( B )。用所有可能输入的数据来测试程序是不可能的,只能从全部可供输入的数据中选择一个( C )进行测试。( D )是指某个输入域的集合,在该集合中,各个输入数据对于揭露程序中的错误是( E )。
供选择的答案:
A: ① 白盒测试方法 ② 黑盒测试方法
B: ① 内部结构 ② 外部环境 ③ 顺序 ④ 流程
C~E:① 全集 ② 子集 ③ 等效?BR> ④ 不同的 ⑤ 等价类 ⑥ 典型集
10、从供选择的答案中选出应填入下面叙述的( )内的正确答案。
① 黑盒测试方法的缺点是( )和( )。
A. 不可测试软件的特定部位
B. 不能发现功能需求中的错误
C. 无法检验软件的外部特性
D. 无法测试未实现功能需求的软件的内部缺陷
② 白盒测试方法的缺点是( )和( )。
A. 不可测试软件的特定部位
B. 不能发现功能需求中的错误
C. 无法检验软件的外部特性
D. 无法测试未实现功能需求的软件的内部缺陷
四、问答计算题
1、从下列关于软件测试的叙述中,选出5条正确的叙述。
(1) 用黑盒法测试时,测试用例是根据程序内部逻辑设计的。
(2) 尽量用公共过程或子程序去代替重复的代码段。
(3) 测试是为了验证该软件已正确地实现了用户的要求。
(4) 对于连锁型分支结构,若有n个判定语句,则有2n条路径。
(5) 尽量采用复合的条件测试,以避免嵌套的分支结构?BR> (6) GOTO语句概念简单,使用方便,在某些情况下,保留GOTO语句反能使写出的程序更加简洁。
(7) 发现错误多的程序模块,残留在模块中的错误也多。
(8) 黑盒测试方法中最有效的是因果图法。
(9) 在做程序的单元测试时,桩(存根)模块比驱动模块容易编写。
(10) 程序效率的提高主要应通过选择高效的算法来实现。
2、对小的程序进行穷举测试是可能的,用穷举测试能否保证程序是百分之百正确呢?
3、在任何情况下单元测试都是可能的吗?都是需要的吗?
4、如图所示的程序有三条不同的路径。分别表示为L1(a→b)、L2(a→c→d)、L3(a→c→e),或简写为ace、abd、abe及acd。根据判定覆盖、条件覆盖、判定–条件覆盖、条件组合覆盖和路径覆盖等五种覆盖标准,从供选择的答案中分别找出满足相应覆盖标准的最小测试用例组。(用①~ ⑩回答)
供选择的答案:
①x = 90, y = 90②x = 50, y = 50
③x = 90, y = 90④x = 90, y = 70
x = 50, y = 50x = 40, x = 90
⑤x = 90, y = 90⑥x = 90, y = 90
x = 50, y = 50x = 70, y = 90
x = 90, y = 70x = 50, y = 50
⑦x = 90, y = 90⑧x = 90, y = 90
x = 50, y = 50x = 50, y = 50
x = 80, y = 70x = 90, y = 50
x = 70, y = 90x = 80, y = 80
⑨x = 90, y = 90⑩x = 90, y = 90
x = 90, y = 70x = 80, y = 80
x = 90, y = 30x = 90, y = 70
x = 70, y = 90x = 90, y = 30
x = 30, y = 90x = 70, y = 90
x = 70, y = 70x = 30, y = 90
x = 50, y = 50x = 70, y = 70
x = 50, y = 50
5、在白盒测试用例设计中,有语句覆盖、分支覆盖、条件覆盖、路径覆盖等,其中( A )是最强的覆盖准则。为了对如下图所示的程序段进行覆盖测试,必须适当地选取测试用例组。若x, y是两个变量,可供选择的测试用例组共有Ⅰ、Ⅱ、Ⅲ、Ⅳ四组,如表中给出,则实现判定覆盖至少应采取的测试用例组是( B )或( C );实现条件覆盖至少应采取的测试用例组是( D );实现路径覆盖至少应采取的测试用例组是( E )或( F )。
供选择的答案
A:① 语句覆盖 ② 条件覆盖 ③ 判定覆盖 ④ 路径覆盖
B~F:① Ⅰ和Ⅱ组 ② Ⅱ和Ⅲ组 ③ Ⅲ和Ⅳ组 ④ Ⅰ和Ⅳ组
⑤ Ⅰ、Ⅱ、Ⅲ组 ⑥ Ⅱ、Ⅲ、Ⅳ组 ⑦ Ⅰ、Ⅲ、Ⅳ组
⑧ Ⅰ、Ⅱ、Ⅳ组
6、下面是快速排序算法中的一趟划分算法,其中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 )
Swap ( list.V[k], list.V[i] );//小于基准的交换到左侧去
Swap ( list.V[low], list.V[k] );//将基准对象就位
return k; //返回基准对象位置
}
(1) 试画出它的程序流程图;
(2) 试利用路径覆盖方法为它设计足够的测试用例(循环次数限定为0次,1次和2次)。
7、下面是选择排序的程序,其中datalist是数据表,它有两个数据成员:一是元素类型为Element的数组V,另一个是数组大小n。算法中用到两个操作,一是取某数组元素V[i]的关键码操作getKey ( ),一是交换两数组元素内容的操作Swap( ):
void SelectSort ( datalist & list ) {
//对表list.V[0]到list.V[n-1]进行排序, n是表当前长度。
for ( int i = 0; i < list.n-1; i++ ) {
int k = i; //在list.V[i].key到list.V[n-1].key中找具有最小关键码的对象
for ( int j = i+1; j < list.n; j++)
if ( list.V[j].getKey ( ) < list.V[k].getKey ( ) ) k = j;
//当前具最小关键码的对象
if ( k != i ) Swap ( list.V[i], list.V[k] );//交换
}
}
(1) 试计算此程序段的McCabe复杂性;
(2) 用基本路径覆盖法给出测试路径;
(3) 为各测试路径设计测试用例。
8、根据下面给出的规格说明,利用等价类划分的方法,给出足够的测试用例。
“一个程序读入三个整数。把此三个数值看成是一个三角形的三个边。这个程序要打印出信息,说明这个三角形是三边不等的、是等腰的、还是等边的。”
9、设要对一个自动饮料售货机软件进行黑盒测试。该软件的规格说明如下:
“有一个处理单价为1元5角钱的盒装饮料的自动售货机软件。若投入1元5角硬币,按下“可乐”、“雪碧”或“红茶”按钮,相应的饮料就送出来。若投入的是2元硬币,在送出饮料的同时退还5角硬币。”
(1) 试利用因果图法,建立该软件的因果图;
(2) 设计测试该软件的全部测试用例。
11、应该由谁来进行确认测试?是软件开发者还是软件用户?为什么?
三、选择填空题
1、解答:A. ② B. ④ C. ① D. ④ E. ④
2、解答:A. ② B. ③ C. ② D. ③ E. ③ F. ④
到程序的测试为止,软件开发工作已经经历了许多环节,每个环节都可能发生问题。为了把握各个环节的正确性,人们需要进行各种确认和验证工作。
所谓确认,是一系列的活动和过程,其目的是想证实在一个给定的外部环境中软件的逻辑正确性。它包括需求规格说明的确认和程序的确认,而程序的确认又分为静态确认与动态确认。静态确认一般不在计算机上实际执行程序,而是通过人工分析或者程序正确性证明来确认程序的正确性;动态确认主要通过动态分析和程序测试来检查程序的执行状态,以确认程序是否有问题。
所谓验证,则试图证明在软件生存期各个阶段,以及阶段间的逻辑协调性、完备性和正确性。下图中所示的就是软件生存期各个重要阶段之间所要保持的正确性。它们就是验证工作的主要对象。
确认与验证工作都属于软件测试。在对需求理解与表达的正确性、设计与表达的正确性、实现的正确性以及运行的正确性的验证中,任何一个环节上发生了问题都可能在软件测试中表现出来。
3、解答:A. ② B. ④ C. ⑥ D. ③ E. ① F. ②
4、解答:A. ② B. ④ C. ④ D. ② E. ①
5、解答:(1) ② (2) ⑩ (3) ⑨ (4) ⑧ (5) ④
6、解答: A. ③ B. ④ C. ② D. ② E. ②
F. ① G. ④ H. ⑤ I. ① J. ①
7、解答: A. ③ B. ⑥ C. ① D. ② E. ⑥
F. ② G. ① H. ③ I. ⑤ A、B的答案可互换
8、解答:A. ① B. ⑤ C. ① D. ② E. ③
软件测试中常用的静态分析方法是引用分析和接口分析。接口分析用于检查模块或子程序间的调用是否正确。分析方法(白盒方法)中常用的方法是路径测试方法。非分析方法(黑盒方法)中常用的方法是等价类(划分)方法和因果图方法。因果图方法根据输出对输入的依赖关系设计测试用例。
9、解答:A. ② B. ① C. ② D. ⑤ E. ③
10、解答:A和D,B和C,
四、问答计算题
1、解答:正确的叙述有(4)、(5)、(6)、(7)、(10)。
黑盒测试主要是根据程序的有关功能规格说明和覆盖准则来设计测试用例,进行测试的,不是根据程序的内部逻辑来设计测试用例,这是白盒测试做的事情。在所有黑盒测试方法中,最有效的不是因果图法,而是边界值分析方法。测试的目的是尽可能多地发现软件中的错误,其附带的收获才是验证该软件已正确地实现了用户的要求。测试的一条重要原则是:发现错误多的程序模块,残留在模块中的错误也多。软件可靠性模型(Shooman)就是依据这个原则建立它的公式的。对于连锁型分支结构,若有n个判定语句,则有2n条路径。因此,随着n的增大,路径数增长非常快。单元测试时,因为桩模块要模拟子模块的功能,这不是一件容易的事情,而驱动模块只是控制被测模块的执行,所以桩模块的编写比驱动模块的编写要难得多。
在程序设计风格方面,如果重复的代码段没有明显的功能,不可以抽取出来形成独立的公共过程或子程序,只有在这些代码段表现出独立的功能时,才可把它们抽取出来形成独立的公共过程或子程序。另外,程序效率的提高主要应通过选择高效的算法或使用高效的语言编译器来实现。GOTO语句概念简单,使用方便,在某些情况下,保留GOTO语句反能使写出的程序更加简洁,这句话是正确的。
2、解答:对小程序进行穷举测试,不见得能保证程序百分之百正确。所谓穷举测试是拿所有可能的输入数据来作为测试用例(黑盒测试),或覆盖程序中所有可能的路径(白盒测试)。对于小程序来说,实际上并不能真正作到穷举测试。例如前面讲过,一个小程序P只有两个输入X和Y及输出Z,在字长为32位的计算机上运行。如果X、Y只取整数,考虑把所有的X、Y值都做为测试数据,按黑盒方法进行穷举测试,这样做可能采用的测试数据组(Xi,Yi),基数(radix)i的最大可能数目为:232×232=264。如果程序P测试一组X、Y数据需要1毫秒,而且假定一天工作24小时,一年工作365天,要完成264组测试,需要5亿年。
3、解答:单元测试又称模块测试,是针对软件设计的最小单位─程序模块,进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。单元测试是在编码阶段完成的,每编写出一个程序模块,就开始做这个模块的单元测试,所以只要采用模块化方法开发软件,单元测试都是必需的。它可由编写程序的人来完成。因为它需要根据程序的内部结构设计测试用例,对于那些不了解程序内部细节的人,这种测试无法进行。
4、解答:针对覆盖标准,相应的测试用例组如下
注意:测试是一个程序的执行过程。对于逻辑表达式 A or B,当A为真时不再对B做判断,对于逻辑表达式 A and B,当A为假时不再对B做判断。未能做判断的条件,在解答中用“□”表示。
此测试用例组在满足条件覆盖的情况下又满足了判定覆盖的要求。
在条件组合覆盖情形,(x?90)or(y?90)的组合有4种,与条件(x+y?140)的组合应有8种,但(x+y?140=F)and((x?90=T)or(y?90=T))不可能出现,因此,7个测试用例就够了。
因为流程图有3条路径,只需3个测试用例就够了。如果将判定中的复合条件表达式改为单个条件的嵌套选择结构,第一个判定有3条路径,其中两条路径通向第二个判定。第二个判定有4条路径,组合起来总共应有9条路径。但是,其中受测试条件的限制,有3条路径不可达,因此,程序中应有6条路径,需要6个测试用例来覆盖它们。
5、解答:A. ④ B. ⑤ C. ⑧ D. ④ E. ⑤ F. ⑧
判定表
为判定覆盖选取测试用例情形:对第一个判定选取测试用例组Ⅰ和Ⅱ,当用Ⅰ覆盖判定的T分支时,不会走到第二个分支;当用Ⅱ覆盖判定的F分支时,第二个判定需另取一个测试用例组覆盖其T分支,此时取测试用例组Ⅲ或Ⅳ即可。因此,选择⑤或⑧均可。
为条件覆盖选取测试用例情形:取测试用例组Ⅰ和Ⅳ就可以覆盖所有4个条件的取值。
为路径覆盖选取测试用例情形:总共3条路径,需3个测试用例,可选使各路径为T的测试用例。Ⅰ、Ⅱ、Ⅲ或Ⅰ、Ⅱ、Ⅳ均可,可选⑤或⑧。
6、解答:(1)流程图如下。
(2) 测试用例设计
画程序流程图是设计测试用例的关键。从以往同学解题的经验来看,在画流程图时就出错了。所以首先要把流程图中的逻辑关系搞清楚再画出正确的流程图。考虑测试用例设计需要首先有测试输入数据,还要有预期的输出结果。对于此例,控制循环次数靠循环控制变量i和循环终值high。循环0次时,取low = high,此时一次循环也不做。循环一次时,取low +1 = high,循环二次时,取low+2 = high。
若出题时特别强调要使用BRO策略,条件V[i] < pivot && ++k≠i的约束集合为 { (<, < ), (<, = ), (=, <), (>, < ) },因此,测试用例设计为:
7、解答:(1) McCabe环路复杂性 = 5
(2) 独立路径有5条:
①③
①②⑤⑧……
①②⑤⑨……
①②④⑥……
①②④⑦……
(3) 为各测试路径设计测试用例:
路径①③:取n = 1
路径①②⑤⑧……:取n = 2,
预期结果:路径⑤⑧③不可达
路径①②⑤⑨……:取n = 2,
预期结果:路径⑤⑨③不可达
路径①②④⑥⑤⑧③:
取n = 2, V[0] = 2, V[1] = 1, 预期结果:k = 1, V[0] = 1, V[1] = 2
路径①②④⑥⑤⑨③:
取n = 2, V[0] = 2, V[1] = 1, 预期结果:k = 1, 路径⑨③不可达
路径①②④⑦⑤⑧③:
取n = 2, V[0] = 1, V[1] = 2, 预期结果:k = 0, 路径⑧③不可达
路径①②④⑦⑤⑨③:
取n = 2, V[0] = 1, V[1] = 2, 预期结果:k = 0, V[0] = 1, V[1] = 2
8、解答:设三角形的三条边分别为A, B, C。如果它们能够构成三角形的三条边,必需满足:A > 0,B > 0,C > 0,且A + B > C,B + C > A,A + C > B。
如果是等腰的,还要判断是否A = B,或B = C,或A = C。
对于等边的,则需判断是否A = B,且B = C,且A = C。
列出等价类表:
测试用例设计(略)
9、解答:
(1) 因果图
(2) 测试用例设计
测试用例 每一纵列为一个测试用例
10、解答:由shooman公式:
其中,IT = 105,MTTF1 = 0.4,T1 = 160,n1 = 100,MTTF2 = 2,T2 = 320,n2 = 300。得:
(1) 解得程序中固有得错误总数ET = 350,此外K = 1000。
(2) 设MTTF = 10,有
解得x = 340。由可靠性累积曲线EC (t) = ET (1-e-K1 t ),
得 100 = 350 (1-e-160K1)
300 = 350 (1-e-320K1)
因此,3-3*e-160K1 = 1-e-320K1
2 = 3*e-160K1- e-320K1 设 x = e-160K1
有 x2 – 3x + 2 = 0
解得 x1 = 2,x2 = 1, K1 = ln(x1)/(-160) = - 0.693/160 ? 0.00433。
因为ln(x2)/(-160) = 0,舍去
代入:340 = 350 (1-e-K1 t ) = 350(1-e-0.00433 t )
350e-0.00433 t = 10
t = (ln(35))/0.00433 ? 821 (小时)
因此求得为使MTTF = 10,测试和调试该程序需要花费821小时。
(3) MTTF与测试时间t之间的函数关系:
因为EC (t) = ET (1-e-K1 t ),则ET - EC (t) = ET e-K1 t。代入shooman公式:
11、解答:在对照需求做有效性测试和软件配置审查时,是由软件开发者在开发环境下进行的测试。而接下来做验收测试时则以用户为主。软件开发人员和QA(质量保证)人员也应参加。由用户参加设计测试用例,使用用户界面输入测试数据,并分析测试的输出结果。一般使用生产中的实际数据进行测试。
如果软件是为多个客户开发的,则需要进行α测试和β测试。α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。软件在一个自然设置状态下使用。开发者坐在用户旁边,随时记下错误情况和使用中的问题。这是在受控制的环境下进行的测试。
β测试是由软件的多个用户在一个或多个用户的实际使用环境下进行的测试。这些用户是与公司签定了支持产品预发行合同的外部客户,他们要求使用该产品,并愿意返回有关错位错误信息给开发者。与α测试不同的是,开发者通常不在测试现场。因而,β测试是在开发者无法控制的环境下进行的软件现场应用。