欢迎来到加倍考研网! 北京 上海 广州 深圳 天津
微信二维码
在线客服 40004-98986
推荐适合你的在职研究生专业及院校

客户需求调查表

假绅士
假名
去百度文库,查看完整内容>内容来自用户:xiu227尊敬的客户:您好!感谢您对这份问卷的关注,因您的支持和信任,有利于我们进一步提升以“专注品质设计服务、致力个性空间营造”为宗旨的一体化家居设计服务水准。为更有效地了解您的需求,针对性地为您提供服务,请您在百忙之中填写这份问卷,如果您能从中增加对装修或是家居的了解和认识,我们也将为此深感欣慰!衷心感谢您的参与合作!客户姓名:楼盘名称:工程地点:联系地址:联系电话:(手机)(住宅)E-mail:MSN(QQ):一、项目基本信息建筑面积:|使用面积:|房型: 房 厅 卫 台|物业类型: ○多层 ○高层(小高层) ○复式 ○别墅|层数: 第 层 共 层|交房时间:|计划装修时间:|计划装修资金:|二、说明1.《项目相关信息-家庭情况》请尽量详细填写2.《项目相关信息-软装饰情况》已有想法的可先填写,如想要的沙发颜色或家具款式,尚未考虑则可空白;如有原有家具欲置入新居,希望将原有家具的款式、颜色、尺寸详细填写。3.《项目相关信息-电器情况》已有想法的可先填写,尚未考虑则可空白。4.“计划装修资金”指软装饰费用总和三、项目相关信息-家庭情况家庭成员|年龄|职业|倾向风格|爱好|偏爱颜色|备注|住宅使用目的|○

需求调研方案__模板

红帆布
盗光者
去百度文库,查看完整内容>内容来自用户:李云西XXXXXX平台需求调研方案XXXXXX公司2016年11月序号|调研对象|相关系统|调研内容方向|1|2|3|4|5|6|项目调研采用的主要方式有一下几种,具体调研时,会根据实际情况灵活采用:1.收集客户相关的文档资料,如工作概况、主要业务、业务流程、管理制度、岗位职责,可以从客户的日常工作表单、报表、文书、网站中获取,也可以直接要求客户方提供。2.问卷调查,如事先准备好问卷表,发给相关的业务部门,由业务人员分别填写后收回。3.个别交流,就某一具体问题和业务流程处理和相关的业务代表直接交流。4.开会讨论,对跨部门、跨岗位的业务,可以把相关的业务人员请到一起,了解业务的协作流程情况。5.随公工作调研,跟随办公工作人员,以一次业务任务为头绪,从头到尾,跟随一起工作,深入、细致、具体地了解工作人员的业务真实工作实践情况,从中发现本项目建设目标的细节需求。调研工作的总体时间计划,根据项目合同书和《项目工作说明书》中对项目总体时间周期阶段而制定的细节调研任务计划:职能部门|时间|具体调研内容|调研组员|客户配合人员|1、对管理层进行业务架构和主体业务流程汇报和交流确认后,形成业务流程差异及解决方案(或需求规格说明书)。

产品需求调研方案

别名
父母情
去百度文库,查看完整内容>内容来自用户:黄国庆XXX调研方案XXX事业部通过全方位、多层次、多渠道开展需求调研把握最终用户的真实服务需求,为XXX产品提供的服务项目的设计和优化提供依据。本方案适用于本次用户需求调研。互联时代XXX业务部为本方案的归口管理部门,负责本方案的编制。XXX业务部负责调研工作的总体规划、设计、指导、实施、控制、沟通及协调,负责调研方案的设计,调研数据的分析,市场调查报告的撰写,调研结果应用等。中国移动选派人员参与此次调研。一手资料来源:用户服务需求调研一手资料即产品经理通过座谈会、调查问卷调查采集的数据。二手资料来源:用户服务需求调研二手资料包括企业以往开展的各项调研活动积累的资料,行业公开报告、期刊和相关资料,以及市场调查数据等商业资料。此次用户服务需求调研调研方法主要分为问卷调查和座谈会两种,其中以座谈会为主,由产品经理对最终用户进行邀约座谈访问,其次将采取热线问卷调查。用户服务需求调研工具为座谈和调查表,调查表中包含封闭式问题和开放式问题两类问题。抽样计划涉及到如何选取合适的样本来进行调研。抽样计划分座谈会抽样和调查问卷抽样,主要做三个方面的决策:抽样单位,即向什么人调查。用户服务需求调研抽样单位为XXX产品活跃用户(活跃用户定义为正在使用或半年内使用过XXX产品但退订的用户),座谈会抽样单位为重庆市主城区的XXX活跃用户,调查问卷其抽样总体是全国各地区具有一定价值

求一份市场营销客户满意度调查表

