软件工程-测试
软件测试
为什么要测试?因为软件可能有缺陷,而缺陷可能导致软件无法正常工作。软件测试的目的是发现缺陷,以便修复缺陷。
测试的完整的定义是:测试是一个过程,这个过程中,我们发现了软件的缺陷。
所以,软件测试是发现缺陷的过程。
软件测试应该贯穿整个软件开发的周期。
软件测试的原则
完全测试是不可能的。
测试存在风险,没有十全十美的测试方法
软件测试只能表明缺陷的存在,不能表明缺陷的不存在
软件产品中潜在的错误数与已发现的错误数成正比(集群现象)
让不同的人进行测试(杀虫剂效应)
开发与测试应该分离
尽早不断地测试,应使测试贯穿整个软件开发周期
设计测试用例时,应该考虑边界条件,特殊输入和错误输入(健壮性测试)
集中测试容易出错或者错误较多的模块(80/20原则)
长期保留测试用例
软件测试中的80/20原则
软件研发质量中的二八法则
软件测试模型
一个模型应该阐述6个方面:
测试时间
测试步骤
计划测试
不同阶段中应该关注的测试对象
测试过程中应该考虑哪些问题
测试的目标
常用的有 V 模型、W 模型、敏捷模型、螺旋模型、瀑布模型。
测试用例
测试用例是一组输入、执行条件和预期结果的集合。测试用例是一个测试计划的基本单元。
测试用例 = 测试数据 + 测试环境 + 预期结果
测试结果 = 测试数据 + 实际结果 + 预期结果
一个好的测试用例能够发现缺陷,而且能够重现缺陷。
软件测试方法
静态分析方法(人工测试)
静态分析方法是指在程序运行之前对程序进行检查的方法。
桌前测试(自检)指的是程序员自己检查自己的代码。
代码会审代码会审是一种由多个人参与的代码检查方法。
代码走查是一种非正式的代码检查方法,由多名测试人员模拟程序的执行过程,发现程序中的缺陷。
动态测试方法(自动测试)
选择适当的测试用例,运行程序,观察程序的行为,以发现程序中的缺陷。
黑盒测试(功能测试)黑盒测试是一种测试方法,它只关心程序的输入和输出,而不关心程序的内部结构。
白盒测试白盒测试是一种测试方法,它关心程序的内部结构,以发现程序中的缺陷。
黑盒测试
等价类划分
等价类划分是一种黑盒测试方法,它将输入数据划分为若干个等价类,然后从每个等价类中选择一个测试用例。
有效等价类:有效等价类是指输入数据的一个子集,这个子集包含了程序的一个有效输入。
无效等价类:无效等价类是指输入数据的一个子集,这个子集包含了程序的一个无效输入。
等价类划分的步骤:
确定输入数据的等价类。
选择测试用例。
等价划分法分类的启发式规则
如果输入数据是一个范围,那么等价类划分法的启发式规则是:选择范围的边界值。
如果输入数据是一个集合,那么等价类划分法的启发式规则是:选择集合的最小值和最大值。
如果输入数据是一个布尔值,那么等价类划分法的启发式规则是:选择真和假。
如果输入数据是一个字符串,那么等价类划分法的启发式规则是:选择字符串的最小长度和最大长度。
etc…
边界值分析
边界值分析是一种黑盒测试方法,它将输入数据的边界值作为测试用例。
取值范围的边界值是指取值范围的最小值、最大值和最小值与最大值之间的值。
应当遵循的原则:
如果输入数据的取值范围是有限的,那么边界值分析的测试用例应该包括取值范围的边界值。
如果输入数据的取值范围是无限的,那么边界值分析的测试用例应该包括取值范围的边界值和取值范围的边界值附近的值。
边界值分析的步骤:
确定输入数据的边界值。
选择测试用例。
因果图
因果图是一种黑盒测试方法,它将程序的输入和输出之间的因果关系表示为一个图。
因果图有 4 个符号:恒等符号、逻辑与符号、逻辑或符号、逻辑非符号。
从输入、输出考虑,有 以下约束条件:
E(互斥)
I(包含)
O(唯一)
R(要求)
M (强制/屏蔽)
决策表
决策表是一种黑盒测试方法,它将程序的输入和输出之间的因果关系表示为一个表。
决策表的组成部分:
条件
动作
条件的取值
动作的取值
决策表的步骤:
确定条件和动作。
确定条件的取值。
确定动作的取值。
选择测试用例。
场景法
场景法是一种黑盒测试方法,它将程序的输入和输出之间的因果关系表示为一个场景。
基本流:是指程序的正常执行流程。最简单路径,表示程序的正常执行流程。
备选流:是指程序的异常执行流程。程序的异常执行流程有多条,每条异常执行流程都是一个备选流。
白盒测试
白盒测试,也叫玻璃盒测试,它关注的是程序内部的逻辑结构,是基于程序内部结构的测试。白盒测试的目的是检查程序的内部结构,以验证程序是否按照设计要求正确执行。白盒测试的主要任务是设计测试用例,以检查程序的内部逻辑结构是否正确。
逻辑覆盖
逻辑覆盖是白盒测试的一种测试方法,以程序内在的逻辑结构为依据,设计测试用例,以检查程序的内部逻辑结构是否正确。逻辑覆盖主要有以下几种:
语句覆盖:要求每个语句至少被执行一次。
判定覆盖:要求每个判定的每个分支至少被执行一次。
条件覆盖:要求每个判定的每个条件的每个取值至少被执行一次。
判定/条件覆盖:要求每个判定的每个条件的每个取值至少被执行一次,且每个判定的每个分支至少被执行一次。
条件组合覆盖:要求每个判定的每个条件的每个取值至少被执行一次,且每个判定的每个条件的每个组合至少被执行一次。
路径覆盖:要求每个可能的路径至少被执行一次。
基本路径测试
基本路径测试是白盒测试的一种测试方法,它是一种结构化测试方法,是基于程序的内部结构的测试。基本路径测试的目的是检查程序的内部逻辑结构是否正确。基本路径测试的主要任务是设计测试用例,以检查程序的内部逻辑结构是否正确。
控制流图
控制流图是一种图形化的表示程序的内部逻辑结构的方法,它是一种结构化的表示程序的内部逻辑结构的方法。控制流图的节点表示程序的基本块,边表示程序的控制流。控制流图的目的是帮助程序员理解程序的内部逻辑结构,以便设计测试用例。
调试
调试是一种发现程序错误的方法,它是一种发现程序错误的方法。调试的目的是发现程序的错误,以便修正程序的错误。调试的主要任务是发现程序的错误,以便修正程序的错误。
调试工具
调试工具是一种帮助程序员发现程序错误的工具,它是一种帮助程序员发现程序错误的工具。调试工具的目的是帮助程序员发现程序的错误,以便修正程序的错误。调试工具的主要任务是帮助程序员发现程序的错误,以便修正程序的错误。