《如何做好需求分析》由会员分享,可在线阅读,更多相关《如何做好需求分析(8页珍藏版)》请在金锄头文库上搜索。
1、需求分析是指理解用户需求,就软件功能与客户达成一致,估计软件风险和评 估项目代价,最终形成开发计划的一个复杂过程。那么如何做好软件需求分析? 查看专题:http:/ (这个和我在微软体验到的又不太一样,微软的需求分析大多是市场人员和用 户协助小组的人去评估用户的接受程度,这一点也可以理解,因为公司的性质 有根本差别)在这个过程中,用户的确是处在主导地位,需求分析工程师和项 目经理要负责整理用户需求,为之后的软件设计打下基础。需求分析阶段结束 后,要求得到:1.SRS 文档(System Requirement Specification); 2.DRM 文档;3.Acceptance Plan
2、.从广义上理解:需求分析包括需求的获取、分析、规格说明、变更、验证、 管理的一系列需求工程。狭义上理解:需求分析指需求的分析、定义过程。 一、为什么要需求分析需求分析就是分析软件用户的需求是什么.如果投入大量的人力,物力, 财 力,时间, 开发出的软件却没人要,那所有的投入都是徒劳.如果费了很大的精力, 开发一个软件,最后却不满足用户的要求, 从而要重新开发过,这种返工是让人痛 心疾首的.(相信大家都有体会)比如,用户需要一个 for linux 的软件,而你在软 件开发前期忽略了软件的运行环境, 忘了向用户询问这个问题, 而想当然的认为 是开发 for windows 的软件,当你千辛万苦地
3、开发完成向用户提交时才发现出 了问题, 那时候你是欲哭无泪了, 痕不得找块豆腐一头撞死.需求分析之所以重要,就因为他具有决策性, 方向性,策略性的作用,他在软 件开发的过程中具有举足轻重的地位. 大家一定要对需求分析具有足够的重视. 在一个大型软件系统的开发中,他的作用要远远大于程序设计. 二、需求分析的任务简言之,需求分析的任务就是解决“ 做什么“ 的问题,就是要全面地理解用户 的各项要求,并准确地表达所接受的用户需求. 三、需求分析的过程需求分析阶段的工作,可以分为四个方面: 问题识别,分析与综合, 制订规格 说明,评审.问题识别就是从系统角度来理解软件,确定对所开发系统的综合要求, 并提
4、出这些需 求的实现条件,以及需求应该达到的标准. 这些需求包括:功能需求( 做什么), 性 能需求(要达到什么指标), 环境需求(如机型, 操作系统等),可靠性需求(不发生故障的概率),安全保密需求, 用户界面需求, 资源使用需求(软件运行是所需的内存, CPU 等), 软件成本消耗与开发进度需求, 预先估计以后系统可能达到的目标.分析与综合逐步细化所有的软件功能,找出系统各元素间的联系, 接口特性和设计上的 限制,分析他们是否满足需求, 剔除不合理部分, 增加需要部分.最后, 综合成系统 的解决方案,给出要开发的系统的详细逻辑模型( 做什么的模型).制订规格说明书即编制文档,描述需求的文档称
5、为软件需求规格说明书. 请注意,需求分析阶 段的成果是需求规格说明书(好象软考曾经考过这个问题),向下一阶段提交.评审对功能的正确性,完整性和清晰性, 以及其它需求给予评价.评审通过才可进 行下一阶段的工作,否则重新进行需求分析。 四、需求分析的方法需求分析的方法有很多.这里只强调原型化方法, 其它的方法如: 结构化方法, 动 态分析法等(个人认为, 对初学者不必深究这些方法,实际上我也从来没用过这些 方法)在此不讨论.原型化方法是十分重要的(是软考等常考的知识点).原型就是软件的一个早 期可运行的版本,它实现了目标系统的某些或全部功能.原型化方法就是尽可能快地建造一个粗糙的系统,这系统实现了
6、目标系统 的某些或全部功能,但是这个系统可能在可靠性, 界面的友好性或其他方面上存 在缺陷. 建造这样一个系统的目的是为了考察某一方面的可行性, 如算法的可行 性,技术的可行性, 或考察是否满足用户的需求等.如,为了考察是否满足用户的要 求,可以用某些软件工具快速的建造一个原型系统, 这个系统只是一个界面,然后 听取用户的意见,改进这个原型. 以后的目标系统就在原型系统的基础上开发.原型主要有三种类型(软考考过):探索型,实验型,进化型.探索型:目的是要 弄清楚对目标系统的要求,确定所希望的特性, 并探讨多种方案的可行性.实验型: 用于大规模开发和实现前,考核方案是否合适, 规格说明是否可靠.
7、进化型:目的不 在于改进规格说明,而是将系统建造得易于变化, 在改进原型的过程中,逐步将原 型进化成最终系统。在使用原型化方法是有两种不同的策略:废弃策略,追加策略.废弃策略:先 建造一个功能简单而且质量要求不高的模型系统,针对这个系统反复进行修改, 形成比较好的思想,据此设计出较完整, 准确, 一致,可靠的最终系统. 系统构造完 成后,原来的模型系统就被废弃不用. 探索型和实验型属于这种策略。 追加策略:先构造一个功能简单而且质量要求不高的模型系统,作为最终 系统的核心,然后通过不断地扩充修改, 逐步追加新要求,发展成为最终系统。 进化型属于这种策略. 五、需求分析的 20 条法则客户与开发
8、人员交流需要好的方法。下面建议 20 条法则,客户和开发人 员可以通过评审以下内容并达成共识。如果遇到分歧,将通过协商达成对各自 义务的相互理解,以便减少以后的磨擦(如一方要求而另一方不愿意或不能够 满足要求)。 1、 分析人员要使用符合客户语言习惯的表达 需求讨论集中于业务需求和任务,因此要使用术语。客户应将有关术语 (例如:采价、印花商品等采购术语)教给分析人员,而客户不一定要懂得计 算机行业的术语。 2、分析人员要了解客户的业务及目标 只有分析人员更好地了解客户的业务,才能使产品更好地满足需要。这将 有助于开发人员设计出真正满足客户需要并达到期望的优秀软件。为帮助开发 和分析人员,客户可
9、以考虑邀请他们观察自己的工作流程。如果是切换新系统, 那么开发和分析人员应使用一下目前的旧系统,有利于他们明白目前系统是怎 样工作的,其流程情况以及可供改进之处。 3、 分析人员必须编写软件需求报告 分析人员应将从客户那里获得的所有信息进行整理,以区分业务需求及规 范、功能需求、质量目标、解决方法和其他信息。通过这些分析,客户就能得 到一份“需求分析报告” ,此份报告使开发人员和客户之间针对要开发的产品内 容达成协议。报告应以一种客户认为易于翻阅和理解的方式组织编写。客户要 评审此报告,以确保报告内容准确完整地表达其需求。一份高质量的“需求分析 报告”有助于开发人员开发出真正需要的产品。 4、
10、 要求得到需求工作结果的解释说明 分析人员可能采用了多种图表作为文字性“需求分析报告”的补充说明,因 为工作图表能很清晰地描述出系统行为的某些方面,所以报告中各种图表有着 极高的价值;虽然它们不太难于理解,但是客户可能对此并不熟悉,因此客户 可以要求分析人员解释说明每个图表的作用、符号的意义和需求开发工作的结 果,以及怎样检查图表有无错误及不一致等。 5、 开发人员要尊重客户的意见 如果用户与开发人员之间不能相互理解,那关于需求的讨论将会有障碍。 共同合作能使大家“兼听则明” 。参与需求开发过程的客户有权要求开发人员尊 重他们并珍惜他们为项目成功所付出的时间,同样,客户也应对开发人员为项 目成
11、功这一共同目标所做出的努力表示尊重。 6、 开发人员要对需求及产品实施提出建议和解决方案 通常客户所说的“ 需求”已经是一种实际可行的实施方案,分析人员应尽力 从这些解决方法中了解真正的业务需求,同时还应找出已有系统与当前业务不 符之处,以确保产品不会无效或低效;在彻底弄清业务领域内的事情后,分析 人员就能提出相当好的改进方法,有经验且有创造力的分析人员还能提出增加 一些用户没有发现的很有价值的系统特性。 7、 描述产品使用特性 客户可以要求分析人员在实现功能需求的同时还注意软件的易用性,因为 这些易用特性或质量属性能使客户更准确、高效地完成任务。例如:客户有时 要求产品要“界面友好” 或“健
12、壮”或“ 高效率” ,但对于开发人员来讲,太主观了 并无实用价值。正确的做法是,分析人员通过询问和调查了解客户所要的“友好、 健壮、高效所包含的具体特性,具体分析哪些特性对哪些特性有负面影响,在 性能代价和所提出解决方案的预期利益之间做出权衡,以确保做出合理的取舍。8、 允许重用已有的软件组件 需求通常有一定灵活性,分析人员可能发现已有的某个软件组件与客户 描述的需求很相符,在这种情况下,分析人员应提供一些修改需求的选择以便 开发人员能够降低新系统的开发成本和节省时间,而不必严格按原有的需求说 明开发。所以说,如果想在产品中使用一些已有的商业常用组件,而它们并不 完全适合您所需的特性,这时一定
13、程度上的需求灵活性就显得极为重要了。 9、 要求对变更的代价提供真实可靠的评估 有时,人们面临更好、也更昂贵的方案时,会做出不同的选择。而这时, 对需求变更的影响进行评估从而对业务决策提供帮助,是十分必要的。所以, 客户有权利要求开发人员通过分析给出一个真实可信的评估,包括影响、成本 和得失等。开发人员不能由于不想实施变更而随意夸大评估成本。 10、 获得满足客户功能和质量要求的系统 每个人都希望项目成功,但这不仅要求客户要清晰地告知开发人员关于系 统“做什么”所需的所有信息,而且还要求开发人员能通过交流了解清楚取舍与 限制,一定要明确说明您的假设和潜在的期望,否则,开发人员开发出的产品 很可
14、能无法让您满意。 11、 给分析人员讲解您的业务 分析人员要依靠客户讲解业务概念及术语,但客户不能指望分析人员会成 为该领域的专家,而只能让他们明白您的问题和目标;不要期望分析人员能把 握客户业务的细微潜在之处,他们可能不知道那些对于客户来说理所当然的“常 识”。 12、 抽出时间清楚地说明并完善需求 客户很忙,但无论如何客户有必要抽出时间参与“头脑高峰会议”的讨论, 接受采访或其他获取需求的活动。有些分析人员可能先明白了您的观点,而过 后发现还需要您的讲解,这时请耐心对待一些需求和需求的精化工作过程中的反复,因为它是人们交流中很自然的现象,何况这对软件产品的成功极为重要。13、 准确而详细地
15、说明需求 编写一份清晰、准确的需求文档是很困难的。由于处理细节问题不但烦人 而且耗时,因此很容易留下模糊不清的需求。但是在开发过程中,必须解决这 种模糊性和不准确性,而客户恰恰是为解决这些问题作出决定的最佳人选,否 则,就只好靠开发人员去正确猜测了。 在需求分析中暂时加上“待定”标志是个方法。用该标志可指明哪些是需要 进一步讨论、分析或增加信息的地方,有时也可能因为某个特殊需求难以解决 或没有人愿意处理它而标注上“待定” 。客户要尽量将每项需求的内容都阐述清 楚,以便分析人员能准确地将它们写进“软件需求报告”中去。如果客户一时不 能准确表达,通常就要求用原型技术,通过原型开发,客户可以同开发人
16、员一 起反复修改,不断完善需求定义。 14、 及时作出决定 分析人员会要求客户作出一些选择和决定,这些决定包括来自多个用户提 出的处理方法或在质量特性冲突和信息准确度中选择折衷方案等。有权作出决 定的客户必须积极地对待这一切,尽快做处理,做决定,因为开发人员通常只 有等客户做出决定才能行动,而这种等待会延误项目的进展。 15、 尊重开发人员的需求可行性及成本评估 所有的软件功能都有其成本。客户所希望的某些产品特性可能在技术上行 不通,或者实现它要付出极高的代价,而某些需求试图达到在操作环境中不可 能达到的性能,或试图得到一些根本得不到的数据。开发人员会对此作出负面 的评价,客户应该尊重他们的意见。 16、 划分需求的优先级 绝大多数项目没有足够的时间或资源实现功能性的每个细节。决定哪些特 性是必要的,哪些是重要的,是需求开发的主要部分,这只能由客户负责设定 需求优先级,因为开发者不可能按照客户的观点决定需求