需求开发与管理是软件项目中一项十分重要的工作,据调查显示在众多失败的软件项目中,由于需求原因导致的约占到45%,因此,需求工作将对软件项目
能否最终实现产生至关重要的影响。虽然如此,在项目开发工作中,很多人对需求的认识还远远不够,从本人参与或接触到的一些项目来看,小到几十万元,大到上
亿元的软件项目的需求都或多多少的存在问题,有的是开发者本身不重视原因、有的是技术原因、有的是人员组织原因、有的是沟通原因、有的是机制原因,以上种
种原因都表明做好软件需求开发是一项系统工作,而不是简单的技术工作,只有系统的了解和掌握需求的基本概念、方法、手段、评估标准、风险等相关知识,并在
实践中加以应用,才能真正做好需求的开发和管理工作。
本文将通过介绍关于软件需求的基本知识和个人在实际工作中总结的一些经验,帮助读者了解软件需求,学习需求开发的一些基本方法,避免因需求原因而导致的项目失败。
1 什么是软件需求和需求工程
1.1 软件需求的定义
在IEEE软件工程标准词汇表(1997年)中定义软件需求为:
(1)用户解决问题或达到目标所需的条件或能力。
(2)系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或能力。
(3)一种反映上面(1)或(2)所描述的条件或权能的文档说明。 实通俗的讲,“需求”就是用户的需要,它包括用户要解决的问题、达到的目标、以及实现这些目标所需要的条件,它是一个程序或系统开发工作的说明,表现形式一般为文档形式。
1.2 需求工程的定义
需
求分析的过程,也叫做需求工程和需求阶段,它包括了需求开发和需求管理两个部分。需求开发是指从情况收集、分析和评价到编写文档、评审等一系列产生需求的
活动,分为四个阶段:情况获取、分析、制订规格说明和评审。这四个阶段不一定是遵循线性顺序的,他们的活动是相互独立和反复的。需求管理是软件项目开发过
程中控制和维持需求约定的活动,它包括:变更控制、版本控制、需求跟踪、需求状态跟踪等工作。
2 需求分析的风险
由于需求分析的参与人员、业务模式、投资、时间等客观因素的影响和需求本身具有主观性和可描述性差的特点,因此,需求分析工作往往面临着一些潜在的风险。这些风险主要表现在:
(1)
用户不能正确表达自身的需求。在实际开发过程中,常常碰到用户对自己真正的需求并不是十分明确的情况,他们认为计算机是万能的,只要简单的说说自己想干什
么就是把需求说明白了,而对业务的规则、工作流程却不愿多谈,也讲不清楚。这种情况往往会增加需求分析工作难度,分析人员需要花费更多的时间和精力与用户
交流,帮助他们梳理思路,搞清用户的真实需求。
(2)业务人员配合力度不够。有的用户日常工作繁忙,他们不愿意付出更多的时间和精力向分析人员讲解业务,这样会加大分析人员的工作难度和工作量,也可能导致因业务需求不足而使系统无法使用。
(3)
用户需求的不断变更。由于需求识别不全、业务发生变化、需求本身错误、需求不清楚等原因,需求在项目的整个生命周期都可能发生变化,因此,我们要认识到,
软件开发的过程实际上是同变化做斗争的过程,需求变化是每个开发人员、项目管理人员都会遇到的问题,也是最头痛的问题,一旦发生了需求变化,就不得不修改
设计、重写代码、修改测试用例、调整项目计划等等,需求的变化就像是万恶之源,为项目的正常的进展带来不尽的麻烦。
(4)需求的完整程度。需求如何做到没有遗漏?这是一个大问题,大的系统要想穷举
需求几乎是不可能的,即使小的系统,新的需求也总会不时地冒出来。一个系统很难确定明确的范围并把所有需求一次性提出来,这会导致开发人员在项目进展中去
不断完善需求,先建立系统结构再完成需求说明,造成返工的可能性很大,会给开发人员带来挫折感,降低他们完成项目的信心。
(5)需求的细化程度。需求到底描述到多细,才算可以结束了?虽然国家标准有需求
说明的编写规范,但具体到某一个需求上,很难给出一个具体的指标,可谓仁者见仁,智者见智,并没有定论。需求越细,周期越长,可能的变化越多,对设计的限
制越严格,对需求的共性提取要求也越高,相反,需求越粗,开发人员在技术设计时不清楚的地方就越多,影响技术设计。
(6)需求描述的多义性。需求描述的多义性一方面是指不同读者对需求说明产生了不
同的理解;另一方面是指同一读者能用不同的方式来解释某个需求说明。多义性会使用户和开发人员等项目参与者产生不同的期望,也会使开发、测试人员为不同的
理解而浪费时间,带来不可避免的后果便是返工重做。
(7)忽略了用户的特点分析。分析人员往往容易忽略了系统用户的特点,系统是由不同的人使用其不同的特性,使用频繁程度有所差异,使用者受教育程度和经验水平不尽相同。如果忽略这些的话,将会导致有的用户对产品感到失望。
(8)
需求开发的时间保障。为了确保需求的正确性和完整性,项目负责人往往坚持要在需求阶段花费较多的时间,但用户和开发部门的领导却会因为项目迟迟看不到实际
成果而焦虑,他们往往会强迫项目尽快往前推进,需求开发人员也会被需求的复杂和善变折腾的筋疲力尽,他们也希望尽快结束需求阶段。
3 如何做好需求工作
需求分析是软件
项目开发中最困难的一项工作,它不仅要求分析人员具有丰富的需求分析经验和良好的专业素质,还要求分析人员具有良好的学习能力、公关能力、语言能力和组织
能力。在实际工作中分析人员要面对不同的单位、不同的部门、不同的人员、不同的文化、不同的关系、不同的管理水平等等不同的情况,面对如此纷繁复杂的环
境,如何做好需求分析工作?首先需要建立一个有效的工作机制,只有建立了工作机制,才能保证需求工作按照既定方案执行,需求开发和管理的参与者才会在一种
有序的状态下工作。其次才是充分运用工作机制和个人能力去获取问题、分析问题、编写需求文档和进行需求管理。
3.1 建立需求分析工作机制需考虑的几个因素
(1)
抓住决策者最迫切和最关心的问题,引起重视。用户方决策者对项目的关心重视程度是项目能否顺利开展的关键,决策者的真实意图也是用户方的最终需求,因此,
在开发过程中要利用一切机会了解决策者关心的问题,同时也要让他们了解项目的情况。在诸如谈判、专题汇报、协调会议、领导视察、阶段性成果演示等过程中用
简短明确的语言或文字抓住领导最关心的问题,引导他们了解和重视项目的开发,当决策者认识到项目的重要性时,需求分析工作在人力、物力、时间上就有了保
障。
(2)建立组织保障,明确的责任分工。项目开发一般都会成立相应的项目组或工程
组,目前,常见的组织形式是:产品管理组、质量与测试组、程序开发组、用户代表组和后勤保障组,各组的主要分工是:产品管理组负责确定和设置项目目标,根
据需求的优先级确定功能规范,向相关人员通报项目进展。程序管理组负责系统分析,根据软件开发标准协调日常开发工作确保及时交付开发任务,控制项目进度。
程序开发组负责按照功能规范要求交付软件系统。质量与测试组负责保证系统符合功能规范的要求,测试工作与开发工作是独立并行的。用户代表组负责代表用户方
提出需求,负责软件的用户方测试。后勤保障组负责确保项目顺利进行的后勤保障工作。
(3)建立良好的沟通环境和氛围。分析人员与用户沟通的程度关系到需求分析的质
量,因此建立一个良好的沟通氛围、处理好分析人员与用户之间的关系显得尤其重要,一般情况,用户作为投资方会有一些心理优势,希望他们的意见得到足够的重
视,分析人员应该充分的认识到这一点,做好心理准备,尽量避免与他们发生争执,因为我们的目的是帮助用户说出他们的最终需要。在沟通时分析人员应注意以下
几个方面:1)态度上要尊重对方,但不谦恭。谦恭可能会让用户一时感到满意,但对长期合作并没有好处,尤其是在发生冲突的时候,用户会习惯性地感到自己的
优势,而忽略分析人员地意见。2)分析人员要努力适应不同用户的语言表达方式。每个人都有自己的表达方式,所以优秀的分析人员应该是一个优秀的“倾听者
”,他们能很快的适应用户的语言风格,理解他们的意思。3)善于表达自己,善于提问。分析人员在开口前应该先让对方充分表达他的意思,在领会了后,自己再
说,尽量不要抢话。4)工作外的交流有助于增进理解,加强沟通。
(4)需求质量控制要制度化需求的变化是软件项目不可避免的事实,因此需求质量控
制是一项艰苦的工作,要保证该项工作的顺利实施,就必须有制度保证,这个制度可以在项目质量控制方案中制定,该方案主要是具体化、定量化的描述用户要求,
形成全面、一致、规范的软件需求分析规格说明书,明确需求分析规格说明书的工作程序和要素,规范开发活动,为后续软件设计、实现、测试、评审及验收提供依
据。在方案中要明确项目组各部门关于需求质量控制的职责,制定需求分析的工作程序,包括编制需求分析工作计划、编制《需求分析说明书》、《需求分析规格说
明书》的评审和确认、《需求分析规格说明书》修改控制、确定需求质量控制的质量记录文档规范等内容。
3.2 需求开发与管理的一些方法
需求开发是一项复杂的工作,使用的方法也很多,不同的开发方式有不同的方法,这里简单介绍一些相关的方法:
(1)绘制关联图:绘制系统关联图是用于定义系统与系统外部实体间的界限和接口的简单模型。
(2)可行性分析:在允许的成本、性能要求下,分析每项需求实施的可行性,提出需求实现相关风险,包括与其它需求的冲突,对外界因素的依赖和技术障碍。
(3)需求优先级:确定使用实例、产品特性或单项需求实现的优先级别。以优先级为基础确定产品版本将包括哪些特性或哪类需求。
(4)系统原型:当用户自身对有的需求不十分清楚时,我们可以建立一个系统原型,用户通过评价原型更好地理解所要解决的问题。。
(5)图形分析模型:绘制图形分析模型是编制软件需求规格说明重要手段。它们能帮助分析人员理清数据、业务模式、工作流程以及他们之间的关系,找出遗漏、冗余和不一致的需求。这样的模型包括数据流图、实体关系图、状态变换图、对话框图、对象类及交互作用图。
(6)数据字典:数据字典是对系统用到的所有数据项和结构的定义,以确保开发人员使用统一的数据定义。在需求阶段,数据字典至少应定义客户数据项,确保客户与开发小组是使用一致的定义和术语。
(7)质量功能调配:质量功能调配是一种高级系统技术,它将产品特性、属性与对客户的重要性联系起来。该技术提供了一种分析方法以明确哪些是客户最为关注的特性。它将需求分为三类:期望需求、普通需求、兴奋需求。
需求管理的目的就是要控制和维持需求事先约定,保证项目开发过程的一致性,使用户得到他们最终想要得产品。需求管理的方法主要包括以下一些方面:
1)确定需求变更控制过程。制定一个选择、分析和决策需求变更的过程,所有的需求变更都需遵循此过程。
2)进行需求变更影响分析。评估每项需求变更,以确定它对项目计划安排和其它需求的影响,明确与变更相关的任务并评估完成这些任务需要的工作量。通过这些分析将有助于需求变更控制部门做出更好的决策。
3)建立需求基准版本和需求控制版本文档。确定需求基准,这是项目各方对需求达成一致认识时刻的一个快照,之后的需求变更遵循变更控制过程即可。每个版本的需求规格说明都必须是独立说明,以避免将底稿和基准或新旧版本相混淆。
4)维护需求变更的历史记录。将需求变更情况写成文档,记录变更日期、原因、负责人、版本号等内容,及时通知到项目开发所涉及的人员。为了尽量减少困惑、冲突、误传,应指定专人来负责更新需求。
5)跟踪每项需求的状态。可以把每一项需求的状态属性(如已推荐的,已通过的,已实施的,或已验证的)保存在数据库中,这样可以在任何时候得到每个状态类的需求数量。
6)衡量需求稳定性。可以定期把需求数量和需求变更(添加、修改、删除)数量进行比较。过多的需求变更"是一个报警信号",意味着问题并未真正弄清楚。
4 需求分析评价标准
如何判断需求规格说明的好坏,不同的软件工程规范都有自己的一套标准,这里向大家介绍一个比较常见的NASA SEL推荐方法,它是由美国国家航空和航天局软件工程实验室开发的五大常用国际软件工程规范之一,它对软件需求过程的评价标准是:清晰、完整、一致、可测试。
(1)
清晰:目前大多数的需求分析采用的仍然是自然语言,自然语言对需求分析最大的弊病就是它的二义性,所以开发人员需要对需求分析中采用的语言做某些限制。例
如尽量采用主语+动作的简单表达方式。需求分析中的描述一定要简单,千万不要采用疑问句、修饰这些复杂的表达方式。
除了语言的二义性之外,注意不要使用行话,就是计算机术语。需求分析最重要的是和用户沟通,可是用户多半不是计算机的专业人士,如果在需求分析中使用了行
话,就会造成用户理解上的困难。
(2)完整:需求的完整性是非常重要的,如果有遗漏需求,则不得不返工,在软件开
发过程中,最糟糕的事情莫过于在软件开发接近完成时发现遗漏了一项需求。但实际情况是,需求的遗漏是常发生的事情,这不仅仅是开发人员的问题,更多发生在
用户那里。要做到需求的完整性是很艰难的一件事情,它涉及到需求分析过程的各个方面,贯穿整个过程,从最初的需求计划制定到最后的需求评审。
(3)一致:一致性是指用户需求必须和业务需求一致,功能需求必须和用户需求一致。在需求过程中,开发人员需要把一致性关系进行细化,比如用户需求不能超出预前指定的范围。严格的遵守不同层次间的一致性关系,就可以保证最后开发出来的软件系统不会偏离最初的实现目标。
(4)
可测试:一个项目的测试从什么时候开始呢?有人说是从编码完成后开始,有人说是编码的时候同时进行单元测试,编码完成后进行系统测试,这些结论都不完全正
确。实际上,测试是从需求分析过程就开始了,因为需求是测试计划的输入和参照。这就要求需求分析是可测试的,只有系统的所有需求都是可以被测试的,才能够
保证软件始终围绕着用户的需要,保证软件系统是成功的。
分享到:
相关推荐
软件工程中的系统需求分析是软件开发过程中的重要步骤,它是软件开发的基础和前提。本文档是系统需求分析说明书模板,它详细描述了任务管理系统的需求,包括编写目的、背景、定义和缩略语、参考资料、用户任务信息...
《软件工程--图书管理系统--需求分析报告》 需求分析是软件工程的重要环节,它为整个开发过程提供了清晰的指导,确保软件最终能满足用户的具体需求。本报告主要关注的是一款图书管理系统,旨在解决图书馆日常管理中...
在软件工程的开发过程中,软件需求是至关重要的第一步,它为整个项目的成功奠定了基础。软件需求分析涉及到对软件系统预期的功能、性能、约束以及用户期望的深入理解和详细描述。以下是对这一主题的详细阐述: 首先...
软件工程理论研究的目的是为了提高软件开发的质量、效率和可靠性。软件工程的理论模型包括了 software development life cycle、software design patterns、software testing 等等。 软件工程的实践应用包括了软件...
软件工程-简例-需求分析 软件工程是指在软件开发过程中,为了保证软件产品的质量、可靠性和高效性,而采取的一系列方法、技术和工具。需求分析是软件工程中的一 个重要步骤,它是指通过收集和分析用户需求,来确定...
本文档是软件工程的需求分析说明书模板,主要用于描述任务管理系统的需求信息。本文档的编写目的是为开发方和软件使用者提供明确、无二义性的需求信息,确保双方充分沟通需求,形成此文档为后续软件开发的依据。 1....
- **编写目的**:本文档旨在总结图书管理系统项目的开发经验与教训,为未来的软件工程项目提供参考与借鉴。 - **背景**:图书管理系统项目是在现代软件工程课程框架下开展的,由一个名为“2+3”的团队负责实施。该...
《图书管理系统项目开发总结报告》是对一个典型的软件工程项目——图书管理系统的全面回顾和总结。这份报告详尽地记录了项目的各个阶段,从项目启动到最终完成的整个过程,旨在为今后类似的项目提供经验和参考。 1....
软件工程需求分析是软件项目中的一种重要活动,其目的是为了确定软件的需求,确保软件满足用户的需求。图书管理系统是该文档的研究对象,该系统的目的是为了提供一个方便、有效的方式来管理图书和读者信息。 二、...
本文将深入探讨软件工程中的需求分析与需求规格说明书的相关知识点。 首先,需求分析是软件工程的关键环节,它的目标是明确并理解用户的需求,确保开发团队和客户对软件的期望达成一致。这个过程包括需求收集、需求...
软件目的需求开发与管理是软件工程中的核心环节,对于项目的成功与否起着决定性的作用。根据统计,大约45%的软件项目失败归因于需求问题。因此,深入理解和有效地管理需求至关重要。需求开发不仅涉及技术层面,还...
软件工程是一门涵盖软件开发和维护的学科,它涉及软件开发的各个方面,包括需求分析、设计、实现、测试、维护等。软件工程课后习题答案旨在帮助学生更好地理解软件工程的基本概念和原理,并掌握软件开发的技术和方法...
《图书管理系统项目开发总结报告》是对一个以软件工程方法实施的图书管理系统的全面回顾与评估。本报告将探讨项目的背景、目标、开发过程、成果、费用、进度以及开发工作的评价等多个方面,旨在总结经验,为未来的...
### 软件开发管理制度详解 #### 一、概述 软件开发管理制度是企业为了规范软件开发过程中的各项活动而制定的一系列...通过对这些规定的学习和理解,可以帮助企业更好地管理软件开发项目,提高项目的成功率和质量。
《软件工程——房产中介管理系统需求分析》 房产中介管理系统是一个旨在优化房地产交易流程,提高工作效率,减少错误并增强数据安全性的软件应用。本系统的主要目标是为艾森公寓房地产XX提供一套全面的解决方案,...
软件工程-软件开发过程 软件开发过程是软件产品开发的任务框架和规范,也可以简单的称为软件生命周期及软件过程。软件生命周期模型可以分为四种类型:顺序式、迭代式、增量式和敏捷式。 软件开发过程可以分为多个...
- **定义与目标**:软件工程是一门研究如何有效地进行软件开发、管理和维护的学科,旨在提高软件产品的质量和生产效率。 - **重要性**:随着信息技术的发展,软件在各个领域的应用日益广泛,对软件质量的要求也...