- 软件测试基础
- 填空题
- 软件从“出生”到“消亡”的过程称为软件的生命周期
- 引入风险分析的开发模型为螺旋模型
- ISO/IEC 9126:1991标准提出的质量模型包括功能性、可靠性、可使用性、效率、可维护性、可移植性六大特性。
- 按照缺陷的严重程度可以将缺陷划分为严重、一般、次要、建议。
- 验证软件单元是否符合软件需求与设计的测试称为单元测试。
- 对程序的逻辑结构、路径与运行过程进行的测试称为白盒测试。
- 有一种测试模型,测试与开发并行进行,这种测试模型称为W模型。
- 判断题
- 软件存在缺陷是由于开发人员水平有限引起的,一个非常优秀的程序员可以开发出零缺陷的软件。(错)
- 软件缺陷都存在于程序代码中。(错)
- 软件测试是为了证明程序无错。(对)
- 软件测试的H模型融入了探索性测试。(错)
- 软件测试要投入尽可能多的精力以达到100%的覆盖率。(错)
- 单选题
- 下列选项中,不属于软件开发模型的是(A)。
- A.V模型 B.快速原型模型 C.螺旋模型 D.敏捷模型
- 下列选项中,哪一项不是影响软件质量的因素?(C)
- A.需求模糊 B.缺乏规范的文档指导
- C.软件测试要求太严格 D.开发人员技术有限
- 下列哪一项不是软件缺陷产生的原因?(B)
- A.需求不明确 B.测试用例设计不好 C.软件结构复杂 D.项目周期短
- 下列选项中,关于软件缺陷的说法错误的是(C)。
- A.软件缺陷是软件(包括程序和文档)中存在的影响软件正常运行的问题、错误、隐藏的功能缺失或多余
- B.按照缺陷的优先级不同可以将缺陷划分为立即解决、高优先级、正常排队、低优先级
- C.缺陷报告有统一的模板,该模板是根据IEEE729-1983制定
- D.每个缺陷都有一个唯一的编号,这是缺陷的标识
- 下列选项中,关于软件测试的说法错误的是(D)。
- A.在早期的软件开发中,测试就等同于调试。
- B.软件测试是使用人工或自动手段来运行或测定某个系统的过程
- C.软件测试的目的在于检验软件是否满足规定的需求或弄清楚预期结果与实际结果之间的差异
- D.软件测试与软件开发是两个独立、分离的过程
- 下列选项中,不属于软件测试原则的是(B)。
- A.测试应基于用户需求 B.测试越晚进行越好
- C.穷尽测试是不可以的 D.软件测试遵循GoodEnough原则
- 简答题
- 请简述软件缺陷的处理流程。
- (1)提交:测试人员发现缺陷之后,将缺陷提交给测试组长。
- (2)分配:测试组长接收到测试人员提交的缺陷之后,将其移交给开发人员。
- (3)确认:开发人员接收到移交的缺陷之后,会与团队甚至测试人员一起商议,确定该缺陷是否是一个缺陷。
- (4)拒绝:如果经过商议之后,发现的缺陷不是一个真正的缺陷,则拒绝处理此缺陷,对其进行关闭处理。如果经过商议之后,确定其是一个真正的缺陷,则可以根据缺陷的严重程度或优先级等立即处理或延期处理。
- (5)处理:开发人员修改缺陷。
- (6)复测:开发人员修改好缺陷之后,测试人员重新进行测试(复测),检测缺陷是否已经修改。如果未被正确修改,则重新提交缺陷。
- (7)关闭:测试人员重新测试之后,如果缺陷已经被正确修改,则将缺陷关闭,整个缺陷处理完成。
- 请简述软件测试的基本流程。
- (1)分析测试需求
- (2)制定测试计划
- (3)设计测试用例
- (4)执行测试
- (5)编写测试报告
- 黑盒测试方法
- 填空题
- 等价类划分就是将输入数据按照输入需求划分为若干个子集,这些子集称为等价类
- 边界值分析法通常作为等价类划分法的补充。
- 3.因果图中的恒等关系要求程序有一个输入和一个输出,输出与输入保持一致。
- 4.因果图的多个输入之间的约束包括异、或、唯一、要求共4种。
- 5.决策表通常由条件桩、条件项、动作桩、动作项共4个部分组成。
- 6.根据用户操作流程的正确性来划分,场景法通常分为基本流和备选流。
- 判断题
- 有效等价类可以捕获程序中的缺陷,而无效等价类不能捕获缺陷。(错)
- 如果程序要求输入值是一个有限区间的值,可以划分为一个有效等价类和一个无效等价类。(错)
- 使用边界值方法测试时,只取边界两个值即可完成边界测试。(错)
- 因果图考虑了程序输入、输出之间的各种组合情况。(对)
- 决策表法是由因果图演变而来的。(对)
- 正交实验设计法比较适用于复杂的大型项目。(对)
- 单选题
- 下列选项中,哪一项不是因果图输入与输出之间的关系?(A)
- A.恒等 B.或 C.要求 D.唯一
- 下列选项中,哪一项是因果图输出之间的约束关系?(C)
- A.异 B.或 C.强制 D.要求
- 下列选项中,哪一项不是正交实验设计法的关键因素?(D)。
- A.指标 B.因子 C.因子状态 D.正交表
- 简答题
- 请简述等价类划分法的原则。
- 如果程序要求输入值是一个有限区间的值,则可以将输入数据划分为一个有效等价类和两个无效等价类,有效等价类为指定的取值区间,两个无效等价类分别为有限区间两边的值。
- (2)如果程序要求输入的值是一个“必须成立”的情况,则可以将输入数据划分为一个有效等价类和一个无效等价类。
- (3)如果程序要求输入数据是一组可能的值,或者要求输入值必须符合某个条件,则可以将输入数据划分一个有效等价类和一个无效等价类。
- (4)如果在某一个等价类中,每个输入数据在程序中的处理方式都不相同,则应将该等价类划分成更小的等价类,并建立等价表。
- 请简述决策表条件项的合并规则。
- 在实际测试中,条件桩通常很多,而且每个条件桩都有真、假两个条件项,有n个条件桩的决策表就会有2n条件规则,有些规则的取值对结果并无影响,这个问题就称为无关条件项,无关条件项使用“-”表示,忽略无关条件项,可以将这两条规则进行合并。合并之后的无关条件项(-)包含其他条件项取值,因此具有相同动作的规则还可进一步合并。
- 请简述正交实验设计法的测试用例设计步骤。
- 使用正交实验设计法设计测试用例时,可以按照以下3个步骤进行。
- (1)提取因子,构造因子-状态表。分析软件的需求规格说明得到影响软件功能的因子,确定因子可以有哪些取值,即确定因子的状态。
- (2)加权筛选,简化因子-状态表。软件的因子及因子的状态会有很多,每个因子及其状态对软件的作用也大不相同,如果把这些因子及状态都划分到因子-状态表中,最后生成的测试用例会相当庞大,从而影响软件测试的效率。因此需要根据因子及状态的重要程度进行加权筛选,选出重要的因子与状态,简化因子-状态表。
- (3)构建正交表,设计测试用例。正交表的表示形式为Ln(tc),其中L表示正交表,n为正交表的行数,正交表的每一行可以设计一个测试用例,因此行数n也表示可以设计的测试用例的数目。c表示正交实验的因子数目,即正交表的列数,因此正交表是一个n行c列的表。t称为水平数,表示每个因子能够取得的最大值,即因子有多少个状态。
- 白盒测试方法
- 填空题
- 语句覆盖的目的是测试程序中的代码是否被执行,它只测试代码中的执行语句。
- 判定覆盖的作用是使真、假分支均被执行。
- 条件覆盖是指判定语句中的每个条件都要取真值、假值各一次。
- 对于判定语句if (a>1 and c<1),测试时要保证a>1、c<1两个条件取真值、假值至少一次,同时,判定语句if (a>1 and c<1)取真值、假值也至少一次,这使用了判定-条件覆盖方法。
- 条件组合覆盖要求判定语句中所有条件取值的可能组合至少出现一次。
- 在程序插桩法中,插入程序中的测试代码称为探针。
- 判断题
- 语句覆盖无法考虑分支组合情况。(对)
- 目标代码插桩需要重新编译、链接程序。(错)
- 语句覆盖可以测试程序中的逻辑错误。(错)
- 判定-条件覆盖没有考虑判定语句与条件判断的组合情况。(对)
- 对于源代码插桩,探针具有较好的通用性。(对)
- 单选题
- 下列选项中,哪一项不属于逻辑覆盖?(D)
- A.语句覆盖 B.条件覆盖 C.判定覆盖 D.判定-语句覆盖
- 关于逻辑覆盖,下列说法中错误的是(C)。
- A.语句覆盖的语句不包括空行、注释等
- B.相比于语句覆盖,判定覆盖考虑到了每个判定语句的取值情况
- C.条件覆盖考虑到了每个逻辑条件的取值的所有组合情况
- D.在逻辑覆盖法中,条件组合覆盖是覆盖率最大的测试方法
- 关于程序插桩法,下列说法中错误的是(C )。
- A.程序插桩法就是往被测试程序中插入测试代码以达到测试目的的方法
- B.程序插桩法可分为目标代码插桩和源代码插桩
- C.源代码插桩的程序需要经过编译、链接过程,但测试代码不参与编译、链接过程
- D.目标代码插桩是往二进制程序中插入测试代码
- 关于圈复杂度的计算,下列说法中正确的是(D)。
- A.圈复杂度的数量等于控制流图中的节点数量
- B.使用V(G)=P+1可以计算圈复杂度,其中P表示控制流图中边的数量
- C.使用V(G)=E-N+2可以计算圈复杂度,其中E表示控制流图中节点的数量,N表示控制流图中边的数量
- D. 圈复杂度的数量等于控制流图中的区域数量
- 简答题
- 请简述基本路径法设计测试用例的步骤。。
- (1)画出流程图:首先需要分析被测程序的源代码,并画出程序的流程图。
- (2)画出控制流图:控制流图是描述程序控制流的一种图示方法。控制流图可以由程序流程图转化而来。如果测试的源程序代码简洁,也可以直接通过分析源程序代码画出控制流图。在画程序的控制流图时,使用圆圈表示一条或多条无分支的语句,使用箭头表示控制流方向。
- (3)计算程序的圈复杂度:圈复杂度用来衡量一个模块判定结构的复杂程度。通过计算程序的圈复杂度可以得到程序基本的独立路径数目,从而确定测试用例的数目。
- (4)设计测试用例:根据计算出的程序圈复杂度导出基本可执行路径集合,从而设计测试用例的输入数据和预期结果。
- 请简述逻辑覆盖法的几种方法及它们之间的区别。
- (1)语句覆盖
- 语句覆盖是最常见的覆盖方式,语句覆盖的目的是测试程序中的代码是否被执行,它只测试代码中的执行语句,这里的执行语句不包括头文件、注释、空行等。语句覆盖在多分支的程序中,只能覆盖某一条路径,使得该路径中的每一个语句至少被执行一次,但不会考虑各种分支组合情况。
- (2)判定覆盖
- 判定覆盖又称为分支覆盖,其原则是设计足够多的测试用例,在测试过程中保证每个判定至少有一次为真值,有一次为假值。判定覆盖的作用是使真假分支均被执行,虽然判定覆盖比语句覆盖测试能力强,但仍然具有和语句覆盖一样的单一性。判定覆盖语句一般是由多个逻辑条件组成,如果仅仅判断测试程序执行的最终结果而忽略每个条件的取值,必然会遗漏部分测试路径,因此,判定覆盖也属于弱覆盖。
- (3)判定-条件覆盖
- 判定-条件覆盖要求设计足够多的测试用例,使得判定语句中所有条件的可能取值至少出现一次,同时,所有判定语句的可能结果也至少出现一次,它弥补了判定覆盖和条件覆盖的不足之处。相比于条件覆盖、判定覆盖,判定-条件覆盖弥补了两者的不足之处,但是由于判定-条件覆盖没有考虑判定语句与条件判断的组合情况,其覆盖范围并没有比条件覆盖扩展,因此判定-条件覆盖在仍旧存在遗漏测试的情况。
- (4)条件组合覆盖
- 条件组合指的是设计足够多的测试用例,使判定语句中每个条件的所有可能至少出现一次,并且每个判定语句本身的判定结果也至少出现一次。它与判定-条件覆盖的差别是,条件组合覆盖不是简单地要求每个条件都出现真与假两种结果,而是要求让这些结果的所有可能组合都至少出现一次。
- 请简述目标代码插桩的3种执行模式。
- (1)即时模式:原始的二进制或可执行文件没有被修改或执行,将修改部分的二进制代码生成文件副本存储在新的内存区域中,在测试时仅执行修改部分的目标代码。
- (2)解释模式:在解释模式中目标代码被视为数据,测试人员插入的测试代码作为目标代码指令的解释语言,每当执行一条目标代码指令,程序就会在测试代码中查找并执行相应的替代指令,测试通过替代指令的执行信息就可以获取程序的运行信息。
- (3)探测模式:探测模式使用新指令覆盖旧指令进行测试,这种模式在某些体系结构(如x86体系结构)中比较适用。
- 接口测试
- 填空题
- 断言的目的是验证软件开发的预期结果与实际结果是否一致。
- 接口测试原理是模拟客户端向服务器发送请求。
- 参数化常用的数据文件格式有CSV和Json。
- HTTP是客户端和服务器之间的通信协议。
- 判断题
- 在接口测试中,测试人员只需要关注被测接口之间数据的传递,不需要关注接口之间的逻辑依赖关系。(错)
- 通过接口测试可以尽早发现一些页面操作难以发现的问题。(对)
- 在开展接口测试前,需要对接口文档进行解析和评审。(对)
- 如果没有接口文档,则无法获取接口的相关信息。(对)
- 在Postman中可以设置多组环境变量,但是只能设置一组全局变量。(对)
- POST请求方法用于请求服务器更新指定的资源。(错)
- 选择题
- 下列选项中,不属于HTTP请求组成部分的是(C)。
- A.请求行 B.请求体 C.状态行 D.请求头
- 下列关于HTTP响应说法错误的是(D)。
- A.当服务器成功接收到HTTP请求时,才会产生HTTP响应
- B.响应体位于响应头的下方
- C.状态行包括协议版本、状态码和状态码描述
- D.响应头位于HTTP响应的第1行
- 下列选项中,关于Postman的基本使用说法错误的是(A)。
- A.使用Postman进行接口测试时不支持导入JSON格式的文件
- B.Postman工具中的Status code:Code is 200可以用于响应状态码断言
- C.通过设置环境变量或全局变量可以实现接口关联
- D.可以对HTTP响应中的某个字符串进行断言
- 下列选项中,关于HTTP响应状态码说法错误的是(B)。
- A.状态码500,表示服务器发生错误
- B.状态码400,表示客户端请求的资源不存在
- C.状态码503,表示服务器当前不能处理客户端的请求
- D.状态码200,表示客户端请求成功