软件测试技术
软件缺陷的含义
- 软件未实现产品说明书要求的功能
- 软件出现了产品说明书指明不应该出现的错误
- 软件实现了产品说明书未提到的功能
- 软件未实现产品说明书虽未明确提及但应该实现的目标
- 软件难以理解、不易使用、运行缓慢或者最终用户认为不好
按测试步骤和过程分类
- 单元测试 - 对应代码编写
- 集成测试 - 对应概要设计
- 非增式测试
- 增式测试(自顶向下、自底向上)
- 系统测试 - 对应需求分析和系统分析
- 验收测试 - 对应用户需求
- 确保系统功能或非功能特征满足验收准则
静态测试和动态测试
- 静态测试:不利用计算机运行被测试的程序,而采用其他手段达成目的,对被测程序进行特性分析的一些方法。包括人工测试。
不意味着不能用计算机
- 动态测试:必须真正运行被测程序,输入测试用例,分析输入输出的对应关系。
黑盒测试与白盒测试:
- 黑盒测试又称为数据驱动测试和基于规格说明的测试。它是一种从用户观点出发的测试,一般被用来确认软件功能的正确性和可操作性。
- 白盒测试又称为结构测试、逻辑驱动测试或基于程序的测试,一般用来分析程序的内部结构。
- 介于黑盒测试和白盒测试之间,部分知道代码内容,部分知道需求,主要用于测试各个组件之间的逻辑关系是否正确。
手工测试与自动测试
- 手工测试:手动输入测试用例,观察并比较测试结果
- 自动测试:通过计算机运行模拟手工测试过程来进行测试,主要通过编写测试脚本或使用测试工具来实现
黑盒测试
等价类划分
把输入域分成若干部分,从每个部分选取少数代表性数据作为测试用例。
- 假设:某等价类的代表值等效于这个等价类中其他值的测试。
所有等价类的并集是整个输入域。
- 有效等价类:对程序的规格说明有意义、合理的输入数据构成的集合
- 无效等价类:不合理、无意义
- 弱一般等价类:遵循单缺陷原则,要求用例覆盖每一个变量的一种取值即可,取值为有效值。
- 弱健壮等价类:在弱一般等价类的基础上,增加取值为无效值的情况。对于无效输入,测试用例有一个无效值。
- 强一般等价类:对弱一般等价类作笛卡尔积,覆盖所有有效等价类组合。
- 强健壮等价类:在强一般等价类的基础上增加取值为无效值的情况,用例可以覆盖多个无效值,所有用例应覆盖所有等价类。 默认倾向采用弱健壮等价类。
边界值分析
对等价类划分法的补充,采用了可靠性理论的单缺陷假设。
边界值分析非常适合测试这样的程序:其函数的多个变量是相互独立的,各个变量又都代表实际的物理量。
- 五点法:最大值、略小于最大值、正常值、略大于于最小值、最小值
- 七点法:略大于最大值、最大值、略小于最大值、正常值、略大于最小值、最小值、略小于最小值
上述选点方法中真正的边界值不包括正常值。
- 单变量边界值:五点法、七点法
- 多变量组合:
- 不考虑健壮值,五点法取值:每次保留程序中一个变量,让其余的变量取正常值,被保留的变量依次取 min、min+、nom、max-和 max。
个变量会产生 个测试用例。
- 健壮性边界值分析测试:七点法取值,
- 最坏情况测试:不使用单缺陷假设,
- 不考虑健壮值,五点法取值:每次保留程序中一个变量,让其余的变量取正常值,被保留的变量依次取 min、min+、nom、max-和 max。
- 优缺点
- 优点:简便易行,生成测试数据的成本低
- 缺点:测试用例不充分,不能发现测试变量之间的依赖关系,不考虑含义和性质。
判定表驱动测试
在黑盒测试中最严格、最具有逻辑性。适合
- 判定表
- 条件桩(condition stub)——列出问题的所有条件
- 条件项(condition entry)——针对条件桩给出的条件列出所有可能的取值
- 动作桩(action stub)——列出问题规定的可能采取的操作
- 动作项(action entry)——指出在条件项的各组取值情况下应采取的动作
判定表驱动测试如何得到测试用例?
- 建立判定表,并进行相应合并。
- 如果判定表的有些规则属于不可能出现的情况(找不到输入数据),则排除这些规则(此种规则可以不写测试用例)。
- 对合并后并排除了不可能规则后的判定表的每条规则写一条测试用例。
优缺点:
- 优点
- 能把复杂的问题按各种可能的情况一一列举出来
- 简明而易于理解
- 可避免遗漏
- 缺点
- 不能表达重复执行的动作,例如循环结构。
- 判定表不能很好地收缩:有 n 个条件的判定表有 2n 个规则。
- 优点