在软件项目开发过程中,风险无所不在,如何有效规避风险,尤其是需求开发过程中的风险(需求风险)。本文按着需求开发的过程提供几条建议:

  1、需求获取

  问题一:用户对于自己的需求不太清楚或工作繁忙无暇理清需求。在很多的实际开发过程中,第一种情况是用户对自己真正的需求并不十分明确,无法有效的表示他们的需求。他们认为计算机是的,只要简单地说一说自己想要得到什么样的结果行了,对于自己的业务规则、工作流程都不愿说谈。针对这种情况,其对策是:需求分析人员一定要深入用户工作场地,仔细查看用户的资料和报表,与不同层面的用户交流、沟通,且要多了解用户实际工作的场景,有条件的话,可以做一个“实习生”亲身体验用户的日常工作。站在用户的角度帮助用户分析需求。关注用户工作的每个细节,搞清用户的真实需求,以大可能减少后期地需求变更。第二种情况是业务人员配合力度不够。有的用户日常工作繁忙,他们不愿付出更多的时间和精力向分析人员讲解业务。面对这种用户,其对策是:需求分析人员改变沟通技巧,讲清楚软件需求的重要性,见缝插针,抓住关键点,向其咨询,以用例和模型的方式向其演示,达到用户和分析人员互相了解和理解。

  问题二:用户与需求分析人员缺乏有效沟通,双方误解需求。人们在交流的时候,经常会发生“答非所问,问非所求”的事情,软件用户与开发人员缺乏有效沟通方法,交流上存在障碍,用户与开发人员存在知识背景差异,都从自己的角度,使用自己的专业术语或语言表达方式来描述和理解问题,使得双方并不能够很好地软件需求达成共识。一般说来,用户不太容易从计算机的角度去理解自己的需求问题。从而导致需求描述的不一致,不规范,多义性。例如,为某一酒厂编写库房管理软件的时候,设计人员采用快速原型化开发了此软件,双方出现了误解的情况,针对“单位”,开发人员理解为公斤,但实际上库房数据中“单位”都是以吨为单位,客户认为开发人员应该理解了这个问题,实际上开发人员对于一个酒厂的出库入库数量级并不了解,结果显示大相径庭。对策:分析人员需要花更多的时间去了解系统用户的特点,多学习用户行业的专业术语,用用户看得懂的语言来表达需求的内容。其次,分析人员除了需要过硬的专业知识,还要具备较强的沟通交流能力。谦虚、诚恳地向用户学习,才能探索出用户的真正需求。如果能在用户方找到既对生产过程了解,又懂软件知识的行家来为开发人员与用户牵线架桥则是好不过的事情。

  问题三:用户的需求不断变更。由于需求识别不全、业务发生变化、需求本身错误、需求不清楚等原因,随着客户对项目越来越深刻的理解,对他过去提出的需求要求一变再变,面对这种情况:需求人员要意识,做软件像装修房子,永远可以找到需要增加的东西、需要改变的地方,“需求的变化是永恒,需求不可能是完备的”。因此我们在需求获取的时候,一方面应该跟用户讲清楚需求开发的重要性,让用户明白减少后期的需求变更的重要性,且随意的需求变更带来的风险(成本增加、进度延后等)必将由用户和开发者共同承担。另一方面也需让用户明白:开发者和用户更多的是战略合作伙伴关系,其共同的目标是:开发出适合用户需要的软件。

  2、需求分析

  问题一:主次不分需求分析人员常站在自身的角度去理解用户的需求造成主次不分。而实际上不同的系统对系统的功能与非功能性需求要求很不一样。比如,金融系统一般对系统的安全质量要求比较高。企业ERP系统一般对信息传递速度要求高一些。针对这种情况,首先需求分析人员可以借用当前的需求分析工具和图形的方式,明确用户的功能需求和非功能需求,特别注意产品性能、使用性、完整性、可靠性等非功能性需求。其次要充分考虑到哪些需求是相对固定的需求,哪些可能会产生变动的需求,哪些需求会牵一发而动全身,区分这些需求,设定用户的每项需求、特性或使用实例的优生级并安排在特定的产品版本或实现步骤中,以应付客户后期的需求变更。

  问题二:需求分析时间不够。这个问题非常普通,用户认为“我出钱你出力,当然以我的要求为准”,但实际上不合理的要求会导致项目失败,拿一个简单的例子来说明:假如1个人需要干100天时间才能把某件事情完成,为了赶进度,现在增加人数,选100个人干把这件事情做完。绝大多数人都会认为是不可能实现的。软件项目也是如此,它有一个短周期,也是说无论你如何增加资源追赶进度,都无法再缩短时间,在关键路径上增加人力、物力资源,或许还会添乱。一般需求开发工作应占全部工作量的15%。所以用户方与开发方必须达成共识留足够的时候给需求分析。

  3、需求规格说明书编写

  问题一:文档混乱,文字表述过多需求文档是需求人员对前期工作的总结。需求人员写出的文档混乱,图形连线错综复杂。首先是需要理清思路:需求的描述可以从2个方面来进行描述,一方面是对用户现行系统的描述,一方面是对系统未来的设想。

  问题二:需求文档口头达到共识,缺乏文字依据。有时候因为时间紧凑或其他原因,即使达到了一致的共识,多数的用户单位都不愿意在需求文档上签字。这种情况有可能导致后期需求不断变更,需求变更影响软件开发的进度、成本,甚至有可能使得软件开发中止。对策:需求分析人员与用户建立良好的沟通渠道,强调需求文档书面认可的重要性,期望得到用户的理解。

  【总结】

  多数软件项目都是在时间紧、人员少、项目预算有限的条件下完成的。在这些“先天不足”的条件下,如何做到项目进度不延迟、工作量不超期、费用不超支?首先是关注需求分析。“良好的开端成功了一半”,需求分析做好了,对下一步的设计阶段工作真正起到指导性作用,规避需求开发过程存在的问题,成功的软件项目指日可待。