基于直觉和经验的方法
基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性地设计测试用例。
1. Ad-hoc测试方法和ALAC测试
ALAC,是Act-like-a-customer(象客户那样做)的简写,ALAC测试方法是一种基于客户使用产品的知识开发出来的测试方法,它的出发点是著名的Pareto 80/20规律 。
2.错误猜测法
错误推测法是测试者根据经验、知识和直觉来发现软件错误,来推测程序中可能存在的各种错误,从而有针对性的进行测试。
发现程序经常出现的错误的方法:
单元测试中发现的模块错误;
产品的以前版本曾经发现的错误;
输入数据为0或字符为空;
当软件要求输入时(比如在文本框中),不是没有输入正确的信息,而是根本没有输入任何内容,单单按了Enter键;
……
基于输入域的测试方法
1.等价类划分法
等价类是某个输入域的子集,在该子集中每个输入数据的作用是等效的.将输入数据分成若干个子集,从每个子集选取一个代表性的数据作为测试用例, 分为有效等价类和无效等价类。 在分析需求规格说明的基础上划分等价类,列出等价类表 。
确定等价类的方法:
①在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。
②在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类。
③在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类 。
④在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
⑤在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
2.边界值分析方法
很多错误发生在输入或输出范围的边界上,因此针对各种边界情况设置测试用例,可以更有效地发现缺陷。
如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。
如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少一、比最大个数多一的数作为测试数据。
如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。
est cases for ABS(x) :
class x < 0, arbitrary value: x = -10
class x = 0, arbitrary value x = 100
classes x < 0, x >= 0, on boundary : x = 0
classes x < 0, x >= 0, below and above: x = -1, x = 1
基于组合技术和组合优化的方法
1.判定表方法
在实际应用中,许多输入是由多个因素构成,而不是单一因素,这时就需要多因素组合分析。
对于多因素,有时可以直接对输入条件进行组合设计,不需要进行因果分析,即直接采用判定表方法。
判定表由“条件和活动”两部分组成,即列出一个测试活动执行所需的条件组合,所有可能的条件组合定义了一系列的选择,而测试活动需要考虑每一个选择。
判定表元素:
条件桩,列出问题的所有条件
动作桩:列出可能针对问题所采取的操作
条件项:针对所列条件的具体赋值
动作项:列出在条件项(各种取值)组合情况下应该采取的动作。
规则:任何一个条件组合的特定取值及其相应要执行的操作。
判定表方法步骤:
列出条件桩
列出动作桩
填入条件项及其组合
填入动作项,制定初始判定表;
简化、合并相似规则或者相同动作
2.因果图法
多种输入条件的组合,产生多种结果设计测试用例。
设计方法:
分析软件规格说明文档描述的哪些是原因(输入条件),哪些是结果(输出条件),给每个原因和结果赋予一个标示符。
找出原因与结果,原因与原因之间的对应关系,画出因果图
在因果图上标上哪些不可能发生的因果关系,表明约束或限制条件
根据因果图,创建判定表,将复杂的逻辑关系和多种条件组合很具体明确的表示
出来 把判定表的每一行作为依据设计测试用例。
3.两两组合方法
大部分缺陷是在两个变量取值冲突的测试时被发现的
不仅仅是在所有的组合情况下才会发现所有的测试缺陷
这个是“Pairwise Testing”基本原理,不要测试所有的组合,测试所有的“Pairwise ”即可
4.正交实验法
确定影响功能的因子与状态
选择一个合适的正交表
利用正交表构造测试数据集
基于逻辑覆盖的方法
1.判定覆盖
判定覆盖法的基本思想是设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。
一个判定代表着程序的一个分支, 所以判定覆盖也被称为分支覆盖。
2.条件覆盖
条件覆盖的基本思想是设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次。
3.判定条件覆盖
判定-条件覆盖是判定和条件覆盖设计方法的交集,即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次
4.条件组合测试
条件组合覆盖的基本思想是设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次。
它与条件覆盖的差别是它不是简单地要求每个条件都出现“真”与“假”两种结果,而是要求让这些结果的所有可能组合都至少出现一次 。
5.基本路径覆盖
路径覆盖就是设计所有的测试用例,来覆盖程序中的所有可能的执行路径。
基本路径覆盖的设计过程 :
①依据代码绘制流程图
②确定流程图的圈复杂度(cyclomatic complexity )
③确定线性独立路径的基本集合( basis set )
④设计测试用例覆盖每条基本路径
基于缺陷模式的测试
故障模型
安全漏洞模型
性能模型
并发故障模型
不良习惯模型
代码国际化模型
易诱骗代码模型
检测步骤:
预处理/预编译
词法分析(Lexical Analysis)
语法分析( Parsing) 和语义处理( Semantic Analysis)
抽象语法树生成
控制流图生成
人工确认
基于模型的测试方法
1.功能图法
每个程序的功能通常由静态说明和动态说明组成
静态说明描述了输入条件和输出条件之间的对应关系
动态说明描述了输入数据的次序或者转移的次序
功能图法就是为了解决动态说明问题的一种测试用例的设计方法
功能图由状态迁移图(state transition diagram,STD)和逻辑功能模型(logic function model, LFM)构成
2.模糊测试方法
模糊测试(Fuzz testing)方法,简单的说,就是构造大量的变异数据作为系统的输入,从而检验系统在各种数据情况下是否会出现问题 模糊测试方法可模拟黑客对系统发动攻击测试,完成安全性测试,并能应用于服务器的容错性测试 。
形式化方法
1.形式化方法
形式化方法:基于数学的方法(数学表示、精确的数学语义)来描述目标软件系统属性的一种技术
形式化规范说明语言的构成:语法、语义和一组关系
形式化方法可应用在软件规格和验证之上,包括软件系统的精确建模和软件规格特性的具体描述,即可以看作是面向模型的形式化方法和面向属性的形式化方法
形式化的具体方法:
基于模型的方法,如Z语言、B语言等
代数方法,如OBJ、CLEAR、ASL、ACT等
过程代数方法,如CSP、CCS、ACP、LOTOS、TPCCS等
基于逻辑的方法,如区间时序逻辑、Hoare 逻辑、模态逻辑、时序逻辑、时序代理模型等。
基于网络的方法
2.形式化验证
形式化验证,就是根据某些形式规范或属性,使用形式逻辑方法证明其正确性或非正确性。
一般通过形式化规范进行分析和推理,研究它的各种静态和动态性质,验证是否一致、完整,从而找出所存在的错误和缺陷。
无法证明某个系统没有缺陷,因为不能定义 “没有缺陷”。只能证明一个系统不存在我们可以想得到的缺陷,以及验证满足系统质量要求的属性 。
形式化验证的一些具体方法:
有限状态机(FSM)或扩展有限状态机(EFSM)
SPIN和线性时态语言
UML语义转换
标准RBAC模型
扩展的RBAC模型和基于粒计算的RBAC模型
符号模型检验
BAN逻辑模型
3.扩展有限状态机方法
有限状态机( Finite State Machine ,FSM)是对象行为建模的工具,以描述对象在其生命周期内所经历的状态序列,以及如何响应来自外界的各种事件
注:详情可见网易号八宝欢喜http://dy.163.com/v2/article/detail/F8C6TEHO05454V3K.html