
第1章 软件测试背景
判断题
1.软件缺陷就是软件未达到软件产品需求说明书指明的要求。( )
对
2.软件缺陷主要是由于设计的问题造成。( )
错
3.软件缺陷主要是由于编码问题造成。( )
错
4.软件缺陷主要是由于需求问题造成。( )
对
5.软件缺陷在测试阶段发现的数量最多。( )
错
6.软件缺陷在发布后修复的成本最大。( )
对
7.软件缺陷在需求分析阶段修复的成本最大。( )
错
8.软件缺陷在设计阶段修复的成本最大。( )
错
9.软件缺陷在需求分析阶段修复的成本最小。( )
对
10.算法错误是设计错误的一种。( )
对
11.只要工作人员认真负责,缺陷可以避免。( )
错
12.软件缺陷随着时间的推移,修复的成本越来越大。( )
对
13.如测试人员没有发现缺陷,就说明软件中不存在缺陷。( )
错
填空题
1.软件缺陷按测试开发阶段分为____________缺陷、设计缺陷和____________缺陷。
需求缺陷、编码缺陷
2.软件出错机理可描述为软件错误、_________________、软件故障_和______________。
软件缺陷,软件失效
3.需求阶段的错误分为不一致性错误、__________________和___________________。
冗余性错误、不完整性错误、不可行错误、不可测试错误(只填3个)
4.设计阶段的错误分为设计不完全错误、__________________和___________________。
、算法错误、模块接口错误、控制逻辑错误、数据结构错误(只填2个)
5.编码阶段的错误分为数据说明错误、__________________和___________________。
数据使用错误、计算错误、比较错误、控制流错误、界面错误、输入/输出错误(只填2个)
6. “测试成熟度”分为五级、分别为初始级、________________、______________、管理和测量级、优化,预防缺陷和质量控制级。
定义级、集成级
7.某公司成立一个测试小组,当所有的开发全部完成后才由测试小组接手项目的测试,则该公司属于“测试成熟度”模型中的____________级。
定义
8.某公司的软件产品由项目经理带着几个开发人员进行研发,每个开发人员自行测试自己的程序,该公司属于“测试成熟度”模型中的____________级。
初始
9.Bill Hetzel定义的测试第一类方法的核心思想是_____________________________________。
证明软件是工作的
10.Glenford Myers定义的测试第二类方法的核心思想是__________________________________。
证明软件是有错误的
名词解释
1软件缺陷
从产品内部看,缺陷是软件产品开发或维护过程中存在的错误、毛病等各种问题;从产品外部看,缺陷是系统所需要实现的某种功能的失效或违背
2.TMM
软件测试成熟度模型是对测试组当前的测试能力状态的一种度量,帮助测试组改进测试效率,提高测试管理水平。
3.测试用例
为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。
简答题
1简述软件缺陷产生的原因。
1、用户需求和说明书没有被很好的理解
分析人员不能100%理解用户需求,写作水平不高
2、软件设计的不合理
设计人员不能100%理解需求文档,设计水平不高
3、代码(算法,流程) 存在错误
编码人员不能100%理解设计文档,编码水平不高
2简述什么样的情况下可以判定为软件缺陷。
(1)软件未达到软件产品需求说明书指明的要求。
(2)软件出现了软件产品需求说明书指明不会出现的错误。
(3)软件功能超出软件产品需求说明书指明的范围。
(4)软件未达到软件产品需求说明书虽未指明但应达到的要求。
(5)软件测试人员认为难以理解、不易使用、运行速度缓慢、或者最终用户认为不好的问题。
3.简述测试与调试的区别。
测试的主要工作是找缺陷,发现软件的错误(是否满足用户需求) ,确定程序中可疑错误的原因和确切位置,对程序(设计或编号)进行修改,排除错误贯穿整个软件生命周期。
调试的目的是解决代码中的缺陷。
第2章 软件测试概述
判断题
1.软件测试就是对程序进行测试。( )
错
2.当软件代码开发结束时,软件测试过程才开始。( )
错
3.对发现错误较多的程序段,应进行更深入的测试。( )
对
4. 发现错误多的程序模块,残留在模块中的错误也多。( )
对
5. 如果发布出去的软件有质量问题,都是软件测试人员的错。( )
错
6.测试部门负责软件质量。( )
错
7.软件测试的目的是尽可能多的找出软件的缺陷。( )
对
8. 开发一个软件系统时,要考虑所有的软件质量要素。( )
错
9.测试用例越多,测试效果就会越好。( )
错
10.产品规格说明书和文档的谬误不属于软件缺陷。( )
错
11.没有质量度量,等于没有质量标准。( )
对
12.在软件编码过程中产生的缺陷数量相对软件开发的其它过程多得多。( )
对
13.软件测试能保证软件质量。( )
错
14.软件测试不用考虑软件的可扩展性。( )
错
15.软件的质量越高越好,所以我们必须保证软件零缺陷才能交付。( )
错
16. 如果黑客为非法入侵花费的代价(考虑时间、费用、风险等因素)高于得到的好处,那么这样的系统可以认为是安全的。( )
对
17.软件的可靠性可以通过软件测试发现并解决。( )
错
18.好的测试用例集可以花费最小的代价(人力、物力、财力、时间)做最好的测试。( )
对
填空题
1.软件测试的对象包括用户需求、需求说明书、___________________、_______________和运行结果。
设计说明书、源代码
2. 软件测试按测试阶段分为单元测试、___________________、确认测试、系统测试、_________________。
集成测试、验收测试
3. 软件测试生命周期分为:测试计划、_________________、_________________、测试执行、测试评估五个阶段 。
测试设计、测试开发
4.导致软件缺陷最大原因是___________________。
需求错误
5.测试用例的作用是________________________________________________。
验证某个程序路径是否满足特定的需求
6.测试设计员的职责是____________________和________________________。
设计测试用例、设计测试脚本
7.软件的易用性要让___________________来评价。
用户
8.软件的健壮性包含了____________能力和_____________能力。
容错、恢复
9.软件的功能性质量因素包括健壮性、________________和______________。
正确性、可靠性
10.非功能性质量因素包括性能、清晰性、易用性、____________、____________。
安全性,可扩展性,兼容性,可移植性(填写2个)
名词解释
1.软件测试
软件测试是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,其目的是尽快尽早地发现在软件产品中所存在的各种问题——与用户需求、预先定义的不一致性。
2.软件的可移植性
软件的可移植性指的是软件不经修改或稍加修改就可以运行于不同软硬件环境(CPU、OS和编译器)的能力,主要体现为代码的可移植性。
3.软件质量
软件质量是许多质量属性的综合体现,各种质量属性反映了软件质量的方方面面。
4.软件质量模型
软件质量模型指出了质量属性之间的联系和高质量软件的质量属性构成,人们通过软件质量模型来评价一个软件的质量。
5.软件的健壮性
健壮性是指在异常情况下,软件能够正常运行的能力
6.集成测试
一种测试阶段,用于测试模块之间的交互
7.系统测试
一种测试阶段,在代码完全集成后进行,用于测试系统所有功能和非功能是否满足需求。
8.软件质量要素
对软件整体质量或用户需求影响最大的那些质量属性
简答题
1比较验证与确认的区别
确认
评估将要开发的软件产品是否正确无误、可行和有价值的。
确认意味着确保一个待开发软件是正确无误的,是对软件开发构想的检测。
验证
检测软件开发的每个阶段、每个步骤的结果是否正确无误,是否与软件开发各阶段的要求或期望的结果相一致。
验证意味着确保软件会正确无误地实现软件的需求,开发过程是沿着正确的方向进行的。
2. 你认为一个优秀的测试工程师应该具备哪些基本素质和专业素质?
基本素质
⏹对软件感兴趣
⏹好奇心
⏹自信、执着、追求完美、团队合作、勾通
⏹叛逆精神
⏹追求完美
⏹洞察力
专业素质
⏹业务知识
⏹产品设计知识
⏹软件架构知识
⏹UML
⏹各种测试工具
⏹用户心理学
⏹文字表达能力
3.某公司生产出一个新型的纸杯,现由你对纸杯进行测试,以保证纸杯的质量和口碑,请根据软件质量要素简述测试方法和目的。
正确性:是否漏水、是否有包装错误
健壮性:反复装水倒水或一直保持水满的状态,测试漏水时间是否达标
可靠性:测试一箱纸杯中有多少个坏的
性能:测试装油、热水、冰水的漏水时间
易用性:测试纸杯是否容易使用,包装是否符合用户特点
安全性:测试纸杯是否结实
兼容性:测试纸杯是否按国家标准生产
4.简述测试用例的作用及包含的主要元素。
为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。
主要元素:用例、用例名称、测试目的、前提条件、测试环境、测试步骤、预期结果、.实际的结果/测试的结果
5.简述测试计划阶段的工作内容。
确定测试需求-根据需求收集和组织测试需求信息,确定测试需求
制定测试策略-针对测试需求定义测试类型、测试方法以及需要的测试工具等。
建立测试通过的准则-根据项目实际情况为每个层次测试建立通过标准
确定资源和进度-确定测试需要的软硬件资源、人力资源以及测试进度
评审测试计划-根据同行评审的规范对测试计划进行同行评审
6.简述软件设计阶段的工作内容
对每个测试需求,确定所需的测试用例。
对每个测试用例,确定其输入和预期结果。
测试环境配置
编写测试用例文档
对测试用例进行同行评审
7.简述设计测试用例的基本原则
测试用例的代表性
能够代表并覆盖各种合理的和不合理的、合法的和非法的、边界的和越界的以及极限的输入数据、操作和环境设置等。
测试结果的可判定性
即测试执行结果的正确性是可判定的,每一个测试用例都应有相应的期望结果。
测试结果的可再现性
即对同样的测试用例,系统的执行结果应当是相同的。
8.简述什么是软件的可扩展性,什么时候需要考虑软件的可展性。
软件的可扩展性是反映软件适应“变化”的能力。
软件的可扩展性关键要看软件的规模和复杂性
如果软件规模很小,问题很简单或者软件并不需要后继开发,那么亦无所谓“可扩展性”了。
如果软件规模很大,问题很复杂或采用了增量开发模式,倘若软件的可扩展性不好,那么软件难以维护,甚至不能使用。
第3章 白盒测试
判断题
1代码走查的要点是代码编写是否符合标准和规范,是否存在逻辑错误。( )
对
2.对于每个函数,路径覆盖测试是绝对做不到的。( )
错
3.满足条件覆盖肯定满足语句覆盖。( )
错
4. 静态测试只能发现简单的语法错误,效率低,耗费时间。( )
错
5.代码审查过程应将注意力用于查找错误而不是修正错误。( )
对
6.路径上的节点都至多出现一次,除非初始和终止节点是相同的节点,称之为简单路径。( )
对
7. 如果存在一个测试用例集T可以访问所有长度为2的子路径,则称该测试用例集满足了图的边对覆盖准则。( )
对
8.数据流测试中,节点内一个变量V的值被修改,则称变量V在该节点处被定义。( )
对
9.数据流测试中,节点内一个变量V的值被访问,则称变量V在该节点处被定义。( )
错
10.如果存在一个变量v的从li 到lj 的 Def-pair 路径, 则称变量v 可以从定义节点li 到达 使用节点lj( )
对
填空题
1.白盒法设计测试用例覆盖强度最高的方法是______________________。
路径覆盖
2.静态测试包括桌面走查、__________________和__________________。
代码审查、评审
3.代码审查的参与人员为_______________、________________、模块设计人员和一名测试专家_。
协调人、编码人员
4.选择足够的测试用例,使得程序中每个语句至少都能被执行一次,则满足了白盒测试中的____________覆盖。
语句
5.设计测试用例,使得程序中每个判定至少为真和为假值各一次,则称满足了白盒测试中的____________覆盖。
判定覆盖
6. 执行足够的测试用例,使得判定中的每个条件至少为真和为假值各一次,则称满足了白盒测试中的____________覆盖。
条件
7.执行足够的测试用例,使得判定中每个条件至少为真和为假值各一次,并使每个判定至少为真和为假值各一次,则称满足了白盒测试中的____________覆盖。
判定条件
8.执行足够的例子,使得每个判定中条件各种可能组合至少为真和为假值各一次,则称满足了白盒测试中的____________覆盖。
条件组合
9.基于图的覆盖准则分为______________________和________________________。
结构化覆盖准则、数据流覆盖准则
10.没有作为其它简单路径子路径的简单路径称之为_____________。
主路径
名词解释
1.测试路径
从开始节点到结束节点所走的路径。
2.静态测试
静态测试方法的主要特征是在用计算机测试源程序时,计算机并不真正运行被测试的程序,只对被测程序进行特性分析。
3.动态测试
动态测试方法的主要特征是计算机必须真正运行被测试的程序,通过输入测试用例,对其运行情况(输入/输出的对应关系)进行分析。
4.人工测试
由测试人员手工根据测试用例中的步骤,手工执行并记录测试结果。
5.白盒测试
从程序的控制结构出发进行的测试,测试程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能。
6.工作件
也就是静态测试的测试对象,是不同种类的产品交付 件,即一切项目过程文档。
7.桌面检查
由程序员自己检查自己编写的程序。程序员在程序通过编译之后,进行单元测试设计之前,对源程序代码进行分析,检验,并补充相关的文档,以发现程序中的错误。
8.图的节点覆盖准则
存在一个测试用例集T可以访问图中所有可以到达的节点。
9.图的边覆盖准则
存在一个测试用例集T可以访问图中所有可以到达的边。
10.数据流覆盖
根据变量的定义和使用确定程序是否正确
简答题
1.简述静态测试的优点和缺点。
优点
加深对项目的理解,使测试计划和测试设计质量得到提高;
使得测试用例全面、有效,从“撞问题”转变为有目的的“找问题”
提前了对项目的理解,减少了测试执行时的摸索时间,从而加快测试进度
缺点
静态代码检查非常耗费时间,而且代码检查需要丰富的知识和经验积累。
2.简述白盒测试的优缺点。
从程序的控制结构出发进行的测试,测试程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能。
优点:可以对程序彻底检查,发现错误,缺点:成本高,测试用例太多,不能验证程序功能是否符合规格说明书
3.简述静态测试与动态测试的区别
静态测试
静态测试方法的主要特征是在用计算机测试源程序时,计算机并不真正运行被测试的程序,只对被测程序进行特性分析。
动态测试
动态测试方法的主要特征是计算机必须真正运行被测试的程序,通过输入测试用例,对其运行情况(输入/输出的对应关系)进行分析。
4.简述桌面检查、代码审查与代码走查之间的区别。
桌面检查:由程序员自己检查自己编写的程序。
代码审查:由程序员逐句讲解程序的逻辑。在此过程中,程序员或其他小组成员可以提出问题,展开讨论,审查错误是否存在。
代码走查:让与会者“充当”计算机。由测试组成员为被测程序准备一批有代表性的测试用例,提交给走查小组。走查小组开会,集体扮演计算机角色,让测试用例沿程序的逻辑运行一遍。
5.简述代码审查中协调人的职责
⏹为代码审查分发材料(程序清单、设计规范),安排进程
⏹在代码审查过程中起主导作用
⏹记录发现的所有错误
⏹确保所有错误随后得到改正
6.写出下图节点0至节点6的测试路径
4个测试路径
[ 0, 1, 3, 4, 6 ]
[ 0, 1, 3, 5, 6 ]
[ 0, 2, 3, 4, 6 ]
[ 0, 2, 3, 5, 6 ]
7.简述白盒测试策略
(1)在测试中,应尽量先使用工具进行静态结构分析,代码检查,再进行覆盖率测试。
(2)覆盖率测试是白盒测试的重点,一般可使用基本路径测试法达到语句覆盖标准;对于软件的重点模块,应使用多种覆盖率标准衡量代码的覆盖率。
8.简述控制流测试与数据流测试的区别
数据流测试属于白盒测试,主要是从变量的计算和使用来判定程序是否正确。控制流测试主要是根据程序的执行路径来判定程序是否正确
数据流测试只能用于程序代码,控制流测试可以用于程序代码、活动图、状态图等。
9.有人认为控制流图的节点覆盖准则和边覆盖准则生成的测试用例完全相同,因此两个测试准则是重复的。请判定以上描述是否正确,并给出相应的解释。
不正确,比如下图根据节点覆盖准则和边覆盖准则生成的测试用例就不相同
节点覆盖: T = { 0, 1, 2 },测试路径为 [ 0, 1, 2 ]
边覆盖: T = { (0,1), (0, 2), (1, 2) }, 测试路径为 [ 0, 1, 2 ] [ 0, 2 ]
10.有人认为程序如果可以做到穷举路径测试,就可以保证程序中再也没有缺陷,请判断以上描述是否正确,并给出相应的解释。
不正确,穷举路径测试可以使代码达到100%的覆盖,但是不能查出程序违反了设计要求或用户需求。穷举测试不能查出遗漏路径错误和与数据相关的异常错误。
应用题
1.按要求给出下列程序的测试用例(要求写出必要的说明)
(1)语句覆盖
(2)判定覆盖
(3)条件覆盖
(4)判定-条件覆盖
1、语句覆盖
满足语句覆盖的情况是:
执行路径:ace
选择用例:
[(2,0,4),(2,0,3)]
2、判定覆盖
覆盖情况:共有两个判定,应执行路径:
ace ∧ abd 或: acd ∧ abe
选择用例
[(2,0,4),(2,0,3)] ace
[(1,1,1),(1,1,1)] abd
3、条件覆盖
应满足以下覆盖情况:
判定一: A>1, A≤1, B=0, B≠0
判定二: A=2, A≠2, X>1, X≤1
选择用例:
[(2,0,4),(2,0,3)]
[(1,1,1),(1,1,1)]
4、判定/条件覆盖
应满足以下覆盖情况:
条件: A>1, A≤1, B=0, B≠0
A=2, A≠2, X>1, X≤1
应执行路径
ace ∧ abd 或 acd ∧ abe
选择用例:
[(2,0,4),(2,0,3)](ace)
[(1,1,1),(1,1,1)] (abd)
2.白盒测试用例设计
现有控制流图如下
(1)根据节点覆盖准则,给出测试路径
(2)根据边覆盖准则,给出测试路径
(3)根据边对覆盖准则,给出测试路径
(1) 测试路径:[ 0, 1, 2, 3, 6 ] [ 0, 1, 2, 4, 5, 4, 6 ]
(2) 测试路径:[ 0, 1, 2, 3, 6 ] [ 0, 2, 4, 5, 4, 6 ]
(3) 测试路径:[ 0, 1, 2, 3, 6 ] [ 0, 1, 2, 4, 6 ] [ 0, 2, 3, 6 ] [ 0, 2, 4, 5, 4, 5, 4, 6 ]
3.写出下图的所有简单路径和主路径
简单路径 : [ 0, 1, 3, 0 ], [ 0, 2, 3, 0], [ 1, 3, 0, 1 ],[ 2, 3, 0, 2 ], [ 3, 0, 1, 3 ], [ 3, 0, 2, 3 ], [ 1, 3, 0, 2 ],[ 2, 3, 0, 1 ], [ 0, 1, 3 ], [ 0, 2, 3 ], [ 1, 3, 0 ], [ 2, 3, 0 ],[ 3, 0, 1 ], [3, 0, 2 ], [ 0, 1], [ 0, 2 ], [ 1, 3 ], [ 2, 3 ], [ 3, 0 ], [0], [1], [2], [3]
主路径 : [ 0, 1, 3, 0 ], [ 0, 2, 3, 0], [ 1, 3, 0, 1 ],[ 2, 3, 0, 2 ], [ 3, 0, 1, 3 ], [ 3, 0, 2, 3 ], [ 1, 3, 0, 2 ],[ 2, 3, 0, 1 ]
4.根据控制流图,回答以下问题。
(1)根据边覆盖准则,找出所有的测试路径
(2)根据边对覆盖准则,找出所有的测试路径
(3)根据主路径覆盖准则,找出所有的测试路径
边覆盖
[ 0, 1, 2, 3, 6 ] [ 0, 2, 4, 5,4,6 ]
边对覆盖
[ 0, 1, 2, 3, 6 ] [ 0, 2, 3, 6 ] [ 0, 2, 4, 6 ] [ 0, 1, 2, 4, 5,4,5,4,6 ]
主路径
[ 0, 1, 2, 3, 6 ]
[ 0, 1, 2, 4, 5 ]
[ 0, 1, 2, 4, 6 ]
[ 0, 2, 3, 6 ]
[ 0, 2, 4, 5]
[ 0, 2, 4, 6 ]
[ 5, 4, 6 ]
[ 4, 5, 4 ]
[ 5, 4, 5 ]
5.简述什么是所有定义覆盖、所有使用覆盖、所有du路径覆盖,并根据下图写出变量X的所有定义覆盖、所有使用覆盖、所有du路径覆盖
所有定义覆盖: 对于所有的变量,测试用例集T可以至少到达所有定义
所有使用覆盖: 对于所有的变量,测试用例集T可以到达所有使用
所有du路径覆盖: 对于所有的变量,测试用例集T可以访问所有定义-使用路径
所有定义覆盖:[ 0, 1, 3, 4 ]
所有使用覆盖:[ 0, 1, 3, 4 ][ 0, 1, 3, 5 ]
所有du路径覆盖:[ 0, 1, 3, 4 ][ 0, 2, 3, 4 ][ 0, 1, 3, 5 ][ 0, 2, 3, 5 ]
6.根据源代码,完成以下问题。
一个计算三个数中最大数的程序
main()
{int num1,num2,num3,max;
printf("Please input three numbers:");
scanf("%d,%d,%d",&num1,&num2,&num3);
if (num1>num2)
max=num1;
else
max=num2;
if (num3>MAX)
max=num3;
printf("MAX is:%d \\n",max);
}
(1) 给出对应的流程图
(2) 计算控制流图复杂度V(G)
(3)写出所有的路径,并设计测试用例
V(G)=3
路径
1->2->3->5->7
1->2>3->5->6->7
1->2->4->5->7
1->2->4->5->6->7
设计用例
| 序号 | Num1 | Num2 | Num3 | result |
| 1 | 3 | 2 | 1 | max=3 |
| 2 | 2 | 3 | 1 | max=3 |
| 3 | 1 | 3 | 2 | max=3 |
| 4 | 1 | 2 | 3 | max=3 |
void sort( int Num, int Type ){
int x = 0;
int y = 0;
while (Num > 0) {
if( Type = = 0)
x = y + 2;
else {
if( Type = = 1 )
x = y + 5;
else
x = y + 10;
}
Num--;
}
}
(1) 请画出控制流图并计算控制流图复杂度V(G) 。
(2) 找出路径。
(3) 请使用基本路径测试法设计测试用例。
(4) 根据控制流图,找出变量x和y的DU path
(1) 请画出控制流图并计算控制流图复杂度V(G)
V(G)=4
(2) 找出路径。
1-7
1-2-3-7
1-2-4-5-7
1-2-4-6-7
(3) 请使用基本路径测试法设计测试用例。
Num=1
Num=1,type=0
Num=1,type=1
Num=1,type=2
(4) 根据控制流图,找出变量x和y的DU path
X无DU path
Y的DU path
1-2-3-7
1-2-4-5-7
1-2-4-6-7
8.根据控制流图,回答以下问题
(1)根据边覆盖准则,找出所有的测试路径
(2)根据边对覆盖准则,找出所有的测试路径
(3)根据主路径覆盖准则,找出所有的测试路径
边覆盖
[1, 2, 3, 4,5,6,7,6,8 ]
边对覆盖
[1,2,3,4,3,4,3,5,6,7,6,7,6,8][1,2,3,5,6,8]
主路径覆盖
[ 1, 2, 3, 4, 3, 4, 3, 5, 6, 7, 6, 7, 6, 8 ]
[ 1, 2, 3, 4, 3, 5, 6, 8 ]
[ 1, 2, 3, 5, 6, 7, 6, 8 ]
[ 1, 2, 3, 5, 6, 8 ]
9.在三角形计算中,要求三角型的三个边长:A、B 和C。当三边不可能构成三角形时提示错误, 可构成三角形时计算三角形周长。若是等腰三角形,显示“等腰三角形”,若是等边三角形,则显示“等边三角形”。(15分)
(1) 写出程序伪代码,画出控制流程图
(2)计算圈复杂度V(g)
(3)找出基本测试路径
public String check(int a,int b,int c){
String str = "";
可构成三角形
可构成等腰三角形";
可构成等边三角形";
可构成三角形";
}
V(G)=3
基本路径
1->2>3->4->5->7
1->2->4->5->7
1->2->4->5->6->7
1->2->3->4->6->7
10.以下代码用于判断闰年,由C 语言书写。其对应的控制流图如下图所示。
请按要求回答问题。
int isLeap(int year){
int leap;
if (year % 4 = = 0){
if (year % 100 = = 0){
if ( year % 400 = = 0)
leap = 1;
else
leap = 0;
}
else
leap = 1;
}
else
leap = 0;
return leap;
}
(1)请画出控制流图,并计算圈复杂度V(G)。
(2)找出路径。
V(G)=4
路径
1->2->3->10->11->12
1->2->3->8->9->11->12
1->2->3->4->6->7->9->11->12
1->2->3->4->5->7->9->11->12
第4章 黑盒测试
判断题
1黑盒测试也称为功能测试。( )
对
2.在实际的软件项目测试中,穷举测试是不可能的。( )
对
3.测试用例不应该包含实际的数据。( )
错
4. 测试用例中不需要明显的验证手段。( )
错
5.自底向上集成需要测试员编写驱动程序。( )
对
6.因为大量的故障往往发生在输入定义域或输出值域的边界上,而不是在其内部,所以人们使用边界值法进行测试。( )
对
7.系统测试不包括性能测试。( )
错
8.错误推测法生成的测试用例可以通过其它黑盒测试法获得,所以在有充足时间的时候,没有必要采用错误推测法。( )
错
9.白盒法设计测试用例更详细,更完全,所以在有充足时间的时候,没有必要采用黑盒测试法。( )
错
10.黑盒法设计测试用例的强度从小到大为:边界值法、等价类法、决策表法,所以绝大部分时候只需要采用决策表法,而不需要采用边界值法和等价类法。( )
错
填空题
1.依赖测试人员的经验和领域知识生成测试用例的方法,称之为____________________。
错误推测法
2.假设存在两个输入变量,每个变量取5个点,采用边界值分析法至少产生_____________个测试用例。
个
3.假设存在两个输入变量,采用边界值最坏情况分析法至少产生_____________个测试用例。
个
4.假设存在两个输入变量,采用边界值健壮最坏情况分析法至少产生_____________个测试用例。
个
5. 正交表测试解决了__________________________________________________问题
从大量的数据中挑选适量的、有代表性的数据
6.正交表的构成元素包括__________________、_________________和_______________。
行数、水平数、因素数
7.均匀表测试解决了_______________________________________________________问题。
从大量的数据中均匀的挑选适量的、有代表性的数据
8.等价类测试法将数据划分为______________________和__________________________。
有效等价类、无效等价类
9.在输入条件规定了取值范围或值的个数的情况下,则可以确立_______个有效等价类和_______个无效等价类。
、2
10.在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立________个有效等价类和_________个无效等价类。
、1
名词解释
1.黑盒测试
不考虑源代码,从需求角度验证模块的正确性。
2.灰盒测试
介于白盒测试与黑盒测试之间的测试,既关注输出对于输入的正确性,也关注内部表现,但这种关注不象白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态。
3.有效等价类
对于程序的规格说明,是合理的、有意义的输入数据构成的集合。
4.无效等价类
对于程序的规格说明,是不合理的、没有意义的输入数据构成的集合。
5.弱一般等价类覆盖准则
存在一个测试用例集T,其中变量的有效子集合至少出现一次
6.强一般等价类覆盖准则
存在一个测试用例集T,所有变量的有效子集合的笛卡尔乘积
7.弱健壮等价类覆盖准则
存在一个测试用例集T,对于有效输入,变量的有效子集合至少出现一次 。 对于无效输入,一个变量值无效,其它值都有效
8.强健壮等价类覆盖准则
存在一个测试用例集T,所有变量有效子集合和无效子集合的笛卡尔乘积
9.决策表测试
通过描述多个输入对输出的影响而生成测试用例的方法。
10.正交表测试
根据正交试验设计方法,是从大量的数据中挑选适量的、有代表性的点,从而合理地安排测试方法。
简答题
1.简述黑盒测试的优点及缺点。
优点:
)比较简单,不需要了解程序内部的代码及实现;
)与软件的内部实现无关;
)从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题;
)基于软件开发文档,所以也能知道软件实现了文档中的哪些功能;
)在做软件自动化测试时较为方便。
缺点:
不可能覆盖所有的代码,覆盖率较低,大概只能达到总代码量的30%;
2.简述正交表测试与均匀表测试的区别。
正交测试是从大量的数据中挑选适量的、有代表性的点,从而合理地安排测试的一种科学的试验设计方法,具有试验次数少、试验点分布均匀、测试结果易于分析的特点。
均匀表测试在正交表的基础上放弃正交表的整齐可比性,进一步提高试验点的“均匀分散性”。与正交试验相比,进一步减少了试验的次数。
3. 简述Alpha测试与beta的区别。
Alpha测试 在系统开发接近完成时对应用系统的测试;测试后仍然会有少量的设计变更。这种测试一般由最终用户或其它人员完成,不能由程序或测试员完成。
Beta测试 当开发和测试根本完成时所做的测试,最终的错误和问题需要在最终发行前找到。这种测试一般由最终用户或其它人员完成,不能由程序员或测试员完成。
5.为什么要使用决策表,决策表有什么优缺点。
当输入条件之间的组合对输出结果具有影响。可以使用决策表解决。
优点:它能把复杂的问题按各种可能的情况一一列举出来,简明而易于理解,也可避免遗漏。
缺点:不能表达重复执行的动作,例如循环结构
应用题
1.问题如下:”……对功率大于50马力的机器、维修记录不全或已运行10年以上的机器,应给予优先的维修处理……” 。这里假定,“维修记录不全”和“优先维修处理”均已在别处有更严格的定义 。请用因果图或决策表进行分析,并给出测试用例。
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||
| 条 件 | 功率大于50马力吗? | Y | Y | Y | Y | N | N | N | N |
| 维修记录不全吗? | Y | Y | N | N | Y | Y | N | N | |
| 运行超过10年吗? | Y | N | Y | N | Y | N | Y | N | |
| 动 作 | 进行优先处理 | X | X | X | X | X | X | X | |
| 作其他处理 | x | ||||||||
| 测试用例编号 | 输入 | 预期结果 |
| 1 | A=Y且B=Y且C=Y | 进行优先处理 |
| 2 | A=Y且B=Y且C=N | 进行优先处理 |
| 3 | A=Y且B=N且C=Y | 进行优先处理 |
| 4 | A=Y且B=N且C=N | 进行优先处理 |
| 5 | A=N且B=Y且C=Y | 进行优先处理 |
| 6 | A=N且B=Y且C=N | 进行优先处理 |
| 7 | A=N且B=N且C=Y | 进行优先处理 |
| 8 | A=N且B=N且C=N | 作其他处理 |
投保额×保险费率
其中,保险费率依点数不同而有别,10点及10点以上保险费率为0.6%,10点以下保险费率为0.1%;而点数又是由 投保人的年龄和抚养人数来决定,具体规则如下:
| 年龄 | 抚养人数 | ||
| 20~39 | 40~59 | 其它 | 1人扣0.5点 最多扣3点 (四舍五入取整) |
要求:
给出弱一般等价类、强一般等价类法的测试用例
写出弱健壮和强健壮法设计的测试用例的个数
弱一般等价类的测试用例
{1,4}、{2,5}、{3,6}
强一般等价类的测试用例
{1,4}、{1,5}、{1,6}、{2,4}、{2,5}、{2,6}、{3,4}、{3,5}、{3,6}
弱健壮生成测试用例个数为9个
强健壮生成测试用例个数为20个
3.某公司的折扣:年交易额在10万元以下,无折扣;在10万元以上并且近三个月无欠款,折扣率10%;在10万元以上,虽三个月有欠款,但与公司交易10年以上,折扣率8%;在10万元以上,虽三个月有欠款,与公司交易10年以下,折扣率5%,否则无折扣,请用决策表(判定表)设计测试用例。
| 条件 | 1 | 2 | 3 | 4 | |
| 年交易额10万元以上 | T | T | T | N | |
| 三个月无欠款 | T | N | N | -- | |
| 交易10年以上 | -- | T | N | -- | |
动作 | 无折扣 | -- | |||
| 5% | T | ||||
| 8% | T | ||||
| 10% | T |
| 序号 | 输入 | 输出 |
| 1 | 年交易额10万元以上,三个月无欠款 | 折扣10% |
| 2 | 年交易额10万元以上,三个月有欠款,交易10年以上 | 折扣8% |
| 3 | 年交易额10万元以上,三个月有欠款,交易10年以下 | 折扣5% |
| 4 | 年交易额10万元以下 | 无折扣 |
地区码—— 空白、3位或4 位数字;
前 缀——为三位数字,但不能 “0”,“1”开头;
后 缀——4 位数字。
假定被测程序能接受一切符合上述规定的电话号码, 拒绝所有不符合规定的
电话号码。请用等价类设计测试用例。
要求:
给出弱一般等价类、强一般等价类法的测试用例
写出弱健壮和强健壮法设计的测试用例的个数
给出分析过程
(1)给出弱一般等价类、强一般等价类法的测试用例
弱一般等价类、强一般等价类的测试用例相同
注:多写不扣分,但是少写一个扣一分
()276-2345 覆盖 ①、 ③、④
(635)805-9321 覆盖 ②、 ③、④
(2)写出弱健壮和强健壮法设计的测试用例的个数
弱健壮生成测试用例个数为11个
强健壮生成测试用例个数为4*6*4
5. 某软件的一个模块的需求规格说明书中描述:
(1)年薪制员工:严重过失,扣年终风险金的4%;过失,扣年终风险金的2%。
(2)非年薪制员工:严重过失,扣当月薪资的8%;过失,扣当月薪资的4%。
请绘制出判定表,并给出相应的测试用例。
判定表
| T1 | T2 | T3 | T4 | T5 | T6 | |
| C1年薪员工 | Y | Y | Y | N | N | N |
| C3存在过失 | Y | Y | ||||
| C4存在严重过失 | Y | Y | ||||
| C5无过失 | Y | Y | ||||
| A1不扣薪资 | Y | Y | ||||
| A2扣年终风险金4% | Y | |||||
| A3扣年终风险金2% | Y | |||||
| A4扣当月薪资8% | Y | |||||
| A5扣当月薪资4% | Y |
1.C1,C3->A3
2.C1,C4->A2
3.C1,C5->A1
4. !C1,C3->A5
5. !C1,C4->A5
6. !C1,C5->A1
6. 某公司招聘人员,其要求为:学历:本科及以上;专业:计算机、通信、自动化;年龄:22-30 岁。
(1)请划分出各条件的有效等价类和无效等价类。
(2)给出弱一般等价类、强一般、弱健壮等价类法的测试用例
(3)写出强健壮法设计的测试用例的个数
学历:有效等价类:{(1)本科}; 无效等价类{(2)专科}
专业:有效等价类:{(3)计算机,(4)通信,(5)自动化},无效等价类{(6)英语}
年龄:有效等价类:{(7)25};无效等价类:{(8)20,(9)33}
弱一般等价类,强一般等价类测试用例
本科,计算机,25),(本科,通信,25),(本科,自动化,25)
弱健壮测试用例
本科,计算机,25),(本科,通信,25),(本科,自动化,25)
专科,计算机,25),(本科,英语,25),(本科,计算机,20)
本科,计算机,33)
强健壮测试用例个数:24个
7.NextDate 函数包含三个变量:month 、 day 和 year ,函数的输出为输入日期后一天的日期。 例如,输入为 2006年3月 7日,则函数的输出为 2006年3月8日 。
要求输入变量 month 、 day 和 year 均为整数值,并且满足下列条件:
(1)1≤month≤12
(2)1≤day≤31
(3)1920≤year≤2050
(1) 给出弱一般等价类、强一般、弱健壮等价类法的测试用例
(2) 写出强健壮法设计的测试用例的个数
月:有效等价类:{(1)5}; 无效等价类:{(2)-1,(3)14}
日:有效等价类:{(4)6};无效等价类:{(5)-1,(6)33}
年:有效等价类:{(7)2000};无效等价类:{(8)1900,(9)2055}
弱一般等价类,强一般等价类测试用例(月日年)
,6,2000)
弱健壮测试用例
,6,2000),(-1,6,2000),(14,6,2000),(5,-1,2000),(5,33,2000),(5,6,1900),(5,6,2055)
强健壮测试用例个数:81个
8.NextDate 函数包含三个变量:month 、 day 和 year ,函数的输出为输入日期后一天的日期。 例如,输入为 2006年3月 7日,则函数的输出为 2006年3月8日 。
要求输入变量 month 、 day 和 year 均为整数值,并且满足下列条件:
(1)1≤month≤12
(2)1≤day≤31
(3)1900≤year≤2050
(1) 给出边界值健壮性测试的测试用例
(2)给出边界值最坏情况测试和边界值健壮最坏情况测试的测试用例个数
边界值健壮性测试的测试用例
| 测试用例 | mouth | day | year | 预期输出 |
| Test1 Test2 Test3 Test4 Test5 Test6 Test7 | 6 6 6 6 6 6 6 | 15 15 15 15 15 15 15 | 1911 1912 1913 1975 2049 2050 2051 | 1911.6.16 1912.6.16 1913.6.16 1975.6.16 2049.6.16 2050.6.16 2051.6.16 |
| Test8 Test9 Test10 Test11 Test12 Test13 | 6 6 6 6 6 6 | -1 1 2 30 31 32 | 2001 2001 2001 2001 2001 2001 | day超出[1…31] 2001.6.2 2001.6.3 2001.7.1 输入日期超界 day超出[1…31] |
| Test14 Test15 Test16 Test17 Test18 Test19 | -1 1 2 11 12 13 | 15 15 15 15 15 15 | 2001 2001 2001 2001 2001 2001 | Mouth超出[1…12] 2001.1.16 2001.2.16 2001.11.16 2001.12.16 Mouth超出[1…12] |
边界值健壮最坏情况测试的测试用例个数:343个
9. 假设查询某个人时有三个查询条件:
请利用正交测试法设计测试用例。
正交表L4(23)
有三个因素
姓名、身份证号、手机号码
每个因素有两个水平
姓名:填、不填
身份证号:填、不填
手机号码:填、不填
代入正交表得
测试用例如下:
1:填写姓名、填写身份证号、填写手机号
2:填写姓名、不填身份证号、不填手机号
3:不填姓名、填写身份证号、不填手机号
4:不填姓名、不填身份证号、填写手机号
10.编写一个三角形判定函数,输入三角型的三个边长:A、B 和C。当三边不可能构成三角形时提示错误,可构成三角形时计算三角形周长。若是等腰三角形打印“等腰三角形”,若是等边三角形,则提示“等边三角形”。
请根据决策表法设计测试用例。
| 序号 | A | B | C | 结果 |
| 1 | 1 | 2 | 5 | 非三角形 |
| 2 | 2 | 2 | 2 | 等边三角形 |
| 3 | 2 | 2 | 3 | 等腰三角形 |
| 4 | 2 | 3 | 2 | 等腰三角形 |
| 5 | 3 | 2 | 2 | 等腰三角形 |
| 6 | 1 | 2 | 3 | 一般三角形 |
(1)请写出弱一般、强一般、弱健壮等价类测试用例
(2)请写出强健壮等价类的测试用例个数
要求写出分析过程
R1={:等边三角形} 有效类{三边相等},无效类{(三边相等,都为负)}
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||
| 条 件 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| 2 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |
| 3 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | |
| 动 作 | 51 | 0 | 0 | 0 | 0 | 1 | 1 | ||
| 50 | 1 | 0 | 1 | 0 | 0 | 0 | |||
| 52 | 0 | 1 | 0 | 1 | 0 | 1 | |||
| 序号 | 输入 | 预期输出 |
| 1 | A3 | 修改文件 |
| 2 | A* | 发出信息M |
| 3 | B8 | 修改文件 |
| 4 | BN | 发出信息M |
| 5 | X6 | 发出信息L |
| 6 | CC | 发出信息L M |
居民用电<100度/月,按A类收费;
>=100度/月,按B类收费 ;
动力用电<10000度/月,非高峰,按B类收费 ;
>=10000度/月,非高峰,按C类收费 ;
<10000度/月,高峰,按C类收费 ;
>=10000度/月,高峰,按D类收费 ;
请用决策表设计测试用例。
原因:
1—居民用电
2—动力用电
3—<100度/月
4—非高峰
5—<10000度/月
结果
A--按A类收费
B—按B类收费
C—按C类收费
D—按D类收费
设计测试用例:
1:输入数据——居民电,90度/月;
预期结果——A
2:输入数据——居民电,110度/月;
预期结果——B
3:输入数据——动力电,非高峰,8000度/月;
预期结果——B
4:输入数据——动力电,非高峰,12000度/月;
预期结果——C
5:输入数据——动力电,高峰,9000度/月;
预期结果——C
6:输入数据——动力电,高峰,11000度/月;
预期结果——D
14. 某商场促销活动期间,对持商场会员卡的顾客,实行8.5折优惠,满1000元实行7折优惠;对其他顾客消费满1000元的,实行9折优惠,并免费办理会员卡。请给出相应的决策表和测试用例。
测试用例:
输入数据——持会员卡,消费<1000元
输出结果——实行8.5折优惠
输入数据——持会员卡,消费≥1000元
输出结果——实行7折优惠
输入数据——未持会员卡,消费<1000元
输出结果——没有优惠
输入数据——未持会员卡,消费≥1000元
输出结果——实行9折优惠,并免费办理会员卡
15. 在银行业务信息系统中,
有三个输入条件:
A——活期存折账户,B——正确的密码输入,C——一本通账户(活期、定期合并在一本通存折上);
有两个输出结果:
e——显示活期账户信息,f——显示定期账户信息。
如果同时满足A、B,或者同时满足B、C,就会有e;如果同时满足B、C,则会有f。请用决策表设计以上描述的测试用例。
测试用例:
1:输入数据——使用活期存折账户并输入正确的密码;预期结果——显示活期账户信息
2:输入数据——使用活期存折账户,未进行其他操作;预期结果——没有显示
3:输入数据——使用一本通账户并输入正确的密码;预期结果——显示活期和定期账户信息
4:输入数据——直接输入正确密码;预期结果——没有显示
5:输入数据——使用一本通账户,未进行其他操作;预期结果——没有显示
6:输入数据——未进行任何操作;预期结果——没有显示
16.某一种8位计算机,其十六进制常数的定义是以0x或0X开头的十六进制整数,其取值范围为-7f~7f(不区分大小写字母),如0x13、0x6A、-0x3c。
(1)请写出弱一般、强一般、弱健壮等价类测试用例
(2)请写出强健壮等价类的测试用例个数
要求写出分析过程
| 输入条件 | 有效等价类 | 无效等价类 | ||
| 开头字符 | 由0x或0X开头 | (1) | 以字母开头 以非0数字开头 | (2)(3) |
| 数值字符 | 数字或A—F的字母 | (4) | A—F以外的字母 | (5) |
| 数值 | ≥-7f且≤7f | (6) | <-7f >7f | (7)(8) |
{0x4F}
弱健壮等价类测试用例
{0x4f,,ax4f,1x4f,ox4g, 0x8f,-0x8f,0x8f}
强健壮等价类的测试用例个数:18
第5章 单元测试与Junit
判断题
1.程序员与测试工作无关。( )
错
2.Junit只是单元测试工具,并不能实现回归测试。( )
错
3.在做程序的单元测试时,桩模块比驱动模块容易编写。( )
错
4. 代码评审员必须由测试员担任。( )
错
5.代码评审是检查源代码是否达到模块设计的要求。( )
错
6.测试在编码和调试完成后才进行。( )
错
7.测试和调试没有什么区别。( )
错
8.单元测试多采用手工执行方式。( )
错
9.单元测试多采用自动执行方式。( )
对
10.软件单元的缺陷可以在集成测试阶段发生并修复,所以没有必要进行单元测试。( )
错
11.有经验的软件开发人员对其开发的代码没必要进行单元测试。( )
错
填空题
1.单元测试主要由_______________人员完成。
开发人员
2.传统等价类测试是将数据划分成______________________和____________________。
有效等价类、无效等价类
3.Jmeter是____________测试工具。
性能
4.Junit3通过_____________类收集TestCase运行的结果,记录运行的详细情况。
5.Junit3通过______________和______________来建立测试环境和销毁测试环境。
、teardown()
6.Junit4使用元标签______________表示某些方法尚未完成,暂不参与此次测试。
@Ignore:
7.Junit4使用元标签______________用于在每个测试方法运行前均初始化一次
@Before
8.Junit4使用元标签______________用于每个测试方法运行完毕后执行
@After
9.Junit4使用元标签______________用于在测试类创建时运行一次
@BeforeClass
10.Junit4使用元标签______________用于在测试类结束时运行一次
@AfterClass
名词解释
1.驱动模块
用以模拟被测模块的上级模块,接受测试数据,将相关数据传给被测模块,并显示结果。
2. 桩模块
对顶层或上层模块进行测试时所编写的替代下层模块的程序。
3.单元测试
单元测试是对软件基本组成单元进行的测试。
4.Mock Object
代替与代码协作的对象的对象
简答题
1.假设你开发了一个模块的代码,对该模块测试需要WEB环境,而且该模块调用的另一个模块由别人正在开发,你该如何测试。
使用stub
stub是旨模拟可能存在或还没写完真实代码所产生的行为,用来替换真正的代码,此时可以编写桩模块模拟别人正在开发的模块。
stub一般适合代码中粗粒度部分,比如文件系统,连接服务器和数据库等,这里,可以使用jetty做为WEB服务器,编写桩代码进行测试。
2. 简述单元测试的目标和任务。
目标:检验程序最小单位有无错误;检验单元编码与设计是否吻合。
任务:模块接口测试、模块局部数据结构测试、模块边界条件测试、模块执行通路测试、模块的各条错误处理通路测试。
3.构造测试驱动器有哪几种方法,各有什么优缺点。
| 设计方法 | 优点 | 缺点 |
| 调用main方法 | 所见即所得,快速得知测试后结果 | 不利于后期测试代码维护 不利于测试代码的利用 交付后程序必须逐个删除测试代码 |
| 嵌入静态测试方法 | 测试代码调用方便,被测试类无需实例化就可以进行测试 | 不利于后期测试代码的维护 不利于测试代码的复用 交付后的程序必须逐个删除测试代码 |
| 实现测试类 | 测试代码可复用 测试用例于被测试类,利于测试代码维护 经过改进,可一次执行多个测试用例 | 需要密切关注被测试类的变化 |
使用stub
stub是旨模拟可能存在或还没写完真实代码所产生的行为,用来替换真正的代码。
stub一般适合代码中粗粒度部分,比如文件系统,连接服务器和数据库等
stub通常难以编写,尤其是仿真系统很复杂的时候
使用Mock object------------是一个对象
用来代替与你的代码协作的对象。这样与stub有些相似,但是仅限于此。
mock object一般适合代码中细粒度部分
5.简述Xunit测试框架具有哪些优点,使得现行的软件单元测试完全基于Xunit框架。
可以使测试代码与产品代码分开。
针对某一个类的测试代码通过较少的改动便可以应用于另一个类的测试。
易于集成到测试人员的构建过程中,XUnit和Ant的结合可以实施增量开发。
XUnit是公开源代码的,可以进行二次开发。
可以方便地对XUnit进行扩展。
应用题
1.现有人编写了类Math,其中有一个求根号静态操作sqrt(x),如果数值正确,输出开根号的值,如果数据不正确,抛出异常Exception,请用弱健壮等价类法设计测试用例,并写出基于Junit的测试代码。
变量X,有效等价类:{(x为正整数);(x为正浮点数),(x为0)},无效等价类:{(x为负数)}
| 序号 | x | 预期结果 |
| 1 | 4 | 2 |
| 2 | 1.44 | 1.2 |
| 3 | 0 | 0 |
| 4 | -4 | 抛出异常 |
public void testSqrtInteger(){
int result=Math.Sqrt(4);
Assert.assertEquals ( 2,result);
}
public void testSqrtFloat(){
int result=Math.Sqrt(1.44);
Assert.assertEquals ( 1.2,result);
}
public void testSqrtZero(){
int result=Math.Sqrt(0);
Assert.assertEquals ( 0,result);
}
public void testSqrtError(){
int result=Math.Sqrt(-4);
}
catch(Exception err){
}
}
}
2.现有人编写了计算器类Caculator,其中有一个除法操作divide (x,y),表示x/y,如果数值正确,输出相应的值,如果数据不正确,抛出异常Exception,请用错误推测法至少设计3个测试用例,并写出基于Junit的测试代码。
| 序号 | x | y | 预期结果 |
| 1 | 4.4 | 2.2 | 2 |
| 2 | 4 | 0 | 抛出异常 |
| 3 | 0 | 4 | 0 |
public void testSqrtFloat(){
Caculator c=new Caculator();
float result=c.divide(4.4,2.2);
Assert.assertEquals ( 2,result);
}
public void testSqrtZero(){
Caculator c=new Caculator();
float result=c.divide(0,4);
Assert.assertEquals ( 0,result);
}
public void testSqrtError(){
Caculator c=new Caculator();
float result=c.divide(4,0);
fail();
}
catch(Exception err){
Assert.assertTrue(true);
}
}
}
3.现有人编写了帐号类Account,用于管理个人的存款余额,
public Account{
private double balance; //帐号余额,余额最低为0
public double getBalance(){
return balance;
}
Public void setBalance(double b){
balance=b;
}
public void deposit(double money) throws Exception {
//存款,money如果为负数,抛出异常
}
}
请用错误推测法为deposit()函数至少设计3个测试用例,并写出基于Junit的测试代码。
| 序号 | balance | money | 预期结果 |
| 1 | 0 | 2 | 2 |
| 2 | 4 | -1 | 抛出异常 |
| 3 | 0 | 0 | 0 |
public void testDeposit (double money){
Account a=new Account ();
a.setAccount(0);
double result= a.deposit(2);
Assert.assertEquals ( 2,result);
}
public void testDepositZero(){
Account a=new Account ();
a.setAccount(0);
double result= a.deposit(0);
Assert.assertEquals ( 0,result);
}
public void testDepositError(){
try{
Account a=new Account ();
a.setAccount(4);
double result= a.deposit(-1);
fail();
}
catch(Exception err){
Assert.assertTrue(true);
}
}
}
4.现有人编写了帐号类Account,用于管理个人的存款余额,
public Account{
private double balance; //帐号余额,余额最低为0
public double getBalance(){
return balance;
}
Public void setBalance(double b){
balance=b;
}
public void withdrawl(double money) throws Exception {
//取款,money如果为负数或余额不足,抛出异常
}
}
请用错误推测法为withdrawl()函数至少设计3个测试用例,并写出基于Junit的测试代码。
| 序号 | balance | money | 预期结果 |
| 1 | 5 | 8 | 抛出异常 |
| 2 | 5 | -1 | 抛出异常 |
| 3 | 5 | 5 | 0 |
public void testWithDrawlEqual (double money){
Account a=new Account ();
a.setAccount(5);
double result= a. withdrawl (5);
Assert.assertEquals ( 0,result);
}
public void testWithDrawlNegative (){
try{
Account a=new Account ();
a.setAccount(5);
double result= a. withdrawl (-1);
fail();
}
catch(Exception err){
Assert.assertTrue(true);
}
}
public void testWithDrawlTooMuch (){
try{
Account a=new Account ();
a.setAccount(5);
double result= a. withdrawl (8);
fail();
}
catch(Exception err){
Assert.assertTrue(true);
}
}
}
第6章 集成测试与系统测试
判断题
1 Beta 测试是验收测试的一种。( )
对
2.验收测试是以最终用户为主的测试。( )
对
3.自顶向下的集成方法属于非渐增式测试模式。( )
错
4.自顶向下的集成方法属于渐增式测试模式。( )
对
5. 改进的三明治集成方法不需要驱动模块,但需要桩模块。( )
错
6. 回归测试不需要补充新的测试用例。( )
错
7.压力测试和负载测试的测试目的相同。( )
错
8. 验收测试由用户进行,不需要编写正式的、单独的验收测试计划。( )
错
9.所有软件必须进行某种程度的兼容性测试。( )
对
10.大棒集成方法属于非渐增式测试模式。( )
对
11. 验收测试是由最终用户来实施的。( )
错
12.验收测试没必要一定要在实际的用户运行环境中进行。( )
对
13.大棒集成方法基本程序能工作的时间最早。( )
错
填空题
1.在兼容性测试中,_______________是指可以使用软件的以前版本, _________________是指可以使用软件的未来版本
向前兼容、向后兼容
2. 检测系统对非法侵入的防范能力的测试,称之为“_____________测试”。
安全性测试
3.回归测试的目的是_________________________________________________________。
验证修改的代码是否引入新的缺陷
4.集成测试主要是由________________人员完成。
测试人员
5.对系统不断施加越来越大的负载,则确定系统的瓶颈的测试称之为___________测试。
压力测试
6.可靠性测试有二个关键的数据,通过________________________表示是否超过规定时限,通过_______________________表示在一年中应不超过多少时间。
平均失效间隔时间、因故障而停机的时间
7.针对软件的用户手册进行测试,称之为“_______________”。
文档测试
8.测试软件在安装过程中给用户的提示是否清楚明了、安装的操作是否容易、安装过程是否太冗长、各系统设置是否正确,称之为“_______________”。
安装测试
9.测试软件在卸装过程中,系统的提示是否清楚明了、操作是否简单、卸装是否彻底,称之为“_________________”。
卸装测试
10.测试软件的界面布局是否符合用户的使用习惯,称之为________________。
界面测试/易用性测试
名词解释
1.α测试
开发公司组织内部人员模拟各类用户对软件产品进行测试,试图发发现错误并修正。
2.冒烟测试
把代码进行编译成可执行程序,并运行可执行程序,如果该程序通过了最基本的功能测试,则认为通过了冒烟测试。
3.β测试
由软件公司组织特定的用户进行测试,以发现缺陷
4.验收测试
用户对软件产品进行验收,检查是否符合软件需求说明书和要求的测试。
5.功能测试
功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。
6.兼容性测试
验证软件之间是否能正确地交互和共享信息的测试。
7.容量测试
测试对象在给定时间内能够持续处理的最大负载或工作量
8.可靠性测试
测试对象在规定的条件下和规定的时间内完成规定功能的能力
9.容错测试
输入异常数据或进行异常操作,以检验系统的保护性
10.恢复测试
测试一个系统从灾难或出错中能否很好地恢复的过程
简答题
1.简述增量模式集成测试的自顶向下和自底向上两种测试方法。
自顶向下法(Top-down integration)
⏹对主控模块进行测试,测试时用桩模块代替所有直接附属于主控模块的模块。
⏹根据选定的结合策略(深度优先或广度优先),每次用一个实际模块代替对应的桩模块.
⏹在结合下一个模块的同时进行测试(新结合进来的模块也许又需要新的桩模块).
⏹为保证加入的模块没有引进新的错误,可能需要进行回归测试.
自底向上法(Bottom-up integration)
⏹把底层模块组合成实现某个特定软件子功能的簇(Cluster).
⏹开发一个驱动程序,协调测试数据的输入和输出.
⏹对由模块组成的子功能簇进行测试.
⏹去掉驱动程序,沿软件结构自下向上移动,把子功能簇组合起来形成更大的子功能簇.
2.简述渐增式测试有什么优缺点及适用范围。
非渐增式测试优点
迅速完成集成测试
只需要极少桩模块和驱动模块
需要的测试用例也最少
简单易行
测试人员可以并行进行
非渐增式测试缺点
组装时一次成功的可能性很小
错误定位和修改都比较困难
即使能够一次性集成,但还有很多接口错误不容易被测试到
非渐增式测试适用范围
维护性项目(或功能增强型项目),因为以前的产品很稳定,只是新增或修改了少数几个组件. 被测系统很小,并且它的每个组件都经过了充分的单元测试
3. 简述非渐增式测试有什么优缺点及适用范围。
渐增式测试优点
发现错误早、渐增式错误定位相对容易、渐增式模式测试更彻底
渐增式测试缺点
渐增式模式渐增式模块需要编写的软件较多(驱动模块或桩模块),工作量较大。
渐增式测试适用范围
系统规模较大,对质量要求较高的项目
4.简述自顶向下集成测试的过程、优缺点和适用范围。
过程:
(1)对主控模块进行测试,测试时用桩模块代替所有直接附属于主控模块的模块。
(2)根据选定的结合策略(深度优先或广度优先),每次用一个实际模块代替对应的桩模块.
(3)在结合下一个模块的同时进行测试(新结合进来的模块也许又需要新的桩模块).
(4)为保证加入的模块没有引进新的错误,可能需要进行回归测试.
(5)从[2]开始不断重复上述过程,直至完成.
优点:不需要驱动程序;早期验证系统主要功能;早期发现上层模块的接口错误
缺点:需要大量的桩模块;底层模块的错误发现较晚;早期不能充分展开人力
适用范围:产品控制结构比较清晰和稳定;产品的高层接口变化比较小;产品的底层接口经常可能被修改;产品的控制规模具有较大的技术风险,需要尽早进行验证。
5.简述自底向上集成测试过程、优缺点和适用范围。
过程
1)把底层模块组合成实现某个特定软件子功能的簇(Cluster).
2)开发一个驱动程序,协调测试数据的输入和输出.
3)对由模块组成的子功能簇进行测试.
4)去掉驱动程序,沿软件结构自下向上移动,把子功能簇组合起来形成更大的子功能簇.
5)从[2]开始不断重复上述过程,直至完成.
优点
●对底层模块行为的早期验证,较早发现底层模块错误
●在初期可能会并行进行,提高效率
●减少了桩模块的工作量
●驱动模块额外编写,对被测模块的可测性要求较低
●便于故障定位
缺点
●驱动模块工作量非常大
●对需求的验证被推迟到了最后,设计上的错误不能被及时发现
适用范围
●底层接口比较稳定的产品
●高层接口变化比较频繁的产品
●底层模块较早完成的产品
6.简述大棒策略的过程、优缺点及适用范围
过程
在对每一个子模块进行测试(单元测试阶段)后,然后将所有模块全部集成起来一次性进行集成测试.
优点
●迅速完成集成测试
●只需要极少桩模块和驱动模块
●需要的测试用例也最少
●简单易行
●测试人员可以并行进行
缺点
●组装时一次成功的可能性很小
●错误定位和修改都比较困难
●即使能够一次性集成,但还有很多接口错误不容易被测试到
适用范围
●维护性项目(或功能增强型项目),因为以前的产品很稳定,只是新增或修改了少数几个组件.
●被测系统很小,并且它的每个组件都经过了充分的单元测试
7.简述集成测试与系统测试的区别
●系统测试所测试的对象是整个系统以及与系统交互的硬件和软件平台,系统测试更多程度上是站在用户的角度上对整个系统做功能性的验证,同时还对系统进行一些性能测试,系统测试的依据来自于用户的需求规格说明书
●集成测试所测试的对象是模块间的接口,目的是找出模块接口和整体体系结构上的问题.
8. 根据下面的程序结构图,进行宽度优先自顶向下集成测试,给出测试过程。
1.测试模块A,使用桩模块SB和SC代替A调用的B和C。
2.测试模块B,使用桩模块SD和SE代替调用的D,E
3.测试模块C,使用桩模块SF代替调用的F
4.测试D
5.使用桩模块SG,测试E
6.测试F
7.测试G
第7章 测试自动化
判断题
1.测试脚本不能手工编写,只能通过录制技术获得。( )
错
2. 测试脚本可以手工编写,也可以由录制生成。( )
对
3.软件开发全过程的测试工作都可以实现自动化。( )
错
4.自动化测试相比手工测试而言,能发现更多的错误。( )
错
5. 自动化测试相对于手工测试能发现更多的缺陷,因此完全可以代替手工测试。( )
错
6.Selelium是一个功能测试工具。( )
对
7.CPU资源得用率越大越好。( )
错
8.性能测试中,如果CPU 空闲时间为零,则主要通过添加CPU来解决问题。( )
错
9.如果内存的换页率为零,则说明内存成为系统性能的瓶颈。( )
对
10.如果等待磁盘 I/O 的时间所占的百分率太高,则说明I/O设备成了系统性能的瓶颈。( )
对
填空题
1.性能优化的关键是找到___________________________________________。
系统瓶颈
2.自动化测试测试技术主要包括:代码分析、_________________、_______________、自动化比较、_______________。
捕获和回放、脚本技术、虚拟用户
3.当性能测试时,并发用户数持续大于__________________,可能会出现部分用户请求失败。
最佳并发用户数
4.当性能测试时,并发用户数持续大于__________________,则系统性能不可接受。
最大并发用户数
名词解释
1.测试脚本
执行测试用例的代码或是用于测试的一系列指令,这些指令可以被自动化测试工具执行。
2.随机测试
不懂业务的人,随机的对软件进行操作,并且记录测试过程中发现的错误。
3.吞吐量
单位时间内交易数或业务数
4.性能测试
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
5.自动化测试
使用一种自动化测试工具来验证各种软件测试的需求,它包括测试活动的管理与实施、测试脚本的开发与执行。
简答题
1简述手工测试的优缺点。
手工测试具有创造性,可举一反三,从一个测试用例想到另一些测试用例,特别是可考虑测试用例不能覆盖的一些特殊或边界情况;同时对那些复杂的逻辑判断、界面是否友好,手工测试有明显优势。但其局限性也非常明显:通过手工测试无法做到覆盖所有代码路径。简单的功能性测试用例在每一轮测试中都不能少,而且具有一定的机械性、重复性,工作量往往较大。许多与时序、死锁、资源冲突、多线程等有关的错误,通过手工测试很难捕捉到。进行系统负载、性能测试时,需要模拟大量数据或大量并发用户等各种应用场合时,很难通过于工测试来进行。
2.简述自动化测试的优缺点。
自动化测试优点:节省人力资源,降低测试成本。增强测试的稳定性和可靠性。提高软件测试的准确度和精确度,增加软件信任度。软件测试工具使测试工作相对比较容易,且能产生更高质量的测试结果。手工不能做的事情,自动化测试能做,如负载、性能测试。
缺点为:不能取代手工测试 ;手工测试比自动测试发现的缺陷更多;对测试质量的依赖性极大;测试自动化不能提高有效性;测试自动化可能会制约软件开发。
3.比较负载测试、压力测试,容量测试区别。
负载测试:在不同的工作负荷下,系统的负荷及响应时间。
压力测试:在一定的负荷条件下,在较长时间跨度内的系统连续运行给系统性能所造成的影响。
容量测试:容量测试目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下没有出现任何软件故障或还能保持主要功能正常运行。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。容量测试的目的是使系统承受超额的数据容量来发现它是否能够正确处理。容量测试是面向数据的,并且它的目的是显示系统可以处理目标内确定的数据容量。
第8章 测试过程管理
判断题
1.测试部门负责软件质量。( )
错
2.软件缺陷严重程度越高越需早修复。( )
对
3. 代码评审员必须由测试员担任。( )
错
4.缺陷严重程序较低的缺陷,也可能具有很高的缺陷优先级。( )
对
5.软件测试能保证软件质量。( )
错
6.软件测试人员都可以不用具备开发技术。( )
错
7.软件开发人员的水平肯定比测试人员水平高。( )
错
8.测试集成越频繁效果越好。( )
对
9.测试人员要坚持原则,缺陷未修复完坚决不予通过。( )
对
10.软件测试中发现的所有错误都需要修复。( )
错
填空题
1.测试执行过程的有两个重要的里程碑:_________________和_________________。
代码冻结、功能冻结/需求冻结
2.软件的测试执行过程分为初测期、_________________和__________________。
细测期、回归测试期
3.软件缺陷根据严重程度分为_____________、______________、一般和较小。
致命、严重
4.软件缺陷根据修复优先级分为_______________、_______________、正常排队和低优先级。
立即解决、高优先级
5. 简单的软件缺陷生命周期分为发现、_____________、____________和关闭。
打开、修复
6.三国鼎立的项目组织模型分为项目经理、______________和________________。
测试经理、开发经理
名词解释
1.功能冻结
经过测试,符合设计要求,确认系统功能和其他特性均不再做任何改变
2.代码冻结
代码冻结只标志系统的当前版本的质量已达到预期的要求,冻结程序的源代码,不再对其做任何修改。
简答题
1.简述软件缺陷的表现形式和产生原因
软件缺陷的主要表现形式:
☐ 功能、特性没有实现或部分实现
☐ 设计不合理,存在缺陷
☐ 实际结果和预期结果不一致
☐ 运行出错,包括运行中断、系统崩溃、界面混乱
☐ 数据结果不正确、精度不够
☐ 用户不能接受的其他问题,如存取时间过长、界面不美观
产生的原因:
1、软件的复杂性
软件的结构、功能多、算法难度大,但是要求精确性高
2、交流不够
由于人与人思想上的差异,对同一问题产生了不同的理解
3、程序设计错误
设计水平
4、需求变化
需求是多变的,软件的功能和规模都可能在开发过程中变化
5、时间压力
软件开发时间紧迫,很难充分计划和实施
6、代码文档贫乏
开发过程中不写文档,或者文档版本陈旧
7、软件开发工具问题
开发工具中有缺陷
2.简述测试计划的目标和内容。
软件测试计划的目标:
1.规定测试活动的范围、方法、资源和进度;
2.明确正在测试的项目、要测试的特性,要执行的测试任务、每个任务的负责人,以及与计划相关的风险。
测试计划内容:
测试计划标识、背景介绍、测试项目、“通过/失败”的准则、中止的标准和恢复的条件、测试的交付件、需要的环境、责任和角色 时间计划安排、人员配备和必要的培训、风险和意外处理
3.简述什么情况下可能中断软件测试。
常用的测试中断标准如下:
⏹关键路径上的未完成任务
⏹大量的缺陷
⏹严重的缺陷
⏹不完整的测试环境
⏹资源短缺