断魂咒
告解室
市场调查 10多天来,我跑了一些超市和商家,仔细观察了消费者购物的情况,并询问了一些消费者,总结如下: 不同年龄、不同职业、不同收入水平的消费者,有着不同的购物习惯和消费需求,我认为精明的商家在经营过程中要不断的揣摩各种消费群的心理变化和需求变化。 ■高收入消费群的消费行为及心理特征: 1、品牌偏好明显,受文化需求的影响大于价格上的诱惑。高收入群体多为高学历、高品位、高消费需求的“三高”消费群体,易于接受新事物和大品牌,并会由此产生相应的品牌偏好。他们往往会为了追求一个“男人的世界”,而不惜购买一条昂贵的“金利来”领带。在“株百”5楼的品牌专卖店,我发现消费者大多是有一定经济基础的人,他们买一套上千元的衣服、一条数百元的领带眉都不皱,因为他们看中的是品牌。 2、购买数量较大,购买频率和次数较少。高收入群体忙于工作,因而他们在生活上表现出极大的不规律性。除周末以外,逛街购物对他们来说只能是一种“奢侈”。但是若进商场购物,他们购买的数量很多,从吃的、喝的到用的,一消费就是数百元。据了解, 这种“集中购物”的消费者并不少,在周末购物群中占了很大的比例。 3、购物期望值较高。高收入消费者受其社会地位的影响,在购物时也期望商家能给予其特殊的关照,比方如售前服务和售后服务方面等等。我访问过几个公司白领,他们一致认为,购物时他们最重视的是商家的服务态度。 ■低收入消费群的消费行为及心理特征: 1、注重价格。很多人都有过手头拮据的经历,没钱的日子,他们总不得已掐算着一分一厘的支出。对低收入消费群而言,在这方面表现得尤为突出。用最少的支出满足尽可能多的消费需求是他们最为“奢侈”的美好愿望。在调查中,我发现商场的特价处,大多数是低收入群。因为对他们来说,低价是实惠。新入驻的“新一佳”就以这样的实惠吸引了众多的市民。 2、注重质量。目前,城市里的低收入群中的代表是下岗工人。在调查中,我发现下岗工人的消费习惯远远不同于农村消费者。因为他们曾经是都市里令人钦羡的工薪一族,他们曾经乐于购物、精于购物,他们已经具有了消费过程中的自我保护意识和对健康生活、营养饮食的追求。即使他们为了节俭而去购买肉菜市场里的低价肉菜,但他们仍然担忧肉菜的质量,并渴盼“放心肉菜”的到来。因为质量是实在,东西在便宜的同时还要中用、中吃。 3、购物数量少,购物频次多。下岗工人尤其是其中的家庭主妇,生活很有规律,每天基本上是按时起、按时睡,按时买东西,按时看电视……他们的单次购物数额很小,但是购物频次很多,有时一天就会发生数次购买行为。 超市市场调查目的及内容 做好市调, 提升竞争力 一次好的市调,可以提升本身的竞争力,掌握自己的方向,了解竞争者的动态,做到知已知彼,百战不殆。 零售业, 一个商品平凡不能平凡的商品交易场所,她带给的人们的一些期望,没有负于其它行业。如何在这一块新型的圣地发挥商品的潜能,如何驾驭商品的成功之帆?这就要学会如何做到商品正确市调,做好市调可以分为以下几点: 一、商品分类: 妈妈菜蓝商品:也称主妇商品,这种商品的价格如有轻微的变动有些顾客即有相当的关注。顾客对这种商品的价格敏感度最高。同时在销售时应注意此类商品的质量。例:生鲜的商品更应注意鲜度及陈列的量感,妈妈菜蓝商品是每家店以生鲜为主,一般是用来吸引顾客,走低价位及市场鲜度较强的商品,此类商品市调时要非常注意价格的幅度。 红色商品:顾客对此类商品的价格敏感度次之, 这一类商品销量一般比妈妈菜蓝那一类商品销量大,价格也一般比妈妈菜蓝商品高些。此类商品一般都适应中层消费者。所以对此类商品要注重品牌及质 量,这种商品也称之为价格商品,畅销品排行榜上经常有此类商品。绿色商品:顾客对绿色商品的价格敏感度最低。 市调完商品后要做商品的整理,要将营业额商品.毛利商品.敏感性商品.季节性商品.形象商品区别,做一次整理。包括排面和价格。 二.竞争者; 我们市调的对象称之为竞争者。 三,市调应注意问题: 1、禁止与竞争者店的保安,卖场人员起冲突。 2、遇有状况随时报告主管。 3、不可以公开在竞争者店里抄价格、撕价格牌等。 4、必须注意安全。 5、准备好充分的市调工具:笔、纸、秘录机、手机、小灵通等必备工具。 6、市调对公司的形象以及毛利、营业额都有影响,所以做调必须有足够的人员。办事员、营业员、组长等都要定时参加。各部门课长:至少一个月2-3次,生鲜课长每周保证1-2次。 二、市调的内容: 1、竞争者的卖场布置、商品陈列。 2、竞争者的商品包装、规格、品牌等。 3、竞争者的服务品质。 4、竞争畅销品,促销选品等。 5、了解什么是妈妈商品、红色商品、绿色商品等。 总结;一次完善的市调你会注意到我们的很多商品属于畅销商品还是属于滞销商品,可以让你在最短的时间里调整你的商品。 目录 一、 调查目的 二、 调查内容 三、 调查范围及调查样本数 (一)调查范围 (二)调查样本数 四、 调查方法 (一)样本分类 (二)抽样方法 (三)调查问卷 五、 调查组织 (一)市场调查领导小组 (二)市场调查协调部门 (三)执行办公室 (四)参与市场调查人员 (五)调查数据的输入与整理 (六)市场调查报告撰写 六、 调查数据分析与基本判断 (一)个体调查问卷分析 (二)专题调查报告 1、 三枪集团调查报告 2、 华金集团调查报告 3、 豪门集团调查报告 4、 中大集团调查报告 七、 调查的基本结论与策略建议 (一)目标消费群体 (二)市场潜力与需求预测 (三)竞争战略 (四)市场营销策略 1、产品策略 2、价格策略 3、促销策略 4、销售渠道策略 (五)企业形象策略 (六)提高“天彩科技”企业和“天彩”品牌知名度 八\工作总结: (一)工作成果评价 1、调查结果的置信度分析 2、提高了“天彩科技”企业知名度和“天彩”品牌知名度 (二)工作进度评价 (三)工作作风评价 这些年来,一提到购物,人们最先想到的就是超市。超市购物已渐渐成为人们所追求的一种时尚。然而,超市的环境、 服务态度等也会对人们的购物长生不小的影响。人们走进一家超市,首先注意的就是它的环境如何,超市里有一个好的购物环境,能使人们购物时有一种愉快的心情,例如在人们购物时播放一些流行歌曲等等,这都会给人们留下良好的印象。相反要是超市的环境差,一走进去就会给人一种破旧的感觉,很难给人们一种很好的心情。超市在有了一个好的购物环境之后,还必须考虑是否还有好的服务态度。为了满足人们的需求,获取的利润,现在的许多超市所售的商品已由原来的食品,发展到销售生活用品、玩具、蔬菜、水果等等。超市与人们的生活联系紧密,因此,我们这个课题组决定对三明的超市进行一番调查。 自2001年11月至2002年2月,用了进三个月的时间,我们走访了万福隆,好多多等近十家超市,调查了一些国营企业开的超市,对它们的总体情况有了一定的了解,我们对网络、书籍进行了大量的查阅,我们只得到了有关国营企业超市的一些数据(如表所示)。 由于万福隆超市的营业面积将近800平方米,是三明最大的超市,我们重点对他进行了调查。万福隆超市的商品种类繁多,共有食品、日用品、化妆品、装饰品、洗浴用品以及玩具、学习用具等六类商品。其中,食品的销售量占总销售量的比重最大,其次是日常用品,这些都使万福隆超市获得了较高的利润。 据我们的调查,平均每天都有近1800人观顾万福隆超市。万福隆超市为何会吸引如此多的消费者前来观顾呢?通过我们的分析,主要有三点: 首先是万福隆超市的区位选择。万福隆超市地处三明城中心,右有鞋城,左有灯具城;对面有工商银行,左面不到100米还有建设银行,每天都会有成千上万的人从这里经过,这样就增大了它的顾客。 其次,万福隆超市所售商品的种类繁多,可以较大程度的满足人们的需求。 但是在存在较高利润的同时,万福隆超市也存在着一些不足的地方。经过我们小组的研究讨论,对万福隆超市的管理人提出了以下几点建议: 1.可将万福隆超市与左右商行联通,与左边鞋庄,“江南春”,左上方“德克士”,右边“灯具城”商店全部联通,没有隔墙,只保留柱子,实现顾客来源共享,使万福隆成为三明的龙头超市,与百货,贸易中心抗衡。 2.在经营内容上大胆改革,搞出与别个商店不同的特色。如:外卖、送货上门、卖二手货、图书等等。在条件成熟是,也能办个电子商务超市。 3.万福隆超市的门面要美观大方,切忌杂乱,不要在超市门口另摆摊子。超市的购物指南,招牌要醒目,顾客寄存物品要实现自储化,例如:投币储物等等。在顾客方便出入的地方可设计一个留言箱让顾客提出自己的看法建议;设计一块留言板,让顾客预定自己所需的商品。 4.要主动走出去,了解并打开市场。主动与各单位工会联系,元旦、春节各单位搞游园、联欢活动时所需的奖品进行送货上门,优质服务。 5.要取信于民,对过期的食品、物品,要当场销毁或用其它办法处理掉,保证质量、价格、信誉、服务到位。 6.要提倡人文关怀,商场内要有厕所,过道要宽敞,旁边要有长板凳供消费者休息。 7.使收款逐步实现刷卡结帐的方式,收款台不要设在店面中央。 8.在有利润的前提下,做一些公益事业,回报社会,如支持贫困生等。 万福隆超市若能做到以上几点,能够在原有基础上提高经济效益,增加企业的利润。 我国的超市有很好的发展前景。我国正处于社会主义的初级阶段,还未达到世界发达国家的水平。为了几快超市的发展步伐,企业的经营者应当努力寻求一条较好的发展道路,认真改进自己的经营方式,充分利用自己的有利条件,也可向群众争取一些可行性建议,好让企业在国内与国际竞争中利于不败之地。

消费者需求调查包含哪几方面?

鼻涕虫
娘王
(1)市场环境的调查:市场环境调查主要包括经济环境、政治环境、社会文化环境、科学环境和自然地理环境等。具体的调查内容可以是市场的购买力水平,经济结构,国家的方针,政策和法律法规,风俗习惯,科学发展动态,气候等各种影响市场营销的因素。(2)市场需求调查:市场需求调查主要包括消费者需求量调查、消费者收入调查、消费结构调查、消费者行为调查,包括消费者为什么购买、购买什么、购买数量、购买频率、购买时间、购买方式、购买习惯、购买偏好和购买后的评价等。(3)市场供给调查:市场供给调查主要包括产品生产能力调查、产品实体调查等。具体为某一产品市场可以提供的产品数量、质量、功能、型号、品牌等,生产供应企业的情况等。扩展资料:在进行客户需求定义是要注意从不同的角度和侧面来分析,不妨注意以下几个原则:1、全面性原则 对于任何已被列入客户范畴的消费者,我们要全面的定义其几乎所有的需求,全面掌握客户在生活中对于各种产品的需求强度和满足状况。之所以要全面了解,是要让客户生活中的需要完整地体现在你的面前,而且根据客户的全面需要分析其生活习惯、消费偏好、购买能力等相关因素,更为重要的是这种“以全概偏”的了解往往会迷惑客户,刻画销售人员关心客户、爱护客户的经典形象。2、突出性原则 时刻不要忘记销售者的第一要务是为公司销售产品,帮助客户满足需求。所以,要突出产品和客户需求的结合点,清晰的定义出客户的需求,必要的时刻要给客户对本产品的需求形成一个 “独特的名称”。假如你是一个竹躺椅的销售人员,尽可能得让消费者形成对躺椅的独特认识,为它定义出一个别人都没有意识到的“提高生活舒适度需求”等。参考资料来源:百度百科-消费者需求

调研收集客户需求时,有哪些难点?

