问:SQA 目的是什么?
答:对于任何的行业,讲到质量控制,归根结底都是为客户提供更高品质的产品,更好地满足客户的需求。质量有问题的话就不能满足客户的需求。在 CMMI 里边就有 " 集成流程产品开发 IPPD (Integrated Product & Process Development)" ,为什么要集成呢?就是说产品的研发不仅仅是开发团队的工作,还要把市场团队、销售团队、整个的流程、包括客户的反馈都要考虑进来、集成进来。目的是为了什么?其实就是为了更好地满足客户的需求。六西格玛里面说 DPMO (Defect Per Million Opportunities) ,百万产品里有缺陷的产品只有三个。这是为什么?就是为了减少差错,从而让客户享受非常高质量的服务。
问:SQA 等于测试?
答:测试其实只是 SQA 的一个环节, SQA 的全称是软件质量保证。在国外很多的大型的企业,比如说摩托罗拉、爱立信,他们的研发团队里面都专门有一个 QA 部门,其实他们并不是做测试工作的。 QA 部门其实是管理开发流程的执行,并专门负责制定产品开发流程。比如说 RUP 里面有一个角色,叫 Process Engineer ,过程工程师,他就属于 QA 部门,他的工作就是负责制定整个软件开发的流程。因为如果说要保证质量的话,不能只靠测试来保证。而必须在整个开发流程的各个环节都要做得很好,才能够真正地提升软件的质量。而测试只是整个开发流程最后的一个阶段。所以说一个好的流程就决定了一个软件的开发能不能按时交货,能否保证软件质量。这个流程就是由 QA 部门来制定的。 QA 部门还有另外一个职责,就是保证整个研发团队能够严格按照这个流程来运作。在项目到达每一个里程碑的时候, QA 部门的 QA 经理就会介入,对项目做一个审核,检查前一阶段的工作是否按照公司制定的流程来运作。看看该有的工件是不是都有了,该有的步骤是不是都有了。开发团队要证明给 QA 人员看。只有过了这一关, QA 部门才会同意说开发团队可以往下走,进行下一步的工作。所以严格来讲,众广义上理解, SQA 是针对整个软件开发流程的,它关心的是怎样在软件开发生命周期中来保证好软件的质量。这是一个非常大的概念。
问:SQA 在 RUP 中是如何体现的?
答:其实 RUP 整个流程都在讲 SQA 。业界常见的模型,譬如 CMM/CMMI ,六西格玛, ISO9000 , RUP ,它们做的基本上是同一件事情 -- 都是在做流程改进,都在做质量控制,但是各自的侧重点不一样。像 RUP 和 SDP 专门侧重于从软件开发的整个生命周期来保证软件质量,所以对软件开发商特别适合。而其它的模型,侧重点则在其它的环节,比如说 ISO9000 ,用在制造业比较多一些; CMM ,原来是应用在软件这个行业的,后来扩展到 CMMI ,就扩展到其它行业它也适用。但适用面越广,它拉的层次就越高,可实际操作的东西就越少。 RUP 是专门侧重于软件项目开发的。怎样来保证做好 QA 呢? RUP 里定义了一个软件生命周期模型,分成四个阶段 -- 初始阶段、细化阶段、构造阶段、交付阶段,每个阶段有不同的侧重点,通过多次的迭代,每次迭代里面都要做质量控制。
质量控制从需求开始,有很多需求分析和需求管理方面的技巧和技术方法,它们从需求方面来保证软件的质量;到了设计,就有很多成熟的设计方法,例如可视化建模,基于构件的架构设计和现在提出的模型驱动开发方法;再到实现,到测试等方面,都有很多的方法和技巧来提高软件的质量。这里面每一个环节的目的都是为了提高整个软件开发的质量。
开发过程中,什么样的问题会造成质量问题呢?其实最主要的就是沟通方面的问题,以及对系统复杂度把握程度的问题。我们逐渐发展了一些技术来帮助我们解决这些方面的问题,例如用 UML 这种标准化的语言来增强团队的沟通,用面向对象的技术来帮助加强对复杂度的控制能力。
原来这个系统很复杂,使用面向对象的方法,本身就是为了简化系统构建的复杂度。改变你看问题的角度,你对问题的把握程度就会不一样。譬如人看一个二维迷宫很容易就能找到出路,但蚂蚁在里面就走不出来,因为看问题的角度不一样。面向对象方法和可视化建模技术可以让开发人员可以更好地去把握系统,增强对系统的可控制能力,从而从这些维度上来提高和保证软件的质量。
现在有很多自动化的工具,如 IBM Rational RAD (Rational Application Developer) / RSA (Rational Software Architect) ,都是支持 MDA 的开发方法,在模型这一级进行开发,从模型直接生成代码。在开发方面我们有很多辅助工具,帮助开发人员尽量将人工做的工作、复杂的重复性的工作、不具有创造性的工作让工具来做。让人去关注他应该关注的方面,比如开发人员应该关注业务逻辑的处理,但是软件的构建方面我们是尽量让工具来降低构建细节上的难度。这样也是有助于提高质量的。
然后产品出来了,需要进行测试,有测试流程、测试规范来帮助保证质量,这是最直接的。然后还有很多的环节还会发生错误,比如配置管理、版本的管理,也需要相关的支持来保证软件的质量。所以说软件质量保证不应该只是在一个环节上,比如测试环节来保证,而应该是整个的流程,我们应该全面地去改进流程来保证质量。
问:做 SQA 这方面的人员,在沟通方面需要的什么样技巧和能力?
答:首先从大的方面说,整个团队的沟通,首先是大家要讲同样的语言。 UML 只是这种语言的一部分,我们不要狭义地理解这种沟通语言就是 UML 。它还包括采用一个什么样的流程方法,整个团队都要理解。譬如你说项目正处于 " 精化 (Elaboration)" 阶段,这个团队都要能理解这个术语。
还有就是整个组织机构内部大家采用的流程都是要一样的。举个例子来说, Rational 有很多产品,其中很多都是收购来的。不同的产品团队采用的开发方法、开发工具都是不一样的,他们到了 Rational 之后做的第一件事就是整合。这个整合一方面是说产品要整合起来(我们有 Suite 产品);同时也是针对开发团队开发方法的整合,例如 Rational 花了一两年的时间把所有产品团队统一到 RUP 和 ClearCase/ClearQuest 平台之上,这是我们的首选。实际上到了 IBM 之后也是一样, IBM 现在正在做的计划就是让所有的实验室、研发团队都要使用 IBM Rational 自己的开发工具,他们都在使用 IBM 自己的开发方法、开发平台。这就是让大家的沟通基于一个统一的基础架构 ―― 统一的软件开发平台,这也是增强沟通的一种方式。另外,讲到 SQA 的人员,在 RUP 里对应的就应该是 Process Engineer 。他的主要的职能就是定义流程,保证流程的执行,并且不断地改进流程。对他的要求就是要对流程要比较了解,有实际项目的开发经验,不然没有办法理解流程,这是技能方面;另外就是与人的沟通能力要强,跟一般的开发人员和项目经理是有区别的,沟通的能力一定要强,他要负责说服项目团队来遵循标准。
问:QA 人员与目经理和开发人员之间的关系是怎样的?
答:首先彼此之间是一个合作的关系。如果片面理解 QA 人员只是 " 过程警察 " 的话,就可能把他和其他的角色对立起来了。实际上在一个团队内部要避免这种认识。因为大家都是在一个组织架构内部的,大家的目标是一致的,就是要把公司的业务做好。所以 QA 人员的职责和任务就是帮助这个项目团队更好地进行软件的开发。既然已经定义的流程是比较适合企业的,项目就应该遵守这个流程来进行开发。如果有时候项目因为赶工,或是其它的原因违背一些流程上的规定的话,就会对软件的质量会造成一定影响,他就有责任来帮助开发团队来纠正这方面的一些错误。还有就是进度方面的问题。如果不按照流程来走的话,短期内看起来进度是快了一点,但从整个项目的周期来看,有可能是给以后的工作带来隐患,客观上肯定是延长整个开发的进度的。所以对于一些流程管理得比较好的企业,你会发现他们的 QA 部门和开发团队是相处得比较融洽的,配合是比较紧密的。在我们的客户里就看到过他们的开发团队非常感谢自己的质量控制人员,觉得他们对自己是给了很大的帮助。
QA 人员跟每一个角色的关系,如果你对应到 RUP 的话, RUP 里就定义好每一个角色是做什么工作的。 RUP 里分了 9 个规程 (discipline) ,流程工程师是在环境规程里边,项目经理是在项目管理规程里边。每一个规程其实就是一类开发活动,其中的角色和他们所产生的工件集合,是一个分类。可以把项目经理相关的工作,他所涉及到的工件,比如说软件开发计划、风险管理计划、质量保证计划都放在一起,放在这个规程里面。所以 QA 人员跟项目经理的关系就是去检查项目经理在这个岗位上所做的职责是否到位,是不是跟流程相符合。其他的角色也是一样的,譬如一个测试人员,就要看你有没有根据规定把缺陷按正确的测试流程汇报,发现缺陷之后是否能够得到改正,并作一个复审,还有回归测试的时候有没有考虑测试的完备性等问题,就是看测试人员有没有做好具体的工作。 QA 人员和整个项目团队在工作中的关系就是看每一个角色是不是很好地完成了自身角色所应该完成的开发任务。标准是什么?就是这个组织的流程,流程是保证质量很重要的一个依据。
问:QA 人员如何判断其工作效果和质量?
答:最直接就是 RUP 里的工件。可以去检查这些工件,可以根据检查的结果来判断角色是否达到了要求。既然是检查这个结果的话,就有必要涉及到统一流程和工具的问题。就是说开发团队有必要采用统一的开发方法和流程。不然的话每一个开发团队各自采用不同的开发流程,流程工程师就很难去评价,没有一个可对照的标准,没有可比性。另外,和采用的工具也有关系,就是说团队要尽量采用统一的开发平台。采用统一的开发平台,工具会帮助自动收集很多的信息。比如说我们的 Project Console 可以帮助收集很多量化的指标;现在有 Portfolio Manager ,项目组合管理平台,可以帮助了解项目进度还有项目进行过程中产生的各种结果;还有包括测试的报告等等,这些都最好有一个统一的标准。打个比方来说,现在的航空公司都会选择相同飞机制造厂商的机型,就是要降低维护的成本。因为机型比较统一的话,就比较好进行管理。在一个软件企业的话,在内部采用统一的软件开发平台也能有助于企业判断项目的情况,判断的方法也会相对比较简单,工作量会降低。
这是从 QA 的角度来看,其次从整个团队的角度来说,今天是做这个项目,明天做另外一个项目,作为企业的管理人员肯定不希望员工今天做这个项目用一个工具,明天做另外一个项目用另外的工具,这样学习成本就太高了。