软件需求的概念
(1)宽泛地讲,需求来源于用户的一些"需要",这些"需要"被分析、确认后形成完整的文档,该文档详细地说明了产品"必须或应当"做什么。
(2)是用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。
(3)期望?! 一种心理活动、笼统、不细致、不懂过程
需求的重要性
(1)Frederick Brooks在他1987年经典文章"No Silver Bullet"中阐述了需求的重要性:
开发软件系统最困难的部分就是准确说明开发什么。最困难的概念性工作是编写出详细的需求,包括所有面向用户、面向机器和其它软件系统的接口。此工作一旦做错,将会给系统带来极大的损害,并且以后对它修改也极为困难。
(2)需求是产品的根源,需求工作的优劣对产品影响最大。
(3)国内软件业的痼疾:人们并不清楚究竟该做什么,但却一直忙碌不停地开发。
了解客户、最终用户、间接用户的概念
(1)基本概念
"用户"(user)是一种泛称,它可细分为"客户"(customer)、"最终用户"(the end user)和"间接用户"(或称为关系人)。
掏钱买软件的用户称为客户,而真正操作软件的用户叫最终用户。客户与最终用户可能是同一个人也可能不是同一个人。
(2)客户是掏钱买软件的人,所以他是"上帝"
(a)某饭店经理在解释"先有鸡还是先有蛋"这个哲学问题时,精辟地阐述了客户的地位:
如果顾客先点鸡,那么就先有鸡;如果顾客先点蛋,那么就先有蛋。
(b)"现代营销学之父"菲利普o科特勒所著的《市场营销导论》是这样描述客户的:
客户永远是本公司的座上客。客户并不依赖我们,而我们却依赖客户。客户不是我们工作的障碍,而是我们工作的目标。我们并不因为服务于他而对他有恩,他却因为给予我们服务于他的机会而有恩于我们。客户不是我们要与之争辩和斗智的人。从未有人曾在与客户的争辩中获胜。客户是把他的欲望带给我们的人,因此我们的工作就是满足这些欲望,从而使客户和我们共同获益。
(c)与客户打交道的主要目的是:一是获取需求,二是签合同。
软件需求的层次
(1)原始问题描述:对要解决问题的叙述,它是软件需求的基础
(2)用户需求:用自然语言和图表给出的关于系统需要提供的服务及操作的约束
(3)系统需求:是用户需求的映射。此时可开发一个简单原型以便给用户一个直观印象。
(4)软件设计描述:在系统需求的基础上加入更详细的内容,它是软件详细设计和实现的基础
需求工程的组成
把所有与需求直接相关的活动通称为需求工程。
需求工程的一些感悟
(1)不论是合同项目还是自主研发的产品,都必须开展需求开发和需求管理活动。
(2)开发者对待需求工程的态度可分"被动型"、"主动型"和"领先型"三种,只有后两种才有可能开发出成功的产品。
"被动型"是指开发者被动地对待需求工程中的各项活动,能少干则少干,能偷懒则偷懒。他们认为需求是用户的事情而不是自己的事情。开发过程中经常发生需求变更,导致产品迷失方向,不是半途而废就是陷入半死不活的状态。
"主动型"是指开发者积极地开展需求工程中的各项活动。他们把获取准确的需求当作自己的职责,会想尽一切办法克服需求开发和需求管理过程中的困难,而不是找借口推卸责任。俗话说"良好的开端是成功的一半","主动型"需求工程是开发成功产品的必备条件。
"领先型"是需求工程的最高境界。开发者发掘了连用户自己都没有意识到的需求,导致用户跟着新产品跑而不是新产品围着用户转,这叫引导消费。需求工程做到这个份上,才能使产品立于不败之地,长盛不衰。
需求开发的主要困难与对策
···知识技能问题
(1)应用域的知识是无边无际的,任何人都不可能是"万事通"。
(2)当需求分析员缺乏应用域知识时,他该怎么办?
(a)首先他要有勇气做事,否则连实践的机会都没有。
(b)其次他应当赶紧补习应用域知识。
···态度问题
(1)相当多的开发人员习惯于被动地对待需求开发。每当遇到麻烦、挫折时,他们会发牢骚,找出一堆用户的毛病。很多开发人员错误地以为:
需求是用户的事情,不是我们的事情。我们为用户开发软件,难道用户不该告诉我们应当开发什么吗?如果用户说不清楚需求,或者经常变更需求,这类问题是用户产生的,应当由他们自己负责。
(2)用户说不清楚需求或者需求发生变更,这些都是常见的问题,并不是绝症,是人们可以设法解决的。可悲的是开发人员把这些问题当成了借口,不愿主动攻克问题,导致需求问题扩散到整个软件开发过程,产生太多的后患。
(3)软件企业的领导应当给具有错误观念的开发人员们洗脑:需求分析员的天职就是在有限的时间内获取准确而细致的用户需求,如果做不到就是失职,不要找借口。
需求获取
需求获取时期的主要工作:
(1)归纳和整理用户提出的各种问题和要求;
(2)弄清用户企图通过软件达到的目的;
(3) 借助各种工具和方法,陈述用户提出的实际需求,并标定软件的作用范围。
最终目的弄明白要"做什么"。
获取需求应采用的步骤
(1)确定产品的不同用户类型
(2)确定用户需求的来源
(3)挑选出每一类用户和其他涉众的代表并与他们一起工作
(4)商定谁是项目需求的决策者
获取需求的方法
(1)明确最终用户,与用户交谈,向用户提问题。向用户群体发调查问卷。透过客户所提出的表面需求理解他们的真正需求。
(2)参观用户的工作流程,观察用户的操作。
(3)与同行、专家交谈,听取他们的意见。
(4)界面原型法,是指开发方根据自己所了解的用户需求,描画出应用系统的功能界面后与用户进行交流和沟通。
(5)可运行的原型系统法
(6)分析已经存在的同类软件产品,提取需求。
(7)从行业标准、规则中提取需求。
(8)从Internet上搜查相关资料。
切记:
设定用户代言人
如果个别客户不能在需求方面达成一致意见,那么必须由用户代言人作出决策。
需求分析
(1)需求分析是指在需求开发过程中,对所获取的需求信息进行分析,及时排除错误和弥补不足,确保需求文档正确地反映用户的真实意图。
(2)分析方法大体有两类:"问答分析法"和"建模分析法"。后者技术性比较强,写出来有学术味,故大多数软件工程书籍都有论述。前者就是一些常识而已,虽然写不成文章,但是简单易用(保你一学就会),很有实用价值。
(3)采用方法:绘制关联图、创建用户接口原型、分析可行性、确定需求优先级、编写数据字典等。
编写需求文档
(1)需求文档包括用户需求和详细的系统需求描述。
(2)要求
正确:正确地反映用户的真实意图;
清楚:易读易懂;
无二义性
一致
完备:没有遗漏一些必要的需求;
可实现: "可实现"意味着在技术上是可行的,并且满足时间、费用、质量等约束;
可验证
确定优先级:确定高中低三个级别,将风险降到最低。
阐述"做什么"而不是"怎么做"
需求验证
(1)需求验证是为了确保需求规格说明准确、完整地表达了必要的质量特点。
(2)审查需求文档、依据需求文档编写测试用例、确定产品验收合格的标准。
(3)验证内容:有效性、一致性、完备性、现实性等。
需求管理的重要性
如果对已经建成的大楼不满意,要求设计师把大楼的结构调整一下,别人一定会认为这很荒唐。但在软件项目中,这样的事情很常见。
软件缺陷,发现和修复的越早则成本越低。不幸的是,需求阶段出现的错误往往很难发现,所以需求管理也需要讲究科学。
原则:需求必须分优先级、必须文档化、需求一旦变化就必须对需求变更的影响进行评估。
需求变更存在的必然
大师说:"没有不变的需求,世上的软件都改动过3次以上,唯一一个只改动过两次的软件的拥有者已经死了,死在去修改需求的路上。"
变更管理
进行变更管理,首先要建立变更控制委员会,变更管理过程包括变更描述、变更分析和变更实现三个阶段:
变更描述:始于一个被识别的需求问题或一份明确的变更提议
变更分析:评估被提议的变更产生的影响
变更实现:执行变更,需求文档、系统设计和实现都要修改
变更描述阶段,产生需求变更请求表
变更影响分析
需求变更影响分析模板中包括的内容:
变更请求号
标题
描述
分析者
分析日期
优先级评定
相关代价、收益与风险
预计对进度、成本、质量的影响
被影响的其他需求及任务
要更新的计划及文档
变更控制流程
需求状态
定义:某时间点需求的情况反映。
客户需求的四种情况:
客户可以明确且清楚地提出的需求
客户知道需要做什么,但却不能确定的需求
客户提出需求,但需求的业务不明确
客户自己也说不清楚的需求
需求状态:
已建议 已批准 已拒绝
已设计 已实现 已验证
已交付 已删除
需求文档版本控制
对于开发人员来说,最为沮丧的事情莫过于当软件功能实现后,却发现该项功能已被项目经理取消了。原因在于需求文档版本混乱,开发人员没有得到最新的软件需求。
需求跟踪
目的:建立和维护从用户需求到测试的一致性与完整性,确保实现都以客户需求为基础,实现的需求覆盖了预期的需求,并确保输出与用户需求的符合性。
需求跟踪的作用
(1)在需求验证中,便于确保所有需求被应用
(2)有助于变更影响分析
(3)便于需求的维护
(4)便于测试时找出问题所在
(5)便于项目跟踪和减少项目风险
(6)简化了系统再设计,易于软件重用
案例分析:一个项目需求分析和处理的案例
1、 案例背景
当地一家销售电动工具公司的董事会成员正在举行二月份的董事会会议,这家公司是一家专门制造和销售用于木工用的"黑客"牌电动工具的一家小型公司。会议室里在座的,有董事会主席贝斯·史密斯(Beth Smith)和两个董事会成员罗斯玛丽·奥尔森(Rosemary Olsen)和史蒂夫·安德鲁(Steve Andrews)。贝斯首先发言:"我们今年以来的销售非常好,打来的订货电话,已经要把我们的电话都要打爆了,但是,我们没有办法能继续招募到熟悉我们的电动工具、同时还了解我们销售过程的小姐。而与我们竞争的其他公司,都已经上了自动客户服务系统(Call Center)。所以,我们也要上这个系统,才能保住我们的市场。"
"我们必须建立一个计算机自动客户服务系统。"罗斯玛丽响应道。
史蒂夫建议:"难道我们不能把售后服务转给麦肯罗公司(公司下属的一家子公司,以服务为主)做吗?向他们要求一下,看他们是否能把电动工具的服务也接过去?"
"他们也紧张,听说明年他们甚至可能会削减一些服务项目。"贝斯回答。
"我们需要多少钱才能搞这么一个系统?"罗斯玛丽问道。
"大约10万美元,"贝斯回答,"如果我们不能在两个月后就开始启用这个系统,估计我们的定单可能会减少20%。"
"我们除了钱还需要很多东西。我们需要了解是否有更好的方案、开发这个系统需要多少时间,以及,这个系统是不是真的适合我们!"史蒂夫说。
"哦,我想我们完全可以自己来做这个项目,这将是很有趣的!"罗斯玛丽兴奋地说。
"这个项目不是我们的专长,我们不可能及时完成。"贝斯说道。
罗斯玛丽回答说:"我们有几个技术人员,虽然不够,但只要再招聘一二个高手,就可以解决它,并且做好。"
"项目是我们真正需要的吗?我们上了这个项目以后,公司的销售任务就能完成了吗?"史蒂夫问道,"此外,我们正在经历一个困难时期,我们的资金并不宽余。或许我们应当考虑一下,我们怎样能用较少的资金来运作一切。例如,我们用这个系统只处理定单,而并不包括服务,。这样系统是不是就会小一点,也省一点、快一点?"
罗斯玛丽插话说:"多妙的主意,我们可以先完成销售定单的处理,等这部分完成投入使用后,再开发服务部分。公司可以在改进销售功能的同时,继续开发服务功能。这样,我们就可以做得更好。"
"好了,"贝斯说,"这些都是好主意,但是我们只有有限的资金和技术人员,并且有一个增长的需求。我们现在需要做的是,确保我们在两个月后不必担心丢失定单。我想,我们都同意必须采取行动,但是不能确定我们的目标是否一致。"
2、案例习题
(1) 项目目标是什么?
(2)已识别的需求是什么?
(3)如果有的话,准备开发的项目应具备什么样的假定条件?
(4)项目牵涉到的风险是什么?
3、案例分析
根据本案例的背景,我们的分析简单描述如下。由于本案例比较简单,而且是自主开发,因此,有些内容可以简略。至少必须描述的内容,用下划线表示:
(1)业务需求
1、背景:一家小型的木工电动工具公司,今年以来的销售形势很好,接受定单的电话很多,已经忙不过来了。因此,需要开发自动客户服务系统。
2、项目机遇:通过自动客户服务系统的开发和投入使用,使公司的销售获得增长。
3、项目目标:开发一套为本公司销售和售后服务使用的计算机自动客户服务系统(Call Center)。
4、市场需求:
5、客户价值:满足公司自身发展的需要。
6、项目风险:项目目标、方案、时间、资金、开发人员等。
(2)方案描述:
1、功能视图:自动接听电话,对客户的定单和售后服务要求做出响应。
2、主要特征:自动处理一些原来由人工完成的工作,有可能增加新的服务功能。
3、假设和依赖:二个月时间内完成,总投资为10万美元,自主开发,自己使用。
(3)范围局限
1、首次发行范围:
2、随后发行范围:
3、局限和专用性:只为自己公司使用。
(4)系统环境:
1、用户概貌:
2、项目优先级:可以先完成定单响应,再完成售后服务功能。
(5)成功因素:
我们现在完成的,实在需求获取阶段中介绍的"项目视图"中的内容。在项目视图中,我们对项目做了初步的描述。在背景和目标分析阶段,我们回答本案例问题的答案是:
1、项目目标是什么?
答:开发一套为本公司销售和售后服务使用的计算机自动客户服务系统(Call Center)。
2、已识别的需求是什么?
答:自动接听电话,对客户的定单和售后服务要求做出响应。
3、如果有的话,准备开发的项目应具备什么样的假定条件?
答:二个月时间内完成,总投资为10万美元,自主开发,自己使用。
4、项目牵涉到的风险是什么?
答:项目目标、方案、时间、资金、开发人员等。
系统的功能包括:
1、从公司的客户方面看,新系统可以自动支持电话、FAX,E_mail、Web等多重通信方式所提供的服务,最大限度的满足客户的需要,最有效地为客户提供快捷方便的服务。
2、从公司方面看,新系统要可以支持接入公司的交换机中继线路(24条中继),自动或智能话务分配、坐席画面与电话同步、自动录音等功能。
3、从提供服务的内容看,可以有:公司产品查询、合同和定单查询、自动处理定单、产品售后服务信息查询、供货信息查询、方案介绍、产品推介、产品报修、故障咨询、投诉等。进一步的购买洽谈,可以转人工处理。
4、整个系统可以与目前公司已经有的客户信息系统、产品信息系统等建立联系,形成综合的服务系统。
转载:http://www.blogjava.net/qileilove/archive/2013/05/14/399249.html