PS.个人学习记录,内容来自(美)佩腾 《软件测试》一书
1 基本定义
1.1 错误(error),人类会犯错误。接近于过错(mistake),编写代码时会出现错误(bug)。错误可能扩散,如需求错误在设计师可能被放大。
1.2 缺陷(fault),错误的表现结果。分为过错缺陷(把某些信息输入到不正确的表示中)、遗漏缺陷(没有输入正确信息),后者更难检测和解决。
1.3 失效(failure),缺陷执行时会发生失效。只出现在可执行的表现中,通常是源代码(被装载的目标代码);只与过错缺陷有关。出现失效时,可能会也可能不会呈现给用户。
1.4 事故(incident),说明出现了与失效类似的情况,警告用户注意所出现的失效。
1.5 测试(testing),采用测试用例执行软件的活动。主要为了处理错误、缺陷、失效和事故。两个显著目标:找出实效、演示正确的执行。
1.6 测试用例(test case),测试用例有一个标识,并与程序行为有关,还包括一组输入和一个预期输出表。
图1 一个测试生命周期
其中,测试用例在测试中占据中心地位。测试过程可以再细分为独立的步骤:测试计划、测试用例开发、运行测试用例及评估测试结果。
2 测试用例
输入:前提(在测试用例执行之前已经存在的环境)和有某种测试方法所标识的实际输入;
输出:后果和实际输出。输出部分的测试叫做“参考测试”(Reference Testing,工业界),及系统在专家用户的指导下进行测试,然后判断被执行的一组测试用例的输出是否为可接受的。
典型的测试用例信息:测试用例ID、目的、前提、输入、预期输出、后果、执行历史、日期、结果、版本、执行人。
3 通过维恩图理解测试
测试基本上关心的是行为,而开发关心的是结构。
图2 描述的行为与实现的程序行为
如果特定的描述行为没有被编程实现,则出现遗漏缺陷;若果特定的程序行为没有被描述,则出现过错缺陷。集合S与集合P相交的的部分为“(相对)正确”部分。
图3 已描述、以实现和经过测试的行为
4. 标识测试用例
4.1 功能性测试(黑盒)
功能性测试的基本观点:任何程序都可以看做是将从输入定义域取值映射到输出值域的函数。将系统看作是黑盒,黑盒的内容不可知,而用输入和输出表示的黑盒函数则被完全了解。面向对象的核心。
采用功能性方法标识测试用例,所使用的唯一信息就是软件的规格说明。
优点:(1)功能性测试与软件的实现五官,所以如果实现发生变化,测试用例仍然有用;(2)测试用例开发可以与实现并行进行,故可以压缩总的项目开发时间。
缺点:测试用例之间可能存在严重的冗余,可能会存在未测试的软件漏洞。
图4 功能性测试用例表示方法比较
注意:测试用例集合完全局限于已描述行为集合内。
功能性测试的主流方法:边界值分析、健壮性分析、最坏情况分析、特殊值测试、输入(定义域)等价类、输出(值域)等价类和基于决策树的测试
4.2 结构性测试(白盒)
结构性测试,也叫作白盒测试,可“看到黑盒内部”的能力,使测试人员能够根据功能实现的方式来标识测试用例。
结构测试用例集合完全局限于已编程实现的行为集合中,故无法实现没有编程实现的行为。
4.3 功能性测试与结构性测试的比较
功能性测试 | 结构性测试 | |
测试用例标识 | 规格说明 | 程序源代码 |
程序行为 | 已描述的行为 | 已实现的行为 |
功能性测试常常有冗余和漏洞,如果结合结构性测试覆盖率指标执行,则可发现并解决这两个问题。
5.错误与缺陷分类
SQA注重减少开发过程中的错误;测试更注重产品中的缺陷。
根据缺陷的后果严重程度分类:
1.轻微 | 词语拼写错误 |
2.中等 | 误导或重复信息 |
3.使人不悦 | 被截断的名称,如0.00美元账单 |
4.影响使用 | 有些交易没有处理 |
5.严重 | 丢失交易 |
6.非常严重 | 不正确的交易处理 |
7.极为严重 | 经常出现“非常严重”错误 |
8.无法忍受 | 数据库破坏 |
9.灾难性 | 系统停机 |
10.容易传染 | 扩展到其他系统的系统停机 |
“软件异常IEEE表中分类”(1993)定义了围绕4个阶段构建详细的异常解决过程:识别、调查、行为、处置。
一些有用的异常:输入/输出缺陷、逻辑缺陷、计算缺陷、接口缺陷、数据缺陷。
(1)输入缺陷:不接受正确的输入、接受不正确的输入、描述有错或遗漏、参数有错或遗漏;输出缺陷:格式有错、结果有错、在错误的时间产生正确的结果(太早、太迟)、不一致或遗漏结果、不合逻辑的结果、拼写/语法错误、修饰词错误。
(2)逻辑缺陷:遗漏情况、重复情况、极端条件出错、解释有错、遗漏条件、外部条件有错、错误变量的测试、不正确的循环迭代、错误的操作符(如<用作≤)。
(3)计算缺陷:不正确的算法、遗漏计算、不正确的操作数、不正确的操作、括弧错误、精度不够(四舍五入、截断)、错误的内置函数。
(4)接口缺陷:不正确的中断处理、I/O时序有错、调用了错误的过程、调用了不存在的过程、参数不匹配(类型、个数)、不兼容的类型、过量的包含。
(5)数据缺陷:不正确的初始化、不正确的储存/访问、错误的标值/索引值、不争取的打包/拆包、使用了错误的变量、错误的数据引用、缩放数据范围或单位错误、不正确的数据维数、不正确的下标、不正确的类型、不正确的数据范围、出现?断开、不一致的数据。
6. 测试级别
测试级别反映软件开发生命周期瀑布模型中的抽象类别。还应在开始、最后添加需求测试和UAT测试。
图5 V模型测试级别