摘 要 本文从软件产品设计和生产组织的角度来分析和讨论软件测试流程软件测试文档、软件测试用例、规模化软件测试和规范化软件测试。
主题词 软件测试流程 软件测试角色 软件测试用例 规模化软件测试 规范化软件测试

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 软件测试角色的定义

明确区分各类测试角色,并明确定义其资源(人/物/时间)的安排,是保障软件测试工作有序开展、有效管理的关键。

明确区分测试需求分析角色和测试过程设计的角色意义还在于:软件测试对软件功能/软件实现有了可追踪性,因而为准确评议测试用例的质量提供依据。

2.4 软件系统的测试流程

显示了大型复杂软件系统MARA的测试流程。

可以看到,结合测试操作类型和测试对象粒度的划分角度,MARA的测试阶段分为:单元测试、部件集成、部件确认、配置项组装、配置项确认、系统综合和系统验收。每个阶段都要经历2.2节说明的六个步骤。

 

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 规模化软件测试的两种实现途径

 

规范化的软件测试包括:有限的测试资源投入、已验证的测试模式、完整的测试方法与技术途径、有序有效的测试管理和降耗提质增效的测试环境,其中涉及的理论、方法与技术值得进一步研究和实践