第三章——软件测试方法
文章目录
这一章比较重要了,开始讲方法了,用心体会!
测试方法体现了方法论或测试流派,是作为一个方法类别出现的。
3.1 基于直觉和经验的方法
不是严格意义上的科学测试方法,测试结果不够可靠,ad-hoc为探索性测试。
3.1.1 Ad-hoc测试方法和ALAC测试
自由测试(Ad-hoc Testing)强调测试人员根据自己的经验,不受测试用例束缚,放开思维,灵活的进行各种测试。
ALAC(Act-like-a-customer),基于客户使用产品的知识开发出来的测试方法。
软件20%的功能是常用功能,用户大部分时间在使用这20%的功能,剩下80%的功能不常用,用户20%的时间在使用这些功能。
测试发现的错误80%来自于这20%的功能,20%的错误来自于80%不常用的功能。
3.1.2 错误推测法
错误推测法是测试人员根据经验,知识和直觉来发现软件错误,推测程序中可能存在的错误,从而有针对性的进行测试。
3.2 基于输入域的方法
软件系统从本质上看,是对输入数据的处理,转化成期望的结果,所以通过数据的验证来验证系统的功能性是很自然的思路。通过对不同数据的输入,检查其输出的数据以判断测试是否通过的方法,都归为基于输入域的方法。
3.2.1 等价类划分法
用一组有限的数据代表近似无限的数据,就是等价类划分方法的基本思想。选择适当的数据子集代表整个数据集。
等价类是某个输入域的一个特定的子集合,该子集中各个输入数据对于揭露程序中的错误都是等效的。
- 有效等价类是输入完全满足程序输入的规格说明,有意义的输入数据。利用有效等价类可以检验程序是否满足规格说明所规定的功能和性能。
- 无效等价类是不满足程序输入要求或者无效的输入数据构成的集合,使用无效等价类,可以测试程序/系统的容错性——对异常输入情况的处理。
不仅要保证所有有效的数据输入能产生正确的输出,同时需要保证在输入错误或者空输入时有异常保护,这样的测试才能保证软件的可靠性。
3.2.2 边界值分析法
程序往往在输入输出的边界值情况下发生错误。边界包括输入等价类和输出等价类的大小边界。边界值分析法就是在某个输入输出变量范围的边界上,验证系统功能是否正常运行的测试方法,因为错误最容易发生在边界值附近。所以边界值分析法对多变量函数的测试很有效。
边界值分析法取决于变量的范围和范围的类型,确认所有输入的边界条件或临界值。
- 数值的边界值检验
- 字符的边界值检验
- 其他边界值检验
3.3 基于组合及其优化的方法
等价分类法和边界分析法用于单因素,单变量的数据分析。多因素多变量的输入情况需要组合分析。
组合分析是一种基于每对参数组合的测试技术,主要考虑参数之间的影响是主要的错误来源和大多数的错误起源于简单的参数组合。优点是低成本实现,低成本维护,易于自动化。
3.3.1 判定表方法
如果关系简单,根据某一个输入组合就能直接判断输出结果,而且每个输入条件或输出结果只有1和0两个取值,这时采用判定表方法来设计组合。
一个判定表由条件和活动两部分组成,判定表是从输入条件的完全组合来满足测试的覆盖率要求,具有严格的逻辑性,所以基于判定表的测试用例设计方法是最严格的组合设计方法之一。
判定表的五个概念:
- 条件桩
- 动作桩
- 条件项
- 动作项
- 规则
判定表制定的4个步骤:
- 列出所有的条件桩和动作桩
- 填入条件项
- 填入动作项,制定初始判定表
- 简化,合并相似规则或者相同动作
3.3.2 因果图法
因果图法借助图形,着重分析输入条件的各种组合,
- 分析软件规格说明书中的输入输出条件并分析出等价类,将每个输入输出赋予一个标志符,分析规格说明中的语义。
- 将对应的输入输出之间的关系关联起来,形成因果图
- 因果图转化为判定表
- 将判定表的每一列拿出来作为依据
3.3.3 Pair-Wise方法
成对组合测试,两两组合测试,这样可以减少测试用例组合。
3.3.4 正交实验法
解决组合数非常大的问题,除了Pair-Wise方法之外,还有正交实验法,从大量实验数据中挑选适量的,有代表性的点,从而合理的安排实验的一种科学实验设计方法。
- 确定影响功能的因子与状态。
把影响测试结果的条件作为因子,把各个因子的取值作为状态,状态数称为水平数。即确定:
因子数是多少?
水平数是多少? - 选择一个合适的正交表
正交表是正交试验设计的基本工具,L正交表。 - 利用正交表构造测试数据集
此部分内容参考数理统计
3.4 基于逻辑覆盖的方法
测试时,会优先考虑代码行的覆盖,这是最基本的。也就是说的代码覆盖率。
3.4.1 判定覆盖
3.4.2 条件覆盖
3.4.3 判定-条件覆盖
3.4.4 条件组合覆盖
3.4.5 基本路径覆盖
3.5 基于缺陷模式的测试
如果过去犯了错误,自然会从中吸取教训,对过去发现的各种具体缺陷进行归纳整理。基于缺陷模式去发现类似的问题。
容易出现:
- 误报问题
- 漏报问题
- 模式机理
3.5.1 常见的缺陷模式
- 故障模式,常见的软件故障,内存泄露,使用空指针,数组越界等等
- 安全漏洞模式,有受到他人攻击的可能
- 差性能模式,运行效率比较低下
- 并发缺陷模式,对多线程理解的错误
- 不良习惯,编码风格不好
- 代码国际化模式
- 易诱骗代码模式
3.5.2 DPBT测试过程
测试过程从源代码输入开始,经历预编译,词法分析,语法分析,语义处理,抽象语法树生成,控制流程图生成和IP扫描等几个步骤。最后自动生成IP报表。
3.6 基于模型的测试
利用模型来生成相应的测试用例,然后根据实际结果和原先预想的结果的差异来测试系统。基于模型的测试,往往不是直接针对被测系统,而是根据算法,针对源代码进行检测。
基于模型的测试不能替代已有的其他测试,而是对其他测试的有力补充。
3.6.1 功能图法
3.6.2 模糊测试方法
通过一个自动生成数据的模版,构造产生大量的具有一定随机性的数据作为系统的输入,从而检验系统在各种数据情况下是否会出现问题。
3.7 形式化测试方法
这个非常重要!对比形式验证
形式化方法的基础是数学和逻辑学,通过严格的数字逻辑和形式语言来完成软件定义,其结果语义清晰,无歧义,然后可以通过相应的工具实施自动化分析,编码和验证。
3.7.1 形式化方法
基于数学方法来描述目标软件系统属性的一种技术。
形式化方法主要通过形式化规范语言来完成需求定义,设计,编程和测试的描述。而且这种描述是通过数学方法实现的,具有精确语义,所以可以保证描述的一致性和完备性。
凡是采用严格的数学语言,具有精确的数学语义的方法都叫形式化方法。
3.7.2 形式化验证
使用数学方法证明其正确性或非正确性,形式化验证首先被用于生成软件规格说明书,然后将其作为软件开发的基础和软件测试验证的依据。因为它是基于一种严格定义的规范语言来描述软件产品,这样可以借助相应的工具来完成软件产品的验证。
传统的验证方法包括模拟和测试,分别在系统抽象模型和实际系统上进行。形式化验证过程可以证明一个系统不存在某个缺陷或证明一个系统符合某个属性。
3.7.3 扩展有限状态机方法
有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列。以及如何响应来自外界的各种事件。任何一个对象都会经历从开始到消亡的状态序列。
有限状态机(FSM)包含5个元素。输入符号,输出符号,状态集合,状态转移函数和输出函数。
扩展有限状态机(EFSM)是在FSM模型基础上增加了动作和转移条件,以处理数据流问题。而FSM只能处理控制流问题。EFSM有6个元素,初始状态,输入符号,输出符号,状态集合,变量集合和转移集合。
小结
本章介绍了各种测试方法,从基于直觉和经验的测试方法,基于输入域的测试方法,基于组合及其优化的方法,到基于逻辑覆盖的方法,基于缺陷模式的方法,基于模型的方法和形式化方法等。
无论采用哪种方法,最终需要对测试覆盖率进行分析,以评估测试的充分性。
进行数据流或控制流分析时,如果问题复杂,就要借助建模的技术帮助实现,包括有限状态机,因果图,模糊测试等方法。
当然测试方法不局限于书中展示内容。