需求的是是非非

发表于:2008-08-27来源:作者:点击数: 标签:需求是是非非
沟通是一切 需求是一个过程,一个在软件生命周期中很重要的过程。在上一篇中,我们讨论了需求的层次、需求的风险、需求的特点。而在这么多需求要素之上的要素只有一个:沟通。沟通是什么,说小了是需求过程的重要技巧,说大了是软件企业的生命线。一个项目失
沟通是一切

需求是一个过程,一个在软件生命周期中很重要的过程。在上一篇中,我们讨论了需求的层次、需求的风险、需求的特点。而在这么多需求要素之上的要素只有一个:沟通。沟通是什么,说小了是需求过程的重要技巧,说大了是软件企业的生命线。一个项目失败的原因有很多,而绝大多数都可以总结到沟通不畅。需求过程中充满了沟通:需求分析员和用户的沟通,不同的用户之间的沟通,需求分析员和需求审核人员的沟通,项目经理和需求分析员的沟通。沟通到一个什么程度,是需求成功与否的标志。

曾经和几个老同学聊天的时候说起他们去用户哪里做需求调研,用户报来一堆资料,和他们聊了半天,他们就回去开始设计、编码。我说你后面肯定吃苦头了。果不其然,项目返工的时间差不多等于整个项目的时间。这太可怕了,意味着这个项目企业极可能亏本。为什么会这样呢?项目好比一座大楼,如果设计师连大楼要盖多少层都不清楚,那你说盖出来的会是个什么东西。

《软件需求》一书中提到了一个很有意思的概念:软件客户需求义务和权利

优秀的软件产品是建立在优秀的需求基础之上的。而高质量的需求来源于客户与开发人员之间有效的交流与合作。通常,开发人员与客户或客户代理人,如市场人员间的关系反而会成为一种对立关系。双方的管理者都只想自己的利益而搁置用户提供的需求从而产生摩擦,在这种情况下,不会给双方带来一点益处。

只有当双方参与者都明白要成功自己需要什么,同时也应知道要成功合作方需要什么时,才能建立起一种合作关系。由于项目压力与日渐增,所有风险承担者有着一个共同的目标这一点容易被遗忘。其实大家都想开发出一个既能实现商业价值,又能满足用户需要,还能使开发者感到满足的优秀软件产品。

软件客户需求权利书列出了十条关于客户在项目需求工程实施中与分析人员、开发人员交流时的合法要求。每一项权利都对应着软件开发人员、分析人员的义务。而软件客户需求义务书也列出了十条关于客户在需求过程中应承担的义务。如果愿意,可以将其作为开发人员的权利书。

软件客户需求权利书

1. 要求分析人员使用符合客户语言习惯的表达。
2. 要求分析人员了解客户系统的业务及目标。
3. 要求分析人员组织需求获取期间所介绍的信息,并编写软件需求规格说明。
4. 要求开发人员对需求过程中所产生的工作结果进行解释说明。
5. 要求开发人员在整个交流过程中保持和维护一种合作的职业态度。
6. 要求开发人员对产品的实现及需求都要提供建议,拿出主意。
7. 描述产品使其具有易用、好用的特性。
8. 可以调整需求,允许重用已有的软件组件。
9. 当需要对需求进行变更时,对成本、影响、得失(trade-off)有个真实可信的评估。
10. 获得满足客户功能和质量要求的系统,并且这些要求是开发人员同意的。

软件客户需求义务书

1. 给分析人员讲解业务及说明业务方面的术语等专业问题。
2. 抽出时间清楚地说明需求并不断完善。
3. 当说明系统需求时,力求准确详细。
4. 需要时要及时对需求做出决策。
5. 要尊重开发人员的成本估算和对需求的可行性分析。
6. 对单项需求、系统特性或使用实例划分优先级。
7. 评审需求文档和原型。
8. 一旦知道要对项目需求进行变更,要马上与开发人员联系。
9. 在要求需求变更时,应遵照开发组织确定的工作过程来处理。
10. 尊重需求工程中开发人员采用的流程(过程)。

