软件测试与质量复习
期末考试题型:
一、名词解释题(4 分*5=20 分)
二、问答题(4 分*5=20 分)
三、黑盒测试题(10 分*2=20 分)
四、白盒测试题(10 分*2=20 分)
五、性能测试题(10 分)
六、文献理解题(10 分)
一、软件测试理论
软件缺陷
软件缺陷案例
美国火箭爆炸、欧洲火箭爆炸、新西兰飞机失控、千年虫、北京奥运会订票系统
软件缺陷表现
- 设计不合理,不是用户所期望的风格、格式
- 部分实现了软件某项功能
- 系统崩溃、界面混乱
- 数据结果不正确、精度不够
- 存取时间过长、界面不美观
软件缺陷定义
软件系统或系统部件中那些导致系统或部件不能实现其功能的问题或差错。
软件未达到软件规格说明书中规定的功能;
软件出现了产品说明书中指明不会出现的错误;
软件功能超出了产品说明书中指明的范围;
软件测试人员认为软件难于理解,不易使用,运行速度慢,或者最终用户认为软件使用效果不好。
软件测试
软件测试定义
使用人工或自动手段,运行或测试某个软件系统的过程,目的在于检验它是否满足规定的需求或弄清预期的结果与实际结果之间的差别。
软件测试与质量的关系
软件测试与软件质量是分不开的,测试是手段,质量是目的,软件测试作为一 种辅助而且必须的手段,客观反映某个时间段内的软件质量。软件测试属于软件控制,作为软件质量的重要保证。
软件测试与软件开发过程的关系
- 项目规划阶段:负责从单元测试到系统测试的整个测试阶段的监控
- 需求分析阶段:确定测试需求分析、系统测试计划的制定,评审后成为管理项目。
- 详细设计和概要设计阶段:确保集成测试计划和单元测试计划完成
- 编码测试:由开发人员完成自己负责部分的测试代码从。当编写工作项目较大时,由专人进行编码阶段的测试任务。
- 测试阶段(单元、集成、系统测试):依据测试代码进行测试,并提交相应的测试状态报告和测试结束报告。

软件测试目的
在于检验被测试系统是否满足规定的需求或弄清预期结果与实际结果之间的差别。
是以最少的时间和人力找出软件中潜在的各种错误和缺陷,证明软件功能和性能与需求说明相符。
软件测试原则
- 应当把“尽早 地和不断地进 行软件测试” 作为软件开发 者的座右铭
- 测试用例应由测试输入数据和与之对应的预期输出结果两部分组成
- 程序员应避免检查自己的程序
- 在设计测试用例时,应当包括合理的输入条件和不合理的输入条件
- 充分注意测试中的群集现象
- 严格执行测试计划,排除测试的随意性
- 应当对每一个测试结果做全面检查
- 妥善保存测试计划、测试用例、出错统计和最终分析报告,为软件维护提供方便
软件测试基本思路
测试用例
为什么需要测试用例
- 设计测试用例是为了更有效、更快地发现软件缺陷
- 测试用例具有很高的有效性和可重复性,依据测试用例进行测试可以节约 测试时间,提升测试效率
- 测试用例具有良好的组织性和可跟踪性,有利于测试的管理
什么是测试用例
测试用例就是为特定目标而开发的一组测试输入、执行条件和预期结果, 其目标可以是测试某个程序路径或核实是否满足某个特定的需求。
软件测试过程
单元测试
是指对软件中的最小可测试单元进行检查和验证。程序的多个模块可以并行地进行单元测试。
单元:人为规定的最小的被测功能模块。
集成测试
是指将已通过测试的单元模块组装成系统或子系统,再进行测试,重点测试不同模块的接口部分
确认测试
用于验证软件的有效性,验证被测软件是否满足需求规格说明书中列出的需求,即验证软件的功能及其他特性是否与用户的要求一致。
系统测试
是验证软件产品是否符合这些质量特性要求的测试。系统测试包括性能测试、安全测试和兼容性测试等。
验收测试
指的是在系统测试的后期,以用户测试为主,或有测试人员等质量保证人员共同参与的测试,它也是软件正式交给用户使用的最后一道工序。
软件测试分类

