软件测试
一、软件测试基础
1. 软件质量概述
- 软件质量:是指软件产品满足基本需求及隐式需求的程度
-
软件质量分为三个层次:
- 满足需求规定:软件产品符合开发者明确定义的目标,并且能可靠运行。
- 满足用户需求:软件产品的需求是由用户产生的,软件最终目的就是满足用户需求,解决用户的实际问题。
- 满足用户隐式需求:软件如果满足用户隐式需求,即潜在的可能需要在将来开发的功能。将会极大的提升用户满意度,这就意味着软件质量更高。
-
质量的评价指标
- 功能性:在指定条件下,软件满足用户显示需求和隐式需求的能力
- 可靠性:在指定条件下使用时,软件产品维持规定的性能级别的能力
- 可移植性:指软件产品从一个环境迁移到另一个环境的能力
- 可使用性:在指定条件下,软件产品被使用、理解、学习的能力
- 可维护性:指软件产品被修改的能力。修改包括修正、优化和功能规格变更的说明
- 效率:在指定条件下,相对于所有资源的数量,软件产品可提供适当性能的能力
-
影响软件质量的因素
- 需求模糊
- 软件开发人员的问题
- 软件开发缺乏规范性文件指导
- 缺乏软件质量控制管理
2. 软件缺陷
- 软件缺陷就是Bug,它是指软件中(包括程序和文档)存在的影响软件正常运行的问题。
- 从产品内部看,缺陷是产品开发或维护过程中存在的问题、毛病等各种问题;
- 从产品外部看,缺陷是系统运行过程中某种功能的失效或违背。
-
软件缺陷产生的原因:
- 软件需求不明确
- 软件结构复杂
- 编码问题
- 项目期限短
- 使用新技术
-
软件缺陷的处理流程:
- 提交
- 分配
- 确认
- 处理
- 复测
- 关闭
3. 测试与调试
- 测试:发现软件中的缺陷
- 调试:发现了缺陷去跟踪代码和分析,即修正缺陷
4. 软件测试的目的
- 对于软件开发来说,软件测试通过找到的缺陷帮助开发人员找到开发过程中粗壮乃的问题,包括软件开发的模式、工具、技术等方面存在的不足,预防缺陷的再次产生
- 对于软件测试来说,使用最少的人力、物力、时间等找到软件中隐藏的缺陷,保证软件的质量,也为以后软件测试积累丰富的经验
- 对于客户需求来说,软件测试能够检验软件是否符合客户需求,对软件质量进行评估和度量,为客户评审软件提供有力的依据
5. 软件测试的分类
-
按照测试的阶段分类:
- 单元测试:验证软件单元是否符合软件需求与设计,开发人员自测。
- 冒烟测试:软件构建版本建立后,对系统的基本功能进行简单的测试,这种测试重点验证的是程序的主要功能,而不会对具体功能进行深入测试。
- 集成测试:冒烟测试之后,将已经测试过的软件单元组合在一起测试它们之间的接口,用于验证软件是否满足设计需求。
- 系统测试:将经过测试的软件在实际环境中运行,并与其他系统的成分(如数据库、硬件和操作人员等)组合在一起进行测试。
- 验收测试:主要是对软件产品说明进行验证,逐行逐字的按照说明书的描述对软件产品进行测试,确保其符合客户的各项要求。
-
按照测试技术分类:
- 黑盒测试:把软件(程序)当作一个有输入与输出的黑匣子,它把程序当作一个输入域到输出域的映射,只要输入的数据能输出预期的结果即可,不必关心程序内部是怎么样实现的。
- 白盒测试:测试人员了解软件程序的逻辑结构、路径与运行过程,在测试时,按照程序的执行路径得出结果。白盒测试就是把软件(程序)当作一个透明的盒子,测试人员清楚的知道从输入到输出的每一步过程。
-
按照软件质量特性分类:
- 功能测试:测试软件的功能是否满足客户的需求,包括准确性、易用性、适合性、互操作性等。
- 性能测试:测试软件的性能是否满足客户的需求,性能测试包括负载测试、压力测试、兼容性测试、可移植性测试和健壮性测试等。
-
按照自动化的程度分类:
- 手工测试:测试人员一条一条的执行代码完成测试工作。费时费力且很验证保证测试效果。
- 自动化测试:借助脚本、自动化测试工具等完成相应的测试工作,它也需要人工的参与,但是它可以将要执行的测试代码或流程写成脚本,执行脚本完成整个测试工作。
-
按照测试项目分类:
- 界面类测试:验证软件界面是否符合客户需求。
- 安全性测试:试软件在没有授权的内部或外部用户的攻击或恶意破坏时如何进行处理,是否能保证软件与数据的安全。
- 文档测试:以需求分析、软件设计、用户手册、安装手册为主,主要验证文档说明与实际软件之间是否存在差异。
-
其他分类:
- α测试:软件上线之前进行的版本测试。由开发人员和测试人员或者用户协助进行测试。测试人员记录使用过程中出现的错误与问题,整个测试过程是可控的。
- β测试:软件上线之后进行的版本测试。由用户在使用过程中发现错误与问题并进行记录,然后反馈给开发人员进行修复。
- 回归测试:对修改后的程序重新进行测试确认原有的缺陷已经消除并且没有引入新的缺陷,这个重新测试的过程就叫作回归测试。
- 随机测试:没有测试用例、检查列表、脚本或指令的测试,它主要是根据测试人员的经验对软件进行功能和性能抽查
二、 习题
1. 习题一
- 软件存在缺陷是由于开发人员水平水平有限引起的,一个非常优秀的程序员可以开发出零缺陷的软件(X)
- 软件缺陷都存在于代码中(X)
- 软件测试是为了证明程序无错(X)
- 软件测试要投入尽可能多的精力以达到100%的覆盖率(X)
-
下列哪一项不是软件缺陷产生的原因?(D)
A. 需求不明确 B. 项目周期短 C. 软件结构复杂 D. 测试用例设计不好
-
关于软件缺陷,下列说法中错误的是(C)
A. 软件缺陷是软件中(包括程序和文档)存在的影响软件正常运行的问题 B. 安装缺陷的优先级不同可以将缺陷划分为立即解决、高优先级、正常排队、低优先级 C. 缺陷报告有统一的报告模板,该模板是IEEE729-1983指定的 // IEEE 729-1983 是关于软件验证和确认术语的标准,它定义了软件测试和确认过程中使用的术语,但并未指定具体的缺陷报告模板。 D. 在缺陷报告中,每个缺陷都有一个唯一的编号,这是缺陷的标识
-
关于软件测试,下列说法中错误的是(D)
A. 在早期的软件开发中,测试就等同于调试 B. 软件测试是使用人工或自动手段来运行或测定某个系统的过程 C. 软件测试的目的是在于检测它是否满足规定的需求或是弄清楚预期结果与实际结果之间的差异 D. 软件测试与软件开发是两个独立、分离的过程 // 一般都是同时进行
-
下列哪一项不是软件测试的原则(B)
A. 软件测试基于客户的需求 B. 测试越晚越好 // 那当然是越早越好,越能发现缺陷 C. 穷尽测试是不可能的 D. 软件测试应遵循GoodEnough原则
2.习题二
-
软件测试的目的是(B)
A 试验性运行软件 B 发现缺陷 C 证明软件正确 D 找出软件中的全部缺陷
-
以下不属于开发者测试的内容是(D)
A 黑盒测试 B 动态测试 C 失效重现 D 迭代上线 //迭代上线通常是指软件开发团队按照迭代计划将已经开发完成和测试通过的功能逐步上线,以实现软件的增量发布。迭代上线更多是一个部署和交付的过程,而不是开发者测试的一部分。
-
测试的关键问题是(B)
A 如何组织评审 B 如何选择测试用例 //测试当然是用例最重要 C 如何验证程序的准确性 D 如何采用综合策略
-
为了提高软件测试效率,应(D)
A 随机选取测数据 B 取一切可能的输入作为测试数据 C 完成编码后制定测试计划 D 选取错误可能性最大的数据作为测试用例
-
简述测试与调试的联系与区别
-
联系
测试和调试都是为了确保软件能够正确地执行。 测试和调试都是软件开发过程中必不可少的环节,用于检测和修复代码中的错误。
-
区别
测试:是找到软件中存在的缺陷。 调试:是根据所发现的错误而进行代码跟踪和分析,确定缺陷产生的原因,即为了修正缺陷而进行Debug
-
3. 习题三
4.习题四
- 习题
- 答案
5. 习题五
- 习题
- 答案
6. 习题六
-
对于下面个人所得税程序,满足判定覆盖的测试用例是(A)
-
if(income<800) taxrate=0; else if (income<=1500) taxrate=0.05; else if (income<2000) taxrate=0.08; else taxrate=0.1;
A income=(799,1500,1999,2000) B income=(799,1501,2000,2001) C income=(800,1500,2000,2001) D income=(800,1499,2000,2001)
-
如果一个判定中的复合条件表达式为:(A>1)or(B<=3),则为了达到100%的条件覆盖率,至少需要设计(B)个测试用例
A 1 B 2 C 3 D 4
-
应当将程序中的循环结构作为测试和分析重点,可以对循环变量采用(B)测试来验证其正确性。
A 最大值 B 边界值 C 典型值 D 平均值
-
条件覆盖要求(A)
A 使每个判定中的每个条件的每个取值至少满足一次 B 使程序中的每个判断至少都获得一次“真”值和“假”值 C 使每个判定中的所有条件的所有取值组合至少出现一次 D 使程序中的每个可执行语句至少执行一次
-
一个程序中所含有的路径数与(A)有着直接的关系
A 程序的复杂程序 B 程序的语句行数 C 程序模块数 D 程序指令执行时间
-
有一组测试用例使得被测试程序的每个分支都至少被执行一次,它满足的覆盖标准是(B)
A 语句覆盖 B 判定覆盖 C 条件覆盖 D 路径覆盖
-
针对下面一个程序段if(A>1)&&(B==0)S1; if((A==2)||(X>1))S2;其中,S1、S2均为语句块。现在选取测试用例:A=2、B=0、X=3,则该测试用例满足了(D)
A 路径覆盖 B 条件组合覆盖 C 判定覆盖 D 语句覆盖
7. 习题七
- 试题1
- 答案1
- 试题2
- 答案2
8. 习题八
- 试题
- 答案
9. 习题九
-
增量式集成测试有3种方式:自顶向下增量测试方式、(B)和混合增量测试方法
A 自中向下增量测试方法 B 自底向上增量测试方法 C 多次性测试 D 维护
-
集成测试的测试用例是根据(C)来设计的
A 需求分析 B 源程序 C 概要设计 D 详细设计
-
集成测试用于检验系统内部交互以及集成后系统的(A)
A 正确性 B 可靠性 C 可使用性 D 可维护性
-
在自底向上集成测试中,要编写称为(C)的测试辅助模块
A 输入模块 B 输出模块 C 驱动模块 D 测试桩模块
-
在集成测试逐步扩大集成范围,增加集成模块的具体路径选择上,又可以分为(A)和深度优先
A 广度优先 B 难度优先 C 下层优先 D 上层优先
10. 习题十
-
软件开发人员担任的部分与代码相关的软件测试工作,统称为(B)
A 移动应用测试 B 开发者测试 C 系统测试 D 嵌入式测试
-
测试只需要()缺陷,并不需要()缺陷 B
A 预测,发现 B 发现,修复 C 修复,发现 D 预测,修复
-
(D)模型表明,bug发并不是一件容易的事
A V B H C W D PIE
-
对模块之间的接口以及集成后的功能等进行准确性校验的测试工作(D)
A 单元测试 B 系统测试 C 性能测试 D 集成测试
-
以下不是软件缺陷产生的原因是(A)
A 随机选取测试数据 B 需求不明确 C 软件结构复杂 D 编码问题
-
对于下面个人所得税程序,满足语句覆盖的测试用例是(D),
if(income<800) taxrate=0; else if (income<=1500) taxrate=0.05; else if (income<2000) taxrate=0.08; else taxrate=0.1;
-
A income=(199,1801,2000,50001) B income=(1800,1499,2000,5009) C income=(890,3100,2000,5001) D income=(799,1499,1999,3000)
-
下列关于软件测试原则的叙述有误的是(A)
A 可以进行穷尽测试 B 测试要尽早进行 C 遵循GoodEnough原则 D 测试应基于客户需求
-
以下哪项不属于2023年全国大学生测试大赛的赛道(C)
A Web应用测试 B 开发者测试 C 移动应用测试 D 嵌入式测试
-
以下不属于集成测试常见的缺陷类型的是(C)
A 误差放大 B 接口缺陷 C 软件响应慢 D 数据丢失
-
逻辑覆盖准则C1蕴含逻辑覆盖C2用符号表示为(D)
A C1 <= C2 B C1 >/ C2 C C1 ≈ C2 D C1 >= C2
-
渗透测试属于以下哪种测试类型(C)
A 单元测试 B 性能测试 C 安全测试 D 集成测试
-
以下英文名称与PIE模型无关的是(C)
A Error B Failure C Wrong D Fault
-
有一组测试用例使得被测程序的判定语句中的每个逻辑条件取值真值与假值都至少被执行一次,它满足的覆盖标准是(A)
A 条件覆盖 B 路径覆盖 C 判断覆盖 D 语句覆盖
-
针对下面一个程序段:
if((x<5)||(y==0)) S1; else S2; 其中,S1、S2均为语句块,现选取测试用例:x=2、y=6;x=6,y=6则该测试用例满足了(D)
A 路径覆盖 B 语句覆盖 C 条件组合覆盖 D 判定覆盖
-
集成测试用于检测程序在(B)时难以发现的问题
A 源程序 B 单元测试 C 详细设计 D 需求分析
-
以下不属于循环结构测试内容的是(D)
A 简单循环测试 B 连接循环测试 C 嵌套循环测试 D 系统测试
-
以下蕴含关系不正确的是(A)
A CC >= DC B C/DC >> CC C C/DC >> DC D MC/DC >> CC
-
在执行测试之前,那些事先设计好的测试数据、执行条件以及预期执行结果称为(B)
A 系统测试 B 测试用例 C 集成测试 D 确认测试
-
单元测试、集成测试完成之后,也就是意味着软件系统被构建起来了,这时需要进行(A)
A 系统测试 B 动态测试 C 集成测试 D 确认测试
-
集成测试就是性能测试(X)
-
黑盒测试可以用于编译器进行测试(√)
-
软件测试应从需求分析开始(√)
-
智能手机的“闪退”问题不属于软件缺陷(X)
-
Grace Hopper是世界上第一个bug的发现者(√)
-
响应时间和吞吐量是性能测试指标(√)
-
负载测试就是压力测试(X)
-
禅道和JMeter是两款性能测试工具(X)
-
并发数量增大可能会导致系统响应变快(X)
-
软件测试的顺序是先单元测试后集成测试,有时两者可以并发(√)
-
请简述软件缺陷产生的原因
1. 软件需求不明确 2. 软件结构复杂 3. 编码问题 4. 项目期限短 5. 使用新技术
-
试题1
-
答案1
Software Fault(故障): 静态存在于软件中的缺陷。 Software Error(错误): 软件运行时,运行到fault,触发产生错误的中间状态。 Software Failure(失效): 可以从外部观测到的失效的行为。 1、 int max(int a,int b,int c) { int max = a; if(max <= b) max = a; //fault,赋值错误, 应为max = b if(max <= c) max = c; return max;}
- 试题2
- 答案2