要竞品分析过程程

随笔 - 28&
文章 - 14&评论 - 225&trackbacks - 0
两步走策略
用例模型:
参与者:参与者是指与系统交互的人或其他系统,它代表外部实体。
2.要注意需求的步骤化描述法则
用例描述:
用例名称:取款
前置条件:ATM机正常工作
主事件流:
(1) 客户将卡插入ATM机,开始用例。
(2) ATM显示欢迎消息并提示客户输入密码。
(3)&客户输入密码。
(4)ATM确认密码有效。如果无效则执行子事件流a。如果与主机联接有问题,则执行异常事件流e。
(5) ATM提供以下选项:存钱,取钱,查询。
(6) 用户选择取钱选项。
(7) ATM提示输入所取金额。
(8)& 用户输入所取金额。
(9)&&ATM确定该帐户是否有足够的金额。如果余额不够,则执行子事件流b,如果与主机联接有问题,则执行异& 常事件流e。
(10)& ATM从客户帐户中减去所取金额。
(11)& ATM向客户提供要取的钱。
(12)& ATM打印清单。
&& ATM退出客户的卡,用例结束。
& 后置条件:结束取款事件。
3.实例:中联书店管理系统用户需求分析
0) 书店管理信息系统
包括计划订购管理、书库管理、销售管理、事务管理等功能。
&1) 计划订购管理
&&&& 包括计划管理、订单管理、合同管理、到货管理、供应商管理和书目管理等功能。
计划管理:编辑计划单、查询计划、输出计划单和计划执行统计。
订单管理:编辑图书订单、查询图书订单信息和输出图书订单。
合同管理:编辑合同、查询合同、输出合同和合同执行统计。
到货管理:登记到货图书、打印入库单、统计到货情况。
供应商管理:编辑供应商信息、查询供应商信息、输出供应商信息
书目管理:编辑书目、查询书目、输出书目信息。
2) 书库管理
&&&&& 包括图书入库管理、图书出库管理、图书盘库管理和图书报损管理等功能
l图书入库管理:编辑入库信息、查询入库信息和输出入库信息。
l图书出库管理:编辑出库信息、查询出库信息和输出出库信息。
l图书盘库管理:盘库处理和打印盘库单。
l图书报损管理:报损处理和打印报损单。
书店信息系统功能用例图的一个用例说明:
&&&&& “销售图书”:“售书处理”
常见系统视角比如:
l子系统视角
l逻辑流程视角
l业务规则视角
l数据关系视角
1)子系统视角-
<span style="color: #)业务规则视角
阅读(...) 评论()倒车过程中要缓慢行驶,注意观察车辆两侧和后方的情况,随时做好停车准备。|倒车过程中要缓慢行驶,注意观察车辆两侧和后方的情况,随时做好停车准备。答案:对最佳分析倒车时主要观察车后面和车两侧的情况,整个过程要缓慢谨慎,安全第一。扫一扫查看更多精彩分析花花公子学霸分析游客学员3760因为在倒车,所以要格外注意车辆后方和两侧的交通情况。我的相同车道上前面是没车,车都是从后面来的。另外题目中并没有说不要看前面,只是说注意观察两侧和后方的情况。因此本题是对的。其他分析共 12 条小雪 15:43:281 楼相同车道上前面是没车,车都是从后面来的。另外题目中并没有说不要看前面,只是说注意观察两侧和后方的情况。因此本题是对的。Feng 00:51:402 楼这道题神了,应该是确认安全后才得行撒,劳资对元贝无语111 12:33:413 楼我很笨怕考试不过去 有谁好办法哥哥 15:24:394 楼靠,你倒一半车停在路上??什么随时准备停车?新手学车 14:07:005 楼倒车时主要观察车后面和车两侧的情况,整个过程要缓慢谨慎,安全第一。金明兴 19:22:366 楼考试倒库时也是倒车,你停一下确认安全后再到试试新手学车 16:26:227 楼倒车要缓慢,以便有时间观察道路两侧情况。真理怎么理解 08:13:338 楼看题意是答题是硬道理啊别喊了!被窝里没人。 13:48:219 楼回复3楼的111:我很笨怕考试不过去 有谁好办法多花点钱Sir 16:52:0410 楼学霸解答怎么等于复制粘贴啊!念兹在兹 14:28:3511 楼手滑了妮妮 17:24:5612 楼回复10楼的Sir:学霸解答怎么等于复制粘贴啊!不知道啊专注驾驶员考试,查看更多试题分析与讨论。扫描下方二维码关注驾驶员考试官方微信。相关帖子:1、2、3、4、5、6、7、8、我来分析  题吧发言,请先
| 科目一理论考试科目四安全文明发表试题分析,请先
| 添加我的分析X昵称: 用户名:您的IP:58.214.218.214 (会记录IP,请文明发言,不违法。)做竞品分析,你需要这些步骤&& - 简书
做竞品分析,你需要这些步骤&&
做竞品分析,这些问题你遇到了吗:1.看了N多案例,翻了N+多讲分析方法的文章,好的实在是太少了,要么太空,要么太片面,反而觉得更混乱;2.好多文章太肤浅!只是走马观花的过了一遍,Excuseme?说好的分析呢;3.每篇文章的观点都不同,到底哪个有道理啊!头痛......从现在开始,拒绝头痛!下面说说我是如何做竞品分析的,做竞品分析的框架是什么。我把构建框架这个事情分为三个部分:前期准备、构造框架、反复推敲。一、前期准备首先,要懂竞品分析是什么?为什么要写?能带来什么价值?了解了这些之后,在写竞品分析的时候要常常问问自己这三个问题。当然,这三个问题并不一定要按照这个顺序来考虑,但都是要考虑滴!1.竞品分析是什么?竞品分析,剖开来看,一个是竞品,一个是分析。所以,你要知道你的竞品是什么?要怎么分析?这个问题也可以变成你要如何选择你的竞品?以及你分析的方法是什么?如何选择竞品?一般选择市场直接竞争对手或潜在竞争对手,选择1或者2个优质竞品即可;但如果是针对某一个功能或设计,可以多挑选几个一起比较。如何选择竞品方面,一定要结合分析的目的来选择,我的考虑方法如下:1.满足同样的需求(当下直接竞争对手)核心功能一样的产品。比如说,我们的产品是招聘类App,那么智联招聘、大街网、Boss直聘就成了我们要分析的对象,共同点都是招聘。这种情况下,我们选择比较优质的几个进行对比分析。这是比较常用的选择竞品方法。2.核心用户目标是同一群体的产品用户群是一样的,但可能产品的核心功能却是不一样的。对于这类,可能不是竞争对手,但目标用户基本一致,可以去分析对方的“产品”和“运营”角度是如何吸引用户的,学习一些好的经验,当然,这些经验一定是要符合我们产品实际的。要怎么分析?简单来说,就是从一些宏观数据、产品定位、视觉层面、交互与功能、运营及商业化、版本迭代方面考虑,这个在构造框架阶段会重点讲,这里就先留个疑问。2.为什么要写?就是你做竞品分析的目的是什么?目的不同,分析的侧重点自然也是不一样的。1.改进产品功能:重点分析竞品产品功能方面,做出被大众喜欢的功能;2.开发新产品:要对市场、产品定位、功能交互等进行全面的分析;3.想研究某个产品:着重分析市场情况、产品功能、运营模式等方面。另外你的报告要给谁看?不同职位的人所关注的是不同的,报告是给研发、运营、设计还是老板看的,那主要分析内容也是不同的。当然,还有其他情况,但一定要根据自己产品实际情况来选择,即你想要对哪方面改进,就重点分析那一方面。3.能够带来怎样的价值?通过分析,把差异点直观的表达出来。并能根据想要达到的目的给出可行性建议。然后,要多多看一些别人的竞品分析案例和方法,按照他们的思路去做框架,当你看的多了,做的多了,会有一个自己的认识。记住:一定要看,一定要做框架,先看个10、8篇再说。二、构造框架框架部分:前言部分,产品比较,总结。1.前言部分在正式分析之前可以先来个前言部分。介绍一下为什么写这个竞品报告(前文有介绍),你选择的产品的简介,分析环境、版本内容。2.产品比较把上文中如何分析拿过来!竞品分析的主要关注点一般还是在产品功能设计(包括功能、视觉、交互等)以及产品的战略(运营、推广、盈利模式等)等方面。在进行分析前,要强调一点,如果把竞品之间所有的功能和页面都拿来比较分析,是很难做到深入细致的,大而全则容易肤浅。所以说我们还是要从自己的目的(我们是想优化某个功能的用户使用流程呢?还是想把界面设计的更美观?或者是想设计一个更漂亮的引导或者启动页面?或者我们想改善交互设计等等?)出发来得出我们到底要着重展开哪方面的竞品分析,找到我们需要分析的功能或者页面去进行比较,才能更有效更深入,才不至于泛泛而谈。每个人的分析方法各不相同,只要能带来价值达到目的就行。这里来讲讲我的分析方法:你要把自己当成一个用户小白,先从数据来个大概了解;之后使用产品的时候要知道产品是做什么的,能满足你什么需求;开始使用产品了,你觉得它的视觉层面是怎么样,看的是否舒服,你的使用流程图是什么,通过流程图,进行深入的分析(交互,功能方面),最后通过产品的运营及商业化,产品迭代来分析。所以分析流程是:宏观数据分析》产品定位》视觉层面分析》交互与功能》运营及商业化》产品迭代1.宏观数据分析主要就是了解竞品间产品和市场方面的数据对比,通过数据先有个大概的认识。有以下数据:1)市场份额占有比例,下载量对比,榜单排名对比,评分对比;2)活跃人数,启动次数对比;3)曝光次数,百度搜索指数对比;4)上市时间,融资情况对比。获得数据的方法:1)百度指数,淘宝指数;友盟指数;2)艾瑞咨询,易观智库,CNNIC,比达咨询,DCCI互联网数据中心,ASO100,A3)App store,app annie。这里要注意,我们搜索资料和数据,是为了在做竞品比较分析的时候有一定的参考和依据。比如竞品A的市场份额为30%,竞品B的市场份额为5%,那么我们在对这两个竞品分析比较同一个功能的情况下,我们要侧重分析的肯定是A,而不是B。所以,要相信用户和数据,但也要考虑产品的特殊性和实际情况,不要迷信用户和数据。2.产品定位产品定位,简单来说就是这个产品能给哪些用户带来什么样的需求满足?所以,我们一方面要对我们的用户进行分析:包括用户年龄段、收入情况、受教育程度、分布城市、消费特点等,总结出用户特性,方便后来进行产品功能设置的可行性分析。另一方面是分析满足了什么需求:针对这方面,可以设置用户使用场景。比如说运营小咖秀,就是满足了要做运营的人或者已经在运营岗位想要提升自己的人,学习干货、免费参加线下沙龙的需求。用户需求很多,由用户需求可以引出新功能,这就需要细心发现了。当然,我们并不能把所有用户的使用场景都想得到,这里,设置问卷调研的作用就体现出来了。3.视觉层面分析说到视觉,不得不说的就是现在的颜控。你要不好看,我就不用,反正你不是唯一的~~现在的人啊,就是这么傲娇。(舔屏啊..我要给胡歌生猴子~~)
但仔细一想,也对,你自己做的都没有美观了,用着当然不舒服了。视觉方面,主要比较以下方面:1)图标的形状、颜色、风格;2)界面使用的色彩,整体风格(简洁或个性等);3)从风格能否显示公司文化;4.交互与功能(这个很重要!)从用户的使用流程方面来分析(如果从用户体验五要素,就是战略,框架层那些的角度来分析,还是会陷入大而空的境地,也不符合用户的使用习惯和逻辑流程),不过在比较的过程中我们需要结合用户体验五要素进行分析。(下面很重要的图--》不会作图)进入具体的分析,主要有以下三个步骤:(1)画出竞品的结构图:首先把竞品的结构图画出来,这样就可以从整体上对竞品进行一个认识和把握,通过对比了解各产品之间的差异,主要是了解功能方面的差异,从而为后面的功能分析做铺垫。(2)画出竞品的用户使用流程图:把竞品的用户使用流程图画出来,如果流程图里面的用户任务路线比较多,那么我们就可以根据我们的目的选择其中需要分析的流程路线进行对比分析,把竞品的这个路线流程所涉及的页面和功能进行对比分析,这也就是下一步要做的事情。(3)以用户使用流程图为线索进行竞品分析:在依据用户使用流程图进行竞品分析时,通常情况下可以从以下五个角度进行分析(下面要提到的五个分析点,并不是每一份竞品分析报告都要涉及,我们还是要从目的出发来选择我们要具体从哪个角度进行分析,这五个分析角度只是我的个人思路,可以作为参考。)1)核心功能的用户使用路线流程比较分析:找到我们与竞品最核心的一个或者多个(具体数量根据产品来定)的用户使用路线流程进行对比。在这个使用路线流程中,把涉及到的功能和界面(交互方式、视觉表现)等方面都进行比较分析,然后结合之前分析的用户评论和市场数据进行综合比较,得出自己的改进建议,并给出理由。比如说,我的产品是一个听歌的app,那么对于用户来说,核心使用路线就是找到歌曲(随机找或者有目的搜索)并且听到它。那么我们就要把这个过程拉出来对竞品进行分析,竞品在这个使用路线流程中是如何设计的,这个设计包括竞品的功能设计,界面设计,以及使用路线路径的长短等等方面。目的:通过对比竞品的核心功能,得出可以改进我们产品核心功能的方案,包括功能设计,交互设计等方面。达到人有我优的境界!2)非核心功能的用户使用路线流程比较分析:这个就是找到我们与竞品的几个非核心功能的用户使用路线流程进行对比。然后,同样把涉及到的功能和界面(交互方式)等方面都进行比较分析,然后结合之前分析的用户评论和市场数据进行综合比较,得出自己的改进建议,并给出理由。比如说,还是以听歌的app为例,听歌是这个app的核心功能,那么可能“歌曲分享”或者“歌曲评论”等等就可以作为非核心功能设计,如果有用户希望分享歌曲,那么我们就要分析用户在找到歌曲并分享出去的过程中会经历哪些页面;如果有用户想评论歌曲或者查看其它用户的评论,我们就要分析用户在找到歌曲评论页面并且查看评论或者发送评论的过程中经历的事情。目的:通过对比竞品的非核心功能,得出可以改进我们产品非核心功能的方案,包括功能设计,交互设计等方面。同样达到人有我优的境界!3)对方没有但是我们有的用户使用流程或者功能点分析:由于对方没有这个用户使用流程或者功能点,那么这里最主要的分析点可以是:①对方为什么不做这个功能,他们的目的是什么,这个功能与他们企业或者产品的目标是什么关系?②我为什么做这个功能,我们的目的是什么,这个功能与我们企业或者产品的目标是什么关系?③目标用户以及竞争对手是如何看待这个功能的?这个功能能不能帮我们从竞品那里抢夺用户?又或者我们会不会因为这个功能而失去用户?在分析的过程中结合之前分析的用户评论和市场数据进行综合比较,得出自己的改进建议,并给出理由。4)我们没有但是对方有的用户使用流程或者功能点分析:对于这个方面,我们要考虑的就是我们到底需不需要加上这个功能,同样可以这么考虑:①对方为什么做这个功能,他们的目的是什么,这个功能与他们企业或者产品的目标有什么关系?目标用户对这个功能是如何看待的?他们会不会这个功能选择竞品而离开我们?②我们现在为什么没有做这个功能,我们的目的是什么,这个功能与我们企业或者产品的目标是什么关系?③假如我们要做这个功能,会对我们的产品产生什么影响,是否契合我们整体的产品风格,产品目标等等?在分析的过程中结合之前分析的用户评论和市场数据进行综合比较,得出自己的改进建议,并给出理由。5)一些其他方面的分析:上面提到的4个角度基本上已经把竞品分析重要的部分都涵盖了,那么剩下的可能还需要做一些其他细节方面的分析,比如说:①关于app启动页面或者引导页面的设计;②关于app全局交互方面的一些设计(比如说网络问题,机型适配问题,特殊情况交互说明,全局手势,退出机制,显示机制,排序机制,刷新机制,缓存机制,控件交互等等页面条件方面的设计),这里的一些比较分析可能会跟前面的核心或者非核心功能的比较分析有雷同的地方;③关于开发了哪些平台的问题,iOS,Android等等。;④其他方面在分析的过程中结合之前分析的用户评论和市场数据进行综合比较,得出自己的改进建议,并给出理由。以上这5个角度就是我做交互与功能分析时的一个思路,仅此作为参考,欢迎讨论~。5.运营及商业化一个好的产品,如果没有好的运营,用户根本就不知道有这款产品,这是不行的,从杜蕾斯的运营就可以看出来,好奇的小伙伴们可以去看看杜蕾斯微博~。一个产品,如果商业模式不行,很难有资金支持,也是不能够长久的发展。所以,下面开始分析运营及商业化。在这方面有:运营模式、市场推广和盈利模式。1)运营模式运营主要目的就是促活、拉新、留住用户运营模式下有:内容运营、社区运营、活动运营①内容运营:内容运营就是拼内容了,谁的内容多,质量高,受用户喜欢就是赢了。在内容运营方面就可以比较:内容数目、内容质量。内容数目可以通过浏览内容,来大概判断一下谁的比较多。内容质量,需要对文章阅读量、评论量、转发量进行统计,看哪一个产品的文章更受用户欢迎,质量较高。②社区运营:社区发展了那么久却能屹立不倒,是因为它可以做深度内容传播(小米论坛、DSCN等)、沉淀用户、让用户进行深度交流并拉进关系,所谓论坛是我家,维护靠大家,一个家怎么能那么容易倒呢~
我们的大家庭啊
如果你所分析的产品有社区运营的话,可以比较一下社区的用户数、活跃度。对社区运营比较好的一方进行重点分析,思考为什么它人数那么多,能活跃起来呢?它有什么是我没有的,为什么它要有这个?如果我的社区加入了这个,是不是有效果?......还有很多的问题,可以对你觉得重要的地方进行分析。③活动运营活动,可以带动积极性,像运营小咖秀已经举办了好几十场免费线下沙龙活动,均取得了很好的效果,带来了不少的关注量。至于活动运营,核心就是围绕着一个或一系列活动的策划、资源确认、宣传推广、效果评估等一系列流程做好全流程的项目推进、进度管理和执行落地。可以从以下几个方面来分析活动运营:A:活动内容、规模与参加人数活动的内容是什么(线下沙龙、公益实践活动等)比较活动的规模(××人参加、场地)比较活动行、活动树等活动发布平台的阅读数、转发数、报名人数与实际到场人数目的:如果竞品做的活动参加人数比较多,带来了大量用户,说明这个活动很有意义。思考它为什么成功,如果是发布平台问题,就多多发布活动,多多推广。如果是场地问题,那我们下次也要考虑场地位置了。B:合作伙伴活动有没有知名的合作伙伴目的:如果有知名合作伙伴的话,对参加活动的人数有一定影响。C:有关活动的文章的阅读数与评论分享数有没有知名的新闻媒体进行报道报道的文章的阅读数与评论分享数目的:如果某一个新闻媒体的影响力大的话,那我们下次也可以试试。2)市场推广市场推广就是把产品给销售出去,让用户接受与使用。①线上推广:比较新闻发布会、广告、百度推广力度等线上活动(按活动运营分析)营造热点,像最近的蓝瘦香菇一样目的:比较以上这些方面,如果竞品有比较优秀的线上活动或者热点,可以参考成功经验。②线下推广:地推、会议沙龙等目的:如果有效果比较好,则可以借鉴。3)盈利模式尽量得到产品的盈利额,分析产品的盈利方式是什么,找到最适合自己产品的盈利模式盈利的方式:收取广告费用;提供服务费用;虚拟产品等等6.版本迭代列出产品以前的版本信息。目的:分析产品每次更新的内容,是偏重功能方面还是界面UI方面。从中可以看出公司主要发展方向是偏重什么。从每次更新中也可以看出市场的变化趋势、用户需求的变化。对下一次的更新很有帮助。7.总结根据上面的分析,可以大概得出每个产品的优缺点有哪些,做一个SWOT分析。另外,分析完了每个产品,也知道了产品的优劣势,那该如何把优势放大,把劣势缩小呢,加强我们的核心竞争力?我们还可以扩展哪些功能?这就是我们要思考的内容,也是做竞品分析的意义所在了。三、反复推敲不要以为你搭好了框架,以后就万事无忧了。要记住,随着你的不断实践,理解也会更透彻。我就是在运营小咖秀的顽皮木偶指导下慢慢整理,刚开始真的是一团乱,各种不清晰,但在看了多篇竞品分析后,渐渐有了眉目,一步步优化,才有了今天的成果。题外话:竞品分析的落脚点在于形成自身区别于竞品的核心竞争力,即我们要如何通过竞品分析来提高我们产品自身的核心竞争力,而这个核心竞争力往往体现在与竞品的差异性方面,这个差异无论是功能需求,还是交互或者视觉方面的,都会成为我们甩掉竞争对手的有力武器!就像在做竞品对比功能分析的时候所描述的一样,我们有的功能竞品为什么不做,竞品有的功能,我们为什么没有,一定要加上吗?竞品的交互设计为什么是那样的,我们为什么又这样做?这些都是差异性,都是需要深入思考的,不仅仅是从竞品角度,更需要从我们自身的产品本质,我们的市场,我们的目标用户,我们的行业角度来考虑。分析竞品并不是为了求同,更不是为了模仿,而是为了突出我们产品的核心竞争力,使我们与竞品之间差异的地方更加符合目标用户的体验和需求,让用户知道我们的产品更好,让用户明白他们应该用我们的产品。正所谓知己知彼,百战不殆,竞品分析的目的并不是为了抄袭,而是为了超越竞品。做好竞品分析只是做好产品的其中一个环节,这可以让你的产品能够扬长避短。同时,对于我们产品自身来说,我们还要重视研究我们的行业和市场,分析和预测行业的发展走向,同时研究我们的目标用户,去了解他们在思考什么,他们真正需要什么,渴望什么!只有把这些做法都结合起来使用,才能更加有效地促进我们产品的全面发展!不过,竞品分析还是会有一定的局限性,比如说我们做竞品分析的时候往往容易将产品和企业文化等等剥离开来,但是对于很多产品来说,产品文化却是很重要的东西。另外,竞品分析往往把产品的功能元素都进行了分离,也就很容易忽视这其中的相关性,分析的时候就有可能导致片面或者出现误差。这些东西只有通过我们不断地进行实践,不断地去熟悉行业,熟悉竞品,了解它们的文化,不断地改进我们的竞品分析报告,学会从整体上去把握产品的脉络,才能更好地摆脱竞品分析的局限性。总之,做竞品分析不是一件容易的事情,但却是一件非常重要的事情,做好了竞品分析,不管是对产品经理个人的成长还是对产品的设计改进来说,都是很有益的。任何事情都是很难一蹴而就的,不仅需要技巧和方法,更需要坚持。不断去实践,总结,积累;再实践,再总结,再积累,循环往复,你就能做好!看到最后的你们都棒棒哒~原创不易~点个赞再走吧~~么么哒
一个内向与外向,自信与自卑,喜欢折腾的射手座!121117人阅读
C/C++(6)
又到新年了,日历又要从2011年翻到2012年了,这使我有太多的感慨,进而勾起了对太多往事的回忆。过去的10年,毫无疑问是中国软件业发展最快的10年。当我们刚刚毕业的时候,还在使用VB、PB开发一些简单的数据库应用,而现在却几乎看不到它们的踪影,换来的是诸如J2EE和.NET这样的大型web应用。而这期间,RUP、XP、敏捷开发、持续集成oooooo一个接一个的新概念层出不穷,令人&#30524;花缭乱。现在想来,恍如隔世。
但更令我印象深刻而难以忘怀的,是我亲自经历的、亲&#30524;目睹的、道听途说的一个又一个的软件项目,它们有的获得了成功,但更多的是令人沮丧的失败。套用一下大文豪托尔斯泰体:幸福的家庭都是一样的,不幸的家庭却各有各的不幸;幸福的软件项目都是一样的,不幸的软件项目却各有各的不幸;或者说,成功的软件项目都是一样的,失败的项目却各有各的问题。我常常在想,我们的项目开发到底怎么了,进而把它们一个一个的剥开来深入分析,竟然触目惊心。它们有的是需求的问题,有的是客户关系的问题,还有设计的问题、技术的问题、时间管理的问题、人员培养的问题oooooo但归根到底更多的还是需求的问题。需求分析既是一份体力活儿,更是一份技术活儿,它既是人际交往的艺术,又是逻辑分析与严密思考的产物。正是我们在需求分析过程存在的巨大隐患,最终导致了那么多项目的失败。也许你认为我在危言耸听,好吧,我来举几个典型事例分析分析吧。
我的第一个故事来自大名鼎鼎的东软。我在2005年接一个项目的时候,听说这个项目之前是东软做的。当时东软在做这个项目的时候,整个过程经历了10多次结构性的大变更,局部性的调整更是不计其数。据说某天早上,客户对某个功能不满意,他们不得不对几百处程序进行修改。之后客户对修改的内容还是不满意,又不得不将几百处修改重新改回来。最后这个项目导致的结果是,整个这个项目组的所有成员都离开了东软,并&#20284;乎从此不愿涉足软件开发领域。多么惨痛的教训啊!我常常听到网友抱怨客户总是对需求改来改去,但客户对需求改来改去的真正原因是什么呢?当我们对客户的需求没有真正理解清楚时,我们做出来的东西客户必然不满意。客户只知道他不满意,但怎样才能使他满意呢?他不知道,于是就在一点儿一点儿试,于是这种反复变更就这样发生了。如果我们明白了这一点,深入地去理解客户的业务,进而想到客户的心坎儿上去,最后做出来的东西必然是客户满意的。记住,当客户提出业务变更的时候,我们一定不能被客户牵着走,客户说啥就是啥。我们要从业务角度深入的去分析,他为什么提出变更,提得合不合理,我有没有更合理的方案满足这个需求。当我们提出更加合理的方案时,客户是乐于接受的,变更也变得可控了。
第二个故事来自我自己的项目,一个早期的项目。在这个项目中,客户扔给了我们很多他们目前正在使用的统计报表,要我们按照报表的&#26684;式做出来。这些报表都是手工报表,许多&#26684;式既不规范,又很难于被计算机实现。这些报表令我耗费了不少脑细胞,直到最终项目失败都没法完成。这件事留给我的深刻教训是,不能客户怎么说软件就怎么做。客户提出的原始需求往往是不考虑技术实现,基于非计算机管理的操作模式提出来的。他们提出的很多需求常常比较理想而不切实际,毕竟人家是非技术的。但我们作为技术人员,需求分析必须实事求是的、基于技术可以实现的角度去考虑。那种“有条件要上,没有条件创造条件也要上”的鲁莽行事,结果必然是悲惨的。所以我们必须要基于技术实现去引导客户的需求。同时,计算机信息化管理就是一次改革,对以往手工管理模式的改革。如果我们上了信息化管理系统,采用的管理模式却依然是过去的手工模式,新系统的优势从何而来呢?因此,我们做需求就应当首先理解现有的管理模式,然后站在信息化管理的角度去审视他们的管理模式是否合理,最后一步一步地去引导他们按照更加合理的方式去操作与管理。
2007年,我参与了一个集团信息化建设的项目。这个项目中的客户是一个庞大的群体,他们分别扮演着各种角色。从机构层次划分,有集团领导、二级机构人员、三级机构人员;从职能角色划分,有高层领导、财务人员、生产管理员、采购人员、销售人员,等等。在这样一个复杂场景中,不同人员对这个项目的需求是各自不同的。非常遗憾的是,我们在进行需求分析的时候没有认真分析清楚所有类型人员的需求。在进行需求调研的时候,总是集团领导带领我们到基层单位,然后基层单位将各方面的人员叫来开大会。这样的大会,各类型的人员七嘴八舌各说各自的需求,还有很多基层人员在大会上因为羞涩根本就没有提出自己的需求。这样经过数次开会,需求调研就草草收场。我们拿着一个不充分的需求分析结果就开始项目开发,最终的结果可想而知。直到项目上线以后,我们才发现许多更加细节的业务需求都没能分析到,系统根本没法运行,不得不宣告失败。一个软件项目的需求调研首先必须要进行角色分析,然后对不同的角色分别进行调研。需求调研的初期需要召开项目动员大会,这是十分必要的。但真正要完成需求分析,应该是一个一个的小会,1~3个业务专家,只讨论某个领域的业务需求,并且很多问题都不是能一蹴而就完成的,我们必须与专家建立联系,反复沟通后完成。需求分析必须遵从的是一定的科学方法,而不是盲目的大上快上。
我的最后一个故事可能典型到几乎每个人都曾经遇到过。我们的项目从需求分析到设计、开发、测试都十分顺利。但到了项目进行的后期,快到达最后期限时,我们将我们的开发成果提交给客户看,客户却对开发结果不满意,提出了一大堆修改,而且这些修改工作量还不小。怎么办呢?加班、赶工,测试时间被最大限度压缩。最后项目倒是如期上线了,但大家疲惫不堪,并且上线以后才发现许多的BUG。需求分析不是一蹴而就的,它应当贯穿整个开发周期,不断的分析确认的过程。以上这个事例,如果我们提早将开发成果给客户看,提早解决问题,后面的情况就将不再发生。这就是敏捷开发倡导的需求反馈。敏捷开发认为,需求分析阶段不可能解决所有的需求问题,因此在设计、开发、测试,直到最终交付客户,这整个过程都应当不停地用开发的成果与客户交流,及时获得反馈。只有这样才能及时纠正需求理解的偏差,保证项目的成功。
以上的故事各有各自的不幸,各自都在不同的开发环节出现了问题。但经过深入的分析,各自的问题最终都归结为需求分析出现了问题。为了使我们今后的软件项目不会重蹈覆辙,&#20284;乎真的有必要讨论一下我们应该怎样做需求分析。
我们应当怎样做需求调研:初识
很多需求分析的工作是从需求调研开始的,我们就从这里说起吧。需求调研是需求分析最重要的一环,也最集中地体现了需求分析的特点——既是一份体力活儿,更是一份技术活儿。它既要求我们具有一种理解能力、设计能力,更要求我们具有一种与人交往、沟通的能力。
在一个阳光明媚的下午,项目经理带领着项目组成员,参加了客户组织的见面会,一个新的软件研发项目就这样开始了。双方在一种友好的气氛中进行,相互寒暄,介绍与会人员,拉拉家常。逐渐地,会议开始进入了正题。初次接触客户,对于项目团队意义重大。对方对你印象的好坏,今后如何与你交往,都在这个阶段被确定下来。然而,在客户至上的今天,与客户保持适当的谦卑是有必要的,但过于的谦卑却常常给项目日后的进程带来风险。为什么这么说呢?过于的谦卑,处处都是诺诺诺,客户说什么就是什么,就会使客户变得非常强势。这样的结果就是,客户提出了许多变态的、不太现实的、不合理的需求,而我们呢却是一味地服从,客户说什么就是什么。最后我们做得很累,结果却不能让客户满意。
正确的做法是,我们对客户提出的需求进行深入理解以后,运用我们专业知识,提出比客户的原始需求更加合理、可操作的解决方案,让客户感觉你说的正是他们想要的。如果能够这样,客户不仅能够欣然接收你提出的方案,而且会感觉你非常专业,你在客户心目中的形象也会无形中提高,使你有更多的机会提出有利于开发的可行方案,降低开发的风险。这毫无疑问会形成一个良性循环,但要做到这一点并不容易,毫无疑问,在与客户接触初期的表现起到了极其关键的作用。
人与人交往,往往在接触的初期就决定了相互的行为方式,与客户交往也是一样。起初的唯唯诺诺,客户说啥就是啥,必然造成客户不再关注你的意见,对你发号施令就可以了。相反,起初展现出一位技术专家的姿态,能大方而得体地提出自己的意见,会使客户重视你的意见,甚至主动征求你的意见。这一方面要求我们对自己要有足够的自信,另一方面也要有循循善诱的表达能力。如果我们做到了这些,就会客户心目中形成一种威信,使项目向着一种良性的方向前进。
同时,这样的会议又是一个项目启动会议。客户方领导要在会议上传达给与会代表一个清晰的信号,那就是与会代表今后要积极配合我们完成今后的工作。这时候,我们要弄清,客户方有哪些角色,谁是这些角色的需求提出者与决策者。这是什么意思呢?在软件项目中,特别是管理型软件项目中,客户都代表的是一个群体,而不是个人。他们代表的可能是一个单位、一个集团,甚至是一系列组织机构。在这样一个群体中,他们按照职能被划分成了不同的角色。拿一个单位来说,横向可能划分成不同的部门,财务部、销售部、采购部、生产部oooooo不同的部门,由于业务的不同,对软件的需求自然是不同的,因此我们在进行需求调研的时候,什么部门的需求就应当跟什么部门谈。同时,纵向又可以划分为多个层次,如高层领导、中层领导与基层人员,理解这些方面&#26684;外重要:
1. 高层领导
高层领导关心的是宏观的目标,因此软件研发目标、宏观统计报表、决策支持功能,都应当与高层领导谈。他们关系的都是宏观的问题,因此不要与他们谈那些细枝末节;
2. 中层领导
中层领导关心的是具体的效益,即软件给各个部门信息化管理方面带来的效益,因此,中层领导是各项业务流程、功能模块的需求决策者。他们关心功能的定义、业务流转的衔接、查询报表的设计,但不太关心一些具体的操作,以及一些具体业务流程的细节;
3. 基层人员
基层人员是每一项业务流程的操作者,也是软件今后真正的使用者。他们是真正了解你所要开发的软件的业务需求的领域专家,是你进行需求调研的重点对象。但是,基层人员往往受到自身视野的局限,可能只清楚自己工作涉及的十分狭小的一个范围,因此我们需要努力寻找那些业务涉及面广,经验丰富,又有一定大局观的真正的专家。另外,他们就是软件今后真正的使用者,让他们参加,会让他们成为今后软件推行的忠实支持者,对其他操作人员的指导者,益处多多。而他们关心的则是每项操作的细节。
划分清楚角色,弄清楚每个角色的需求提出者与决策者,就是为了在今后的需求调研中找对正确的人,使今后的调研工作事半功倍。另外,如果客户方是一个集团、一个多组织机构的政府机关、事业单位,需求的多元化问题必须引起我们的足够重视。什么是多元化问题呢?比如同样一个业务操作,在同一级别的A单位是这样操作的,而在B单位却是那样操作的。需求的多元化往往会给今后的软件开发带来巨大挑战。因此,我们要在需求调研阶段降低软件的多元化需求。要解决这样的问题,首先应当从高层领导着手,提出规范化管理的口号。同时,在进行需求调研时,尽可能地召集各个单位的代表在一起开会讨论。同时,应当有高层领导,或者指定一个负责人,在出现分歧的时候最终拍板决策。这些都需要在项目启动的时候事先规划好。
最后,与客户方领导制订出软件目标,是相当重要但常常被我们忽视的一个步骤。软件信息化管理不是包治百病的神药。很多项目的失败都归因与项目目标不明确造成的项目范围的失控。因此,这时讨论项目目标,既重要又适时。
也许在此之前我们已经做足了功课,对业务需求进行了一番详细的整理,有了一大堆疑问急需解答。但是,在这时,不是解答具体问题的地方,这是我们常常会犯的一个毛病。在这样一个会议上,我们应当询问客户方领导对这个项目的期望,渴望达到的项目预期,而我们应当描述的,是对达到这些预期的整体解决方案,凡此等等。
俗话说:万事开头难。如果你在项目开始的时候总感觉千头万绪不知如何着手,在这里我给大家的三点建议:1)树立良好的职业威信;2)进行详细角色分析,将与会各方代表对号入座;3)从宏观上制订目标与方案。随后的工作,就是与各方代码建立联系,逐一拜访他们,将需求调研工作一步一步进行下去。
我们应当怎样做需求调研:拜访
项目组经过一番努力,获得了一些初步的成果。首先是给客户留下了一个良好的印象,这是一个开端,但要在他们心目中树立自己的职业威信还要看你今后的表现。同时,我们与客户一起为项目制订了短期与长期目标。不要小看了这些目标,它们就是我们的尚方宝剑。正是因为有了它,今后项目中的有关各方就应当协助实现这个目标。我们应当清晰地向客户表达这样一个意思,要完成这样的目标,不是某一方的努力,而是双方共同努力的结果。这也是客户方召开这样一个项目启动会议的重要意义。最后一个成果,也是最重要的成果,就是与各种角色、各个类型的客户建立了联系。下面,我们将一个一个去拜访他们,展开我们的需求调研。
与西方人不同,中国人做事往往比较重视感情,这是与中国数千年的文化分不开的。让我们来听听一位金牌销售员是怎么做生意的:“我跟客户头几次见面,绝对不提生意的事,玩,就是玩。吃饭啦,唱卡拉OK啦,打球啦oooooo先建立关系,关系好了再慢慢提生意的事儿。”这说得比较夸张,毕竟他是在做销售,但至少传达出一个概念,那就是做事先培养感情,感情培养起来才好慢慢做事,需求调研也是一样。
需求调研不是一蹴而就的事情,是一件持续数月甚至数年的工作(假如项目还有后期维护)。在这漫长的时间里,我们需要依靠客户这个群体的帮助,一步一步掌握真实可靠的业务需求。不仅如此,技术这东西总有不如意甚至实现不了的地方,我们需要客户的理解与包容,这都需要有良好的客户关系。按照现在的软件运作理念,软件项目已经不是一锤子的买卖,而是长期的、持续不断的提供服务。按照这样的理念,软件供应商与客户建立的是长期共赢的战略协作关系,这更需要我们与客户建立长期友好的关系。
尽管如此,我们也不能总是期望客户中的所有人都能与我们合作,很多项目都不可避免地存在阻碍项目开展的人。如很多ERP项目会损害采购和销售人员的利益,因为信息化的管理断了他们的财路;很多企业管理软件会遭到来自基层操作人员的抵制,因为它会给基层操作人员带来更多的工作量负担。有一次,我们给一个集团开发一套软件,当我们下到基层单位时,才发现,一些基层单位已经有了相应的管理软件。我们的软件成功上线,必然就意味着这些基层单位的管理软件寿终正寝,这必然影响到基层信息化管理专员的利益和政绩。
分析一个客户人群的关系,就是在分析这个人群中,谁有意愿支持我们,而谁却在自觉不自觉地阻碍我们。那些通过这个项目可以提高政绩,提高自身价&#20540;的人,都是我们可以争取的盟友。他们是我们最可以依赖的人,我们一定要与他们站在一起,荣辱与共,建立战略合作伙伴关系。
另一种人,即使软件获得了成功,也与他没有太多关系,但你与他相处得好,却可以给予你巨大的帮助,这种人是我们需要拼命争取的人。所谓领域专家,他可以给你多讲点儿,但随便打发你,对他也没太大影响。报着谦虚谨慎、相互尊重的态度,大方地与他们交往。当他们帮助我们以后,真诚地予以感谢。这是我总结出来的,与他们交往的准则。
最后,就是那些对我们怀有敌意的人。尽管有敌意,但我们能够坦荡的,敞开心扉的与他们交往。虽然不能奢望太多,但拿出诚意去争取他们,也还是有机会化干戈为玉帛、化敌为友。如果能够那样,那是再好不过了。
经过一番交往,我们将逐渐在客户中结识一批可以帮助我们的人。今后一段日子里,我们将依靠他们去学习和认识业务知识,收集业务需求,为日后的软件研发提供素材。
我们应当怎样做需求调研:研讨会
经过一番努力,我们终于在客户中找到了一批人,可以解答困扰我们多时的业务问题了,真是不容易呀。但是,如何以合适的时间、合适的地点、通过合适的形式与客户研讨业务需求,是摆在项目经理面前的一道难题。在我所经历的项目中,业务研讨会没有一个是相同的。
我曾经做过一个政府机关的项目,在这个项目中,从总局到省、地市、区县,形成了一个多组织机构的管理系统。虽然全国管理流程大体相同,但各地因各地实际情况的不同、领导管理思路和政策理解的不同,管理模式在许多细节上存在着差异,也就是说,这个项目存在着需求个性化的问题。在项目进行之初,客户方领导提前意识到这方面的问题,因此在组织需求研讨时,分别从各个省市抽调业务人员,集中在一起进行研讨。同时,在研讨时,根据与会人员的业务特点,将他们分成若干个业务组,分别对某个相对独立的业务模块的需求进行研讨。采用这样的组织形式,各地的业务差异在会上都会被提出来。一些地区不合理的管理模式,一经提出,就会得到其它地区业务人员的纠正,进而避免了不合理需求的提出。当然业务人员之间也会出现意见分歧。在会议启动之时,高层领导就明确提出了必须形成全国统一版本。因此,一旦出现分歧时,业务人员就会通过激烈辩论、各抒己见,进而形成统一意见。如果分歧双方谁都说服不了谁,业务组指定的组长则拍板采用哪个方案。如果他不能做出决定,就立即反映到总局领导那里当场做出决定。采用这种集中式的研讨,可以使问题的处理变得高效而及时。当然,也会因地区化差异而出现多个方案,每个方案都是合理的,我们必须在软件中分别对其进行处理的情况。出现这种情况时,至少我们很容易理清楚有几种情况,有没有可以合并的地方,使得差异最小化,最终在软件维护中体现出来,让客户自己去选择自己的管理模式。
另外,将业务人员划分为多个业务组也是一项比较成功的经验。由于业务人员自身的局限,不可能对所有业务领域的细节全面掌握,往往总是有自己熟悉的部分,也有自己不熟悉的部分。划分业务组,可以让业务人员分别在自己最熟悉的业务范围内参与讨论,可以有效提高业务讨论的质量。同时,一个管理系统涉及的业务是复杂而系统的,如果划分成多个模块并行地进行业务讨论,也可以大大提高业务研讨的工作效率。这个项目采用这种方式,使这个项目在运行数年后依然能保持统一的版本,而不至于形成一个一个的地方版本。统一的版本使得软件的升级维护成本大大降低,使项目进入良性的进化、完善的循环中。
以上讲的是一种集中式的业务研讨形式。采用这是形式固然好处多多,但并非所有软件项目都能够采用这种模式。我参与过的另一个项目就没有如此幸运了。在这个项目中,虽然也是多组织机构管理系统,但总公司对各分子公司的管理是松散的,所以很难组织各地的业务代表集中在一起讨论,甚至不能要求各分子公司采用统一的管理模式。企业信息化的目的就是要建立统一的、规范化的管理形式,它本身就是一场企业管理的变革。我们的软件,如果不能规范各分支机构的管理,抑制个性化差异,而是照猫画虎地一家一家为分子公司做软件,不仅我们的成本是巨大的,客户的信息化管理效果也不能发挥出来,而且为日后的运行维护带来巨大的隐患。毫无疑问,它是我们做管理软件的一个雷区,我们必须小心应对。
起先,总公司领导带着我们一家一家地去分子公司开需求研讨会。每个需求研讨会,我们都要着力注意各个单位管理模式的差异。当业务代表在描述自己业务流程的时候,我们常常提示业务代表,×××公司是这样管理的。这时候,业务代表会思考,采用×××公司的管理模式是否会更好,或者采用×××公司的管理模式行不行。如果他提出×××公司的管理模式可能会出现什么什么问题时,我们也会着力记录下来,下次再和×××公司讨论,他们是不是会出现这些问题。
采用这种分散式的业务研讨形式,让我们作为外人来规范客户的管理模式,常常会有这样那样的不便,但这也是我们可能面对得最多的需求研讨形式。在这样的形式中,寻找一个典型范例也许可以算是一种最佳实践。当我们面对管理松散的多组织机构时,寻找一个管理规范、对我们的支持度高的分支机构,首先将他们的信息化系统建立起来,产生预期的效益,这就树立了一个范例。它的成功就会为其它分支机构带来一种精神动力和成功案例,照着做肯定不会错。这样就可以更容易地说服其它分支机构,摒弃现有的管理模式而朝着规范化管理迈进。
业务研讨形式比较容易出现的另一个问题,就是将各个方面的业务代表拉过来开大会。在大会上,你说你的,我说我的,杂乱无章,一些重要的需求被不经意地漏掉。遇上这样的情形,项目经理应当有清醒的认识,我们需要再下来开小会。销售部门的需求跟销售部门谈,采购部门的需求跟采购部门谈oooooo既然是小会,每次谈的时候人不在多,在精,参会的业务人员对自己的业务了解精细而全面。这样的会议,通常有一至三个业务人员,和一个负责人(负责拍板)参加。会议之后,我们最好询问与会人员的联系方式,便于日后建立长期的联系,毕竟业务需求不是一蹴而就的事情。同时,如果我们今后采用的是迭代式开发,他们也就成为了我们业务验证的客户代表。
业务研讨会是重要的,但同时又是灵活的,没有一个定式,甚至有时都不能称之为会议。项目经理需要根据实际情况,合理地与客户组织研讨会。但不论怎样组织,必须注意两点:有效抑制个性化差异、分模块组织专项研讨会。
我们应当怎样做需求调研:需求研讨
前面我们探讨了业务研讨会应当怎样组织,下面我们再具体讨论一下我们应当怎样与客户讨论业务需求。如果说组织业务研讨会是项目经理的功底,那么讨论业务需求就是需求分析人员的功底。
以往我们常常认为,需求分析是一件最简单的事情。客户说他们需要做一个什么软件,有些什么功能,我们照着做就可以了,所谓的需求分析员就是需求的记录员。我要说,这是一个极大的错误,许多失败的软件项目,或者说软件项目中的需求问题,大多都源于此。经过人们多年的研究发现,在需求分析过程中,客户存在的最大问题就是提不出正确的需求,这表现为几种形式:
1. 由于对软件不了解,客户提不出需求,不知道软件最终会做成什么样子。这类客户在需求讨论过程中,往往只能描述目前自己手工管理的方式是怎样的,不知道计算机会怎样管理。
2. 能提出一些业务需求,但当软件做出来摆在自己面前时,需求就变了。这类客户,他们能熟练使用电脑,对信息化管理是清楚的。他们提出的业务需求从整体上应当是八九不离十的。但是,由于没有实物,在软件中的一些具体操作并没有完全想清楚。因此,当软件真正做出来摆在自己面前时,甚至经过一系列流程操作以后,会对一些操作提出变更需求。他们正如那句经典的话说的:“I have changed when it saw it.”
3. 能非常详细地提出业务需求,甚至有时候该怎么做的提出来了。这类客户,参与过很多软件信息化建设,甚至有些还是软件开发的半专业人士。但是他们提出的业务需求过于具体,甚至怎样实现都说出来了,但这些有时候不是最佳设计方案、可能在技术上难于实现,甚至有些就是过于理想化而不可实现。
因此,我在进行需求研讨的时候,首先跟客户探讨的不是软件功能,而是客户现有的业务知识,用专业的话叫“业务领域分析”。客户现有的业务流程是什么样的,都有些什么操作?客户在业务中都有些什么事物,什么专用名词,都是怎样定义的,相互之间的关系是什么?客户在每一项操作中的目的是什么,为什么要这样做,他们制作的手工报表都说明了什么问题?后面我会更加详细地描述怎么进行业务领域分析。
在认识了客户的业务领域之后,我们才能去分析他们提出的所有原始需求。他们为什么要提出这项需求,提这项需求的目的是什么?只有经过这样的分析,我们才能深刻地理解需求,进而运用我们的专业知识,提出更加合理的技术方案。但非常遗憾,我们在需求分析中常常不是这样做的,甚至当软件都开发出来了,需求分析人员都说不出客户为什么要提出这个需求,更谈不上了解业务操作流程。一句经典的话是:“客户让我们这样做的。”
总之,我们做需求分析,&#30524;界不能仅仅停留在软件本身,应当更开阔一些,应当扩展到跟这个业务有关的那些领域知识中。
当然,另一个极端就是为了开发软件,无限地扩大学习领域知识的范围。为了开发财务软件去考会计师,为了开发税务软件去学习税法等等。开发软件不是让我们成为这个领域的专家。我们学习领域知识是为了更好地理解和开发软件,是学习与这个软件有关的领域知识,而不是成为一个专家。
在客户提出的所有原始需求中那些与业务实现有关的需求都是无效的需求,它们仅仅只能作为我们的一个参考。什么是与业务实现有关的需求呢?比如要求做成什么界面,数据要求怎样处理,等等。为什么是无效的呢?因为客户毕竟是非专业,我们应当有这种自信,在理解客户真实意图以后,能够提出比客户更优的解决方案。
还有一些是技术难于实现或者根本就无法实现的需求,我们应当耐心地说服和引导客户,并给他提出一个更加合理的方案。注意最后一句话:“给他提出一个更加合理的方案”。苍白的拒绝客户往往会让客户产生抵触情绪,但当我们提出一个更加合理的方案时,客户往往会欣然接受,当然这是在我们对客户提出的业务需求的真实意图进行深入分析之后。认识到这一点非常重要,为了更加清楚地说明这一点,我举一个我的例子吧。有一次我给客户做一个价&#26684;管理系统时,客户提出要做一个动态报表的需求。这个动态报表要求能让客户从无到有,完全自由的定制自己的报表。毫无疑问,这是一个典型的不切实际的业务需求。接到这个需求以后,我们将它作为一个疑问,在整个需求调研过程中着力进行了考察,明白了客户为什么提出这样的需求。当客户在向他们的客户报价时,他们的客户在各个方面都要求他们报出价&#26684;细目,而且不同的客户要求他们报的价&#26684;细目&#26684;式还不一样。但经过仔细分析,发现他们面对的客户就是固定的几家,而这几家的要求的报表虽然&#26684;式不尽相同,但其数据项大体是相同的。最后,我们给客户提出两个方案,一个是按照客户所说的动态报表,但要求客户在制作报表时必须能够详细设计报表中数据项的来源、项目的类型,以及绘制报表&#26684;式,让他们意识到,即使做出来,作为非专业的他们也是很难自己完成的。同时,我们提出另一个方案:我们为客户准备好他们需要填写的各种客户报表所需的所有数据项,让他们自由删减。同时,为他们的不同客户提供各自相应的报表模板,这些模板可以在少量的范围内进行修改,以此满足他们的客户的不同需要。当客户拿到这样的方案,既能满足他们自己的需要,还操作简便、易懂、不费事,当然就欣然接收啦。
因此,需求分析不是一种简单的你说我记的收集活动,而是在大量业务分析与技术可行性分析基础上的分析活动。只有建立在这种分析基础上的软件研发,才能保证需求的正确与变更的可控。
我们应当怎样做需求调研:迭代
前面我一直在反复强调这样一个观点,需求分析不是一蹴而就的,是一个反复迭代的过程。它将从第一次需求分析开始,一直持续到整个项目生命周期。为什么这样说呢?让我们一起来分析分析。
在第一次的需求分析阶段,我们在一段时期内需要与客户进行反复地讨论,这个过程往往是这样一个反复循环的过程:需求捕获-&需求整理-&需求验证-&再需求捕获oooooo
需求捕获,就是我们与客户在一起开研讨会,讨论需求的活动。客户可能会描述他们的业务流程,这时我们在纸上绘制简单的流程草图,及时地记录下来;客户在描述业务的同时,可能会反复提到一些业务名词,详细询问这些名词的含义,以及它们与其它名词的关系,用类图或者对象图绘制简单的草图;客户在描述业务的同时,还会提出今后的软件希望实现的功能,如能够展示某个报表、能够导出文件,以需求列表的形式记录下来。一个功能,在需求列表中会有多个需求,而每个需求应当能够用1、2句话,在20个字以内就可以描述清楚。需求列表是客户提出的最最原始的需求,他不掺杂任何分析设计,是我们的每项功能必须实现的内容。需求列表是需求验证以及日后的用户验收测试的依据,不论我们今后如何分析和设计这些功能,都要能如实地实现这个列表中提出的需求。(需求列表应当如何编写,将在后面的章节详细描述。)
需求整理,就是在需求研讨会后,需求分析人员对研讨内容的分析和整理的过程。首先,需求分析人员应当通过用例模型,划分整个系统的功能模块,以及各个模块的业务流程。用例模型分析是一个由粗到细的过程,这样一个过程也是符合人类认识世界的思维习惯的一个过程。最先,我们应当对整个系统绘制用例图,设计用例场景,并依次对这些用例进行用例描述、流程分析、角色分析等分析过程。当然,在整体用例分析的同时,我们还应当进行一个整体的角色分析,绘制一个角色分析图,进行一个流程分析,绘制一个流程分析图(可以是传统的流程图、UML中的行动图,甚至一个简单的示意图,等等)。
然后,我们再在整体用例图的基础上,依次对每个用例绘制用例图。每个用例图中,会更细致地划分出多个用例,并依次进行用例描述、流程分析、角色分析等分析工作。如此这般地不断细化,直到我们认为需求已经描述清楚为止。
在一个系统中,用例需要细化几次,是由这个用例的业务复杂程度决定的。对于一个简单的用例,只需要细化一次就够了;而对于比较复杂的用例,则需要细化2~3次,甚至更多。
用例分析的过程,之所以称之为分析,它掺入了很多需求分析人员对业务的理解与设计:模块如何划分、流程如何设计、业务如何转换,等等。用例分析,还需要让需求分析员与架构师、设计师等技术人员共同协作来完成,因为用例分析还包含对业务需求的技术可行性分析。只有一份可行的需求分析,才能为后续的设计开发扫清障碍,有效降低项目风险。最后,需求分析员应当将需求列表中的内容,逐一地与用例进行核对,以避免分析人员忽略用户的某项业务需求。(后面将详细描述用例模型的搭建过程。)
在用例分析的同时,需求分析人员还需要对业务中的相关事物,制作领域模型。领域模型,是对用户业务领域中相关事物、相互关系、相互行为操作的描述,它是以对象图和类图的形式表达的。需求人员对领域模型的分析,对业务理解的深度,对日后软件的设计,以及软件的功能扩展、升级演化,都起到了至关重要的作用。(后面将更加详细地讲述领域模型。)
最后,当我们完成了一系列的分析整理并形成文档以后,应当对及时地与客户进行反馈,确认我们的理解是否正确,也就是需求验证工作。需求验证工作应当贯穿整个研发周期,并且在不同时期表现出不同的形式。首先,在需求分析阶段,需求验证工作表现为对需求理解是否正确的信息反馈。需求分析人员与客户再次坐在一起,一项一项描述我们对需求的整理和理解,客户则时不时地对一些问题进行纠正,或者更加深入地加以描述。我们则认真地记录,回来整理,并等待下一次的验证。在需求分析后期,我们还可以制作一些简单的原型,更加形象地描述我们对需求的理解,会使我们与客户的沟通更加顺畅。随后的设计开发阶段,我们则应当以迭代开发的形式进行。每开发完一个迭代周期,将开发的成果与客户反馈。这样做的结果是,客户可以及时地提出我们对需求理解的偏差,或者及时提出对我们设计不满意的地方,使我们存在的问题得到及时地发现与解决。问题及时的解决,使我们修复问题的代价得以降至最小。之后,当开发进入到验收测试阶段,我们则是与客户一道,一项一项地验证我们的软件是否满足需求列表中要求的业务需求。最后,当软件迎来下一次升级开发时,我们将开启另一次轮回。
因此,需求分析就是按照这样的过程,每次多理解一些,再多理解一些,更多理解一些,逐渐深入的过程。每深入一步,我们的软件就更接近客户的满意。
我们应当怎样做需求调研:需求捕获
前面我们讨论了,需求分析工作是一个迭代的过程:需求捕获-&需求整理-&需求验证-&再需求捕获······需求捕获是这个迭代过程的开始,也是整个需求分析工作中最重要的部分。没有捕获哪来后面的整理与验证工作?但是,非常遗憾,按照我以往的经验,需求捕获是我们最薄弱的环节。前面我提到的许许多多项目开发的问题都可以归结为需求分析的问题,而许许多多需求分析的问题又都可以归结为需求捕获不完整的问题。需求捕获是整个需求分析工作中最难把握的一个部分,它不仅仅是一个技术的问题,还涉及到人际交往、沟通、知识理解,以及心理学等一系列问题。但更让我感到遗憾的是,在我读过的许许多多关于需求分析的书籍中,讨论需求分析与建模的书很多,但讨论需求捕获的书籍却寥寥无几。确实,要讨论这部分内容,真的已经远远超出了软件开发这个知识领域。
那么,在软件需求捕获过程中,最根本、最容易犯错的问题是什么呢?我认为是一个态度的问题,是采用主动态度去捕获需求,还是采用被动的态度去捕获需求。如果需求分析人员总是诺诺诺,客户说什么,我们就记什么。客户处于非常强势的地位,给我们提出了非常多变态、技术难于实现的需求,而我们的需求分析人员却成为记录员,埋头记录客户说的每一句话,不加分析地就直接扔给了开发人员。这就是采用被动的态度去捕获业务需求的方式。毫无疑问,这样的需求分析必然将给项目开发的后期带来巨大的风险。
为什么会出现这样的情况呢?经过深入分析我们会发现,从客户嘴中说出来的需求,只是整个软件需求中的冰山一角,还有两类需求需要我们自己去挖掘:客户嘴中没有说出来的需求,和客户压根儿就没有想到的需求。
什么是客户嘴中没有说出来的需求,并不是客户故意卖弄官子不愿说出来,而是在客户所在业务领域已经约定俗称,在他们看来已经是天经地义,根本就不用说出来的业务规则。然而,作为刚刚涉足该领域的需求人员,他们是不了解这些规则的。如果采用被动的方式去仅仅记录客户说出来的需求,毫无疑问会遗失这部分需求,这就是为什么直到项目后期,软件被研发出来即将交付使用,客户才提出说这不是我想要的软件,并提出大量变更需求的原因。这时,我们常常问客户,你们为什么不早说呢?而客户却十分委屈,这么简单的道理还需要我说出来吗?
举例说明吧:在我从事的税务行业中,对纳税人征收的税种包括增&#20540;税、企业所得税。增&#20540;税通常是按月征收的,而企业所得税是按季或者按年征收的。就拿增&#20540;税来说吧,税款所属期是开票日期的上个月,为什么呢?纳税人往往是在上个月产生销售收入,然后在下个月完成申报和缴纳税款。这些知识对于税务人员来说是太基本的常识了,所以在他们看来就是天经地义而不需要说出来的业务规则。但作为软件开发人员的我们却常常因为不知道而将业务弄错。
如何破解这样的问题呢?那就是要求我们在需求分析的整个过程,不断进行业务领域知识的学习。在我做需求访谈的初期,我往往不是跟客户谈需求,而是先跟客户谈业务。你们是怎样操作的?都经过些什么流程?谁来完成这些操作的?为什么这样操作?注意,在所有这些问题中,最后一个问题是最重要的。客户业务领域中的所有操作、所有流程都是有它存在的意义的,它体现了其内部的原因与作用。多问为什么,可以让我们深入地理解这些领域知识,站在客户的视角去思考问题,进而深入地理解客户为什么要提出他们的那些业务需求。当一个需求分析员能达到这样的水平,客户嘴中没有说出来的需求就会被源源不断地被发掘出来,最终做出来的需求分析才是完整的、准确的。
另一种就是客户压根儿没有想到的需求。也许你会提出这样的疑问,客户压根儿没有想到的需求我们还提出来做什么?这种压根儿没有想到的,实际是在业务需求阶段压根儿没有想到的,并不代表最终都没有想到。很多开发人员总在埋怨,说客户需求总是在软件项目的后期改来改去,为什么?客户并不是软件研发领域的专业人员。在业务需求阶段,由于没有可以展示和操作的实物,客户总是在空对空的凭空想象今后的软件应当做成什么样子。这就注定了客户会有很多自己压根儿没有想到的需求。那么为什么他们会在软件研发的后期提出来呢?因为软件研发的后期,客户能拿到那些研发成果的实物,去操作,可以看到。这时候,很多他们起初没有想到的需求就会源源不断地被提出来。但这时候,我们作为研发人员会很伤,我们付出的代价会很大。所以,以被动的态度去完成需求分析工作,必然会给项目研发带来巨大的风险。
如何解决这样的问题呢?首先,在需求分析阶段,虽然客户压根儿没有想到,但需求分析人员是软件研发领域的专业人员,他们应当在深入理解业务领域与需求的基础上,通过分析提前发现这些需求。作为需求分析人员,他们应当站在客户的角度去思考,我们的软件应当设计成什么样子,每个需求的真实意图是什么。站在这个基础上,再运用专业知识去整理、分析与设计。我前面谈到,客户描述的最原始的需求是编写在需求列表中的,而经过需求分析人员的整理、分析与设计,经过用例分析、领域建模,最终形成产品需求说明书(或称为产品规&#26684;说明书)。从需求列表到产品需求说明书,这之间要经过一段长长的路,这段路就是我们的分析与设计,而不是简单的记录与编写文档。只有经过这样的过程,最后得到的才是高质量的需求分析,才能有效地指导软件研发,避免项目的风险。所以说,好的需求分析人员就是软件项目的司命,掌握着项目的生死。
我们再换一个角度来分析,客户之所以提不出需求,关键就在于他们没有可以展示和操作的实物,总是在空对空的凭空想象今后的软件应当做成什么样子。我们能否改变这样一种现状呢?于是,迭代式的需求分析与开发就出现了。我们先用最短的时间先做一个可以展示和操作的原型给客户看,让客户提一些意见。然后我们再在这个原型的基础上再多做一些,再给客户看。我们就这样一步一步推进,直到最终项目研发结束。采用这样的方式,最适合那些客户在项目初期提不出什么需求,也没用合适的参照物来进行需求分析的软件项目,特别是那些数据分析与决策类的软件项目。
接下来,我们再回到那些从客户嘴里说出的需求。在需求分析人员中,比较普遍的一个看法就是,只要是从客户嘴里说出来的,就一定是对的,我们必须照着做的,这种看法是不正确的。因为客户在软件开发方面是非专业的,所以他们在提出需求的时候往往会考虑不够周全。有一次,客户在提出来一系列业务操作以后,最后提出了一个统计报表的功能。这个统计报表是从前面这一系统操作数据中统计出来的,因此我们就对这些业务操作及其结果数据进行了一个详细的分析,最后发现根据这些数据统计出来的数据存在很多的问题,甚至可能出现相互矛盾的地方。随后我们与客户就这些问题进行了深入地探讨,最终客户不得不承认,他当初在设计这个报表的时候考虑不周全。在提出问题的同时,我们又提出了我们的解决方案,这是非常关键的。当我们提出我们的合理化建议以后,客户欣然接受了。同时,客户对我们这种非常专业的分析与处理过程大加赞赏,无形中也提高了我们在客户心目中的威望。
不仅如此,客户作为一个群体,客户与客户之前对同一问题也可能存在不同的看法,这特别突出地体现在那些多组织机构的管理系统中。因此,对于一些客户非正式的场合提出的需求我们要仔细甄别。一个比较可行的方法就是,先在一些非正式的场合单独跟客户聊,产生第一手资料,最后将这些需求在比较正式的场合,如各部门参加的业务讨论会、有用户代表参加的需求评审会、需求定稿签字确认会等等,以比较正式的形式讨论和确定下来。
最后,我不得不说,企业信息化管理实质就是一次改革,是企业摒弃手工操作,向信息化建设迈进的一次改革。既然是改革,就必须要改变过去不合理的管理流程,向更加合理和高效的管理流程迈进。因此,我们的需求捕获最初是源于企业现有的操作流程,但当我们深入理解了客户现有的操作流程以后,应当有意识地发现那些不合理的部分,并最终提出更加合理、更适于信息化管理的流程。如果需求人员能上到这样一个高度,我们的需求分析就进入了一个更加崭新的层面(关于需求分析中的流程分析,我们还会在后面详细探讨)。
我们应当怎样做需求分析:功能角色分析与用例图
在我们进行一系列需求调研工作的同时,我们的需求分析工作也开始启动了。需求调研与需求分析工作应当是相辅相伴共同进行的。每次参加完需求调研回到公司,我们就应当对需求调研的成果进行一次需求分析。当下一次开始进行需求调研时,我们应当首先将上次需求分析的结果与客户进行确认,同时对需求分析中提出的疑问交给客户予以解答。这就是一个需求捕获-&需求整理-&需求验证-&再需求捕获的过程。
但是,当我们经过一番忙碌,将需求中的第一手资料从调研现场捕获回来以后,我们应当怎样进行分析呢?不少团队对此都比较迷茫,没有一个统一和有效的方法,往往采用想到哪里做到哪里的方式。一些问题想到了就做了,没有想到则忽略掉了。实际上,需求分析不应当是太公钓鱼,而应当是拉网排查。任何一个疏忽都可能对项目研发带来风险。因此,我们应当采用一套成熟而完整的分析方法,稳步而有序地完成这部分工作。不同类型的软件项目其分析方法可能存在差异,但一般来说,信息化管理类软件项目通常从这几个方面着手分析:功能角色分析、业务流程分析与业务领域分析。
需求分析不是一项一蹴而就就可以完成的工作,它需要一个长期的过程,而这个过程是一个由粗到细的过程,它体现了人类认识事物的客观规律。在需求分析的初期,我们对需求的认识往往是整体的、宏观的,随着分析工作的逐渐深入,一步步细化。按照这个思路,我们对需求的分析,首先应当从功能角色分析开始。所谓功能角色分析,就是从一个外部用户的视角分析整个软件系统能够提供的功能,以及这些功能到底是提供给哪些角色使用。
对一个系统进行功能和角色方面的梳理和分析,可以采用的比较主流的方法之一就是绘制用例图。用例图是UML的4&#43;1视图中的一种,准确地说就是那个“&#43;1”。用例图是贯穿整个面向对象分析/设计(OOA/D)的核心视图,它描述的是系统到底为用户提供了哪些功能,以及到底是哪些用户在使用这些功能,是沟通用户与技术人员的桥梁。运用用例视图对业务需求进行分析、抽象、整理、提炼,进而形成抽象模型的过程称之为用例建模,而这个模型就是用例模型。
一般地,在一个用例图中通常有三种元素:参与者(Actor)、用例(Use Case)与系统边界(Boundary)。用例描述的是系统为用户提供的功能,也就是系统能为用户做什么,通常被绘制成一个椭圆;参与者,我认为称为角色更加合适,也就是系统为哪些类型的用户提供服务,他们都各自承担哪些不同的职责,通常被绘制成一个小人儿;最后是系统边界,也就是系统是对现实世界哪个范围的内容进行的模拟,它涉及到软件设计的工作范围与工作量,通常被绘制成一个方框。但是,通常情况下系统边界只是一个概念而不用真正绘制出来,因为被绘制成用例的必然是系统内部的功能,被绘制成参与者的必然是系统外部事物。从这个意义上讲,用例图中的参与者不仅包括人,还包括那些外部系统和自动触发器。根据这样一个思路,我以往常常将外部系统和自动触发器绘制成一个小人,这常常令客户感到困惑。随后我改变了思路,将外部系统和自动触发器绘制成另一种表达形式——类元符号表示法,并在构造型上标注为Actor。
上图是一个考核系统中一个子模块的用例图。图中的用例就是这个系统提供给用户的各项功能。注意,这里仅仅是在罗列功能而不表示它们之间诸如流程调用等相互关系,这是一些初学者常常犯的毛病。参与者与用例通过实线关联起来,代表的是一种使用关系。箭头代表的是一种导航,即动作施与的方向。在这个用例图中,普通用户执行查询操作,查询系统提供的“预警监控单项查询”、“预警监控汇总查询”等查询报表;每日自动触发器触发自动考核功能,自动考核功能从“税收征管系统”这样一个外部系统中采集数据。
图中考核管理员和执法人员代表的是两个完全不同的角色,但他们在这个图中体现的是一些共有的特性,即对这堆报表的查询,因此被绘制成继承自普通用户。继承是参与者间唯一的关系,代表继承者拥有被继承者所有的功能与权限。除了参与者以外,用例与用例直接也存在着一些类型的关系,这我们在后面详细讲述。
在绘制用例图时一个&#20540;得思考的细节是,用例是怎样通过分析获得的。这个问题,在一些客户对信息化管理比较有经验的项目中不存在问题,因为在客户提供给我们的需求文档中就清晰地划分出了一项一项的功能。这些功能可能会在日后的需求分析工作中有所调整,但它从整体上形成了一个雏形,成为我们进行用例分析进而形成用例的依据。
但当我们面对的是一些对信息化管理没有经验的客户,情况就有些不妙了。在这种情况下,通常客户只能给我们一些管理目标、基本想法,其它的调研工作就需要我们自己去做了。这时,我给大家的建议是,首先从组织机构上划分清楚系统涉及哪些部门、哪些科室,然后在这个基础上划分出来这些部门这各个科室的人员都扮演哪些不同职能的角色,以及完成哪些业务操作。系统中的一个功能,在一般情况下是组织机构中某个(或多个)角色,为该机构某项业务流程完成的某个操作,并且这个操作应当有某个确定的结果(即产出物)。而这个功能就是我们需要提取出来的用例。虽然功能角色分析在整个需求分析过程中可能会随着认识的深入而不断调整,但分析过程大体是这样进行的。
有人说,我们绘制的用例图拿给客户看不懂。这样一个清晰明了的用例图,辅之以我们对图形的描述,客户怎么会看不懂呢?关键问题在于,我们没有将用例图的精髓弄明白,再加上出现一些常见问题,使得用例图画得不伦不类,客户当然就看不明白了。现在我们看看用例绘制都有些什么常见问题。
1. 没有正确理解用例图的视角。前面我反复强调了,用例图的视角是用户,也就是说,站在用户的角度来观察的我们需要设计的系统。从这个视角,用户看到的系统是什么呢?当然是一项一项的功能,这些功能是客户能够理解的、具体的、对客户存在价&#20540;的功能。从这个意义上说,那些技术性的功能不应当出现在这里,或者应当描述为用户可以理解的文字,比如“自动考核”。而那些应当绘制的用例,在取名时也应当站在用户角度去取名。举个简单的例子,一个员工档案信息系统,以往我们总爱将用例取名为“添加员工信息”、“更新员工信息”、“删除员工信息”,这就是典型的技术人员编写的用例。“添加员工信息”对于用户来讲应当是做什么呢——填写新员工资料;“更新员工信息”对于用户来讲又是做什么呢——更改员工资料;“删除员工信息”又是什么呢——员工注销。不论是“填写新员工资料”、“更改员工资料”,还是“员工注销”,对于客户都是日常工作中需要完成的操作,将用例命名为这些名字必然为用户所理解。同时,每一个用例对于用户来说应当是有价&#20540;的,也就是说,用户使用这个功能是要完成一项操作,或获得什么信息。比如上图的“自动考核”会产生一批考核结果,执行“预警监控单项查询”可以获得预警监控结果数据。
2. 图形绘制杂乱无章。一个系统,特别是一个大型系统,提供给用户的功能是繁杂的。如果你想将所有的功能,不管粗的细的,都试图绘制在一个用例图中,几乎没人看得懂。我们之所以将分析设计图形化,是因为图形能给人形象立体的感官,使人立即就明白了其中的意思,但前提是,这个图形是主题清晰的、形象生动的。因此,我们绘制用例图要学会拆分,由粗到细地一个一个绘制。先整体的绘制,再划分成各个模块一个一个详细绘制,再进一步细化。所以,描述一个系统应当有许许多多的用例图。
3. 用例是一个场景。在现实世界中,我们常常面对的是一个个长而复杂的操作流程,但在软件世界里,我们要将它们拆分成一个个的用例,怎样拆分?一个用例必须有一个场景,也就是时间相近、地点单一的一系列操作,并且这些操作最终应当有一个明确的结果。
如上所示这个用例图,“申辩申请”就是过错责任人填写了一张申辩申请单,最终的结果是将申辩申请单提交给考核管理员;“申辩受理”就是考核管理员接收了过错责任人的申辩申请单并予以受理,当然另一个结果是对其不予受理,该申请单被退回给过错责任人。每个用例都有确定的场景,明确的目的和结果。
功能角色分析是对系统宏观的、整体的需求分析,它用简短的图形绘制出了一个系统的整体轮廓。但仅仅进行功能角色分析是远远不够的,我们还需要在它的基础上做更加详尽的分析。
我们应当怎样做需求分析:业务流程分析
我们将从客户调研现场拿回来的需求,经过一番功能角色分析,整个系统的整体脉络与轮廓已经被勾画出来。在这个过程中,我们首先将系统划分成了几个功能模块(如果系统规模较大,还应先划分为几个子系统,然后再划分出各个功能模块)。然后,我们为每个功能模块绘制用例图。用例图是站在用户角度去观察的系统,即系统为用户提供了哪些功能,这就是功能分析。同时,这些功能是为哪些用户服务的,这就是角色分析。我们绘制的用例图应当能够为用户所理解,这也是UML其中的一项核心思想——与客户形成统一的、能够相互理解的语言,这对于需求分析过程中与客户的沟通是大有好处的。
但形成对系统的整体轮廓,对于软件的需求分析来说是远远不够的。许多软件最终失败的非常重要的原因就是对需求分析过于草率、浮于表面,而没有深入细致地去分析,往往到了项目后期才把需求搞懂,才发现真正的需求与起初的认识大相径庭,才恍然大悟需求原来是这样,而往往那时已经追悔莫及了。这样的经历相信你也有过吧。所以,我们一定要沉下气来认真仔细地做需求分析,一定要做到位。
同样,细化需求也需要一定的方法与思路。一般来说,我们可以有两个方向细化需求:业务流程分析与业务领域分析。这里,我们先谈谈业务流程分析吧。
如果我们现在做的需求分析是一个企业信息化管理系统,毫不疑问,我们的软件系统就是在模拟企业已有的那些业务流程。在现实世界中,企业是按照怎样的流程来管理,我们的软件就应当去模拟这样的流程。但是,我们的软件不可能也不必要完全去模拟这样的流程,在这个流程中的有些环节是应当由软件去模拟的,但有些环节则是应当在系统之外,由人工去完成的。我们进行流程分析,就是要求分析哪些是系统之内的,哪些是系统之外的。
我曾经做过一个疑点信息库系统。该系统模拟的原有业务流程是这样的:高层纪检方面的领导通过信访、举报、数据查询分析等方式发现了一批问题,然后将这批问题制作成一套调查清册,亲自或者交由下级相关单位,下到基层去调查问题。直到调查工作完成以后,才从基层回到自己单位,填写调查工作底稿,详细描述调查情况,并结束调查工作。
首先,我们应当抛开软件实现,对这样一个流程进行梳理,形成这样一个步骤:
1. 高层领导通过信访、举报、数据查询分析等方式发现一批问题;
2. 将这批问题制作成一个调查清册;
3. 自查或将清册下派给下级去调查;
4. 下到基层执行调查;
5. 从基层回到自己的单位,填写调查工作底稿,详细描述调查情况,并结束调查工作。
然后,在对原始需求分析的基础上,分析我们的软件能做什么事:
第一步:信访和举报虽然有自己的操作流程,但那些都在这个系统之外,在这个系统中仅仅只需录入最后的结果。数据查询分析过去只是业务人员在相关业务系统中根据自己的经验执行各种查询,现在则可以上一套数据采集和分析系统,提高数据分析的质量。
第二步:形成调查清册,可以在系统中设计一个功能实现。
第三步:自查或下派,可以在系统中设计一个流程实现。
第四步:下到基层执行调查,由于网络条件等因素的限制,业务人员不可能也不必要在系统中去完成调查,只需要执行一个标志调查工作开始的操作,并打印或导出调查清册,然后去基层调查。最终,这部分被设计成一个“开始实地核查”的操作,并提供打印导出功能。
第五步:调查人员从基层回到自己的单位都是系统外的事情,而填写调查工作底稿,详细描述调查情况,并结束调查工作,则是系统内的功能。最终,这部分被设计成一个“调查完结”功能,标志调查工作结束,并提供工作底稿的填写功能。
计算机信息化管理并不是万能的,它并不能代替现实世界中的所有工作。因此,我们进行业务流程分析,就是要分析业务流程中哪些是需要信息化管理的,而哪些则不需要。信息化管理过细,无疑会加重基层业务人员的负担(这也正是为什么许多基层业务人员会排斥信息化系统的原因),而适当的信息化管理则可以提高工作效率。试想一下,如果你工作中的每一个步骤都必须在计算机中操作一下,怎么不让人烦呢?而如果在工作中一旦需要先查一个什么信息,或者需要计算一下,系统立即可以替你完成这些工作,或者那些过去基本靠&#21564;的操作,现在立马通过信息化就传递过去了,怎么不让人舒心呢?我们做信息化管理,不是要加重人的负担,而应是降低人的负担。以这样的思路去进行流程分析才能设计出优秀的、人见人爱的管理系统出来。因此,我做需求分析,最喜欢下到基层去了解基层业务人员的需求,去分析怎样设计流程才能提高他们的工作效率,而避免加重他们的负担。“水能载舟,也能覆舟。”一套系统是否能顺利推行下去,基层人员是否支持往往起到十分重要的作用。另外,业务流程分析的另一个重要的分析内容就是流程差异化分析。不同的领导有不同的思路,不同的单位有不同的情况。因此,我们在进行流程分析的时候,常常面临流程差异化的问题。我们说企业信息化就是一次改革,这首先体现在业务流程的规范化操作,也就是消除这种流程差异。但不同的单位有不同的情况,这特别体现在不同地域和文化的不同,又常常造成这种流程差异不可避免。分与合,分治与一统,常常是一个都要兼顾的问题,非常微妙,我们要小心处理。在这个问题上你也许会问,使用工作流引擎就可以了嘛。工作流引擎不是万能的,它只能解决一部分问题,更多的问题还需要我们的分析人员去分析与处理。
最后,企业信息化就是一次改革,这特别集中地体现在了业务流程分析这一部分。当我们详细分析了客户现有的业务流程以后,应当进一步思考这样的流程是否合理,是否&#20540;得改进。信息化对于企业流程管理的冲击是巨大的,最典型的实例就是ERP。ERP的前身是MRP(Material Requirement Planning 物料需求计划)。起初,企业也就是希望有一套软件系统来管理它们的仓库。后来,企业领导希望他们在进货的时候能有一定的采购计划,避免出现仓库中的物资挤压,MRP就出现了。然后呢,企业开始思考整个生产制造的链条管理,MRPII的概念出现了。再然后呢,物料需求的动因是生产的需求,生产需求的动因是销售的需求。企业要真正做到零库存,就必须切切实实地把从销售到采购的每一个环节都管理好,ERP的概念就出现了。一个典型的信息化流程改进的例子。
ERP对企业流程改进的思路是宏大的,但我们在分析每一个系统的时候不可能有如此宏大的雄心与抱负。一般来说,我们可以用以下思路来进行我们对流程改进的分析:清除低效环节、简化业务瓶颈、整合可用资源,以及将繁琐任务自动化。
清除低效环节,就是清除那些耗费成本高而收效又低的环节,最典型的就是过量的库存。过量的库存原因很多,有可能是供销环节没有处理好而造成的过量采购,或者生产过剩,也可能是生产计划没有制订好而产生活动间的等待。除此之外,还有重复的活动,等等。
简化业务瓶颈,就是分析业务流程中影响整体进程的瓶颈业务,并有效地简化它。如很多业务审批流程中都有一个受理环节。大量业务都集中在一两个人来集中受理,根本忙不过来,造成整个流程的效率下降。解决的办法有两个:一个是采用信息化的手段进行批量受理,加快处理效率;另一个是将受理环节的任务分散到更多岗位中,降低受理人员的工作量。
整合可用资源,就是更大范围地整合各个部门、不同职能的人员与社会资源,更加协同地来完成任务,这也是计算机信息化管理最拿手的方面。制造业的供应链管理是最典型的例子,因为实在太经典了我就不累赘了。医院系统也是一个不错的例子:完成了身体检查,医生就立即知道了检查结果;医生开完药,收费处就知道收多少费,药房就知道拿什么药。
最后是自动化繁重操作。在财务系统中开了销售单,就直接开发票了,并且直接形成报税数据;在网上报完税就知道该缴多少钱,甚至不用去税务局,直接上银行缴,等等等等,不胜枚举。繁重操作自动化,正是信息化系统价&#20540;的体现。
我们应当怎样做需求分析:用例说明
当我们进行业务流程分析时,只空对空而不落到纸面上是不可以的。过去,在面向过程的时代,我们绘制DFD图、流程图,以及编写流程说明来描绘这一部分分析;而现在,在面向对象的时代,我们则是绘制行动图、状态图,以及编写用例说明来完成这部分工作。
在这部分工作中,编写用例说明应当是最主要的工作,之后在一些关键部分辅之以行动图、状态图。现在我们来看看用例说明应当怎样编写。
毫不疑问,做用例分析首先是要绘制出用例图(前面已经说过了)。图形的最大优势是能够形象生动地描述我们的分析,但它最大的缺点是会遗失许多的细节信息,因此我们必须要对它进行进一步的文字描述。
由于不同的人对用例的理解不同,&#26684;式也不尽相同,但一些基本的元素是一样的。以上表&#26684;是我采用的用例说明&#26684;式,其中用例名称、用例描述、参与者、前置条件、事件流、后置条件是公认的、用例说明的基本元素。
用例标识:就是用例的编号,一般采用“项目编号-子系统编号-模块编号-序号”来编号。
用例名称:没啥可说的,就是用例图中该用例的名称。注意用例的命名规则:用例名称通常是一个动词短语或短句,而不是一个名词短语。它可以是一个动词(如:自动考核),一个动宾短语(如:提取存款),一个被动句(如:发票填报),或者一个主谓句(如:用户提款,这个不推荐,因为主语就是参与者,显得有些多余)。
用例类型:在我看来,不同类型的用例,其用例说明的&#26684;式是不一样的。以上给出的是“业务操作”类用例的&#26684;式,它更加着重地在描述业务操作的流程。而“查询报表”类用例则没有什么流程,它更加着重地在描述报表&#26684;式及显示内容(后面再给出)。还有用例类型还包括“子用例”、“扩展用例”。
用例描述:对该用例的功能定义、要实现的业务需求,以及谁(参与者)应该如何使用进行描述。同时,这部分还可以整体概述实现业务需求的主要流程,以及与其它用例、其它外部系统的关系。通过用例描述,阅读者可以对该用例有一个整体的认识。
参与者:用例图中该用例的参与者,通常是业务操作的触发者和施与对象(如外部系统)。
触发事件:谁干了什么,触发了这个用例。
前置条件:在触发该用例相关操作前必须达到的条件。
事件流:这是用例说明中最重要的部分,它详细描述了该用例可能出现的所有流程。
1. 基本流程:另一个名称更能表达它的意义:最佳流程(The Best Flow)。它描述的是该用例以最佳的、最正常的方式流转,没有出现任何异常,并且最终成功完成操作的流程。基本流程在编写时,应当通过数字对流程中的每一步进行编号。
2. 扩展流程:或者叫“分支流程”,它描述的是基本流程在流转过程中可能出现的所有分支。扩展流程最大的特点就是,它应当是在基本流程的某一步骤发生的分支,因此它的编号规则是“基本流程号&#43;序号”。基本流程号就是发生分支的那一个基本流程的编号。在同一个基本流程上发生多个分支时,它们的序号从1依次开始编号。
另一种情况是,某个扩展流程本身拥有多个步骤,这时应当在“基本流程号&#43;自身序号”的基础上再添加序号,如“2.1.1”。
扩展流程在描述时,应当首先描述进入这个分支的条件,即“如果××则××”、“当××时××”。
3. 异常流程:就是发生异常情况时的处理流程。注意,用例说明是站在用例角度进行的说明,因此这里并不是我们通常一样的发生程序异常的处理流程,而是用户在处理业务操作时发生的异常情况,如:如果顾客不能提供身份证,则oooooo
后置条件:又称为“成功保证”,

我要回帖

更多关于 minitab过程能力分析 的文章

 

随机推荐