软件测试模型
V模型

W模型

其它概念
Alpha 测试
由用户、测试人员、开发人员共同参与的内部测试
Beta 测试
内测后的公测,即完全交给最终用户测试
冒烟测试
冒烟测试,在将代码更改嵌入到产品的源树中之前对这些更改进行验证的过程
回归测试
回归测试,在软件修改后重新执行之前做过的测试
随机测试
随机测试:主要是根据测试者的经验对软件进行功能和性能抽查
二、黑盒测试
黑盒测试
什么是黑盒测试
在完全不考虑程序内部结构和内部特性的情况下,对程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接受输入数据而产生正确的输出信息。
等价类划分法
等价类划分法的定义
等价类划分法是把所有可能的输入数据,即程序的输入数据集合划分成若干个子集(即等价类),然后从每一个等价类中选取少量具有代表性的数据作为测试用例。
有效等价类和无效等价类
有效等价类是指完全满足产品规则说明的输入数据,即有效的、有意义的输入数据所构成的集合。利 用有效等价类可以检验程序是否满足规则说明所规定的功能性要求
“无效等价类”和有效等价类相反,即不满足程序输入要求或者无效的输入数据构成的集合
等价类划分原则

使用等价类划分法的过程
- 首先为等价类表中的每一个等价类分别规定一个唯一的编号。
- 设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类。重复这个步骤,直到所有的有效等价类均被测试用例所覆盖。
- 设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。重复这一步骤,直到所有的无效等价类均被测试用例所覆盖。
边界值分析法
边界值分析法的定义
边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。
通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。
如何确定边界值
| 项 | 边界值附近数据 | 测试用例的设计思路 |
|---|---|---|
| 字符 | 起始-1个字符/结束+1个字符 | 假设一个文本输入区域要求允许输入1到255个字 符,输入1个和255个字符作为有效等价类;不输入字符(0个)和输入256个字符作为无效等价类 |
| 数值范围 | 开始位-1/结束位+1 | 如数据输入域为1-999,其最小值为1,而最大值 为999,则0、1000则刚好在边界值附近。从边界 值方法来看,要测试4个数据:0、1、999、 1000 |
| 空间 | 比零空间小一点/比满空间大一点 | 如测试数据的存储,使用比剩余磁盘空间大几千 字节的文件作为测试的边界条件附近值 |
决策表法
决策表法的定义
决策表是分析和表达多逻辑条件下执行不同操作的情况的工具。
如何建立决策表
- 列出所有的条件桩和动作桩。
- 填入条件项。
- 填入动作项,制定初始判定表。
- 简化、合并相似规则或者动作
决策表规则的简化和合并
如果两条或多条规则的动作项相同,条件项只有一项不同,则可以将该项合并,合并后的条件项用符号“-”表示,说明执行的动作与该条件的取值无关,称为无关条件。
因果图法
因果图法的定义
是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况
因果图中输入条件与输出结果之间的关系(4 种)
恒等:c1=1,e1=1
非:c1=1,e1=0
或:c1、c2、c3其中之一是1,e1=1
与:c1、c2、c3全为1,e1=1
因果图中输入或输出的约束关系(5 种)
异 E:最多一个1
或 I:至少一个1
唯一 O:有且仅有一个1
要求 R:a=1时b=1
强制 M:a=1时b=0
使用因果图法的过程
- 分析软件规格说明,哪些是原因,哪些是结果,给每个原因和结果赋予标识符
- 分析原因和结果之间、原因与原因之间对应的逻辑关系,用因果图的方式表示出来。
- 由于语法或环境限制,有些原因与原因之间、原因与结果之间的组合情况不可能出现,在因果图上用一些记号表明这些特殊情况的约束或限制条件。
三、白盒测试
白盒测试
什么是白盒测试
白盒测试方法根据模块内部结构,基于程序内部逻辑结构,针对程序语句、路径、变量状态等来进行测试
静态白盒测试
静态白盒测试是一种不执行程序而进行测试的技术,其关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义。侧重于纠正软件系统在描述、表示和规格上的错误,是任何进一步测试的前提。
动态白盒测试需要软件执行,当软件系统在模拟或真实环境中执行之前、之中和之后,对软件系统行为的分析是动态测试的主要特点。它显示一个系统在检查状态下是正确还是不正确。
逻辑覆盖法
逻辑覆盖法的定义
通过对程序逻辑结构的遍历实现对程序的覆盖,它是一系列测试过程的总称
逻辑覆盖法开始前的准备工作
- 分析程序源代码
- 根据程序源代码画出对应的程序结构图
5 种不同的逻辑覆盖标准
语句覆盖
- 语句覆盖法的基本思想是:设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次。
- 如果是顺序结构,就是让测试从头执行到尾。
- 如果有分支、条件和循环,需要利用下面的方法,执行足够的测试覆盖全部语句。
判定覆盖
- 判定覆盖法的基本思想是:设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。
- 一个判定代表着程序的一个分支, 所以判定覆盖也被称为分支覆盖。
条件覆盖
条件覆盖的基本思想是:设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次
Q:条件覆盖是否满足判定覆盖?条件覆盖是否满足语句覆盖?
A:哒咩
条件判定覆盖
是条件和判定覆盖设计方法的交集,即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次。
条件组合覆盖
条件组合覆盖的基本思想是:设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次。
它与条件覆盖的差别是它不是简单地要求每个条件都出现“真”与“假”两种结果,而是要求让这些结果的所有可能组合都至少出现一次。
使用逻辑覆盖法的过程
基本路径测试
基本路径和基本路径测试的定义
如果某一程序的每一个独立路径都被测试过,那么可以认为程序中的每个语句都已经检验过了,即达到了语句覆盖。这种测试方法就是通常所说的基本路径测试方法。
基本路径测试开始前的准备工作
控制流图(程序流程图转化为控制流图,复合条件下生成控制流图)
好抽象
图矩阵(控制流图转化为控制流图矩阵)
控制流图节点用数字表示,边用字母表示。
边d连接节点3和节点4(3->4),所以d在矩阵中的位置是[3,4]。
圈复杂度的计算(4 种方法)
方法一:V(G) = 判断节点数 + 1
方法二:V(G) = 边的个数 - 节点个数 + 2
方法三:V(G) = 区域数
方法四:转换为矩阵,找出判定节点(一行内两个边的节点)
使用基本路径法的步骤和过程
- 以详细设计或源代码作为基础,导出程序的控制流图
- 计算控制流图的圈复杂度
- 确定独立路径的集合,即确定线性无关的路径的基本集。
- 测试用例生成,确保基本路径集种每条路径的执行。
四、性能测试
性能测试
性能测试的概念
测试在一定条件下系统行为表现是否符合需求规格的性能指标。
性能指标
响应时间
网络响应时间 + 应用延迟时间(数据库延迟时间+应用服务器延迟时间)
2s:5s:10s
并发用户数
严格意义:同一时刻做同一件事情或同一类操作。
广义范围:请求或操作可以相同可以不同。
吞吐量
指在一次性能测试过程中,网络上传输数据量的总和。
性能计数器
描述服务器或操作系统性能的一些数据指标,如使用内存数、进程时间等,在性能测试中发挥着“监控和分析”的作用。
思考时间
也称为“休眠时间”,是指用户在进行操作时,每个请求之间的时间间隔。
点击率(Hit Per Second)
是指每秒钟用户向服务器提交的HTTP 数量。
不是物理意义上的点击一次,而是hit
常见的性能测试
基准测试,并发测试,联机测试,综合场景测试,负载测试,压力测试

每种性能测试的目标和执行方式
负载测试通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。
压力测试也称强度测试,是在强负载(大数据量、大量并发用户等)下的测试,通过查看应用系统在峰值使用情况下的操作行为,发现系统的某项功能隐患、系统是否具有良好的容错能力和可恢复能力。
性能测试的过程
性能测试案例解答
[砺儒云]: https://moodle.scnu.edu.cn/pluginfile.php/1010626/mod_resource/content/1/%E7%AC%AC7%E8%AF%BE%20%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95.pdf “第7课 性能测试”