文章目录
Chapter One 软件测试概述
- 软件缺陷的定义
软件缺陷就是软件产品中所存在的问题,最终表现为用户所需要的功能没有完全实现,不能或不能全部满足用户的需求。
从产品内部看:软件缺陷是软件产品开发或维护过程中所存在的错误、误差等各种问题。
从外部看:软件缺陷是系统所需要实现的某种功能的失效或违背。 - 软件测试的定义(V & V)
V & V 表示 Verification 和 Validation,即验证和有效性确认。
(1)“验证”是检验软件是否已经正确地实现了产品规格书所定义的系统功能和特性。
(2)“有效性确认”是确认开发的软件能满足用户真正需求的活动。
一些个扩展:需求评审、设计评审、代码评审
需求评审:检查软件产品的需求定义和用户实际需求是否一致。
设计评审:检查软件系统的设计与事先定义的需求是否一致。
代码评审:检查代码的逻辑运算、算法和其他处理等是否正确。 - 软件测试的层次
验收测试 ——> 用户需求/业务需求
系统测试 ——> 软件系统
集成测试 ——> 单元之间的接口
单元测试 ——> 单元
(1)单元测试 是对软件基本组成单元进行的测试,(以白盒测试为主)其测试对象是软件设计的最小单位—模块或组件。
(2)集成测试 是将已分别通过测试的单元按设计要求组合起来再进行测试,来检查这些单元之间的接口、参数传递是否存在问题。
(3)系统测试 是操作或模拟运行软件系统,来验证系统是否可以满足产品的质量需求。
(4)验收测试 是指在软件产品完成了功能测试和系统测试之后,产品发布之前所进行的软件测试活动。
Tip:
需求评审、设计评审、代码评审 <—— 静态测试
单元测试、集成测试、系统测试、验收测试 <—— 动态测试
4.W模型
(1)需求阶段:测试人员参与需求定义、需求分析和需求评审。
(2)在软件设计阶段:测试人员可以了解系统是如何实现的、系统的架构等,对系统设计进行评审,并可以提前准备系统的测试环境。
(3)在详细设计时,测试人员可以直接参与具体的设计和和设计的评审,找出设计的缺陷。
(4)在编程阶段,单元测试是不可缺少的,更容易、更快第发现程序当中所存在的缺陷。
Chapter Two 需求和设计评审
-
软件评审的方法:
临时评审、轮查、互为复审、走查、会议审查 -
有良好的需求评审,缺陷在前期发现的越多,对后期的影响越小,后期缺陷就会减少得更快,最终留给用户的缺陷就很少。
-
一个好的用户故事包括3个要素:
(1)角色:谁要使用这个功能
(2)活动:需要完成什么样的功能
(3)商业价值:为什么需要这个功能
对单个用户故事的评审标准可以概括为“INVEST”
Independent独立的,Negotiable可协商的,Valuable有价值的,
Estimable可估算的,Small足够小的,Testable可测试的。
Chapter Three 测试分析与设计
- 尽量避免含糊的、冗长的或复杂的测试用例
- 测试用例的元素:5个W+1个H
格式?
————————————————
【测试用例1】
测试目标:
测试环境:
输入数据:
步骤:1 2 3
期望结果:
—————————————————
Why-为什么而测
What-测什么
Where-在哪里测
When-什么时候测
Which-哪些输入数据
How-如何测 - 测试用例的质量要求
(1)单个测试用例的质量要求
具有可操作性
具备所需的各项信息
各项信息描述准确、清除
测试目标针对性强
验证点完备,而且没有太多的验证点(如不超过3项)
没有太多的操作步骤
符合正常业务惯例
(2)整体质量的要求
覆盖率:尽可能覆盖所有的测试范围、功能特性和代码
易用性:测试用例的设计思路清晰,组织结构层次合理,测试用例操作的连贯性好
易维护性:应该以很少的时间来完成测试用例的维护工作
粒度适中
Chapter Five 单元测试和集成测试
- 单元测试:单元测试就是对已实现的软件最小单元进行测试,以保证构成软件的各个单元的质量。
单元测试的目标
(1)单元实现了其特定的功能,如果需要,返回正确的值。
(2)单元的运行能够覆盖预先设定的各种逻辑。
(3)在单元工作过程中,其内部数据能够保持完整性,包括全局变量的处理、内部数据的形式、内容及相互关系等不发生错误。
(4)可以接受正确数据,也能处理非法数据,在数据边界条件上,单元也能正确工作。
(5)该单元的算法合理,性能良好。
(6)该单元代码经过扫描,没有发现任何安全性问题。 - 单元测试的方法:主要采用白盒测试和黑盒测试。
黑盒测试方法:把程序看作一个不能打开的盒子,不考虑程序内部结构和内部特征,而是考察数据的输入、条件限制和数据输出,完成测试。
就是说,是根据用户的需求和已经定义好的产品规格,针对程序接口和用户界面进行测试,检验程序是否能适当地接受输入的数据而产生正确的输出信息,并且保持外部信息的完整性。具体方法:等价类划分、边界值分析、因果分析、决策表、正交实验设计方法。
白盒测试方法:也称结构测试或逻辑驱动测试。它是根据模块内部结构,基于内部逻辑结构,针对程序语句、路径、变量状态等来进行测试。具体方法:逻辑覆盖、分支覆盖、条件组合覆盖、基本路径测试、代码评审等。白盒测试虽然覆盖了每一条语句、条件、分支等,但还是不能保证在产品功能特性上没有问题。此外白盒测试注重代码,容易忽视单元的实际结果是否真正满足用户的需求。 - 驱动程序和桩程序
(1)驱动程序
对底层或子层模块进行(单元测试或集成测试)测试时
所编制的调用被测模块的程序,用以模拟被测模块的上级
模块。当被测模块时底层模块时,如E、F、C、G需要创
建驱动程序。
(2)桩程序
对顶层或上层模块进行测试时,所编制的替代下层模
块的程序,用来模拟被测模块工作过程中所调用的模块。
4. 白盒测试方法
(1)语句覆盖:使得程序中每一条可执行语句至少被执行一次
(2)分支覆盖:使得程序中每一个分支都至少被执行一次
(3)条件覆盖:程序中每一个条件至少有一次被满足
(4)路径覆盖:对程序模块的所有独立的基本路径至少要测一次
V(G) = 区域数目
= 边界数目 – 节点数目 + 2
= 判断节点数目 + 1
5 集成测试的模式
(1)非渐增式测试模式:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序
(2)渐增式测试模式:把下一个要测试的模块同同已经测试号的模块结合起来进行测试,测完后再把下一个应测的模块结合起来测试
6. 自顶向下集成测试
(1)对主控模块进行测试,测试时用桩程序代替所有直接附属于主控模块的模块
(2)根据(深度优先或宽度优先),每次用一个实际模块代替一个桩程序
(3)在加入每一个新模块时,完成其集成测试
(4)为了保证加入模块没有引入新的错误,可能需要进行回归测试
越重要的模块,在自顶向下法中越优先得到测试,但是一些基础函数一般处在底层,它们的错误会发现的比较晚。
7. 自底向上集成测试
(1)把底层模块组合成实现某个特定的软件子功能族
(2)写一个驱动程序,调用上述底层模块,并协调测试数据的输入和输出
(3)对由驱动程序和子功能族构成的集合进行测试
(4)去掉驱动程序,沿软件结构从下向上移动,加入上层模块形成更大的子功能族
8. 混合策略(自顶向下+自底向上)
三明治集成测试
9.持续集成测试:就是一种开发实践,每天至少完成一次版本构建并且每次构建是自动实现的,并得到验证。(是敏捷开发的一种)
其工作包含:
(1)自动代码静态测试
(2)自动单元动态测试
(3)自动部署SUT
(4)自动BVT
(5)自动生成测试报告
Chapter Six 系统功能测试
-
LOSED模型
L:Logic逻辑
O:Operation操作
S:Structure结构
E:Environment环境
D:Data数据 -
等价类划分的规则 (p122)
(1)输入数据是布尔值,这是一种特殊情况。
有效等价类只有一个值true;无效等价类也只有一个值,false。
(2)当输入条件规定了取值范围,则可以确定一个有效等价类和两个无效等价类。
eg:要求输入2位正整数x。
那么10 <= x <= 99,无效等价类显然是 x<10 和 x>99。
(3)同理,如果规定了输入数据的个数。
eg:一个学生每学期只能选修1~3门课。那么有效等价类就是选修1 ~ 3门课,无效等价类就是“选修0门课”和“选修超过3门课”。
(4)当输入条件规定了输入值的集合或规定了“必须如何",可以确定一个有效等价类和多个无效等价类。
————————————————————————————
实例:固定电话号码由地区码和电话号码组成。
地区码:以0开头的3位或4位数字
电话号码:以非0、非1开头的7位或8位数字
-
边界值分析(和等价类划分法通常一起使用 差不多)
-
循环结构测试的综合方法
(1)0次循环
(2)1次循环
(3)2次循环
(4)m次循环
(5)n-1次循环
(6)n次循环
(7)n+1次循环 -
因果图
自动售货机程序
输入条件为:
C1:售货机有零钱
C2:投入1元硬币
C3:投入5角硬币
C4:压下橙汁按钮
C5:压下可乐按钮
输出:
E1:售货机“零钱找完”红灯亮
E2:退还1元硬币
E3:退还5角硬币
E4:送出橙汁饮料
E5:送出可乐饮料
-
决策表方法
eg: -
创建测试套件的主要考虑因素:
(1)测试套件的目的清楚,结构合理,规模适中
(2)测试套件的复用性
(3)所选择的测试用例应覆盖所要测试的功能点
(4)包含所有必要的环境
(5)将所有的测试用例和测试环境统一起来考虑 -
回归测试的方法
(1)测试全部用例
(2)基于风险选择测试
(3)基于操作剖面选择测试
(4)测试修改的部分
Chapter Seven 系统非功能测试
- 定义
负载测试:
压力测试:
性能测试: - 性能测试的类型
(1)性能验证测试
(2)性能基准测试
(3)性能规划测试
(4)容量测试 - 压力测试的类型
(1)稳定性压力测试
(2)破坏性压力测试
(3)渗入测试
(4)峰谷测试