论软件测试体系的建设
作者姓名:余国平
http://bbs.ltesting.net/thread-3258-1-1.html
摘要:1999 年,火星气象卫星(Mars Climate Orbiter)到达火星之后不久就消失;1996 年6
月4 日,Ariane 5 发射40 秒后爆炸;在一些报刊上,我经常看见报刊报道一些市民在ATM
上取款时,发现自己卡内的存款为天文数字。软件质量已成为软件公司和软件客户越来越关
心的问题。无疑,软件测试是软件质量保证的关键步骤,许多研究数据表明,软件公司只有
建立良好测试体系,才能较早地发现软件中存在的问题,降低开发费用和维护费用,减少客
户使用软件时由于质量问题带来的损失,有效地提高软件公司的软件过程改进能力和软件工
程化能力。我公司以前在软件开发上同样碰到不注重软件测试带来的软件质量不高和巨大维
护成本的惨痛教训,后来通过软件测试体系的建设,极大地增强了公司产品量,加强风险防
范能力,减少员工劳动强度和企业对系统的维护成本。下面我将介绍在软件测试体系建设上
我公司的整体解决方案,以供大家相互交流。在软件测试体系的建设上我们公司分别从软件
测试的管理体系和技术体系两方面上进行作手,从团队组织、环境建设、标准制定、人员培
养、配置管理、工作流程、绩效管理与激励制度七个方面进行建设。实践证明,此种测试体
系能有效提高软件质量和软件过程能力,能极大提高员工工作效率和降低员工工作强度。
测试团队组织
为了让大家更好地了解我们公司软件测试体系建设的外部环境,我先简要介绍一下我们
公司软件研发部门的相关组织情况,我们公司在软件研发上相关的有四个部门:
1. 金融事业部,主要负责金融产品的研发,产品范围覆盖windows 和unix 两大平台;
2. 政府事业部,主要负责政府、公安、税务产品方向上的研发,产品范围主要集中于
windows 平台;
3. 测试部门,主要负责公司的软件产品验证、代码审查和测试工作;
4. 质量保证(QA)部门,主要负责公司的软件过程改进指导工作,最终交付产品的
质量检查和质量保证工作以及版本管理工作。
在测试的组织方式上,我们采用独立的测试部门,负责整个公司软件项目的测试工作。
部门内设有测试经理一名,负责测试人员的组织和管理工作;设置有测试工具和测试文
档保管员一名,负责测试文档和测试工具管理工作;设置有测试人员若干名,这些测试人员
地位相互平等,但他们的每个人有自己的发展和研究方向,有的发展方向是基于需求的测试,
有的是基于安全的测试,有的是基于接口的测试,有的基于界面的测试等等,各测试人员必
须精通自己测试发展方向,并要求熟悉其他人的测试技术。
我们公司在开发软件的方式上,是采用基于项目的管理模式。在对一项目的研发过程中,
设置有项目经理,其下设置有开发主管和测试主管,测试主管和开发主管地位相等,同属于
项目经理负责(如图1),测试主管管理若干个测试人员,测试主管和测试人员都来自于独
立的测试部门,项目进行完毕测试主管的使命也随之结束。所以,在多个项目中,一测试人
员在一项目可能是测试主管,在另一项目中可能是测试员。
开发主管 测试主管
若干测试员
项目经理
环境建设
在环境建设上,我们主要从软硬件环境两方面作手。
在硬件方面,我们保证了每个工作人员有自己的PC 机。在基于PC 机上的环境,我保
证测试部门有单独的测试PC 机环境。对于小型机等测试部门不能单独配备硬件,我们通常
与开发部门协调,建立独立的两套环境,不能建立独立环境一般与开发部门约定各自可以使
用的时间。
同时,测试相关文档的管理是一个复杂和繁琐的工作,我们通过购置国内一软件厂商的
测试管理系统对计划、用例、过程、缺陷、过程等文档进行有效的管理。对于单独的测试部
门来说,利用测试工具可以大幅提高测试质量,根据公司产品特点和经济条件,我们通常使
用免费工具和自己书写自动化工具,如对于代码审查和单元测试我们经常用C++ TEST,对
于回归测试、压力测试我们通常使用自己书写的工具,对于比较复杂环境的性能测试我们公
司一般外包给专门的测试公司来做,以便减少测试成本和保证测试质量。
配置管理
软件测试过程是一个复杂性的劳动,测试过程中会产生大量文档。我们主要通过购买工
具的方式实行对文档的管理。在文档的管理方面,我们按照公共类、项目类、软件缺陷类、
开发人员类、测试工具类:
1. 公共类主要放置测试模板及测试规程说明,测试经验共享文档,开发技术规范等。
2. 项目类主要包括项目各阶段文档,如测试计划、测试用例设计等。
3. 开发人员类是针对每个开发人员易犯错误的总结。
4. 测试工具类主要放置常用的测试工具。
对于每个测试人员来说,由于我们测试管理软件采用的是B/S 结构,所以每个测试人员
可以通过internet 网查看和下载公共类、软件缺陷类、开发人员类文档和自己权限范围类的
项目文档。
工作流程
为了使测试工作有序,提高工作效率。我们形成了一套测试工作的流程。
当一项目启动。测试经理将向所有测试人员介绍项目情况,由测试人员申请测试项目主
管,测试经理和项目经理根据实际情况择优选用一测试人员作为测试项目主管。
测试项目主管和测试部门经理共同商定该项目各阶段所需的测试人员,随着项目的进
行,各阶段测试人员相继加入。每个阶段首先相关测试人员首先对文档进行验证(如下图3),
并编写相关测试用例,随后按项目实际情况加入进行测试。
需求分析----------------------------------------- ----需求验证
概要设计 ------------------ 概要设计验证
详细设计 ----------- 详细设计验证
编码-----代码审查
总体来说,项目整个测试过程按V 模型进行,V 模型是测试组织中常用到的一种模型,
它指的是根据需求进行验收测试,根据概要设计进行系统测试,根据详细设计进行集成测试,
根据编码进行单元测试(如下图4)。对于测试过程中,原则上要求每个测试人员要求必须
每天提供测试文档让文档管理员放入测试管理系统中。对于测试阶段和维护阶段测试人员测
出的软件缺陷,要求按错误登记分类及时录入系统中,方便开发人员及时查阅,对于软件缺
陷,我们通过系统的6 个生命周期状态(打开、工作、验证、取消、关闭、延期)进行管理。
开发人员总能通过测试管理软件中的缺陷子系统及时知道自己开发部分所存在的软件缺陷。
各阶段测试人员工作完毕相继离开此项目。项目进行完毕时,测试项目主管的使命结束。
需求分析 验收测试
概要设计 系统测试
详细设计 集成测试
编码 单元测试
绩效管理与激励制度
对于测试人员来说,在绩效管理和激励制度上,我们通常按照测试人员业绩和贡献进行
激励。主要表现在两个方面:
1. 为部门提供所负责部分测试技术质量、数量和对其他人员的培训效果。
2. 项目部分,对于每参与一个项目的测试,测试人员要一定绩效工资。在项目中,对
测试人员绩效考核在于他发现问题个数、等级及说服开发人员修改问题个数和等
级;同时在项目投放市场时自己负责发现问题的多少和级别来确定。
存在问题和不足
对这种体系实施一定时间后,经一段时间后,我们发现存在三方面问题:
1. 由于我公司采用独立的测试部门,很容易形成测试人员和开发人员的对立。所以在
对测试人员的培训时强调了注意原则性的同时,要注用一定的灵活性,要让开发人
员意识到测试人员是他们的朋友,而不是敌人,同时在对测试人员的考核上把说服
开发人员改正问题个数作为重要考核内容。但即使这样,形成对立的事情还是时有
发生,以后双方沟通问题还应加强。
2. 项目结束后,再测试时人员组织问题和责任划定问题。在项目结束后,我公司通常
采用以后再需测试时仍由原该项目测试主管负责进行,但此时组织工作可能不如以
前容易,因为此时相关测试人员已经有其他工作安排,同时多次测试的责任和绩效
不好划定。在这方面我们公司还需制定具体问题细则。
3. 项目较多时,一测试人员可能在一段时间内完成几个测试项目,容易产生几个项目
时间规划对于一个测试人员的时间冲突问题。避免测试人员在多个项目中时间上的
交叉也是以后测试经理规划时应注意的问题。