需求研发和管理是软件项目中一项十分重要的工作,据调查显示在众多失败的软件项目中,由于需求原因导致的约占到45%,因此,需求工作将对软件项目能否最终实现产生至关重要的影响。虽然如此,在项目研发工作中,非常多人对需求的认识还远远不够,从本人参和或接触到的一些项目来看,小到几十万元,大到上亿元的软件项目的需求都或多多少的存在问题,有的是研发者本身不重视原因、有的是技术原因、有的是人员组织原因、有的是沟通原因、有的是机制原因,以上种种原因都表明做好软件需求研发是一项系统工作,而不是简单的技术工作,只有系统的了解和掌控需求的基本概念、方法、手段、评估标准、风险等相关知识,并在实践中加以应用,才能真正做好需求的研发和管理工作。
本文将通过介绍关于软件需求的基本知识和个人在实际工作中总结的一些经验,帮助读者了解软件需求,学习需求研发的一些基本方法,避免因需求原因而导致的项目失败。
1 什么是软件需求和需求工程
1.1 软件需求的定义
在IEEE软件工程标准词汇表(1997年)中定义软件需求为:
(1)用户解决问题或达到目标所需的条件或能力。
(2)系统或系统部件要满足合同、标准、规范或其他正式规定文件所需具有的条件或能力。
(3)一种反映上面(1)或(2)所描述的条件或权能的文件说明。 实通俗的讲,“需求”就是用户的需要,他包括用户要解决的问题、达到的目标、及实现这些目标所需要的条件,他是个程式或系统研发工作的说明,表现形式一般为文件形式。
1.2 需求工作的定义
需求分析的过程,也叫做需求工程和需求阶段,他包括了需求研发和需求管理两个部分。需求研发是指从情况收集、分析和评价到编写文件、评审等一系列产生需求的活动,分为四个阶段:情况获取、分析、制订规格说明和评审。这四个阶段不一定是遵循线性顺序的,他们的活动是相互独立和反复的。需求管理是软件项目研发过程中控制和维持需求约定的活动,他包括:变更控制、版本控制、需求跟踪、需求状态跟踪等工作。
2 需求分析的风险
由于需求分析的参和人员、业务模式、投资、时间等客观因素的影响和需求本身具有主观性和可描述性差的特点,因此,需求分析工作往往面临着一些潜在的风险。这些风险主要表目前:
(1)用户不能正确表达自身的需求。在实际研发过程中,常常碰到用户对自己真正的需求并不是十分明确的情况,他们认为计算机是万能的,只要简单的说说自己想干什么就是把需求说明白了,而对业务的规则、工作流程却不愿多谈,也讲不清晰。这种情况往往会增加需求分析工作难度,分析人员需要花费更多的时间和精力和用户交流,帮助他们梳理思路,搞清用户的真实需求。
(2)业务人员配合力度不够。有的用户日常工作繁忙,他们不愿意付出更多的时间和精力向分析人员讲解业务,这样会加大分析人员的工作难度和工作量,也可能导致因业务需求不足而使系统无法使用。
(3)用户需求的不断变更。由于需求识别不全、业务发生变化、需求本身错误、需求不清晰等原因,需求在项目的整个生命周期都可能发生变化,因此,我们要认识到,软件研发的过程实际上是同变化做斗争的过程,需求变化是每个研发人员、项目管理人员都会遇见的问题,也是最头痛的问题,一旦发生了需求变化,就不得不修改设计、重写代码、修改测试用例、调整项目计划等等,需求的变化就像是万恶之源,为项目的正常的进展带来不尽的麻烦。
(4)需求的完整程度。需求怎么做到没有遗漏?这是个大问题,大的系统要想穷举需求几乎是不可能的,即使小的系统,新的需求也总会不时地冒出来。