问: 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)" 阶段,这个团队都要能理解这个术语。