虫孽
双声
如果团队只把“技术”定义为“实现软件”,认为需求只要愿意去做就能做好,那是不切合实际的。房屋的根基是好奇心,有三根柱子:探索力、沟通力、表达力,以热情作为屋顶。好奇心好奇心,首先指对不熟悉的事物提起兴趣的能力。在做项目时,有的开发人员只对项目将要用到的新技术感到兴奋,对项目所涉及的业务领域则不感兴趣。为什么调研过程总是流于形式?为什么更喜欢在办公室“编写”用例,而不是深入第一线?为什么喜欢甲方的信息中心人员,而不是不懂电脑却至关重要的涉众?这就是原因之一。好奇心,更重要的是从熟悉中发现惊奇的能力。很多时候对业务太熟悉或者存在已有系统,也是捕获需求的一种阻碍只描述它被使用时表现出来的功能和性能。探索力探索力,首先是寻找线索的能力。业务现实就是这样,资料在那里,涉众也在那里。你怎样去寻找线索?拍拍涉众的肩膀,“来吧,说说你对这个系统有什么需求?”这样行吗?探索力,还包括从线索中归纳出问题的能力。就象侦探一样,需求工程师需要从涉众提供的各种信息碎片中捏出真正的问题。这种探索力更强调的是“合成”,而程序员擅长的是“分解”——针对问题,采用某种软件技术解题。某开发团队在一个制作报表的需求上纠缠了很长时间,最后才发现客户方的最高负责人从未要求,也不在意有没有正式的“报表”,他在意的是随时掌控进展情况并做出平衡。如果他确实需要一份“报表”,系统可以给他提供基本数据,他宁愿用自己的人制作任何他想要的报表。可惜,没有人早一点问:为什么需要这个报表?Fowler要来中国”,如果一开始只是知道这么一个事件,并不了解其中细节,可以尝试针对各个环节的信息,通过“反转”、“取代”等手法来探索。沟通力沟通力包括需求工程师和涉众沟通的能力。涉众往往表达的并不是需求,而是一种“需要”或者“利益”。认为客户和程序员一说,就能理解执行得到正确的软件,这种想法是天真的。例如,一名操作员涉众说系统要简单易用。但“简单易用”并不能直接成为需求。需求工程师要耐心和涉众沟通,了解涉众是以什么标准来度量“简单”和“易用”的。沟通力还包括需求工程师在不同涉众之间协调的能力。涉众往往有很多方,A类涉众的利益和B类涉众的利益可能在一定程度上是冲突的,例如,录入人员希望操作步骤尽量少,但如果因此省略了一些确认和验证的步骤,使用这些录入数据的审批人员、施工人员的利益可能就会受到损害。需求工程师需要平衡各方涉众的利益以得出恰当的需求。沟通力还包括需求工程师在涉众与程序员(也是一类涉众)之间协调的能力。例如,操作员要求“一键完成操作”,却难为了程序员。需求启发技术中的访谈、观察、会议等,无不需要人与人之间的沟通能力。而平时程序员使用的是和机器的交流能力,这一点也是身兼多职的程序员值得注意的。程序员如果要去承担需求工程师的角色,沟通力可能是木桶上最短的板。表达力表达力在这里着重指文字表达和组织的能力。需求最常见的形式是以文字方式表达出来的。象用例文档,就是一种规范的、有层次的需求表达形式。用例的写作需要表达力,也培养表达力。“伸缩性”之类的各种字眼,明明只是一个小小的管理系统,却起名叫“××平台”,似乎大家听不懂才说明高深。我有好奇心,有探索力,有沟通力,有表达力,也掌握了各种具体的需求技能,就意味着我会积极地尽我所能去向涉众探索需求吗?没有热情作为屋顶,上面提到的各种“力”不能得到贯彻。培养上面提到的各种素质,主要靠需求工程师自己的努力。培养热情则复杂得多。要了解自己内心的想法,你是否真的喜欢这份工作并享受工作内容呢?

我们应当怎样做需求调研:初识

忍岳
达其怒心
很多需求分析的工作是从需求调研开始的,我们就从这里说起吧。需求调研是需求分析最重要的一环,也最集中地体现了需求分析的特点——既是一份体力活儿,更是一份技术活儿。它既要求我们具有一种理解能力、设计能力,更要求我们具有一种与人交往、沟通的能力。在一个阳光明媚的下午,项目经理带领着项目组成员,参加了客户组织的见面会,一个新的软件研发项目就这样开始了。双方在一种友好的气氛中进行,相互寒暄,介绍与会人员,拉拉家常。逐渐地,会议开始进入了正题。初次接触客户,对于项目团队意义重大。对方对你印象的好坏,今后如何与你交往,都在这个阶段被确定下来。然而,在客户至上的今天,与客户保持适当的谦卑是有必要的,但过于的谦卑却常常给项目日后的进程带来风险。为什么这么说呢?过于的谦卑,处处都是诺诺诺,客户说什么就是什么,就会使客户变得非常强势。这样的结果就是,客户提出了许多变态的、不太现实的、不合理的需求,而我们呢却是一味地服从,客户说什么就是什么。最后我们做得很累,结果却不能让客户满意。正确的做法是,我们对客户提出的需求进行深入理解以后,运用我们专业知识,提出比客户的原始需求更加合理、可操作的解决方案,让客户感觉你说的正是他们想要的。如果能够这样,客户不仅能够欣然接收你提出的方案,而且会感觉你非常专业,你在客户心目中的形象也会无形中提高,使你有的机会提出有利于开发的可行方案,降低开发的风险。这毫无疑问会形成一个良性循环,但要做到这一点并不容易,毫无疑问,在与客户接触初期的表现起到了极其关键的作用。人与人交往,往往在接触的初期就决定了相互的行为方式,与客户交往也是一样。起初的唯唯诺诺,客户说啥就是啥,必然造成客户不再关注你的意见,对你发号施令就可以了。相反,起初展现出一位技术专家的姿态,能大方而得体地提出自己的意见,会使客户重视你的意见,甚至主动征求你的意见。这一方面要求我们对自己要有足够的自信,另一方面也要有循循善诱的表达能力。如果我们做到了这些,就会客户心目中形成一种威信,使项目向着一种良性的方向前进。同时,这样的会议又是一个项目启动会议。客户方领导要在会议上传达给与会代表一个清晰的信号,那就是与会代表今后要积极配合我们完成今后的工作。这时候,我们要弄清,客户方有哪些角色,谁是这些角色的需求提出者与决策者。这是什么意思呢?在软件项目中,特别是管理型软件项目中,客户都代表的是一个群体,而不是个人。他们代表的可能是一个单位、一个集团,甚至是一系列组织机构。在这样一个群体中,他们按照职能被划分成了不同的角色。拿一个单位来说,横向可能划分成不同的部门,财务部、销售部、采购部、生产部

如何系统的进行用户需求分析

