我们应当怎样做需求分析
软件需求分析就是把软件计划期间建立的软件的可行性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素。需求分析是软件定义阶段中的最后一步,是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。
开发软件系统最为困难的部分就是要准确说明开发什么。最为困难的概念性工作便是要编写出详细的技术需求,这包括所有面向用户、面向机器和其它软件系统的接口。如果做错,这将是会最终给系统带来极大损害的一部分,并且以后再对它进行修改也极为困难。目前,国内产品的庞杂,一家企业可能有几个系统并立运行,它们之间的接口是系统开发人员最头痛的问题。对于商业最终用户应用程序,企业信息系统和软件作为一个大系统的一部分的产品是显而易见的。
软件一般是用来解决现实中的具体的业务问题的,软件需求分析师的工作就是要发现出现实中的业务问题并针对问题采取有效的解决方案,并将解决方案分解成更小的业务功能让软件开发人员去实现这些功能,最后通过对已经实现软件的验证确保问题得到解决。软件业务分析师必须具备很强的自学能力:这点要求非常重要,因为软件分析师会面对不同的业务领域(有时是陌生的领域),需要用极高的效率去理解和掌握领域知识,并能发现特定业务领域的核心业务问题点在哪里。
关键的问题是一定要编写需求文件。我原来目睹过一个项目中途更换了所有的研发者,客户被迫和新的需求分析者坐到一起。系统的分析人员说:“我们想和你谈谈你的需求。”客户的第一反应便是:“我已将我的需求都告诉你们前任了,目前我要的就是给我编一个系统”。而实际上,需求并未编写成文件,因此新的分析人员不得不从头做起。所以如果只有一堆邮件、会谈记录或一些零碎的未整理的对话,你就确信你已明白用户的需求,那完全是自欺欺人。
需求的另外一种定义认为需求是“用户所需要的并能触发一个程式或系统研发工作的说明”。有些需求分析专家拓展了这个概念:“从系统外部能发现系统所具有的满足于用户的特点、功能及属性等”。这些定义强调的是产品是什么样的,而并非产品是怎样设计、构造的。而下面的定义则从用户需要进一步转移到了系统特性:
需求是指明必须实现什么的规格说明。他描述了系统的行为、特性或属性,是在研发过程中对系统的约束。
从上面这些不同形式的定义不难发现:并没有一个清晰、毫无二义性的“需求”术语存在,真正的“需求”实际上在人们的脑海中,这个人们主要是指客户,但一般情况下,用户并不能描述自己的需要,只就需要系统分析人员根据用户的自己语言的描述整理出相关的需要再进一步和客户核对。系统分析员和客户需要确保所有项目风险承担者在描述需求的那些名词的理解上务必达成共识。
软件需求的定义:
(1)用户解决问题或达到目标所需的条件或能力。
(2)系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或能力。
(3)一种反映上面(1)或(2)所描述的条件或权能的文档说明。
软件需求分析实际上是与客户间交流过程完成的目标。要求我们组织适当的参与人员进行交流活动。需求分析是一个综合团队的工作,一般我们必须有商务活动人员,项目管理人员,设计技术人员等参加,而且要求组织人员必须明确负责范围,以及明确工作目标,保证实施的有效性。