摘要:需求开发的质量严重影响着软件产品的质量。而许多组织的需求质量较大程度依赖于需求开发人员的经验和能力,缺少对需求调研方法的指导。文章描述了需求调研准备以及需求筛选的方法,为需求开发人员提供了参考。
关键词:需求开发;镀金需求;需求质量
一、前言
软件企业日益关注到产品质量对项目成本及时间等方面的巨大影响,逐渐强调软件开发过程中的质量管理体系的建立。戴明的质量观点是“质量必须从客户的观点出发加以考虑”以及“质量是从客户的观点出发加强到产品上的东西”;Crosby认为质量是“与需求的一致性”。根据两者的观点,对于软件产品而言,质量就是对客户需求的满足情况。
然而客户需求不等同于“客户认为他们需要的”。Young对于需求的定义是“为了使系统能为用户提供实用价值而对其必须的属性、能力及特征的定义”。在现实中,需求分析人员经常遇到的挑战之一就是客户对于真正的需求并不了解,无法清晰描述真正的需求,进而导致了需求人员对用户真正意图的误解以及加入了“镀金需求”,最终造成了项目的范围频繁变更,成本及工期急剧增加。
本文的目的在于探索提高软件需求开发质量的方法,针对如何进行调研准备及筛选需求提出相关看法,为需求分析人员提供参考。
二、确定项目背景范围
既然软件质量关注产品与客户需求的一致性,在深入了解客户需求之前,需求分析人员应该明确“谁是客户”以及与客户有关的人员。在确定了客户及相关人员后,需要尝试了解其目的及偏好,为项目具体的需求平衡取舍提供决策基础。最后,确定最终产品的范围并在整个项目期间进行正式的管理。
(一)涉众(Stakeholder)
所谓客户,既有责任验收产品或支付费用的一群人(个人、项目或组织)。需求分析人员总是以“客户”称呼所有服务对象,从而容易忽略了客户内部的关系。实际上在许多组织(特别是大型组织),存在着组织内部由于相互独立,不能实现协同化管理,互相竞争,另外纵向和横向沟通渠道不畅,资源和信息不流通等问题。需求人员可以首先了解组织架构,并且根据以往的经验判断客户内部的矛盾及联系,之后再通过进一步调研了解客户个人的习惯、喜好及性格。客户通常由于不了解相关技术及其需求,在需求调研时随意地提出各种需求,而在产品开发阶段也可能随时变更需求,这对产品的稳定性以及项目成本常常造成严重的影响。因此,了解客户内部关系及个人特征,有利于需求分析人员在随后的需求调研中正确了解客户需求并做出正确地需求决策。
除了管理客户以外,需求分析人员还需要关注与项目及产品相关的组织及个人。通常我们将受到一项任务所造成结果影响,或需要从某种程度上对其负责的个人或团体成为涉众(Stakeholder)。我们可以借助以下的层次划分了解产品相关的涉众:
1、操作/运营领域。该领域的涉众是直接经常使用产品的内部人员,例如网站管理系统的维护人员。在需求调研时需要关注其能力及操作习惯,例如文化水平以及是否有相似系统的操作经历等。
2、业务领域。通常情况下,业务领域的涉众为系统提供了高层次的业务需求,是系统的功能受益人。需求调研时应该关注涉众的目的以及对产品投资回报率的期望。
3、外部环境。许多产品的服务对象不只是组织内部,可能涉及外部的使用者,例如银行ATM。由于外部使用者的不确定性,在需求调研时需要对外部人员进行恰当地分类,以获得有效的需求。
(二)目标(Goal)
确定了涉众后,我们需要确定他们的目标。可以将目标理解为涉众为什么需要这个产品、希望从这个产品获得何好处、期望产品以什么方式运行等。由于涉众对于目标的理解各不相同,并且以不同的方式表达,所以需求分析人员可以通过统一的方法记录各涉众的目的。
James Robertson将其成为PAM方法,即P(Purpose):对于系统的目的或高层需求。A(Advantage):系统对于组织或个人的好处。M(Measurement):尽可能地量化产品的效果。
例如1个电话客服管理系统的PAM可能是:P——通过系统管理客服人员的工作情况;A——降低客户投诉率;M——使客户投诉率降低20%。
对于涉众目标的准确理解同时有助于我们对需求的平衡及取舍。
(三)范围(Scope)
对于软件开发而言,范围是应该注意的最重要的变量。产品范围实际上包含两层意思,即产品的功能范围及产品与外部的界限。
1、产品功能范围。产品的功能范围可以看作高层次的功能性需求。对于功能性的需求,通常的做法是通过建立高层次的产品分解结构(Product Breakdown Structure),与涉众就产品范围达成共识。但是由于仅限定了产品需要完成的工作范围,未能阻止需求的逐渐蔓延,容易造成涉众在产品开发的阶段不断增加新的特性,导致镀金需求的产生。所以,准确说明产品不完成哪些功能与需要完成哪些功能同样重要,为需求的稳定提供了一定保障。产品功能范围实际对于项目范围有巨大的影响。而项目的范围、成本、进度以及质量是紧密相联的变量,确定其中的3个变量后,第4个变量的区间也随之确定。同时产品范围也是一个变化很大的变量,特别是在客户不成熟以及产品规模较大的情况下。因此,当产品范围难以确定时,可以考虑与涉众限定产品开发的成本、进度以及质量,而令范围成为在开发过程中根据实际情况“活动”的变量。
2、产品与外部界限。产品一般通过接口与外部系统进行交互。使一个系统与另外一个系统配合是一项耗时而且不可预测的工程。开发人员可能不知道实现一个特定的接口将有多么的困难,直到他们真正开始着手去做。如果我们在使用别人定义的接口,它可能不能准确地完成我们的目标,或者不像我们所想象的;如果我们自己设计接口,我们依赖其他系统正确地实现它。因此,我们需要确定每一个接口是完全属于内部的还是外部的,或者还未明确所属的。
在接口所有权选择上,我们通常面临着一次权衡。自己定义接口时,能够确保接口能够满足内部的需要,并且能够以最好的方式支持系统的工作,但是需要负责完成所有困难的接口定义工作,并且要向外部人员解释使用方法。而把定义接口工作交由外部完成时,可能不得不使用质量低下的接口,并且面临没有文档和对接口熟悉的技术人员的困境。更重要的是,当外部提供的接口发生变更时,内部系统不得不随之调整,而且外部对内部提出的接口变更请求反应迟缓。
(四)SGS循环
实际工作中,很难一次性准确地发现所有的涉众,获得所有涉众的目标并确定产品范围。更多的情况是,在确定一部分涉众后,通过了解其目标及对产品范围的理解,发现更多的涉众,进而获得更多的目标及产品范围。另外,在目标及范围定义时,可能遇到各涉众理解不一致,产生矛盾的情况,这时需要需求开发人员在涉众间进行协调与沟通,这个阶段投入的工作是有价值的,避免系统开发后期,由于频繁变更引起更大的成本投入。
三、需求筛选
通过各种方式了解客户需求后,需求人员会整理相关信息形成涉众的原始需求。但是原始需求不等同于产品开发的目标需求,并不是涉众提出的所有需求都要满足,因为可能各需求间存在矛盾,某些需求并不是涉众真正需要的。CMMI for Development Version 1.2模型中的需求开发过程域中,SP 3.3分析需求中强调了“确保需求的必要性”。某些组织使用需求优先级的方法实现需求筛选。根据需求开发人员以及(或者)涉众对需求优先级的判断,将所有需求根据需求优先级进行排序。这种方法主观性较大,并且可能由于需求开发人员及涉众考虑问题的角度不同,导致对优先级无法达到一致。
我们可以使用客户价值的方法对需求进行筛选。即对于每一个需求,分析两个参数:实现该需求后客户的满意程度以及不实现该需求后客户的不满意程度。这种方法降低了主观性对判断的影响,并且促使需求开发人员及涉众对需求必要性的思考,避免了镀金需求在最终需求出现的可能性。
四、结论
越来越多的组织认识到了需求质量对软件产品质量的影响,尝试通过需求评审等方法提高质量。但是在需求的源头——需求开发方面没有提供有效的方法,更多地依赖个人的能力及经验。本文建议在需求调研前期使用SGS循环的方法明确产品的涉众、目标及范围,确保需求人员对产品的总体情况获得清晰的了解,为具体的需求调研提供决策所需的重要信息。另外,还建议组织采用客户价值的方法对涉众的原始需求进行分析,确保所有的需求对于涉众都是有价值和必要的,避免开发团队为不必要的功能花费成本。
(作者单位:广州赛宝认证中心)