白菜
虽然
1.概念需求的定义包括从用户角度(系统的外部行为),以及从开发者角度(一些内部特性)来阐述需求.关键的问题是一定要编写需求文档.我曾经目睹过一个项目中途更换了所有的开发者,客户被迫与新的需求分析者坐到一起.系统的分析人员说:"我们想与你谈谈你的需求."客户的第一反应便是:"我已经将我的要求都告诉你们前任了,现在我要的就是给我编一个系统".百事通而实际上,UGGs,需求并未编写成文档,因此新的分析人员不得不从头做起.所以如果只有一堆邮件、会谈记录或一些零碎的未整理的对话,你就确信你已明白用户的需求,那完全是自欺欺人.需求的另外一种定义认为需求是"用户所需要的并能触发一个程序或系统开发工作的说明".有些需求分析专家拓展了这个概念:"从系统外部能发现系统所具有的满足于用户的特点、功能及属性等".这些定义强调的是产品是什么样的,而并非产品是怎样设计、构造的.而下面的定义则从用户需要进一步转移到了系统特性:需求是指明必须实现什么的规格说明.它描述了系统的行为、特性或属性,是在开发过程中对系统的约束.从上面这些不同形式的定义不难发现:并没有一个清晰、毫无二义性的"需求"术语存在,真正的"需求"实际上在人们的脑海中,这个人们主要是指客户,但一般情况下,用户并不能描述自己的需要,只就需要系统分析人员根据用户的自己语言的描述整理出相关的需要再进一步和客户核对.系统分析员和客户需要确保所有项目风险承担者在描述需求的那些名词的理解上务必达成共识.任何文档形式的需求(例如如下将要描述的需求规格说明书)仅是一个模型,一种描述.2.需求分析的任务开发软件系统最为困难的部分就是准确说明开发什么.最为困难的概念性工作便是编写出详细技术需求,这包括所有面向用户、面向机器和其它软件系统的接口.同时这也是一旦做错,将最终会给系统带来极大损害的部分,并且以后再对它进行修改也极为困难.目前,国内产品的庞杂,一家企业可能有几个系统并立运行,它们之间接口是系统开发人员最头痛的问题.对于商业最终用户应用程序,企业信息系统和软件作为一个大系统的一部分的产品是显而易见的.但是对于我们开发人员来说,并没有编写出客户认可的需求文档,我们如何知道项目于何时结束?而如果我们不知道什么对客户来说是重要的,那我们又如何能使客户感到满意呢?然而,即便并非出于商业目的的软件需求也是必须的.例如库、组件和工具这些供开发小组内部使用的软件.当然你可能偶尔勿需文档说明就能与其他人意见较为一致,但更常见的是出现重复返工这种不可避免的后果,而重新编制代码的代价远远超过重写一份需求文档的代价,这些血的教训正在国内的软件开发者身上发生.近来,我遇到一个开发小组开发包括代码编辑器在内的一套内部使用的计算机辅助软件.不幸的是,当他们开发完这个工具后,发现这个工具不能打印出源代码文件,使用者当然希望有这个功能.结果这个小组只好手工抄写源代码文档以供代码检查.这说明那怕需求明确无误并构思准确,如果我们没有编写文档,软件达不到期望目标也只能是咎由自取了.相反的情况,我曾见一个要集成到"错误跟踪系统"中的简单界面写了一页需求说明.而操作系统系统管理员在为处理脚本时发现简单的一张需求清单竟是如此有用.他们依据需求对系统进行测试时,此系统不仅非常清晰地实现了所有必需功能,而且未发现任何错误.事实上,需求文档在开发过程中一直起指导作用.3.需求分析过程可把整个软件需求工程研究领域划分为需求开发和需求管理两部分更合适,如图4-1所示:图4-1 需求工程域的层次分解示意图需求开发可进一步分为:问题获取、分析、编写规格说明和验证四个阶段.这些子项包括软件类产品中需求收集、评价、编写文档等所有活动.需求开发活动包括以下几个方面:确定产品所期望的用户类别.获取每个用户类的需求.了解实际用户任务和目标以及这些任务所支持的业务需求.分析源于用户的信息以区别用户任务需求、功能需求、业务规则、质量属性、建议解决方法和附加信息.将系统级的需求分为几个子系统,并将需求中的一部份分配给软件组件.了解相关质量属性的重要性.商讨实施优先级的划分.将所收集的用户需求编写成文档和模型.评审需求规格说明,确保对用户需求达到共同的理解与认识,并在整个开发小组接受说明之前将问题都弄清楚.需求管理需要"建立并维护在软件工程中同客户达成的合同" .这种合同都包含在编写的需求文档与模型中.客户的接受仅是需求成功的一半,开发人员也必须能够接受他们,并真正把需求应用到产品中.通常的需求管理活动包括:定义需求基线(迅速制定需求文档的主体).评审提出的需求变更、评估每项变更的可能影响从而决定是否实施它.以一种可控制的方式将需求变更融入到项目中.使当前的项目计划与需求一致.估计变更需求所产生影响并在此基础上协商新的承诺,这种承诺具体体现在项目解决方案上.让每项需求都能与其对应的设计、源代码和测试用例联系起来以实现跟踪.在整个项目过程中跟踪需求状态及其变更情况.以上几点说明是我总结了成功实施项目后系统分析人员的经验,同时也根据国内外的其他系统实施的相关成功经验,进行了总结.4.需求的类型下面这些定义是需求工程领域中常见术语的定义.软件需求包括三个不同的层次:业务需求、用户需求和功能需求(也包括非功能需求).1.业务需求(business requirement)反映了组织机构或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明.2.用户需求(user requirement) 文档描述了用户使用产品必须要完成的任务,这在使用实例(use case)文档或方案脚本说明中予以说明.3.功能需求(functional requirement)定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求.在软件需求规格说明书 (SRS)中说明的功能需求充分描述了软件系统所应具有的外部行为.软件需求规格说明在开发、测试、质量保证、项目管理以及相关项目功能中都起了重要的作用.对一个大型系统来说,软件功能需求也许只是系统需求的一个子集,因为另外一些可能属于子系统(或软件部件).作为功能需求的补充,软件需求规格说明还应包括非功能需求,它描述了系统展现给用户的行为和执行的操作等.它包括产品必须遵从的标准、规范和合约;外部界面的具体细节;性能要求;设计或实现的约束条件及质量属性.所谓约束是指对开发人员在软件产品设计和构造上的限制.质量属性是通过多种角度对产品的特点进行描述,从而反映产品功能.多角度描述产品对用户和开发人员都极为重要.下面以一个字处理程序为例来说明需求的不同种类.业务需求可能是:"用户能有效地纠正文档中的拼写错误",该产品的包装盒封面上可能会标明这是个满足业务需求的拼写检查器.而对应的用户需求可能是"找出文档中的拼写错误并通过一个提供的替换项列表来供选择替换拼错的词".同时,该拼写检查器还有许多功能需求,如找到并高亮度提示错词的操作;显示提供替换词的对话框以及实现整个文档范围的替换.从以上定义可以发现,需求并未包括设计细节、实现细节、项目计划信息或测试信息.需求与这些没有关系,它关注的是充分说明你究竟想开发什么.项目也有其它方面的需求,如开发环境需求或发布产品及移植到支撑环境的需求.尽管这些需求对项目成功也至关重要,但它们并非本书所要讨论的.5.需求分析的原则不重视需求过程的项目队伍将自食其果.需求工程中的缺陷将给项目成功带来极大风险,这里的"成功"是指推出的产品能以合理的价格、及时地在功能、质量上完全满足用户的期望.下面将讨论一些需求风险.不适当的需求过程所引起的一些风险:1. 无足够用户参与客户经常不明白为什么收集需求和确保需求质量需花费那么多功夫,开发人员可能也不重视用户的参与.究其原因:一是因为开发人员感觉与用户合作不如编写代码有意思;二是因为开发人员觉得已经明白用户的需求了.在某些情况下,与实际使用产品的用户直接接触很困难,而客户也不太明白自己的真正需求.但还是应让具有代表性的用户在项目早期直接参与到开发队伍中,并一同经历整个开发过程.系统人员在实践过程中,也有些感觉,在实施一家公司的项目时,若无足够的用户参与,系统人员获得的需求是片面的,不完整的,这样系统在需求之初就埋下风险.2. 用户需求的不断增加在开发中若不断地补充需求,项目就越变越庞大以致超过其计划及预算范围.计划并不总是与项目需求规模与复杂性、风险、开发生产率及需求变更实际情况相一致,这使得问题更难解决.实际上,问题根源在于用户需求的改变和开发者对新需求所作的修改.要想把需求变更范围控制到最小,必须一开始就对项目视图、范围、目标、约束限制和成功标准给予明确说明,并将此说明作为评价需求变更和新特性的参照框架.说明中包括了对每种变更进行变更影响因素分析的变更控制过程,有助于所有风险承担者明白业务决策的合理性,即为何进行某些变更,相应消耗的时间、资源或特性上的折中.产品开发中不断延续的变更会使其整体结构日渐紊乱,补丁代码也使得整个程序难以理解和维护.插入补丁代码使模块违背强内聚、松耦合的设计原则,特别是如果项目配置管理工作不完善的话,收回变更和删除特性会带来问题.如果你尽早地区别这些可能带来变更的特性,你就能开发一个更为健壮的结构,并能更好地适应它.这样设计阶段需求变更不会直接导致补丁代码,同时也有利于减少因变更导致质量的下降.3. 模棱两可的需求模棱两可是需求规格说明中最为可怕的问题.它的一层含义是指诸多读者对需求说明产生了不同的理解;另一层含义是指单个读者能用不止一个方式来解释某个需求说明.模棱两可的需求会使不同的风险承担者产生不同的期望,它会使开发人员为错误问题而浪费时间,并且使测试者与开发者所期望的不一致.一位系统测试人员曾告诉我,她所在的测试组经常对需求理解有误,以致不得不重写许多测试用例并重做许多测试.处理模棱两可需求的一种方法是组织好负责从不同角度审查需求的队伍.仅仅简单浏览一下需求文档是不能解决模棱两可问题的.如果不同的评审者从不同的角度对需求说明给予解释,但每个评审人员都真正了解需求文档,这样二义性就不会直到项目后期才被发现,那时再发现的话会使得更正代价很大.4. 不必要的特性"画蛇添足"是指开发人员力图增加一些"用户欣赏"但需求规格说明中并未涉及的新功能.经常发生的情况是用户并不认为这些功能性很有用,以致在其上耗费的努力"白搭"了.开发人员应当为客户构思方案并为他们提供一些具有创新意识的思路,具体提供哪些功能要在客户所需与开发人员在允许时限内的技术可行性之间求得平衡,开发人员应努力使功能简单易用,而不要未经客户同意,擅自脱离客户要求,自作主张.同样,客户有时也可能要求一些看上去很"酷",但缺乏实用价值的功能,而实现这些功能只能徒耗时间和成本.为了将"画蛇添足"的危害尽量减小,应确信:你明白为什么要包括这些功能,以及这些功能的"来龙去脉",这样使得需求分析过程始终是注重那些能使用户完成他们业务任务的核心功能.5. 过于精简的规格说明有时,客户并不明白需求分析有如此重要,于是只作一份简略之至的规格说明,仅涉及了产品概念上的内容,然后让开发人员在项目进展中去完善,结果很可能出现的是开发人员先建立产品的结构之后再完成需求说明.这种方法可能适合于尖端研究性的产品或需求本身就十分灵活的情况.但在大多数情况下,这会给开发人员带来挫折(使他们在不正确的假设前提和极其有限的指导下工作),也会给客户带来烦恼(他们无法得到他们所设想的产品).6. 忽略了用户分类大多数产品是由不同的人使用其不同的特性,使用频繁程度也有所差异,使用者受教育程度和经验水平也不尽相同.如果你不能在项目早期就针对所有这些主要用户进行分类的话,必然导致有的用户对产品感到失望.例如,菜单驱动操作对高级用户太低效了,但含义不清的命令和快捷键又会使不熟练的用户感到困难.7. 不准确的计划据统计,导致需求过程中软件成本估计极不准确的原因主要有以下五点:频繁的需求变更、遗漏的需求、与用户交流不够、质量低下的需求规格说明和不完善的需求分析.对不准确的要求所提问题的正确响应是"等我真正明白你的需求时,我就会来告诉你".基于不充分信息和未经深思的对需求不成熟的估计很容易为一些因素左右.要作出估计时,最好还是给出一个范围.未经准备的估计通常是作为一种猜测给出的,听者却认为是一种承诺.因此我们要尽力给出可达到的目标并坚持完成它.6.需求分析人员和用户的合作关系优秀的软件产品是建立在优秀的需求基础之上的.而高质量的需求来源于客户与开发人员之间有效的交流与合作.通常,开发人员与客户或客户代理人,如市场人员间的关系反而会成为一种对立关系.双方的管理者都只想自己的利益而搁置用户提供的需求从而产生摩擦,在这种情况下,不会给双方带来一点益处.只有当双方参与者都明白要成功自己需要什么,同时也应知道要成功合作方需要什么时,才能建立起一种合作关系.由于项目压力与日渐增,所有风险承担者有着一个共同的目标这一点容易被遗忘.其实大家都想开发出一个既能实现商业价值,又能满足用户需要,还能使开发者感到满足的优秀软件产品.软件客户需求权利书列出了十条关于客户在项目需求工程实施中与分析人员、开发人员交流时的合法要求.每一项权利都对应着软件开发人员、分析人员的义务.而软件客户需求义务书也列出了十条关于客户在需求过程中应承担的义务.如果愿意,可以将其作为开发人员的权利书.客户有如下权利:1:要求分析人员使用符合客户语言习惯的表达需求讨论应集中于业务需要和任务,故要使用业务术语,你应将其教给分析人员,而你 不一定要懂得计算机的行业术语.2:要求分析人员了解客户的业务及目标通过与用户交流来获取用户需求、分析人员才能更好地了解你的业务任务和怎样才能使产品更好地满足你的需要.这将有助于开发人员设计出真正满足你的需要并达到你期望的优秀软件.为帮助开发人员和分析人员,可以考虑邀请他们观察你或你的同事是怎样工作的.如果新开发系统是用来替代已有的系统,那么开发人员应使用一下目前的系统,这将有利于他们明白目前系统是怎样工作的,其工作流程的情况,以及可供改进之处.3:要求分析人员编写软件需求规格说明分析人员要把从你和其他客户那里获得的所有信息进行整理,以区分开业务需求及规范、功能需求、质量目标、解决方法和其它信息.通过这些分析就能得到一份软件需求规格说明.而这份软件需求规格说明便在开发人员和客户之间针对要开发的产品内容达成了协议.软件需求规格说明书可以用一种你认为易于翻阅和理解的方式组织编写.要评审编写出的规格说明以确保它们准确而完整地表达了你的需求.一份高质量的软件需求规格说明能有助于开发人员开发出真正需要的产品.4:要求得到需求工作结果的解释说明分析人员可能采用了多种图表作为文字性软件需求规格说明的补充.因为如工作流程图那样的图表能很清楚地描述出系统行为的某些方面.所以需求说明中的各种图表有着极高的价值.虽然它们不太难于理解,但是你很可能对此并不熟悉.因此可以要求分析人员解释说明每张图表的作用或其它的需求开发工作结果和符号的意义,及怎样检查图表有无错误及不一致等.5:要求开发人员尊重你的意见如果用户与开发人员之间不能相互理解,那关于需求的讨论将会有障碍,共同合作能使大家"兼听则明".参与需求开发过程的客户有权要求开发人员尊重他们并珍惜他们为项目成功所付出的时间.同样,客户也应对开发人员为项目成功这一共同目标所作出的努力表示尊重与感激.6:要求开发人员对需求及产品实施提供建议,拿出主意通常,客户所说的"需求"已是一种实际可能的实施解决方案,分析人员将尽力从这些解决方法中了解真正的业务及其需求,同时还应找出已有系统不适合当前业务之处,以确保产品不会无效或低效.在彻底弄清业务领域内的事情后,分析人员有时就能提出相当好的改进方法.有经验且富有创造力的分析人员还能提出增加一些用户并未发现的很有价值的系统特性.7:描述产品易使用的特性你可以要求分析人员在实现功能需求的同时还要注重软件的易用性.因为这些易用特性或质量属性能使你更准确、高效地完成任务.例如,客户有时要求产品要"用户友好"或"健壮"或"高效率",但这对于开发人员来说,太主观了并无实用价值.正确的应是:分析人员通过询问和调查了解客户所要的友好、健壮、高效所包含的具体特性.8:调整需求,允许重用已有的软件组件需求通常要有一定的灵活性.分析人员可能发现已有的某个软件组件与你描述的需求很相符.在这种情况下,分析人员应提供一些修改需求的选择以便开发人员能够在新系统开发中重用一些已有的软件.如果有可重用的机会出现,同时你又能调整你的需求说明,那就能降低成本和节省时间,而不必严格按原有的需求说明开发.所以说,如果想在产品中使用一些已有的商业常用组件,而它们并不完全适合你所需的特性,这时一定程度上的需求灵活性就显得极为重要了.9:获得满足客户功能和质量要求的系统每个人都希望项目获得成功.但这不仅要求你要清晰地告知开发人员关于系统"做什么"所需的所有信息,而且还要求开发人员能通过交流了解清楚取舍与限制.一定要明确说明你的假设和潜在的期望.否则,开发人员开发出的产品很可能无法让你满意.客户有下列义务:1:给分析人员讲解你的业务分析人员要依靠你给他们讲解的业务概念及术语.但你不能指望分析人员会成为该领域的专家,而只能让他们真正明白你的问题和目标.不要期望分析人员能把握你们业务的细微与潜在之处,他们很可能并不知道那些对于你和你的同事来说理所当然的"常识".2:抽出时间清楚地说明并完善需求客户很忙,经常在最忙的时候还得参与需求开发.但无论如何,你有义务抽出时间参与"头脑风暴"会议的讨论,接受采访或其它获取需求的活动.有时分析人员可能先以为明白了你的观点,而过后发现还需要你的讲解.这时,请耐心一些对待需求和需求的精化工作过程中的反复,因为它是人们交流中的很自然的现象,何况这对软件产品的成功极为重要.3:准确而详细地说明需求编写一份清晰、准确的需求文档是很困难的.由于处理细节问题不但烦人而且又耗时,故很容易留下模糊不清的需求.但是,在开发过程中,必须得解决这种模糊性和不准确性.而你恰是为解决这些问题作出决定的最佳人选.不然的话,你就只好靠开发人员去正确猜测了.在需求规格说明中暂时加上待定(to be determined, TBD也可采用汉语拼音略写"DQD:待确定")的标志是个不错的办法.用该标志可指明了哪些需要进一步探讨、分析或增加信息的地方.不过,有时也可能因为某个特殊需求难以解决或没有人愿意处理它而注上TBD标志.尽量将每项需求的内容都阐述清楚,以便分析人员能准确的将其写进软件需求规格说明中.如果你一时不能准确表述,那就得允许获取必要的准确信息这样一个过程.通常使用所谓的原型技术.通过开发的原型,你可以同开发人员一起反复修改,不断完善需求定义.4:及时地作出决定正如一位建筑师为你修建房屋,分析人员将要求你做出一些选择和决定.这些决定包括来自多个用户提出的处理方法或在质量特性冲突和信息准确度中选择折衷方案等.有权做出决定的客户必须积极地对待这一切,尽快做处理、做决定.因为开发人员通常只有等你做出了决定才能行动,而这种等待会延误项目的进展.5:尊重开发人员的需求可行性及成本评估所有的软件功能都有其成本价格,开发人员最适合预算这些成本(尽管许多开发人员并不擅长评估预测).你所希望的某些产品特性可能在技术上行不通,或者实现它要付出极为高昂的代价.而某些需求试图在操作环境中要求不可能达到的性能或试图得到一些根本得不到的数据,开发人员会对此作出负面的评价意见,你应该尊重他们的意见.有时,你可以重新给出一个在技术上可行、实现上便宜的需求,例如,要求某个行为在"瞬间"发生是不可行的,但换种更具体的时间需求说法("在50ms以内",但若没有准确的技术分析不能轻易下结论),这就可以实现了.6: 划分需求优先级别大多数项目没有足够的时间或资源来实现功能性的每个细节.决定哪些特性是必要的,哪些是重要的,哪些是好的,是需求开发的主要部分.只能由你来负责设定需求优先级,因为开发者并不可能按你的观点决定需求优先级.开发者将为你确定优先级提供有关每个需求的花费和风险的信息.当你设定优先级时,你帮助开发者确保在适当的时间内用最小的开支取得最好的效果.在时间和资源限制下,关于所需特性能否完成或完成多少应该尊重开发人员的意见.尽管没有人愿意看到自己所希望的需求在项目中未被实现,但毕竟是要面对这种现实的.业务决策有时不得不依据优先级来缩小项目范围或延长工期,或增加资源,或在质量上寻找折衷.7:评审需求文档和原型正如我们将在第1 4章讨论的,无论是正式的还是非正式的方式,对需求文档进行评审都会对软件质量提高有所帮助.让客户参与评审才能真正鉴别需求文档是否的确完整、正确说明了期望的必要特性.评审也给客户代表提供一个机会,给需求分析人员带来反馈信息以改进他们的工作.如果你认为编写的需求文档不够准确,就有义务尽早告诉分析人员并为改进提供建议.通过阅读需求规格说明,很难想象实际的软件是什么样子的.更好的方法是先为产品开发一个原型.这样你就能提供更有价值的反馈信息给开发人员,帮助他们更好地理解你的需求.必须认识到:原型并非是一个实际产品,但开发人员能将其转变、扩充成功能齐全的系统.8:需求出现变更要马上联系不断的需求变更会给在预定计划内完成高质量产品带来严重的负面影响.变更是不可避免的,但在开发周期中变更越在晚期出现,其影响越大.变更不仅会导致代价极高的返工,而且工期也会被迫延误,特别是在大体结构已完成后又需要增加新特性时.所以一旦你发现需要变更需求时,请一定立即通知分析人员.9:应遵照开发组织处理需求变更的过程为了将变更带来的负面影响减少到最低限度,所有的参与者必须遵照项目的变更控制过程.这要求不放弃所有提出的变更,对每项要求的变更进行分析、综合考虑,最后作出合适的决策以确定将某些变更引入项目中.10:尊重开发人员采用的需求工程过程软件开发中最具挑战性的莫过于收集需求并确定其正确性.分析人员采用的方法有其合理性.也许你认为需求过程不太划算,但请相信花在需求开发上的时间是"很有价值"的.如果你理解并支持分析人员为收集、编写需求文档和确保其质量所采用的技术,那么整个过程将会更为顺利.尽管去询问分析人员为什么他们要收集某些信息,或参与与需求有关的活动.系统分析人员在开发过程中可能会遇到以下问题,一些很忙的客户可能不愿意积极参与需求过程,而缺少客户参与将很可能导致不理想的产品.故一定要确保需求开发中的主要参与者都了解并接受他们的义务.如果遇到分歧,通过协商以达成对各自义务的相互理解,这样能减少今后的摩擦.7.需求文档需求开发的最终成果是:客户和开发小组对将要开发的产品达成一致协议.协议综合了业务需求、用户需求和软件功能需求.就像我们早先所看到的,项目视图和范围文档包含了业务需求,而使用实例文档则包含了用户需求.你必须编写从使用实例派生出的功能需求文档,还要编写产品的非功能需求文档,包括质量属性和外部接口需求.只有以结构化和可读性方式编写这些文档,并由项目的风险承担者评审通过后,各方面人员才能确信他们所赞同的需求是可靠的.你可以使用以下三种方法编写软件需求规格说明:用好的结构化和自然语言编写文本型文档.建立图形化模型,这些模型可以描绘转换过程、系统状态和它们之间的变化、数据关系、逻辑流或对象类和它们的关系.编写形式化规格说明,这可以通过使用数学上精确的形式化逻辑语言来定义需求.由于形式化规格说明具有很强的严密性和精确度,因此,所使用的形式化语言只有极少数软件开发人员才熟悉,更不用说客户了.虽然结构化的自然语言具有许多缺点,但在大多数软件工程中,它仍是编写需求文档最现实的方法.包含了功能和非功能需求的基于文本的软件需求规格说明已经为大多数项目所接受.图形化分析模型通过提供另一种需求视图,增强了软件需求规格说明.如果解决了您的问题请采纳!如果未解决请继续

