第五章 软件测试
5.1 软件测试的基本概念
一、软件测试的目的和重要性
- 因为开发工作的前期不可避免地会引入错误,测试的目的是为了发现和改正错误,这对于某些涉及人的生命安全或重要的军事、经济目标的项目显得尤其重要。
二、软件测试的特点
1.软件测试的开销大
- 按照Boehm的统计,软件测试的开销大约占总成本的30%-50%。
2.不能进行“穷举”测试
- 只有将所有可能的情况都测试到,才有可能检查出所有的错误。但这是不可能的。
3.软件测试难度大
- 要尽可能找出多的错误,软件测试工作就需要选择“高效的测试用例”。
三、软件测试的基本原则
- 1.尽量不由程序设计者进行测试。
- 2.关键注重测试用例的选择。
- 输入数据的组成(输入数据、预期的输出结果)
- 既有合理输入数据,也有不合理的输入数据。
- 用例既能检查应完成的任务,也能够检查不应该完成的任务。
- 长期保存测试用例。
- 3.充分注意测试中的群集现象。
四、测试的基本步骤
5.2 软件测试方法
一、静态分析方法
- 指以人工的、非形式化的方法对程序进行分析和测试。
- 桌前测试
- 代码会审
- 步行检查
- 调用图:从语义角度考察程序的控制路线
- 数据流分析图:检查分析变量的定义和引用情况
二、动态测试方法
1.白盒法(逻辑覆盖法)
- 分析程序的内部逻辑结构,注意选择适当的覆盖标准,设计测试用例,对主要路径进行尽可能多的测试。
- 测试用例选择,按照不同覆盖标准确定。
- 白盒法常用的覆盖标准
- 语句覆盖:选择足够的测试用例,使得每个语句都至少能被执行一次。
- 判定覆盖:执行足够的测试用例,使得程序中每个判定至少都获得一次“真”值和“假”值。
- 条件覆盖:执行足够的测试用例,使得判定中的每个条件获得各种可能的结果。
- 判定/条件覆盖:执行足够的测试用例,使得判定中每个条件取到各种可能的值,并使每个判定取到各种可能的结果。
- 条件组合覆盖:执行足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。
- 白盒法步骤
- 1)选择逻辑覆盖标准。
- 2)按照覆盖标准列出所有情况。
- 3)选择确定测试用例。
- 4)验证分析运行结果与预期结果。
2.黑盒法
- 不考虑程序的内部结构与特性,只根据程序功能或程序的外部特性设计测试用例。
2.1 等价分类法
- 基本思想:根据程序的I/O特性,将程序的定义域划分为有限个等价区段 —“等价类”,从等价类中选择出的用例,具有“代表性”。
- 等价类分为:
- 有效等价类—对于程序的规格说明,是合理的、有意义的输入数据构成的集合。
- 无效等价类—对于程序的规格说明,是不合理的、没有意义的输入数据构成的集合。
- 等价分类法步骤
- 划分“等价类”
- 应按照输入条件(如输入值的范围,值的个数,值的集合,输入条件必须如何)划分为有效等价类和无效等价类。
- 选择测试用例
- A:为每个等价类编号
- B:使一个测试用例尽可能覆盖多个有效等价类
- C:特别注意:一个测试用例只能覆盖一个无效等价类
2.2 边值分析法
- 基本思想:选择等价类的边缘值作为测试用例,让每个等价类的边界都得到测试,选择测试用例既考虑输入亦考虑输出。
- 分析步骤:A:先划分等价类 B:选择测试用例,测试等价类边界
- 边界选择原则
- A:按照输入值范围的边界
- B:按照输入/输出值个数的边界
- C:输出值域的边界
- D:输入/输出有序集的边界:应选择第一个元素和最后一个元素。
2.3 错误推测法
- 凭经验或直觉推测可能的错误,列出程序中可能有的错误和容易发生错误的特殊情况,选择测试用例。
2.4 因果图法
- 把输入条件视为“因”,把输出条件视为“果”,将黑盒看成是从因到果的网络图,采用逻辑图的形式来表达功能说明书中输入条件的各种组合与输出的关系。根据这种关系可选择高效的测试用例。因果图是一种形式化语言,是一种组合逻辑网络图。
(1)因果图的基本符号
(2) 因果图法的步骤
- 分析规范,即将问题分为若干可工作的步骤。
- 标识出规范中的原因与结果。
- 分析规范语义、内容,转换为因果图。
- 将因果图转换为有限项判断表。
- 将判断表的每一列,转换为一个测试用例。
(3) 因果图法应用举例
- 规范:文件名第一列字符必须为A或B,第二列字符必须为数字。满足则修改文件第一字符不正确发出信息X12,第二个字符不正确发出信息X13。
5.3 软件测试的步骤
- 测试步骤及策略: 所有测试过程都应采用综合测试策略;即先作静态分析,再作动态测试。并事先制订测试计划。测试过程通常可分4步进行:
- 软件测试是保证软件可靠性的主要手段,也是软件开发过程中最艰巨、最繁杂的任务。
- 软件测试方案是测试阶段的关键技术问题,基本目标是选择最少量的高效测试用例,从而尽可能多地发现软件中的问题。
- 最后进行验收测试(Acceptance Testing),是以用户为主的测试,测试过程、方法和测试内容与系统测试基本相同。
- 有时也将验收测试与系统测试合二为一,此时,参加测试的人员最好包括:有经验的系统测试专家,用户代表,软件开发人员及QA(质量保证)人员也应参加。
一、模块测试(单元测试)
1.测试内容
2.模块测试步骤
- 考虑到被测模块与其它模块的联系,因此测试时需要使用两类辅助模块来模拟其他模块。
- 驱动模块——模拟主程序功能,用户向被测模块传递数据,接收、打印从被测模块返回的数据。
- 桩模块——又称假模块,用于模拟那些由被测模块所调用的下属模块功能。
- 一般,驱动模块比桩模块容易设计,但都是额外开销。测试方法以白盒法为主。
二、组装测试
- 也称为联合测试或集成测试,重点测试模块的接口部分,需设计测试过程使用的驱动模块或桩模块。
1.组装测试的任务
- 确定模块组装方案,将经过测试的模块组装为一个完整的系统。组装方案分为渐增式及非渐增式。
- 测试方法以黑盒法为主,按照组装方案进行测试。
2.渐增式组装测试
- 渐增式是先进行模块测试,然后将这些模块逐步组装成较大的系统,每连接一个模块进行一次测试。两种方案:
- 自顶而下增值
- 自底而上增值
- 无论是自顶而下增值还是自底而上增值,还可选择深度优先或者宽度优先增值。
- 设计驱动模块或桩模块,对每一个新组装的子系统进行测试**,对发现问题较多的子系统或模块应该用白盒法作回归测试**。
- 确定集成过程的原则
- 自顶而下增值
- 优点:能够尽早发现系统主控方面的问题。
- 缺点:无法验证桩模块是否完全模拟了下属模块的功能。
- 自底而上增值
- 优点:驱动模块较容易编写,桩模块能够尽早查出底层涉及较复杂的算法和实际的I/O模块中的错误。
- 缺点:最后才能发现系统主控方面的问题。
- 集成过程的原则
- ① 尽早测试关键模块。
- ② 尽早测试包含
I
/
O
I/O
I/O 的模块。
3.混合增值
常见的混合增值方案:
- 衍变的自顶而下:先自底而上集成子系统,再自顶而下集成总系统。
- 自底而上——自顶而下增值
- 对含有读操作的子系统采用自底而上。
- 对含有写操作的子系统采用自顶而下。
- 回归测试:在回归测试中自底而上,对其余部分(尤其是对修改过的子系统)采用自顶而下。
三、确认测试
1.任务
- 又称为有效性测试或功能测试。其任务是验证系统的功能、性能等特性是否符合需求规格说明。
2.确认测试步骤
(1)有效性测试
- 制定测试计划,运用黑盒法,验证软件特性是否与需求符合。
(2)软件配置复查
- 软件配置—指软件工程过程中所产生的所有信息项:文档、报告、程序、表格、数据。随着软件工程过程的进展软件配置项(SCI—software Configuration Item)快速增加和变化。应复查SCI是否齐全。
3.
α
\alpha
α 测试和
β
\beta
β 测试
-
α
\alpha
α 测试:是在开发机构的监督下,由个别用户在确认测试阶段后期对软件进行测试,目的是评价软件的FLURPS(功能、局域化、可使用性、可靠性、性能和支持),注重界面和特色。
-
β
\beta
β 测试:由支持软件预发行的客户对FLURPS进行测试,主要目的是测试系统的可支持性。
四、系统测试
- 将经过确认测试的软件,与计算机硬件、外设、支持软件等一起,在实际运行环境下测试。
五、验收测试
5.4 软件纠错技术
- 软件测试的目的是发现错误,在发现错误后,则应按照一定的技术去纠正它。纠错的关键是“错误定位”。
一、纠错的原则
- 注意错误的“群集现象”。
- 不能只修改错误的征兆、表现,还应修改错误的本质。
- 注意在修改一个错误的时候,又引入一个新的错误。
二、纠错的技术
1.硬性纠错
? 又称蛮干法,使用较多,效率较低的方法。
- 主存信息转储法
- 关键部分设置打印语句
- 使用自动纠错工具
2.回溯法排错
- 适用于小程序。发现错误时,人工沿控制流追踪源代码程序。
3.归纳法
- 从测试结果发现的错误入手,分析它们之间的联系查找错误。是一种从特殊推断一般的系统化思考方法。
4.演绎法排错
- 演绎法是一种从一般原理出发,经过排除和精化的过程,推导出结论的方法。
第五章完
|