|
需求分析是软件开发过程中重要的一步,是开发前期最关键的环节,通过需求分析可以明确项目的目标。有关研究表明,在失败的软件开发项目中,“需求错误”原因占据了很大的比重。产生“需求错误”的主要原因有以下三个。
|
|
|
①需求不明确。由于软件的抽象性,在软件开发出来以前,用户和开发者都只能通过想象描述需求,这种想象通常是难以表达清楚的。
|
|
|
②需求变更。由于在初始阶段的认识不清,随着时间的推移,用户和开发者都会不断产生新的想法,导致需求经常变动。
|
|
|
③用户和开发者的理解不同。由于用户比较关注自身的业务,对软件开发不一定很了解,而开发者又很可能对业务不熟悉,因此他们时常会对同一个问题产生不同的理解。
|
|
|
|
在计算机出现的初期,只有专业人员使用计算机,当时程序的编写者和使用者通常是相同的。现在,软件开发已经成为一个独立的产业,软件的开发者和使用者通常是完全不同的人员,需求分析的根本任务就是明确项目的目标,也就是准确地回答“系统要做什么”这个问题。需要强调的是,需求本身与系统如何实现是完全无关的。
|
|
|
需求分析的理想目标是制定用户满意和开发者能够实现且双方理解一致的需求,需求以需求规格说明的形式表示。
|
|
|
需求问题对于开发者和用户同样重要。之所以很多软件项目因需求方面的问题而失败,原因就在于用户在见到真正的软件之前很难说清楚自己的需求;而作为开发者就更加难以把握。另外,用户和开发方还需要明确开发目标系统对其他资源的需求情况,如资金、技术、人员等方面的投入。
|
|
|
|
需求分析的过程包括需求的获取、分析、编写文档、管理等一系列活动。
|
|
|
|
需求获取是需求分析阶段的基本活动。软件的需求来源可以是多方面的,这取决于待开发产品的性质和开发环境。主要的需求来源有以下几种。
|
|
|
①有潜在需要的用户。用户的需要是最根本的需求,要明确用户对软件产品的需求,最有效的方法就是直接与用户沟通和交流。
|
|
|
②当前同类产品。同类软件往往具有相当好的参考价值,从某种意义上讲,同类产品可以作为原型进行研究。
|
|
|
③原有系统的缺陷报告或改进性要求。对已有系统的意见是用户实践的成果,是相当有价值的需求来源。
|
|
|
④市场调查和用户问卷调查。通过大面积的调查可以获得相当有代表性的数据。
|
|
|
⑤分析用户的工作内容和工作方式。直接观察用户的工作,从用户的角度设身处地地分析新的软件系统究竟应该具有哪些功能。
|
|
|
需求获取的关键是同用户之间的交流,它也是非常容易出现误解和歧义的环节。需求获取的成功完全依赖于客户和开发者之间的合作效果。
|
|
|
|
在需求获取的基础上需要进行问题分析和方案的综合。由于需求获取来源的多样性,最初的需求表达往往是不规范的,描述问题的形式和角度各不相同。并不是用户提出的所有需求都是合理的,有些用户需求甚至是矛盾的,这就需要有经验的分析人员用科学的方法找出系统各元素之间的联系,逐步细化所有的软件功能、接口特性和设计上的限制等。通过分析确定满足功能要求的程度,根据功能需求、性能需求、运行环境需求等删除其不合理的部分,增加其需要的部分,最终给出目标系统的逻辑定义。
|
|
|
需求分析是一个需要经过多次反复的工作阶段。在这个阶段可以使用前面介绍过的原型法,实践已经证明,原型法是需求分析的有力工具。分析过程应该得到正确、完整和清晰的系统需求。在需求分析过程中,通常会用到系统结构层次图、数据流图、输入/处理/输出图、数据字典等描述系统的工具。
|
|
|
需求分析的基本原则是自顶向下地逐层分解问题。在纵向上将系统划分为若干层次,在同一层次上再横向分解为若干部分,将复杂问题分解为多个较易理解的部分,确定各部分之间的接口,从而实现整体功能。
|
|
|
|
需求文档是需求过程阶段的成果体现形式,软件工程特别强调文档的重要性。需求文档是客户了解未来产品的依据,是开发者开发工具的基本指导,也是产品研制出来以后判定其是否符合要求的基准,还是编写各种客户文档、培训材料的基础。可以看出,需求文档将在整个软件开发中起指导性作用。
|
|
|
根据需求分析阶段的基本任务,需求文档包括以下四种主要资料。
|
|
|
①系统规格说明。主要描述目标系统的概述、功能要求、性能要求、运行环境要求和其他要求(如可使用性、安全保密性、可维护性、可移植性等)以及将来可能提出的要求。
|
|
|
②数据要求。主要包括在需求分析时建立的数据字典以及数据结构的描绘,还包括存储信息(数据库或普通文件)的分析结果。
|
|
|
③用户系统描述。这个文档从用户使用系统的角度描述系统,相当于一份初步的用户手册,使得未来的用户能从使用者的角度检查该目标系统,帮助他们判断这个系统是否符合他们的需要。
|
|
|
④修正的开发计划。经过需求分析阶段的工作,开发者对目标系统有了更深入、更具体的认识,能够对系统的成本和进度做出更准确的估计,在此基础上应该对开发成本计划、资源使用计划、进度计划等进行细化和修正。
|
|
|