如何进行用户需求分析

古之至人
1.概念需求的定义包括从用户角度(系统的外部行为),以及从开发者角度(一些内部特性)来阐述需求.关键的问题是一定要编写需求文档.我曾经目睹过一个项目中途更换了所有的开发者,客户被迫与新的需求分析者坐到一起.系统的分析人员说:"我们想与你谈谈你的需求."客户的第一反应便是:"我已经将我的要求都告诉你们前任了,现在我要的就是给我编一个系统".百事通而实际上,UGGs,需求并未编写成文档,因此新的分析人员不得不从头做起.所以如果只有一堆邮件、会谈记录或一些零碎的未整理的对话,你就确信你已明白用户的需求,那完全是自欺欺人.需求的另外一种定义认为需求是"用户所需要的并能触发一个程序或系统开发工作的说明".有些需求分析专家拓展了这个概念:"从系统外部能发现系统所具有的满足于用户的特点、功能及属性等".这些定义强调的是产品是什么样的,而并非产品是怎样设计、构造的.而下面的定义则从用户需要进一步转移到了系统特性:需求是指明必须实现什么的规格说明.它描述了系统的行为、特性或属性,是在开发过程中对系统的约束.从上面这些不同形式的定义不难发现:并没有一个清晰、毫无二义性的"需求"术语存在,真正的"需求"实际上在人们的脑海中,这个人们主要是指客户,但一般情况下,用户并不能描述自己的需要,只就需要系统分析人员根据用户的自己语言的描述整理出相关的需要再进一步和客户核对.系统分析员和客户需要确保所有项目风险承担者在描述需求的那些名词的理解上务必达成共识.任何文档形式的需求(例如如下将要描述的需求规格说明书)仅是一个模型,一种描述.2.需求分析的任务开发软件系统最为困难的部分就是准确说明开发什么.最为困难的概念性工作便是编写出详细技术需求,这包括所有面向用户、面向机器和其它软件系统的接口.同时这也是一旦做错,将最终会给系统带来极大损害的部分,并且以后再对它进行修改也极为困难.目前,国内产品的庞杂,一家企业可能有几个系统并立运行,它们之间接口是系统开发人员最头痛的问题.对于商业最终用户应用程序,企业信息系统和软件作为一个大系统的一部分的产品是显而易见的.但是对于我们开发人员来说,并没有编写出客户认可的需求文档,我们如何知道项目于何时结束?而如果我们不知道什么对客户来说是重要的,那我们又如何能使客户感到满意呢?然而,即便并非出于商业目的的软件需求也是必须的.例如库、组件和工具这些供开发小组内部使用的软件.当然你可能偶尔勿需文档说明就能与其他人意见较为一致,但更常见的是出现重复返工这种不可避免的后果,而重新编制代码的代价远远超过重写一份需求文档的代价,这些血的教训正在国内的软件开发者身上发生.近来,我遇到一个开发小组开发包括代码编辑器在内的一套内部使用的计算机辅助软件.不幸的是,当他们开发完这个工具后,发现这个工具不能打印出源代码文件,使用者当然希望有这个功能.结果这个小组只好手工抄写源代码文档以供代码检查.这说明那怕需求明确无误并构思准确,如果我们没有编写文档,软件达不到期望目标也只能是咎由自取了.相反的情况,我曾见一个要集成到"错误跟踪系统"中的简单界面写了一页需求说明.而操作系统系统管理员在为处理脚本时发现简单的一张需求清单竟是如此有用.他们依据需求对系统进行测试时,此系统不仅非常清晰地实现了所有必需功能,而且未发现任何错误.事实上,需求文档在开发过程中一直起指导作用.3.需求分析过程可把整个软件需求工程研究领域划分为需求开发和需求管理两部分更合适,如图4-1所示:图4-1 需求工程域的层次分解示意图需求开发可进一步分为:问题获取、分析、编写规格说明和验证四个阶段.这些子项包括软件类产品中需求收集、评价、编写文档等所有活动.需求开发活动包括以下几个方面:确定产品所期望的用户类别.获取每个用户类的需求.了解实际用户任务和目标以及这些任务所支持的业务需求.分析源于用户的信息以区别用户任务需求、功能需求、业务规则、质量属性、建议解决方法和附加信息.将系统级的需求分为几个子系统,并将需求中的一部份分配给软件组件.了解相关质量属性的重要性.商讨实施优先级的划分.将所收集的用户需求编写成文档和模型.评审需求规格说明,确保对用户需求达到共同的理解与认识,并在整个开发小组接受说明之前将问题都弄清楚.需求管理需要"建立并维护在软件工程中同客户达成的合同" .这种合同都包含在编写的需求文档与模型中.客户的接受仅是需求成功的一半,开发人员也必须能够接受他们,并真正把需求应用到产品中.通常的需求管理活动包括:定义需求基线(迅速制定需求文档的主体).评审提出的需求变更、评估每项变更的可能影响从而决定是否实施它.以一种可控制的方式将需求变更融入到项目中.使当前的项目计划与需求一致.估计变更需求所产生影响并在此基础上协商新的承诺,这种承诺具体体现在项目解决方案上.让每项需求都能与其对应的设计、源代码和测试用例联系起来以实现跟踪.在整个项目过程中跟踪需求状态及其变更情况.以上几点说明是我总结了成功实施项目后系统分析人员的经验,同时也根据国内外的其他系统实施的相关成功经验,进行了总结.4.需求的类型下面这些定义是需求工程领域中常见术语的定义.软件需求包括三个不同的层次:业务需求、用户需求和功能需求(也包括非功能需求).1.业务需求(business requirement)反映了组织机构或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明.2.用户需求(user requirement) 文档描述了用户使用产品必须要完成的任务,这在使用实例(use case)文档或方案脚本说明中予以说明.3.功能需求(functional requirement)定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求.在软件需求规格说明书 (SRS)中说明的功能需求充分描述了软件系统所应具有的外部行为.软件需求规格说明在开发、测试、质量保证、项目管理以及相关项目功能中都起了重要的作用.对一个大型系统来说,软件功能需求也许只是系统需求的一个子集,因为另外一些可能属于子系统(或软件部件).作为功能需求的补充,软件需求规格说明还应包括非功能需求,它描述了系统展现给用户的行为和执行的操作等.它包括产品必须遵从的标准、规范和合约;外部界面的具体细节;性能要求;设计或实现的约束条件及质量属性.所谓约束是指对开发人员在软件产品设计和构造上的限制.质量属性是通过多种角度对产品的特点进行描述,从而反映产品功能.多角度描述产品对用户和开发人员都极为重要.下面以一个字处理程序为例来说明需求的不同种类.业务需求可能是:"用户能有效地纠正文档中的拼写错误",该产品的包装盒封面上可能会标明这是个满足业务需求的拼写检查器.而对应的用户需求可能是"找出文档中的拼写错误并通过一个提供的替换项列表来供选择替换拼错的词".同时,该拼写检查器还有许多功能需求,如找到并高亮度提示错词的操作;显示提供替换词的对话框以及实现整个文档范围的替换.从以上定义可以发现,需求并未包括设计细节、实现细节、项目计划信息或测试信息.需求与这些没有关系,它关注的是充分说明你究竟想开发什么.项目也有其它方面的需求,如开发环境需求或发布产品及移植到支撑环境的需求.尽管这些需求对项目成功也至关重要,但它们并非本书所要讨论的.5.需求分析的原则不重视需求过程的项目队伍将自食其果.需求工程中的缺陷将给项目成功带来极大风险,这里的"成功"是指推出的产品能以合理的价格、及时地在功能、质量上完全满足用户的期望.下面将讨论一些需求风险.不适当的需求过程所引起的一些风险:1. 无足够用户参与客户经常不明白为什么收集需求和确保需求质量需花费那么多功夫,开发人员可能也不重视用户的参与.究其原因:一是因为开发人员感觉与用户合作不如编写代码有意思;二是因为开发人员觉得已经明白用户的需求了.在某些情况下,与实际使用产品的用户直接接触很困难,而客户也不太明白自己的真正需求.但还是应让具有代表性的用户在项目早期直接参与到开发队伍中,并一同经历整个开发过程.系统人员在实践过程中,也有些感觉,在实施一家公司的项目时,若无足够的用户参与,系统人员获得的需求是片面的,不完整的,这样系统在需求之初就埋下风险.2. 用户需求的不断增加在开发中若不断地补充需求,项目就越变越庞大以致超过其计划及预算范围.计划并不总是与项目需求规模与复杂性、风险、开发生产率及需求变更实际情况相一致,这使得问题更难解决.实际上,问题根源在于用户需求的改变和开发者对新需求所作的修改.要想把需求变更范围控制到最小,必须一开始就对项目视图、范围、目标、约束限制和成功标准给予明确说明,并将此说明作为评价需求变更和新特性的参照框架.说明中包括了对每种变更进行变更影响因素分析的变更控制过程,有助于所有风险承担者明白业务决策的合理性,即为何进行某些变更,相应消耗的时间、资源或特性上的折中.产品开发中不断延续的变更会使其整体结构日渐紊乱,补丁代码也使得整个程序难以理解和维护.插入补丁代码使模块违背强内聚、松耦合的设计原则,特别是如果项目配置管理工作不完善的话,收回变更和删除特性会带来问题.如果你尽早地区别这些可能带来变更的特性,你就能开发一个更为健壮的结构,并能更好地适应它.这样设计阶段需求变更不会直接导致补丁代码,同时也有利于减少因变更导致质量的下降.3. 模棱两可的需求模棱两可是需求规格说明中最为可怕的问题.它的一层含义是指诸多读者对需求说明产生了不同的理解;另一层含义是指单个读者能用不止一个方式来解释某个需求说明.模棱两可的需求会使不同的风险承担者产生不同的期望,它会使开发人员为错误问题而浪费时间,并且使测试者与开发者所期望的不一致.一位系统测试人员曾告诉我,她所在的测试组经常对需求理解有误,以致不得不重写许多测试用例并重做许多测试.处理模棱两可需求的一种方法是组织好负责从不同角度审查需求的队伍.仅仅简单浏览一下需求文档是不能解决模棱两可问题的.如果不同的评审者从不同的角度对需求说明给予解释,但每个评审人员都真正了解需求文档,这样二义性就不会直到项目后期才被发现,那时再发现的话会使得更正代价很大.4. 不必要的特性"画蛇添足"是指开发人员力图增加一些"用户欣赏"但需求规格说明中并未涉及的新功能.经常发生的情况是用户并不认为这些功能性很有用,以致在其上耗费的努力"白搭"了.开发人员应当为客户构思方案并为他们提供一些具有创新意识的思路,具体提供哪些功能要在客户所需与开发人员在允许时限内的技术可行性之间求得平衡,开发人员应努力使功能简单易用,而不要未经客户同意,擅自脱离客户要求,自作主张.同样,客户有时也可能要求一些看上去很"酷",但缺乏实用价值的功能,而实现这些功能只能徒耗时间和成本.为了将"画蛇添足"的危害尽量减小,应确信:你明白为什么要包括这些功能,以及这些功能的"来龙去脉",这样使得需求分析过程始终是注重那些能使用户完成他们业务任务的核心功能.5. 过于精简的规格说明有时,客户并不明白需求分析有如此重要,于是只作一份简略之至的规格说明,仅涉及了产品概念上的内容,然后让开发人员在项目进展中去完善,结果很可能出现的是开发人员先建立产品的结构之后再完成需求说明.这种方法可能适合于尖端研究性的产品或需求本身就十分灵活的情况.但在大多数情况下,这会给开发人员带来挫折(使他们在不正确的假设前提和极其有限的指导下工作),也会给客户带来烦恼(他们无法得到他们所设想的产品).6. 忽略了用户分类大多数产品是由不同的人使用其不同的特性,使用频繁程度也有所差异,使用者受教育程度和经验水平也不尽相同.如果你不能在项目早期就针对所有这些主要用户进行分类的话,必然导致有的用户对产品感到失望.例如,菜单驱动操作对高级用户太低效了,但含义不清的命令和快捷键又会使不熟练的用户感到困难.7. 不准确的计划据统计,导致需求过程中软件成本估计极不准确的原因主要有以下五点:频繁的需求变更、遗漏的需求、与用户交流不够、质量低下的需求规格说明和不完善的需求分析.对不准确的要求所提问题的正确响应是"等我真正明白你的需求时,我就会来告诉你".基于不充分信息和未经深思的对需求不成熟的估计很容易为一些因素左右.要作出估计时,最好还是给出一个范围.未经准备的估计通常是作为一种猜测给出的,听者却认为是一种承诺.因此我们要尽力给出可达到的目标并坚持完成它.6.需求分析人员和用户的合作关系优秀的软件产品是建立在优秀的需求基础之上的.而高质量的需求来源于客户与开发人员之间有效的交流与合作.通常,开发人员与客户或客户代理人,如市场人员间的关系反而会成为一种对立关系.双方的管理者都只想自己的利益而搁置用户提供的需求从而产生摩擦,在这种情况下,不会给双方带来一点益处.只有当双方参与者都明白要成功自己需要什么,同时也应知道要成功合作方需要什么时,才能建立起一种合作关系.由于项目压力与日渐增,所有风险承担者有着一个共同的目标这一点容易被遗忘.其实大家都想开发出一个既能实现商业价值,又能满足用户需要,还能使开发者感到满足的优秀软件产品.软件客户需求权利书列出了十条关于客户在项目需求工程实施中与分析人员、开发人员交流时的合法要求.每一项权利都对应着软件开发人员、分析人员的义务.而软件客户需求义务书也列出了十条关于客户在需求过程中应承担的义务.如果愿意,可以将其作为开发人员的权利书.客户有如下权利:1:要求分析人员使用符合客户语言习惯的表达需求讨论应集中于业务需要和任务,故要使用业务术语,你应将其教给分析人员,而你 不一定要懂得计算机的行业术语.2:要求分析人员了解客户的业务及目标通过与用户交流来获取用户需求、分析人员才能更好地了解你的业务任务和怎样才能使产品更好地满足你的需要.这将有助于开发人员设计出真正满足你的需要并达到你期望的优秀软件.为帮助开发人员和分析人员,可以考虑邀请他们观察你或你的同事是怎样工作的.如果新开发系统是用来替代已有的系统,那么开发人员应使用一下目前的系统,这将有利于他们明白目前系统是怎样工作的,其工作流程的情况,以及可供改进之处.3:要求分析人员编写软件需求规格说明分析人员要把从你和其他客户那里获得的所有信息进行整理,以区分开业务需求及规范、功能需求、质量目标、解决方法和其它信息.通过这些分析就能得到一份软件需求规格说明.而这份软件需求规格说明便在开发人员和客户之间针对要开发的产品内容达成了协议.软件需求规格说明书可以用一种你认为易于翻阅和理解的方式组织编写.要评审编写出的规格说明以确保它们准确而完整地表达了你的需求.一份高质量的软件需求规格说明能有助于开发人员开发出真正需要的产品.4:要求得到需求工作结果的解释说明分析人员可能采用了多种图表作为文字性软件需求规格说明的补充.因为如工作流程图那样的图表能很清楚地描述出系统行为的某些方面.所以需求说明中的各种图表有着极高的价值.虽然它们不太难于理解,但是你很可能对此并不熟悉.因此可以要求分析人员解释说明每张图表的作用或其它的需求开发工作结果和符号的意义,及怎样检查图表有无错误及不一致等.5:要求开发人员尊重你的意见如果用户与开发人员之间不能相互理解,那关于需求的讨论将会有障碍,共同合作能使大家"兼听则明".参与需求开发过程的客户有权要求开发人员尊重他们并珍惜他们为项目成功所付出的时间.同样,客户也应对开发人员为项目成功这一共同目标所作出的努力表示尊重与感激.6:要求开发人员对需求及产品实施提供建议,拿出主意通常,客户所说的"需求"已是一种实际可能的实施解决方案,分析人员将尽力从这些解决方法中了解真正的业务及其需求,同时还应找出已有系统不适合当前业务之处,以确保产品不会无效或低效.在彻底弄清业务领域内的事情后,分析人员有时就能提出相当好的改进方法.有经验且富有创造力的分析人员还能提出增加一些用户并未发现的很有价值的系统特性.7:描述产品易使用的特性你可以要求分析人员在实现功能需求的同时还要注重软件的易用性.因为这些易用特性或质量属性能使你更准确、高效地完成任务.例如,客户有时要求产品要"用户友好"或"健壮"或"高效率",但这对于开发人员来说,太主观了并无实用价值.正确的应是:分析人员通过询问和调查了解客户所要的友好、健壮、高效所包含的具体特性.8:调整需求,允许重用已有的软件组件需求通常要有一定的灵活性.分析人员可能发现已有的某个软件组件与你描述的需求很相符.在这种情况下,分析人员应提供一些修改需求的选择以便开发人员能够在新系统开发中重用一些已有的软件.如果有可重用的机会出现,同时你又能调整你的需求说明,那就能降低成本和节省时间,而不必严格按原有的需求说明开发.所以说,如果想在产品中使用一些已有的商业常用组件,而它们并不完全适合你所需的特性,这时一定程度上的需求灵活性就显得极为重要了.9:获得满足客户功能和质量要求的系统每个人都希望项目获得成功.但这不仅要求你要清晰地告知开发人员关于系统"做什么"所需的所有信息,而且还要求开发人员能通过交流了解清楚取舍与限制.一定要明确说明你的假设和潜在的期望.否则,开发人员开发出的产品很可能无法让你满意.客户有下列义务:1:给分析人员讲解你的业务分析人员要依靠你给他们讲解的业务概念及术语.但你不能指望分析人员会成为该领域的专家,而只能让他们真正明白你的问题和目标.不要期望分析人员能把握你们业务的细微与潜在之处,他们很可能并不知道那些对于你和你的同事来说理所当然的"常识".2:抽出时间清楚地说明并完善需求客户很忙,经常在最忙的时候还得参与需求开发.但无论如何,你有义务抽出时间参与"头脑风暴"会议的讨论,接受采访或其它获取需求的活动.有时分析人员可能先以为明白了你的观点,而过后发现还需要你的讲解.这时,请耐心一些对待需求和需求的精化工作过程中的反复,因为它是人们交流中的很自然的现象,何况这对软件产品的成功极为重要.3:准确而详细地说明需求编写一份清晰、准确的需求文档是很困难的.由于处理细节问题不但烦人而且又耗时,故很容易留下模糊不清的需求.但是,在开发过程中,必须得解决这种模糊性和不准确性.而你恰是为解决这些问题作出决定的最佳人选.不然的话,你就只好靠开发人员去正确猜测了.在需求规格说明中暂时加上待定(to be determined, TBD也可采用汉语拼音略写"DQD:待确定")的标志是个不错的办法.用该标志可指明了哪些需要进一步探讨、分析或增加信息的地方.不过,有时也可能因为某个特殊需求难以解决或没有人愿意处理它而注上TBD标志.尽量将每项需求的内容都阐述清楚,以便分析人员能准确的将其写进软件需求规格说明中.如果你一时不能准确表述,那就得允许获取必要的准确信息这样一个过程.通常使用所谓的原型技术.通过开发的原型,你可以同开发人员一起反复修改,不断完善需求定义.4:及时地作出决定正如一位建筑师为你修建房屋,分析人员将要求你做出一些选择和决定.这些决定包括来自多个用户提出的处理方法或在质量特性冲突和信息准确度中选择折衷方案等.有权做出决定的客户必须积极地对待这一切,尽快做处理、做决定.因为开发人员通常只有等你做出了决定才能行动,而这种等待会延误项目的进展.5:尊重开发人员的需求可行性及成本评估所有的软件功能都有其成本价格,开发人员最适合预算这些成本(尽管许多开发人员并不擅长评估预测).你所希望的某些产品特性可能在技术上行不通,或者实现它要付出极为高昂的代价.而某些需求试图在操作环境中要求不可能达到的性能或试图得到一些根本得不到的数据,开发人员会对此作出负面的评价意见,你应该尊重他们的意见.有时,你可以重新给出一个在技术上可行、实现上便宜的需求,例如,要求某个行为在"瞬间"发生是不可行的,但换种更具体的时间需求说法("在50ms以内",但若没有准确的技术分析不能轻易下结论),这就可以实现了.6: 划分需求优先级别大多数项目没有足够的时间或资源来实现功能性的每个细节.决定哪些特性是必要的,哪些是重要的,哪些是好的,是需求开发的主要部分.只能由你来负责设定需求优先级,因为开发者并不可能按你的观点决定需求优先级.开发者将为你确定优先级提供有关每个需求的花费和风险的信息.当你设定优先级时,你帮助开发者确保在适当的时间内用最小的开支取得最好的效果.在时间和资源限制下,关于所需特性能否完成或完成多少应该尊重开发人员的意见.尽管没有人愿意看到自己所希望的需求在项目中未被实现,但毕竟是要面对这种现实的.业务决策有时不得不依据优先级来缩小项目范围或延长工期,或增加资源,或在质量上寻找折衷.7:评审需求文档和原型正如我们将在第1 4章讨论的,无论是正式的还是非正式的方式,对需求文档进行评审都会对软件质量提高有所帮助.让客户参与评审才能真正鉴别需求文档是否的确完整、正确说明了期望的必要特性.评审也给客户代表提供一个机会,给需求分析人员带来反馈信息以改进他们的工作.如果你认为编写的需求文档不够准确,就有义务尽早告诉分析人员并为改进提供建议.通过阅读需求规格说明,很难想象实际的软件是什么样子的.更好的方法是先为产品开发一个原型.这样你就能提供更有价值的反馈信息给开发人员,帮助他们更好地理解你的需求.必须认识到:原型并非是一个实际产品,但开发人员能将其转变、扩充成功能齐全的系统.8:需求出现变更要马上联系不断的需求变更会给在预定计划内完成高质量产品带来严重的负面影响.变更是不可避免的,但在开发周期中变更越在晚期出现,其影响越大.变更不仅会导致代价极高的返工,而且工期也会被迫延误,特别是在大体结构已完成后又需要增加新特性时.所以一旦你发现需要变更需求时,请一定立即通知分析人员.9:应遵照开发组织处理需求变更的过程为了将变更带来的负面影响减少到最低限度,所有的参与者必须遵照项目的变更控制过程.这要求不放弃所有提出的变更,对每项要求的变更进行分析、综合考虑,最后作出合适的决策以确定将某些变更引入项目中.10:尊重开发人员采用的需求工程过程软件开发中最具挑战性的莫过于收集需求并确定其正确性.分析人员采用的方法有其合理性.也许你认为需求过程不太划算,但请相信花在需求开发上的时间是"很有价值"的.如果你理解并支持分析人员为收集、编写需求文档和确保其质量所采用的技术,那么整个过程将会更为顺利.尽管去询问分析人员为什么他们要收集某些信息,或参与与需求有关的活动.系统分析人员在开发过程中可能会遇到以下问题,一些很忙的客户可能不愿意积极参与需求过程,而缺少客户参与将很可能导致不理想的产品.故一定要确保需求开发中的主要参与者都了解并接受他们的义务.如果遇到分歧,通过协商以达成对各自义务的相互理解,这样能减少今后的摩擦.7.需求文档需求开发的最终成果是:客户和开发小组对将要开发的产品达成一致协议.协议综合了业务需求、用户需求和软件功能需求.就像我们早先所看到的,项目视图和范围文档包含了业务需求,而使用实例文档则包含了用户需求.你必须编写从使用实例派生出的功能需求文档,还要编写产品的非功能需求文档,包括质量属性和外部接口需求.只有以结构化和可读性方式编写这些文档,并由项目的风险承担者评审通过后,各方面人员才能确信他们所赞同的需求是可靠的.你可以使用以下三种方法编写软件需求规格说明:用好的结构化和自然语言编写文本型文档.建立图形化模型,这些模型可以描绘转换过程、系统状态和它们之间的变化、数据关系、逻辑流或对象类和它们的关系.编写形式化规格说明,这可以通过使用数学上精确的形式化逻辑语言来定义需求.由于形式化规格说明具有很强的严密性和精确度,因此,所使用的形式化语言只有极少数软件开发人员才熟悉,更不用说客户了.虽然结构化的自然语言具有许多缺点,但在大多数软件工程中,它仍是编写需求文档最现实的方法.包含了功能和非功能需求的基于文本的软件需求规格说明已经为大多数项目所接受.图形化分析模型通过提供另一种需求视图,增强了软件需求规格说明.