如何实施网站开发项目需求调研
从广泛意义上来看:需求调研涵盖需求的搜集、剖析、规范说明、调整、确认、管理的整个需求工程过程。
在狭义上,需求调研指的是需求的剖析、定义过程。
重要性
需求调研的核心是确定软件用户的实际需求。若投入众多的人力、物力、财力、时间,却研发出的软件无人问津,那么所有投入都将付诸东流。若花费巨大精力研发软件,最终却不满足用户需求,不得不重新开发,这种返工令人痛心疾首(相信大家都有体会)。例如:用户需要一个适用于Linux的软件,而在软件开发初期忽略了软件的运行环境,未向用户询问这个问题,想当然地认为是开发适用于Windows的软件。当你历尽艰辛完成开发并向用户提交时才发现问题,那时你将痛哭流涕,恨不得撞死。
需求调研之所以重要,在于其具有决策性、导向性、策略性的作用,在软件开发过程中占据至关重要的地位,大家务必重视需求调研。在大型软件系统的开发中,其作用远大于程序设计。
任务
简而言之,需求调研的任务就是解决“做什么”的问题,就是要全面理解用户的各项要求,并准确表达所接受的用户需求。
过程
需求调研阶段的工作可以分为四个方面:问题识别、分析与综合、制定规范说明、评审。
问题识别:即从系统角度理解软件,确定对所开发系统的综合要求,并提出这些需求的实现条件以及需求应达到的标准。这些需求包括:功能需求(做什么)、性能需求(要达到什么指标)、环境需求(如机型、操作系统等)、可靠性需求(不发生故障的概率)、安全保密需求、用户界面需求、资源使用需求(软件运行所需的内存、CPU等)、软件成本消耗与开发进度需求、预先估计以后系统可能达到的目标。
分析与综合:逐步细化所有软件功能,找出系统各元素间的联系、接口特性和设计上的限制,分析它们是否满足需求,剔除不合理部分,增加需要部分。最后综合成系统的解决方案,给出要开发的系统的详细逻辑模型(做什么的模型)。
制定规范说明书:即编制文档,描述需求的文档称为软件需求规范说明书。请注意,需求调研阶段的成果是需求规范说明书,向下一阶段提交。
评审:对功能的正确性、完整性、清晰性以及其他需求给予评价。评审通过后方可进行下一阶段的工作,否则重新进行需求调研。
方法
需求调研的方法有很多,这里仅强调原型化方法,其他方法如:结构化方法、动态分析法等,从未使用过这些方法,在此不讨论。
原型化方法十分重要,原型是软件的一个早期可运行的版本,实现了目标系统的某些或全部功能。
原型化方法就是尽可能快速地构建一个粗糙的系统,这个系统实现了目标系统的某些或全部功能。但是这个系统可能在可靠性、界面的友好性或其他方面存在缺陷。构建这样一个系统的目的是为了考察某一方面的可行性,如算法的可行性、技术的可行性或考察是否满足用户的需求等。例如:为了考察是否满足用户需求,可以用某些软件工具快速构建一个原型系统,这个系统只是一个界面,然后听取用户的意见,改进这个原型。以后的目标系统就在原型系统的基础上开发。
原型主要有三种类型:探索型、实验型、进化型。
探索型:目的是要弄清楚对目标系统的要求,确定所希望的特性,并探讨多种方案的可行性。
实验型:用于大规模开发和实现前,检验方案是否合适,规范说明是否可靠。
进化型:目的不在于改进规范说明,而是将系统构建得易于变化,在改进原型的过程中,逐步将原型进化成最终系统。
在使用原型化方法时有两种不同的策略:废弃策略、追加策略。
废弃策略:先构建一个功能简单且质量要求不高的模型系统,针对这个系统反复进行修改,形成较好的思路,据此设计出较完整、准确、一致、可靠的最终系统。系统构建完成后,原来的模型系统就被废弃不用。探索型和实验型属于这种策略。
追加策略:先构建一个功能简单且质量要求不高的模型系统,作为最终系统的核心,然后通过不断地扩充修改,逐步追加新要求,发展成为最终系统。进化型属于这种策略。
需求调研20条法则
客户与开发人员交流需要好的方法。以下建议20条法则,客户和开发人员可以通过评审以下内容并达成共识。如果遇到分歧,将通过协商达成对各自义务的相互理解,以便减少以后的磨擦(如一方要求而另一方不愿意或不能满足要求)。
1、分析人员要使用符合客户语言习惯的表达
需求讨论集中于业务需求和任务,因此要使用术语。客户应将有关术语(例如:采价、印花商品等采购术语)教给分析人员,而客户不一定要懂得计算机行业的术语。
2、分析人员要了解客户的业务及目标
只有分析人员更好地了解客户的业务,才能使产品更好地满足需求。这将有助于开发人员设计出真正满足客户需求并达到期望的优秀软件。为帮助开发和分析人员,客户可以考虑邀请他们观察自己的工作流程。如果是切换新系统,那么开发和分析人员应使用一下旧系统,有利于他们明白系统是怎样工作的,其流程情况以及可供改进之处。
3、分析人员必须编写软件需求报告
分析人员应将从客户那里获得的所有信息进行整理,以区分业务需求及规范、功能需求、质量目标、解决方法和其他信息。通过这些分析,客户就能得到一份“需求调研报告”,此份报告使开发人员和客户之间针对要开发的产品内容达成协议。报告应以一种客户认为易于翻阅和理解的方式组织编写。客户要评审此报告,以确保报告内容准确完整地表达其需求。一份高质量的“需求调研报告”有助于开发人员开发出真正需要的产品。
分析人员需将自客户处搜集的各类资讯进行梳理,以辨别业务需求、规范、功能需求、品质目标、解决方案及余下信息。经过此分析,客户将获得一份“需求分析文档”,该文档促使开发人员与客户就产品开发内容达成共识。文档应以客户易于翻阅及理解的形式编写。客户需审阅该文档,确保其准确全面地传达了其需求。一份优质的需求分析文档有助于开发人员打造出符合需求的产品。
4、请求对需求工作成果的诠释
分析人员可能使用多种图表来补充文字性的“需求分析文档”,因为图表能直观地描述系统行为的某些方面,所以文档中的图表极具价值;尽管它们不易理解,但客户可能并不熟悉,因此客户可要求分析人员解释图表的作用、符号的含义、需求开发工作的成果,以及如何检查图表是否存在错误或矛盾。
5、开发人员需尊重客户意见
若用户与开发人员之间无法相互理解,则需求讨论将面临障碍。合作能让双方“兼听则明”。参与需求开发过程的客户有权要求开发人员尊重他们,珍惜他们为项目成功付出的时间,同时客户也应尊重开发人员为项目成功所做出的努力。
6、开发人员需对需求及产品实施提出建议和解决方案
通常客户所说的“需求”已是一种可行的实施方案,分析人员应尽力从这些方案中了解真正的业务需求,并找出现有系统与当前业务不符之处,以确保产品不会无效或低效;在彻底了解业务领域后,分析人员就能提出较好的改进方法,有经验且富有创造力的分析人员还能提出增加一些用户未发现的、有价值的系统特性。
7、阐述产品使用特性
客户可要求分析人员在实现功能需求的同时关注软件的易用性,因为这些易用特性或质量属性能使客户更准确、高效地完成任务。例如:客户有时要求产品要“界面友好”或“健壮”或“高效率”,但对于开发人员来说,这些较为主观,并无实际价值。正确的做法是,分析人员通过询问和调查了解客户对“友好、健壮、高效”的具体要求,分析哪些特性对哪些特性有负面影响,在性能代价和预期利益之间做出权衡,以确保做出合理的取舍。
8、允许使用已有的软件组件
需求具有一定的灵活性,分析人员可能发现某个现有的软件组件与客户描述的需求非常吻合,在这种情况下,分析人员应提供一些修改需求的选择,以便开发人员能够降低新系统的开发成本和节省时间,不必严格按原有需求说明进行开发。因此,如果想在产品中使用一些已有的商业常用组件,而它们并不完全符合您所需的特性,那么一定程度的需求灵活性就非常重要了。
9、请求对变更成本进行真实可靠的评估
有不同选择。此时,对需求变更的影响进行评估,从而为业务决策提供帮助,是十分必要的。因此,客户有权要求开发人员通过分析给出一个真实可信的评估,包括影响、成本和得失等。开发人员不能因为不想实施变更而随意夸大评估成本。
10、获得满足客户功能和质量要求的系统
每个人都希望项目成功,但这不仅要求客户清晰地告知开发人员关于系统“做什么”所需的所有信息,还要求开发人员通过交流了解取舍与限制,明确说明您的假设和潜在期望,否则,开发人员开发出的产品很可能无法让您满意。
11、向分析人员讲解您的业务
分析人员需要依靠客户讲解业务概念及术语,但客户不能期望分析人员成为该领域的专家,只能让他们明白您的问题和目标;不要期望分析人员能掌握客户业务的细微潜在之处,他们可能不知道那些对于客户来说理所当然的“常识”。
12、抽出时间清楚地阐述并完善需求
客户很忙,但无论如何,客户有必要抽出时间参与“头脑风暴会议”的讨论,接受采访或其他获取需求的活动。有些分析人员可能先明白了您的观点,而过后发现还需要您的讲解,这时请耐心对待一些需求和需求的细化工作过程中的反复,因为这是人们交流中很自然的现象,何况这对软件产品的成功极为重要。
13、准确而详细地阐述需求
编写一份清晰、准确的需求文档是很困难的。由于处理细节问题既烦人又耗时,因此很容易留下模糊不清的需求。但在开发过程中,必须解决这种模糊性和不准确性,而客户正是为解决这些问题作出决定的最佳人选,否则,就只好靠开发人员去正确猜测了。
在需求分析中暂时加上“待定”标志是个方法。用该标志可指明哪些是需要进一步讨论、分析或增加信息的地方,有时也可能因为某个特殊需求难以解决或没有人愿意处理它而标注上“待定”。客户应尽量将每项需求的内容都阐述清楚,以便分析人员能准确地将它们写进“软件需求文档”中去。如果客户一时不能准确表达,通常就要求使用原型技术,通过原型开发,客户可以与开发人员一起反复修改,不断完善需求定义。
14、及时作出决定
分析人员会要求客户作出一些选择和决定,这些决定包括来自多个用户提出的处理方法或在质量特性冲突和信息准确度中选择折衷方案等。有权作出决定的客户必须积极地对待这一切,尽快处理和作出决定,因为开发人员通常只有等客户做出决定才能行动,而这种等待会延误项目的进展。
分析人员需引导客户作出若干抉择与决策,这些决策涵盖从众多用户提出的处理方案中挑选或在质量特性冲突与信息准确性间寻求平衡等。有权作出决策的客户需积极应对,迅速处理并作出决定,因为开发人员通常需等待客户决策后才能行动,这种等待会拖慢项目进度。
15、重视开发团队的需求可行性及成本评估
所有软件功能均存在成本。客户期望的部分产品特性可能在技术上不可行,或实现它需付出高昂代价;某些需求试图在操作环境中实现不可能的性能,或获取无法获得的数据。开发团队会对此提出负面评价,客户应尊重其意见。
16、明确需求的优先级
绝大多数项目缺乏足够的时间和资源实现所有功能细节。决定哪些特性是必要的,哪些是重要的,是需求开发的关键,这只能由客户负责设定需求优先级,因为开发者无法根据客户观点决定需求优先级;开发者将提供每个需求的花费和风险信息,以帮助客户确定优先级。
在时间和资源受限的情况下,关于所需功能能否实现或实现多少,应尊重开发团队的意见。尽管没有人愿意看到期望的需求在项目中无法实现,但面对现实,业务决策有时不得不根据优先级来缩小项目范围、延长工期、增加资源或在质量上寻求平衡。
17、评估需求文档和原型
客户评估需求文档,是向分析人员提供反馈信息的机会。如果客户认为编写的“需求分析报告”不够准确,有必要尽早告知分析人员并提供改进建议。更好的方法是先为产品开发一个原型。这样客户就能提供更有价值的反馈信息给开发人员,使他们更好地理解需求;原型并非实际应用产品,但开发人员能将其转化、扩充成功能齐全的系统。
18、需求变更需及时沟通
不断的需求变更,会对预定计划内完成的质量产品造成严重不利影响。变更是不可避免的,但在开发周期中,变更越晚出现,影响越大;变更不仅会导致高昂的返工成本,而且会延误工期,尤其是在大体结构完成后又需增加新特性时。因此,一旦客户发现需求需要变更,请立即通知分析人员。
19、遵循开发团队处理需求变更的程序
为将变更带来的负面影响降至最低,所有参与者必须遵循项目变更控制程序。这要求不放弃所有提出的变更,对每项变更进行分析、综合考虑,最后做出合适的决策,以确定哪些变更应引入项目中。
20、尊重开发团队采用的需求分析方法
软件开发中最具挑战性的莫过于收集需求并确定其正确性,分析人员采用的方法有其合理性。也许客户认为收集需求的过程不太划算,但请相信在需求开发上投入的时间是非常有价值的;如果您理解并支持分析人员为收集、编写需求文档和确保其质量所采用的技术,那么整个过程将会更加顺利。
“需求确认”的含义
在“需求分析报告”上签字确认,通常被认为是客户同意需求分析的标志行为,然而在实际操作中,客户往往把“签字”看作是毫无意义的事情。“他们要我在需求文档的最后一行下面签名,于是我就签了,否则这些开发人员不开始编码。”
这种态度将带来麻烦,例如客户想更改需求或对产品不满时会说:“不错,我是在需求分析报告上签了字,但我并没有时间去读完所有的内容,我是相信你们的,是你们非让我签字的。”
同样问题也会发生在仅把“签字确认”看作是完成任务的分析人员身上,一旦有需求变更出现,他便指着“需求分析报告”说:“您已经在需求上签字了,所以这些就是我们所开发的,如果您想要别的什么,您应早些告诉我们。”
这两种态度都是不正确的。因为不可能在项目早期就了解所有需求,而且毫无疑问需求将会出现变更,在“需求分析报告”上签字确认是终止需求分析过程的正确方法,因此我们必须明白签字意味着什么。
对“需求分析报告”的签名是建立在需求协议基础上的,因此我们对签名应这样理解:“我同意这份需求文档表述了我们对项目软件需求的了解,进一步的变更可在此基线上通过项目定义的变更过程来进行。我知道变更可能会使我们重新协商成本、资源和项目阶段任务等事宜。”
达成一定的需求共识会使双方更容易忍受未来的摩擦,这些摩擦来源于项目的改进、需求的误差或市场和业务的新要求等。
网站设计需求分析撰写方法
1)绘制关联图:绘制系统关联图是用于定义系统与系统外部实体间界限和接口的简单模型。同时它也明确了通过接口的信息流和物质流。
2)创建开发原型:当开发人员或用户不能确定需求时,创建用户接口原型,使得许多概念和可能发生的事更为直观明了。用户通过评价原型将使项目参与者更好地相互理解所要解决的问题。注意要找出需求文档与原型之间所有的冲突之处。
3)分析可行性:在允许的成本、性能要求下,分析每项需求实施的可行性,明确与每项需求实现相联系的风险,包括与其他需求的冲突、对外界因素的依赖和技术障碍。
4)确定需求优先级:应用分析方法确定使用实例、产品特性或单项需求实现的优先级别。以优先级为基础确定产品版本将包括哪些特性或哪类需求。当允许需求变更时,在特定版本中加入每一项变更,并在该版本计划中作出需要的变更。
4)确立需求排序:运用分析技术确定软件工程需求的排序,以确定基于实例、产品特性或具体需求的优先级。根据优先级来决定产品版本应包含的特性或需求类别。在允许需求调整的情况下,将每项变更纳入特定版本,并在该版本的计划中实施必要的调整。
5)构建需求模型:为需求构建模型。需求的图形分析模型是软件需求规格说明的优良补充,它们能提供不同的信息和关系,有助于识别错误、不协调、遗漏和冗余的需求。此类模型包括数据流图、实体关系图、状态转换图、对话框图、对象类及交互图。
6)编制数据手册:制作数据手册。数据手册是对系统中所有数据项和结构的定义,旨在确保开发人员使用统一的数据定义。在需求阶段,数据手册至少应定义客户数据项,以确保客户与开发团队使用一致的定义和术语。分析和设计工具通常包含数据手册组件。
7)实施质量功能分配:运用质量功能分配。质量功能分配是一种高级系统技术,它将产品特性、属性与客户的重要性联系起来。该技术提供了一种分析方法,用于明确客户最关注的特性。它将需求分为三类:潜在需求,即客户可能未明确提出,但若缺失将导致不满;基本需求;激励需求,即实现后能给客户带来惊喜,但若未实现也不会招致批评。