需求权利和义务规定了客户和开发者双方应该做些什么,双方共同出力,确保需求过程的有序进行。不过,大多数的软件公司一般都把“客户是上帝”这句话贯彻的很好,客户有什么样的要求,软件公司就做什么样的修改,最终损害的是客户和自己双方的利益。一次,我和一个小软件企业的技术总监聊起这方面的事情,请教他的做法。他在经历了几次销售人员随意答应客户要求的痛苦之后,决定亲自出动,在和客户接触的过程中掌握主动权,判断客户是不是一个“好”客户,再决定做不做这个软件。实施了一段时间后,发现效果非常的好,成本大幅度下降,客户也很满意。软件开发过程中软件企业和客户是一对合作者,一荣俱荣,一损俱损。要达到双方共赢的局面,只能靠充分的沟通。 需求分析和需求管理

需求的过程包括了两个过程,需求管理和需求分析。如同一个公司开展业务离不开管理一样,脱离了需求管理的需求过程很难做到顺利的完成需求过程。当然,并不是所有的软件公司都没有需求管理,例如安排需求的时间也是需求管理的一方面,大多数的软件公司都没有一个科学的、

任何活动都离不开管理,需求过程也不例外。需求过程的活动分为需求管理和需求分析两种。大多数人说不清楚需求管理和需求分析的差别,但是他们在进行需求过程的时候已经不知不觉的在开展需求管理和需求分析两种活动了。这种行为就有点像一些小企业主,缺乏科学的、系统的管理知识,但你却不能说他不懂管理,因为他有大量的实践经验。同样的,一些不够成熟的软件企业在进行需求分析的时候,主要还是靠经验,并没有一个经过验证的方法。 需求分析活动包括对一个软件项目需求的获取、分析、规格说明及验证。典型需求分析的结果是软件需求规格说明(System Requirements Specifications)及相关分析模型。经评审批准,这些文档就定义了开发工作的需求基线(baseline)。这个基线在客户和开发人员之间就构筑了计划产品功能需求和非功能需求的一个约定(agreement)。工程项目可能会有其它的约定,例如可交付性、约束条件、进度安排、预算及合同约定等。但这些并不是需求过程主要考虑的因素。

需求约定是需求开发和需求管理之间的桥梁,需求管理包括在工程进展过程中维持需求约定集成性和精确性的所有活动,如图所示。需求管理强调:

1、控制对需求基线的变动。
2、保持项目计划与需求一致。
3、控制单个需求和需求文档的版本情况。
4、管理需求和联系链之间的联系或管理单个需求和其它项目可交付品之间的依赖关系。
5、跟踪基线中需求的状态。

和任何的管理活动一样,需求管理的目的也是为了确保需求分析活动按照既定方针执行。 CMM

CMM(capability Maturity Model)过程成熟度模型,这个概念是由位于宾夕法尼亚洲匹兹堡市的卡内基梅隆大学所属的软件工程研究所提出的。CMM是在软件开发机构中被广泛地用来指导过程改进工作的模型。该方法描述了软件处理能力的五个成熟级别。处于一级的组织典型地以非正式的方式管理项目进度,要获得成功,主要依靠天才从业者和管理者的英雄史诗般的奋斗。处于更高成熟度级别的组织把具有创造性、训练有素的员工同软件工程和项目管理过程结合起来,将持续不断地获得成功。 过程能力成熟度模型对需求管理是一个有用的指导。为达到软件过程能力成熟度模型的第二级,组织必须具有在软件开发与管理的六个关键过程域(key process areas,KPA)以展示达到目标的能力。需求管理是其中之一,它的目标如下:

1) 把软件需求建立一个基线供软件工程和管理使用。
2) 软件计划,产品和活动同软件需求保持一致。

需求管理的关键过程领域不涉及收集和分析项目需求。而是假定已收集了软件需求或已由更高一级的系统给定了需求。一旦需求到手且文档化了,软件开发团队和有关的团队(例如质量保证测试)需要评审文档。发现问题应与客户或其它需求源协商解决,软件开发计划是基于已确认的需求。 开发团队在向客户、市场部或经理们作出承诺(commitment)之前,应该确认需求和确认约束条件、风险、偶然因素、假定条件。也许不得不面对由于技术因素或进度原因而不现实的需求作出承诺。但是,决不要承诺任何无法实现的事。

原文转自:http://www.ltesting.net