1. 引言
在工程化的软件研制过程中,软件测试活动贯穿整个软件项目的生存周期;独立的软件测试组织始终与设计/实现/维护组织并行工作;软件测试涉及的人/物/时间甚至可能超过软件项目总消耗的一半以上。因此,软件测试本身就是软件工程中值得专门计划和管理的一项子工程。
根据公司相关情况,在此编写了测试计划组织与管理工作框架模式,根据这个模式组织培养测试成员。通过学习测试策略,更好的融入测试工作中。
2. 软件测试的工作框架
明确软件测试的基本组织原则:
a.成立独立的测试组织,根据项目情况进行分组测试,以实现第三方测试的要求,具体实现时可以采用:专职为主、兼职为辅和交叉测试的策略。
b.使件测试工程化、规范化
包括:统一制订软件测试的方法与规范;重视软件测试文档的编制;明确定义软件测试环境,同时有重点地设计和开发软件测试工具。
c.实现有效的测试过程管理
包括:测试资源(数据与程序)的配置管理;测试/回归测试的自动/半自动化执行;测试报告的自动/半自动化生成。
d.重视测试结果与测试结果的利用;包括:加强结果收集统计和分析;指导软件进展和质量评估。
软件测试的工作框架还包括三个部分:
软件测试在软件系统研制过程中的定义(外部联系);软件测试的组织策略(内部结构);软件测试的过程控制(内部联系)。前两部分的定义相对稳定,是软件测试计划与管理的重点,以下分析和介绍其中的内容。
2.1 软件测试在软件系统研制过程中的定义
软件测试工作之初,组织者应与其他有关人员协调,以正确定位以下内容:
a.软件测试在软件研制中的作用;
b.软件测试活动与其它软件研制活动的关系;
c.软件测试的对象;
d.软件测试组织与软件开发组织界面;
e.软件更动控制流程。
2.1.1 软件测试在软件研制中的作用
软件测试的意义在于:
a.发现软件错误;
b.有效定义和实现软件成分由低层到高层的组装过程;
c.验证软件是否满足需求说明书和系统定义文档所规定的技术要求;
d.为软件质量模型的建立提供依据。
即软件测试包括“找错”、“组装”、“确认”和“评估”四个层次的作用。
2.1.2 软件测试活动与其它软件研制活动的关系
软件测试是软件质量管理活动之一;软件测试组织通过软件配置管理组织获得其测试对象:软件产品(文档/代码/文件)或其中间形式;软件测试结果通过软件配置管理组织返回给软件开发组织;测试结果是软件质量控制的数据来源之一。
2.1.3 软件测试的对象
在软件系统中,把软件成分被划分为多个层次作为测试对象。让所有参加测试的人员都应了解其面对的软件系统的构成,同时清楚自己实现哪些部分、哪些方面的测试。
各类系统定义文档是软件测试的依据,它们定义了各层次软件成分的功能/性能/实现的要求。必要时,测试组织者应及时汇集、整理、完善软件系统的成分树/森林,明确各层次软件成分的具体内容。当然,这部分信息也可能由其它组织提供提供。
2.1.4 软件测试组织与软件开发组织的界面
件测试组织与软件开发组织的界面指:软件开发组织完成编码、调试、集成后通过软件配置管理组织移交给软件测试组织的软件成分的层次,简单称为“软件测试界面”。
对低于软件测试界面的软件成分进行的排错的过程一般被称为“软件调试”;而对高于软件测试界面的软件成分进行的找错的过程被称为“软件测试”,其修改的过程被称为“软件更动”。
尽可能提高软件测试界面。这样有利于开发组织更加主动关注其软件开发过程的质量控制;同时,也有利于测试组织集中时间和资源来执行软件高层测试(功能/性能的确认)。
2.1.5 软件更动控制规范
软件测试的对象是已置于软件配置管理控制之下的软件成分(程序、数据、文档及各类受控的文件)。软件更动控制是软件配置管理的主要任务之一。
当软件开发/测试/维护人员发现软件问题(与软件配置管理项相关的软件错误、软件不一致或未知原因的软件异常状态)时,须填写软件问题报告,按照软件更动控制流程/算法,进入软件更动循环,产生相应的软件更动申请/报告。因此软件更动控制规范应包含:软件更动控制流程/算法、软件问题报告和软件更动申请/报告的格式。
由于软件更动控制与软件回归测试的内在联系紧密,因此测试组织应参与制订软件更动控制规范,以使该规范能在适用于系统的前提下更节省软件研制的总消耗。
2.2 软件测试的组织策略
学习软件测试的组织策略,包括:
a.软件测试遵循的标准;
b.软件测试的工作范畴;
c.软件测试环境;
d.软件测试产品;
e.适用于软件测试活动的软件资源标识规则;
f.软件测试的进度安排。
2.2.1 软件测试遵循的标准
在指定范围内选择软件测试遵循的标准,并结合本软件系统的具体要求,使之贯彻到整个软件测试的计划、实现和管理过程之中。根据标准,需要被明确的内容包括:测试阶段和测试文档类型。
可以从三个角度来划分测试阶段:面向测试操作类型的阶段划分、面向测试操作对象的阶段划分、面向测试实施者的阶段划分。
测试操作类型包括:调试、集成、确认、验证、组装、验收、操作等。测试操作对象可以是:单元、部件、配置项、子系统、系统等。测试实施者可以是:开发者、测试者、使用者、验收者等。各类标准从不同角度定义测试评审阶段,而测试组织者可以在符合所选标准的同时,结合多个划分因素规定本系统的测试阶段。
测试文档类型包括:测试计划、测试设计说明、测试用例说明、测试规程说明、测试项传递报告、测试日志、测试报告、测试总结报告。
2.2.2 软件测试的工作范畴
落实软件测试工作的工作范畴,其包括两个层次:
a.测试工作的组织与管理,包括:制定测试方法与规范、控制测试进度、管理测试资源,人员调配。
b.测试工作的实施,包括:编制符合标准的测试文档、研制测试环境、与开发组织协作实现各阶段的测试活动。
软件测试工作可以分为四个方面:
a.测试管理。测试小组是质量保证组织的一个成分,因此测试管理工作应被置于软件质量管理工作范围内。
b.测试计划。独立的测试组织负责定义软件测试的方法与规范。开发组织负责编制单元测试的计划和说明;测试组织主要负责编制其它各测试阶段的测试计划和说明。
c.测试实施。测试实施组织的作用是:按测试计划与测试说明的定义对测试对象进行相应的测试;填写测试报告中相应的表格。
d.测试评审。依据软件测试评审准则在各测试阶段评审时提交类型完整的测试文档。
2.2.3 软件测试环境
软件测试环境包括设计环境、实施环境和管理环境。
软件测试设计环境指:编制测试计划/说明/报告及与测试有关的文件所基于的软/硬件设备和支持。
软件测试实施环境指:对软件系统进行各级测试所基于的软/硬件设备和支持,包括被测软件的运行平台和用于各级测试的工具。
软件测试管理环境指:管理测试资源所基于的软/硬件设备和支持。测试资源指测试活动所利用或产生的有形物质(如软件、硬件、文档)或无形财富(如人力、时间、测试操作等);包含测试设计环境、测试实施环境,和专门的测试管理工具。
2.2.4 软件测试产品
在软件测试工作所产生的文档、程序、服务、以及相关的文件的总和称之为软件测试产品,它是软件产品的一部分。
除了所选标准规定在各评审阶段需提交的测试文档外,还可以根据实际情况编制其它类型软件测试文档。
测试组织需提交的程序是其开发测试工具及其测试环境。
测试组织提供的服务包括:培训与技术支持,包括为开发组织使用测试工具与环境提供帮助、为开发组织提供测试计划/说明/报告的编写指导、协助开发组织实施相应测试;协调与建议,包括在充分理解软件系统工作原理和流程的基础上,为软件系统质量保证工作提供尽可能多的信息。
2.2.5 适用于软件测试活动的软件资源标识规则
测试者除了要统一给出各类测试文档的标识(或定义规则),还要定义其它测试文件,如文档审查项列表、代码审查项列表、软件审查报告、软件问题报告、软件更动申请、软件更动报告、软件测试日志等的标识。
软件测试组织应获得或自行整理其所面对的软件系统中各级软件成分对应的文档/文件/代码的标识。另外,测试组织自行开发的测试辅助工具也将置入配置管理库,因此对其的标识定义应符合整个软件系统的标识定义规则。
2.2.6 软件测试的进度安排
软件测试工作是整个软件研制工作的一部分,因此测试进度的初步安排应在软件开发计划中定义。在各阶段测试计划中将对测试进度的安排给出更具体的定义。
软件测试实施的开始时间将受限于软件开发的进度;每个测试阶段的进度控制将受限于测试资源(人/物/时间)。
软件测试的组织者可以在每个月末向软件质量管理组织提交:本月的<测试工作的活动汇总>、下一月的<测试工作的初步安排>和当前状态的测试文档,以利于软件质量管理组织评估软件系统的质量、控制软件系统的测试进度。
3. 软件测试的组织与管理
加快新员工的实操培训,培养他们尽可能多地找出程序中的错误,生产出高质量的软件产品。
3.1 测试的过程及组织
当设计工作完成以后,就应该着手测试的准备工作了,一般由一位对整个系统设计熟悉的设计人员编写测试大纲,明确测试的内容和测试通过的准则,设计完整合理的测试用例,以便系统实现后进行全面测试。等待开发的程序经验证后,由测试负责人组织测试,测试一般可按下列方式组织:
(1)首先,测试人员要仔细阅读有关资料,包括规格说明、设计文档、使用说明书及在设计过程中形成的测试大纲、测试内容及测试的通过准则,全面熟悉系统,编写测试计划,设计测试用例,作好测试前的准备工作。
(2)为了保证测试的质量,将测试过程分成几个阶段,即:代码审查、单元测试、集成测试、确认测试和系统测试。
(3)代码审查
由程序员完成,程序员给测试人员开会,讲解程序的逻辑关系
(4)单元测试
单元测试集中在检查软件设计的最小单位—模块上,通过测试发现实现该模块的实际功能与定义该模块的功能说明不符合的情况,以及编码的错误。
(5)集成测试
集成测试是将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的问题。如数据穿过接口时可能丢失;一个模块与另一个模块可能有由于疏忽的问题而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等。
(6)确认测试
确认测试的目的是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,确认测试的任务,验证软件的功能和性能如同用户所合理期待的那样。
(7)系统测试
软件开发完成以后,最终还要与系统中其他部分配套运行,进行系统测试。包括恢复测试、安全测试、强度测试和性能测试等。
经过上述的测试过程来看,大多数功能问题集中在系统测试,这个阶段是重点测试,投入人员也比较多。
3.2 测试的人员组织
为了保证软件的开发质量,软件测试应贯穿于软件定义与开发的整个过程。因此,对分析、设计和实现等各阶段所得到的结果,包括需求规格说明、设计规格说明及源程序都应进行软件测试。所以,测试人员的组织也应是分阶段的。
(1)软件的设计和实现都是基于需求分析规格说明进行的。
需求分析规格说明是否完整、正确、清晰是软件开发成败的关键。为了保证需求定义的质量,应对其进行严格的审查。
(2)设计评审
软件设计是将软件需求转换成软件表示的过程。主要描绘出系统结构、详细的处理过程和数据库模式。按照需求的规格说明对系统结构的合理性、处理过程的正确性进行评价,同时利用关系数据库的规范化理论对数据库模式进行审查。
(3)程序的测试
是指软件测试。是整个软件开发过程中交付用户使用前的最后阶段,是软件质量保证的关键。测试员全面对软件系统进行各种综合的测试。由专门的测试组完成,负责整个测试的计划、组织工作。