摘 要 软件测试是软件工程中值得专门计划和管理的一项子工程。软件测试在软件系统研制过程中的定义和软件测试的组织策略是软件测试计划与管理的重点。进一步分析软件测试的本质、软件静态分析的作用、软件测试的质量和软件测试的可信度将有利于组织者在更高层次上计划和管理软件测试。
主题词 软件测试 计划与管理 软件问题 确认
1 引言... 1
2 软件测试的工作框架... 1
2.1 软件测试在软件系统研制过程中的定义... 2
2.2 软件测试在软件研制中的作用... 2
2.2.1 软件测试活动与其它软件研制活动的关系... 2
2.2.2 软件测试的对象... 2
2.2.4 软件更动控制规范... 3
2.3 软件测试的组织策略... 3
2.3.1 软件测试遵循的标准... 3
2.3.2 软件测试的工作范畴... 3
2.3.3 软件测试环境... 4
2.3.4 软件测试产品... 4
2.3.5 适用于软件测试活动的软件资源标识规则... 4
2.3.6 软件测试的进度安排... 4
3 结论和讨论... 4
3.1 软件测试的重点... 4
3.2 软件测试的难点... 5
3.3 软件测试的进一步涵义... 5
3.3.1 软件测试的本质... 5
3.3.2 软件的静态分析技术... 5
3.3.3 软件测试的质量... 5
3.3.4 软件测试的可信度... 6
1 引言
在工程化的软件研制过程中,软件测试活动贯穿整个软件项目的生存周期;独立的软件测试组织始终与设计/实现/维护组织并行工作;软件测试涉及的人/物/时间甚至可能超过软件项目总消耗的一半以上。因此,软件测试本身就是软件工程中值得专门计划和管理的一项子工程。
本文将基于一个大型实时软件系统中软件测试的实践,从计划和管理的角度来分析和介绍软件测试的工作框架及其内容;然后讨论在较高层次上计划和管理软件测试时可以进一步分析和研究的内容。
2 软件测试的工作框架
软件测试的基本组织原则为:
a.成立独立的测试组织,以实现第三方测试(IV&V)的要求。
具体实现时可以采用:专职为主、兼职为辅和交叉测试的策略。
b.软件测试工程化、规范化。
包括:统一制订软件测试的方法与规范;重视软件测试文档的编制;明确定义软件测试环境,同时有重点地设计和开发软件测试工具。
c.实现有效的测试过程管理。
包括:测试资源(数据与程序)的配置管理;测试/回归测试的自动/半自动化执行;测试报告的自动/半自动化生成。
d.重视测试结果与测试结果的利用。
包括:加强结果收集统计和分析;指导软件进展和质量评估。
根据基本组织原则,软件测试的工作框架包括三个部分:软件测试在软件系统研制过程中的定义(外部联系);软件测试的组织策略(内部结构);软件测试的过程控制(内部联系)。前两部分的定义相对稳定,是软件测试计划与管理的重点,以下分析和介绍其中的内容。
2.1 软件测试在软件系统研制过程中的定义
在软件测试工作之初,组织者应与其他有关人员协调,以正确定位以下内容:
a. 软件测试在软件研制中的作用;
b. 软件测试活动与其它软件研制活动的关系;
c. 软件测试的对象;
d. 软件测试组织与软件开发组织界面;
e. 软件更动控制流程。
a. 发现软件错误;
b. 有效定义和实现软件成分由低层到高层的组装过程;
c. 验证软件是否满足任务书和系统定义文档所规定的技术要求;
d. 为软件质量模型的建立提供依据。
即软件测试包括“找错”、“组装”、“确认”和“评估”四个层次的作用。
2.2.1 软件测试活动与其它软件研制活动的关系
图1描述了软件研制过程中各种活动的输入/输出关系。可以看到:软件测试是软件质量管理活动之一;软件测试组织通过软件配置管理组织获得其测试对象:软件产品(文档/代码/文件)或其中间形式;软件测试结果通过软件配置管理组织返回给软件开发组织;测试结果是软件质量控制的数据来源之一。
2.2.2 软件测试的对象
在大型软件系统中,软件成分被划分为多个层次。所有参加测试的人员都应了解其面对的软件系统的构成,同时清楚自己实现哪些部分、哪些方面的测试。
各类系统定义文档是软件测试的依据,它们定义了各层次软件成分的功能/性能/实现的要求。必要时,测试组织者应及时汇集、整理、完善软件系统的成分树/森林,明确各层次软件成分的具体内容。当然,这部分信息也可能由其它组织提供。
2.2.3 软件测试组织与软件开发组织的界面
软件测试组织与软件开发组织的界面指:软件开发组织完成编码、调试、集成后通过软件配置管理组织移交给软件测试组织的软件成分的层次,简称“软件测试界面”。
对低于软件测试界面的软件成分进行的排错的过程一般被称为“软件调试”;而对高于软件测试界面的软件成分进行的找错的过程被称为“软件测试”,其修改的过程被称为“软件更动”。
一旦软件成分被提交到配置管理库中,则对其的修改就必须遵循软件更动控制规范,将涉及不少人员,媒体转移较频繁,软件修改周期也较长。因此代码的测试不应过分依赖于测试组织,即:开发组织提交的软件成分应足够稳定。为了减少整个软件测试过程(发现问题—改动软件)的人力/物力/时间的消耗,测试组织与开发组织应达成共识:尽可能提高软件测试界面。定义较高软件测试界面的益处还在于:有利于开发组织更加主动关注其软件开发过程的质量控制;同时,还有利于测试组织集中时间和资源来执行软件高层测试(功能/性能的确认)。
2.2.4 软件更动控制规范
由图1知:软件测试的对象是已置于软件配置管理控制之下的软件成分(程序、数据、文档及各类受控的文件)。软件更动控制是软件配置管理的主要任务之一。
当软件开发/测试/维护人员发现软件问题(与软件配置管理项相关的软件错误、软件不一致或未知原因的软件异常状态)时,须填写软件问题报告,按照软件更动控制流程/算法,进入软件更动循环,产生相应的软件更动申请/报告。因此软件更动控制规范应包含:软件更动控制流程/算法、软件问题报告和软件更动申请/报告的格式。
由于软件更动控制与软件回归测试的内在联系紧密,因此测试组织应参与制订软件更动控制规范,以使该规范能在适用于系统的前提下更节省软件研制的总消耗。
2.3 软件测试的组织策略
在软件测试的管理中,以下内容的定义反映测试工作的组织策略:
a.软件测试遵循的标准;
b.软件测试的工作范畴;
c.软件测试环境;
d.软件测试产品;
e.适用于软件测试活动的软件资源标识规则;
f.软件测试的进度安排。
2.3.1 软件测试遵循的标准
组织者在指定范围内选择软件测试遵循的标准,并结合本软件系统的具体要求,使之贯彻到整个软件测试的计划、实现和管理过程之中。根据标准,需要被明确的内容包括:测试阶段和测试文档类型。
可以从三个角度来划分测试阶段:面向测试操作类型的阶段划分、面向测试操作对象的阶段划分、面向测试实施者的阶段划分。测试操作类型包括:调试、集成、确认、验证、组装、验收、操作等。测试操作对象可以是:单元、部件、配置项、子系统、系统等。测试实施者可以是:开发者、测试者、使用者、验收者等。各类标准从不同角度定义测试评审阶段,而测试组织者可以在符合所选标准的同时,结合多个划分因素规定本系统的测试阶段。
各标准规定的测试文档类型也不尽相同。如国标《软件产品开发文件编制指南》规定了两类测试文档:测试计划、测试分析报告;国标《计算机软件测试文件编制规范》定义了八类测试文档:测试计划、测试设计说明、测试用例说明、测试规程说明、测试项传递报告、测试日志、测试事件报告、测试总结报告;《XXXX软件工程化技术文件》定义了三类测试文档:测试计划、测试说明、测试报告。我们认为最后这种规定较易操作:因为,太少的测试文档类型不利于有步骤有层次地定义测试内容,也不利于测试用例和测试例程的良好表达;太多的测试文档类型易使测试组织陷入到繁杂的文档规范和编制中去;而第三种定义较为适中。其中:测试计划在系统分析/设计阶段提交,着重定义测试的资源、范围、内容、安排、通过准则等;测试说明在测试计划明确后开始编制,针对软件需求和设计要求具体定义测试用例和测试规程;测试报告分析和总结测试结果,测试日志是其必要附件。
a. 测试工作的组织与管理,包括:制定测试方法与规范、控制测试进度、管理测试资源。
b. 测试工作的实施,包括:编制符合标准的测试文档、研制测试环境、与开发组织协作实现各阶段的测试活动。
软件测试工作可以分为四个方面:
a.测试管理。测试小组是质量保证组织的一个成分,因此测试管理工作应被置于软件质量管理工作范围内。
b.测试计划。独立的测试组织负责定义软件测试的方法与规范。开发组织负责编制单元测试的计划和说明;测试组织主要负责编制其它各测试阶段的测试计划和说明。
c.测试实施。测试实施组织的作用是:按测试计划与测试说明的定义对测试对象进行相应的测试;填写测试报告中相应的表格。
d.测试评审。依据软件测试评审准则在各测试阶段评审时提交类型完整的测试文档。
2.3.3 软件测试环境
软件测试环境包括设计环境、实施环境和管理环境。
软件测试设计环境指:编制测试计划/说明/报告及与测试有关的文件所基于的软/硬件设备和支持。
软件测试实施环境指:对软件系统进行各级测试所基于的软/硬件设备和支持。测试实施环境包括被测软件的运行平台和用于各级测试的工具。
软件测试管理环境指:管理测试资源所基于的软/硬件设备和支持。测试资源指测试活动所利用或产生的有形物质(如软件、硬件、文档)或无形财富(如人力、时间、测试操作等)。广义的测试管理环境包含测试设计环境、测试实施环境,和专门的测试管理工具。
对软件测试环境的定义包括两个方面:折衷需求和实际条件来选择已有的测试工具;有重点地自行开发测试辅助工具。软件测试必须依托工具,以便:测试过程的自动/半自动执行和测试结果的自动/半自动评审和报告。目前市场上测试工具分为三类:代码分析工具、自动/半自动测试过程管理工具和测试资源管理工具。
2.3.4 软件测试产品
软件测试工作所产生的文档、程序、服务、以及相关的文件的总和称之为软件测试产品,它是软件产品的一部分。
除了所选标准规定在各评审阶段需提交的测试文档外,还可以根据实际情况编制其它类型软件测试文档。
测试组织需提交的程序是其开发测试工具及其测试环境。
测试组织提供的服务包括:培训与技术支持,包括为开发组织使用测试工具与环境提供帮助、为开发组织提供测试计划/说明/报告的编写指导、协助开发组织实施相应测试;协调与建议,包括在充分理解软件系统工作原理和流程的基础上,为软件系统质量保证工作提供尽可能多的信息。
2.3.5 适用于软件测试活动的软件资源标识规则
测试者除了要统一给出各类测试文档的标识(或定义规则),还要定义其它测试文件,如文档审查项列表、代码审查项列表、软件审查报告、软件问题报告、软件更动申请、软件更动报告、软件测试日志,等的标识。
软件测试组织应获得或自行整理其所面对的软件系统中各级软件成分对应的文档/文件/代码的标识。另外,测试组织自行开发的测试辅助工具也将置入配置管理库,因此对其的标识定义应符合整个软件系统的标识定义规则。
2.3.6 软件测试的进度安排
软件测试工作是整个软件研制工作的一部分,因此测试进度的初步安排应在软件开发计划中定义。在各阶段测试计划中将对测试进度的安排给出更具体的定义。
软件测试实施的开始时间将受限于软件开发的进度;每个测试阶段的进度控制将受限于测试资源(人/物/时间)。
软件测试的组织者可以在每个月末向软件质量管理组织提交:本月的<测试工作的活动汇总>、下一月的<测试工作的初步安排>和当前状态的测试文档,以利于软件质量管理组织评估软件系统的质量、控制软件系统的测试进度。
3 结论和讨论
a. 测试用例和测试例程的良好设计。测试用例及测试例程的设计是整个软件测试工作的核心。测试用例反映对被测对象的质量要求,决定对测试对象的质量评估。
b. 测试工作的管理。尤其是对包含多个子系统的大型软件系统,其测试工作涉及大量人力和物力,有效的测试工作管理是保证有效测试工作的必要前提。
c. 测试环境的建立。软件测试的工作量很大,重复/繁杂的劳动很多,在有限的测试条件下,建立测试环境、提供测试辅助工具是减少软件研制费用的重要措施。
a. 测试用例及测试例程是其设计者对被测对象实现原理和外部需求的理解,能否正确反映对被测对象的质量要求,很大程度上取决于其设计者的分析、理解和设计能力。这是一种缺乏指导性方法的、不易制订标准或规范的、需要“技巧”的设计活动。
b. 目前缺乏测试管理方面的资料,几乎没有可供参考的、已实现的、完整的测试管理与测试实施模式。
c. 软件测试的有效实施需要开发组织与测试组织充分配合。虽然测试活动看似是对开发人员劳动成果的不断“挑剔”,但测试工作的出发点是:确保开发人员的劳动成果成为可被接收的、更高品质的软件产品。因此,测试人员应向开发人员谦虚求教,在测试工作中真正发挥作用,为保证软件产品的高质量起尽可能大的作用。测试的组织者应在促进上级组织协调各组织工作方面发挥作用。
d. 有效的测试工作需要投入足够的人力和物力,需要对工作的难度和消耗有充分的估计。测试的组织者也应在促进上级组织对资源的统一调度方面发挥作用。
3.3 软件测试的进一步涵义
进一步分析和研究以下内容,会更有利于软件测试的组织者在较高层次上计划和管理软件测试工作。
3.3.1 软件测试的本质
软件测试的本质是对比和模拟(仿真)。检验软件是否有错或是否满足要求的两个前提是:存在预期的参考;存在软件的运行环境。
理想的软件研制过程是:每一阶段的软件产品与前一阶段的软件产品在逻辑上等价。其蕴涵了一个假设:尽管每个阶段的描述方式不同,但其描述的内容都是精确的、完全的和一致的。这个假设在实际软件工程中是不容易满足的,因此不能期望理想的软件研制过程。
更广义的软件测试指:软件研制中某两个阶段工作结果的对比。
3.3.2 软件的静态分析技术
相对软件动态测试技术(亦称计算机测试技术),审查会(Inspection)、人工运行(或叫走查,Walkthrough)和静态检验(Desk checking )等软件的静态分析技术是在软件研制的较早阶段对非形式化软件产品的人工测试方式,如对文档-文档的静态分析(需求说明与结构设计的对比)或对文档-代码的静态分析(详细设计与源代码的对比)。
在软件静态分析技术中,软件(文档/代码)的“运行环境”是在人头脑中模拟生成的。
强调软件静态分析技术的原因在于:越早期的软件描述越不易形式化,其“隐含”的语义越多,其等价转换到下一阶段描述的难度越大。
静态分析技术主要用来发现本阶段产品的缺陷,但当发现前面阶段软件产品的问题时,就要填写软件问题报告,遵循软件更动控制规范。
3.3.3 软件测试的质量
通过对比,应用软件测试技术可以发现以下三类软件问题:
a. “错误”,即:前一阶段导出语义为A,本阶段导出语义为B,而A1B。
b.“缺少”,即:前一阶段导出语义为A,本阶段无此导出语义。
c.“多余”,即:本阶段导出语义为B,前一阶段无此导出语义。
发现第一类软件问题的过程即谓“找错”,发现后两类软件问题的过程即谓“确认”。设计不周密的测试用例可能并不能区分这三类软件问题。
软件测试本身的质量在于:其提供的关于软件产品质量的信息含量。发现软件问题并能区分其类型的软件测试被称为是优质的。
3.3.4 软件测试的可信度
软件测试的结果是衡量软件产品质量的依据。但软件测试的依据、设计和操作的可靠性又由什么来保证呢?因而软件测试结果本身就带有可信度。相信软件测试结果的前提是:认可测试设计者/实现者/实施者的能力和责任感,同时认可其所依赖测试工具的可靠性。
在ISO 9001标准中规定:任何测试工具所参考的标准都不应低于使用它的软件项目的标准。对于所选购的测试工具,可以获得生产商提供的质量认证;对于自行开发的测试辅助工具,测试组织可以遵循标准,提供研制测试辅助工具的全部开发/测试文档,以提高其提供的测试结果的可信度。