摘 要 本文从产品设计和生产组织的角度来分析和讨论软件测试流程、软件测试文档、软件测试用例、规模化软件测试和规范化软件测试。
主题词 软件测试流程 软件测试角色 软件测试用例 规模化软件测试 规范化软件测试
1 前言
2 软件测试流程
2.1 软件测试的阶段划分
2.2 软件测试阶段的步骤
2.3 软件测试角色
2.4 软件系统的测试流程
3 软件测试文档
4 软件测试用例
4.1 软件测试用例的定义
4.2 软件测试用例的生成和执行
4.3 软件测试用例的配置管理
4.4 软件测试用例的组织
4.5 软件测试用例的复用
5 规模化软件测试与规范化软件测试
1 前言
计算机软件产业在信息社会中对经济、国防、科技和人文领域所起的作用将越来越重要。作为一种产业,计算机软件生产具有共性和特性。软件生产包括六个环节:软件开发(定义/设计/实现)、软件生产管理、软件质量控制、软件配置管理、软件测试、软件维护。第一个环节加工软件产品,后五个环节决定软件生产的质量和软件产品的质量:
1. 软件生产管理:维护软件开发过程的有序性,决定软件生产的资源消耗(人/物/信息/时间),从而决定软件产品的价格;
2. 软件质量控制:维护软件资源消耗与软件产品质量之间的均衡;
3. 软件测试:保障软件产品的可接收性,为评价软件产品质量的提供依据;
4. 软件配置管理:保障软件产品(或其中间产品)的可标识性、完整性和一致性,为其它环节提供中介服务;
5. 软件维护:保障软件产品的“售后服务”,为软件产品的更新提供信息。
软件生产的每个环节都有自身的产品(文档/文件/代码/服务)输出,它们共同构成软件产品的三要素:(软件功用,软件质量,软件价格)。
计算机软件生产的方法学和计算机软件生产的管理学值得各类软件工作者关注,需要在实践与研究过程中不断发展理论和积累经验。
缘于软件生产的特性,软件测试是软件生产的一个重点和难点。软件测试具有四个层次的作用:找错、确认、组装和评估[1],其中确认和评估的意义与难度在规模化的软件生产中远远大于找错和组装。软件生产迫切需要脱离手工作坊方式的软件调试,在规范化软件测试的基础上实现规模化软件测试,达到提高软件产品质量、降低软件生产消耗的目的。软件测试的方法学和软件测试的管理学应是软件测试工作者关注的重点。
基于一个大型复杂实时软件系统(以下简称之为“MARA”)软件测试的实践与研究,参考资料[1]从产品计划和生产管理的角度分析和讨论了软件测试,本文将从产品设计和生产组织的角度来分析和讨论软件测试。
以下将分析和讨论:软件测试流程、软件测试文档、软件测试用例、规模化软件测试和规范化软件测试。
2 软件测试流程
2.1 软件测试的阶段划分
可以从三个角度来将软件测试划分为多个阶段[1]:
1. 面向软件测试操作类型的划分,如调试、集成、确认、验证、组装、验收、操作;
2. 面向软件测试对象粒度的划分,如语句、结构、单元、部件、配置项、子系统、系统、大系统;
3. 面向软件测试实施者的划分,如开发者、测试者、验收者、使用者。
2.2 软件测试阶段的步骤
每个软件测试阶段都要经历以下步骤:测试需求分析、测试过程设计、测试实现、测试实施、测试评价、测试维护。
2.3 软件测试角色
每个测试步骤都对应一个测试角色,另外还定义测试配置管理的角色。
表1给出软件测试角色的定义。
表1 软件测试角色的定义
软件测试角色
|
输
入 |
输
出 |
测试需求分析
|
1.
软件测试的方法与规范
2.
软件需求规格说明
3.
软件设计说明(概要设计说明和详细设计说明)
|
软件测试计划:
1)
软件测试的定位
2)
软件测试线索
3)
软件测试环境的定义
4)
软件需求的追踪矩阵 |
测试过程设计
|
1.
软件测试的方法与规范
2.
软件测试计划 |
软件测试说明:
1)
软件测试步骤
2)
软件测试基准
3)
测试线索的追踪矩阵 |
测试实现
|
1.
软件测试的方法与规范
2.
软件测试说明
3.
软件测试工具 |
软件测试的实现配置:
1)
软件测试环境
2)
测试步骤的计算机表示(用于回归测试的测试代码/测试数据)
3)
测试基准的计算机表示 |
测试实施
|
1.
软件测试的方法与规范
2.
软件测试说明
3.
软件测试的实现配置 |
软件测试记录:
1)
测试运行结果的计算机表示
2)
测试比较结果的计算机表示
3)
测试日志
4)
软件问题报告 |
测试评价
|
1.
软件开发文档
2.
软件测试文档
3.
软件测试配置
4.
软件测试记录 |
软件测试报告:
1)
测试结果的统计信息
2)
测试结果的分析/评判 |
测试配置管理
|
测试配置管理项:
1)
软件测试的描述性表示(测试文档/文件)
2)
软件测试的计算机表示(测试代码/数据/结果)
|
1.
软件测试配置管理项的标识管理
2.
软件测试配置管理项的存储管理
3.
软件测试配置管理项的引用控制
4.
软件测试配置管理项的版本控制
5.
软件测试配置管理项的更动控制 |
测试维护
|
测试配置管理项
|
1.
测试配置管理项的使用报告
2.
测试配置管理项的软件问题报告
3.
测试配置管理项的更动控制文件
|
明确区分各类测试角色,并明确定义其资源(人/物/时间)的安排,是保障软件测试工作有序开展、有效管理的关键。
明确区分测试需求分析角色和测试过程设计的角色意义还在于:软件测试对软件功能/软件实现有了可追踪性,因而为准确评议测试用例的质量提供依据。
2.4 软件系统的测试流程
显示了大型复杂软件系统MARA的测试流程。
可以看到,结合测试操作类型和测试对象粒度的划分角度,MARA的测试阶段分为:单元测试、部件集成、部件确认、配置项组装、配置项确认、系统综合和系统验收。每个阶段都要经历2.2节说明的六个步骤。
表2说明各测试阶段的定义。
表2 MARA软件测试阶段的定义
阶
段 |
标识
|
被测对象
|
目
的 |
完成后产品状态
|
单元测试
|
UT
|
单元
|
获得可组装的单元
|
可执行的单元
|
部件集成测试
|
CI
|
单元、
三级部件、
二级部件
|
集成单元成部件
|
二级部件环境中可执行的部件
|
部件确认测试
|
CV
|
三级部件、
二级部件
|
确认将被组装的部件
|
二级部件环境中满足文档要求的部件
|
配置项组装测试
|
II
|
二级部件、
一级部件、
配置项
|
组装部件成配置项
|
配置项级环境中可执行的配置项
|
配置项确认测试
|
IV
|
配置项、
子系统
|
确认配置项的功能和性能
|
模拟环境中满足软件需求的配置项
|
系统综合测试
|
SI
|
子系统
系统
|
动态协调开发环境下的各子系统
|
仿实际运行环境中满足用户需求的子系统
|
系统验收测试
|
SA
|
子系统
系统
关键配置项
关键部件
|
确认系统的功能和性能
|
仿实际运行环境中满足用户需求的系统
|
3
软件测试文档
显示了MARA的软件测试文档树。
利用基于数据库的管理工具,软件测试文档可以自动/半自动生成。
4 软件测试用例
4.1 软件测试用例的定义
软件测试用例可以被定义为如下六元组:
(测试索引,测试环境,测试输入,测试操作,预期结果,评价标准)
表3给出软件测试用例的定义。
表3 软件测试用例的定义
软
件 测 试 用 例 |
元
素 |
含
义 |
给出定义的测试角色
|
测试索引
|
被标识过的测试需求
|
测试需求分析
|
测试环境
|
进入测试实施步骤所需的资源及其状态。
|
测试输入
|
运行本测试所需的代码和数据,包括测试模拟程序和测试模拟数据
|
测试设计(描述性定义)
测试实现(计算机表示)
|
测试操作
|
建立测试运行环境、运行被测对象、获取测试结果的步骤序列
|
预期结果
|
用于比较测试结果的基准
|
评价标准
|
根据测试结果与预期结果的偏差,判断被测对象质量状态的依据
|
4.2
软件测试用例的生成和执行
软件测试的核心任务是生成和执行软件测试用例。
由表3知,在软件测试用例的六元组定义中:
1. 测试索引和测试环境在测试需求分析步骤中定义,是软件测试计划的内容;
2. 测试输入、测试操作、预期结果和评价标准的描述性定义在软件设计步骤中定义,是软件测试说明的内容;
3. 测试输入、测试操作、预期结果和评价标准的计算机表示(代码/数据定义)在软件测试实现步骤中给出,是软件测试程序产品。
软件测试用例是软件测试结果的生成器,即每执行一次测试用例都产生一组测试结果。
若测试用例被有效地由描述性定义转换为计算机表示,则测试的执行和结果的比较都可以利用软件测试工具自动或半自动地执行,在需要大量回归测试的复杂软件系统中,这种转换和自动执行是降耗增质的关键策略之一。
4.3 软件测试用例的配置管理
基于以下原因,对软件测试用例的需要进行配置管理:
1. 大型复杂软件系统的功能/性能要求将对应于大量的软件测试用例,它们需要标识规则和规范的存储结构;
2. 软件测试用例也存在引用控制;
3. 软件测试用例也存在版本控制;
4. 软件测试用例也存在更动控制。
软件测试用例的配置管理类似于一般软件的配置管理,可以实现安全存储、追踪变化和并行开发,其特色在于:区分测评人员和一般测试人员,前者独具生成和更新测试基准(预期结果的计算机表示)的权限。
4.4 软件测试用例的组织
软件测试用例的设计和实现对应于被测对象的需求、设计和环境要求,因此同被测对象一样,软件测试用例可以被组织成层次结构,即:依据某种原则(如被测对象的层次或测试类型)将测试用例划分为测试用例组;测试用例组又可以划分为更高层次的测试用例组。
显示了MARA中一个三级部件MRW的测试用例结构树。
测试用例组反映多个测试用例/测试用例组之间的偏序关系,也标识了具有某种共性的测试用例的集合。
测试实施时可以根据具体需要/环境,选择性地执行多个测试用例/测试用例组。
4.5 软件测试用例的复用
测试用例的层次性还表现在:低层被测对象的测试用例或其部分内容可以复用在对高层被测对象的测试中。如:
1. 单元测试阶段的功能确认类测试用例组可以复用在部件集成测试阶段中;
2. 部件确认测试阶段可以复用单元测试阶段的测试输入;
3. 部件确认测试阶段的测试用例组可以复用在配置项组装测试阶段和配置项确认测试阶段中;
4. 配置项确认测试阶段的测试用例组可以复用在系统综合测试阶段和系统验收测试中。
当然,每个测试阶段的对象和目标都不同,因此测试用例或其部分内容的复用通常有选择的、有限的和需更改的。
5 规模化软件测试与
规范化软件测试
软件测试的规模包括两层含义:被测软件的规模(有效代码量、结构/逻辑的复杂性、高性能/高精确性/高可靠性的需求)和测试消耗资源(人力/时间/测试频度)的规模,前者是定义后者的决定因素。可知,规模化软件测试应指:针对一定规模的软件消耗一定资源的软件测试。关于这两个“一定”,值得软件测试研究者探讨。
实现规模化软件测试存在两种途径,其对比见表4。
表4 规模化软件测试的两种实现途径
规模化软件测试
|
|
规范化软件测试
|
无序逼近软件测试
|
思路
|
以规范化为基础的有效控制
|
以资源消耗为前提的无序逼近
|
理论基础
|
以对元素运动的有序设定实现系统稳定(控制论)
|
以大量元素的无序运动获得系统均衡(混沌学)
|
测试流程
|
可见性
|
高
|
低
|
可控性
|
高
|
低
|
测试用例
|
准确性
|
高
|
低
|
可信度
|
高
|
低
|
有效性/数量
|
高
|
低
|
覆盖率/数量
|
高
|
低
|
可重用性
|
高
|
低
|
测试结果
|
可信度
|
高
|
低
|
可重现性
|
高
|
低
|
测试作用的实现
|
代码找错
|
好
|
好
|
部件组装
|
好
|
好
|
需求确认
|
好
|
好
|
质量评估
|
好
|
不好
|
适用的软件系统
|
有效代码量
|
庞大
|
庞大
|
可靠性需求
|
高
|
|
性能需求
|
高
|
|
复杂性
|
高
|
高
|
精确性
|
高
|
|
用户类型
|
|
多样
|
用户数量
|
|
庞大
|
应用环境
|
复杂
|
复杂
|
使用频度
|
|
高
|
典型实例
|
应用于航天/金融/国防/核能的大型实时控制系统
|
1.
商用软件的β版本(所有用户为其规模化软件测试贡献了人力/时间/物力资源)
2.
大型软件的系统联调(以提高使用频度来增强对产品的信心)
|
规范化的软件测试包括:有限的测试资源投入、已验证的测试模式、完整的测试方法与技术途径、有序有效的测试管理和降耗提质增效的测试环境,其中涉及的理论、方法与技术值得进一步研究和实践 |