小余

灵感源于交流,创新出自思考
posts - 50, comments - 866, trackbacks - 13, articles - 3

需求的陷阱

Posted on 2008-06-01 15:36 小余(Yice) 阅读(3311) 评论(40)  编辑 收藏 所属分类: 小余草论
某日,老师在课堂上想考考学生们的智商,就问一个男孩:“树上有十只鸟,开枪打死一只,还剩几只?”
男孩反问:“是无声枪么?”
“不是.”
“枪声有多大?”
“80~100分贝.”
“那就是说会震的耳朵疼?”
“是.”
“在这个城市里打鸟犯不犯法?”
‘不犯.”
“您确定那只鸟真的被打死啦?”
“确定.”老师已经不耐烦了,”拜托,你告诉我还剩几只就行了,OK?”
“OK.鸟里有没有聋子?”
“没有.”
“有没有关在笼子里的?”
“没有.”
边上还有没有其他的树,树上还有没有其他鸟?”
“没有.”
“方圆十里呢?”
“就这么一棵树!”
“有没有残疾或饿的飞不动的鸟?”
“没有,都身体倍棒.”
“算不算怀孕肚子里的小鸟?”
“都是公的.”
“都不可能怀孕?”
“………,决不可能.”
“打鸟的人眼里有没有花?保证是十只?”
“没有花,就十只.”
老师脑门上的汗已经流下来了,下课铃响起,但男孩仍继续问:“有没有傻的不怕死的?”
“都怕死.”
“有没有因为情侣被打中,自己留下来的?”
“笨蛋,之前不是说都是公的嘛!”
“同志可不可以啊!”
“………….,性取向都很正常!”
“会不会一枪打死两只?”
“不会.”
“一枪打死三只呢?”
“不会.”
“四只呢?”
“更不会!”
“五只呢?”
“绝对不会!!!”
“那六只总有可能吧?”
“除非你他妈的是猪生的才有可能!”
“…好吧,那么所有的鸟都可以自由活动么?”
“完全可以.”
“它们受到惊吓起飞时会不会惊慌失措而互相撞上?”
“不会,每只鸟都装有卫星导航系统,而且可以自动飞行.”
“恩,如果您的回答没有骗人,”学生满怀信心的回答,“打死的鸟要是挂在树上没掉下来,那么就剩一只,如果掉下来,就一只不剩.”
老师当即倒!
    正值六一儿童节之际,用这篇笑话故事来做开头,笑过之后可能不少能会认为这个小朋友是需求调研的最佳人选。回顾软件开发上的许多案例,软件开发失败率一直居高不下,特别在外包开发这个领域中,这个值可能会更高一筹。在分析项目失败的原因的时候,需求的因素可能是失败的关键原因、需求不明确,客户对需求的变更频频等等。
    1.需求的调研
    需求调研是为需要说明书做前期工作,可以说需要说明书说是从需求调研表中得到或抽取而出。需求调研是要了解客户希望所要开发的系统能够解决他们的问题,以及了解他们对系统的期望等等。需求调研是整个开发的基础,经过需求调研的结果整理出需求说明书作为后续开发使用。
如果做的项目是一个陌生的一个行业(专业),这是往往需要专家或者顾问等角色的协助,但是作为调研人员最少要想办法了解个专业,或许你需要成为这个行业的专家,但最少要了解一定的专业知识(最少专来词汇你要知道)。这样域客户的沟通才能达到顺畅,比会出现牛头不对马嘴的现象。
   在某些难度不是很大的行业或则项目,做需求调研的时候可以通过自学的方式了解行业的特点,这些项目往往因为规模比较小,也不会有专家的影子出现。但是作为调研的时候我们最需要了解的一些问题如:
1):客户目前的问题与苦难
2):客户现在的工作模式
3):客户对系统的期望
4):客户哪些要求是自己能做到的,那些是依靠系统来做
5):还有客户对系统开发方式以及时间的要求等等
    其实做需求调研的时候最要的目的在于资料收集,或许小孩的那种打破砂锅的方式会引起客户的反感,但是实际项目中往往需要的就是这些比较周全的调研方式,能够考虑到的问题点都需要和客户确认,尽量避免想当然的做法,只是采用的方式可能需要优化以下,采用良好的方式,尽量得到客户的最大配合。
    2.需求的描述和确认
   对于需求的调研内容需要进行整理和分类,分清有用功能、可选功能用、无用功能及不可实现功能。对于这些功能和客户再次确认之后才能最终形成开发的需求文档。对于需求的描述有很多的方法和工具,但是无论采用那种方法和工具都是使用以及相对抽象的方式,如何让客户能够理解需求的实际内容,需要客户有良好的理解能力,毕竟系统还只是纸面上的内容,客户还是很难完全了解到真实的系统。
    如何对需求进行描述在项目开发中是一个很难定夺的题目,有些公司采用Demo的方式,有些采用传统的功能树的方式,有些采用界面的描述方式,有些采用UML的建模的方式,形势多种多样。各种方式都有其好坏。但是对于方式的选择需要注意一些问题:
1)了解客户是否能够理解所描述的问题,
2)避免先入为主,
3)避免形式主义,
有些公司采用UML描述需求,但是客户的能力达不到能够理解UML所描述的问题,甚至公司内部的开发人员也无法很好的理解UML,可能出了需求人员懂UML,这种需求结果就值得思考,客户是否知道你再说什么?如果你先入为主使用这种方式来描述问题,难道也期望客户去学习这些知识吗?
    3.需求的控制
    客户往往很难知道他们需要什么样的系统,有时候系统做到一半的时候客户会提出一些新的想法,更甚至等系统上线的时候客户才发现系统和他们脑子里想的东西完全不是一回事。对于这些可能会说当初需求定义的时候不是签字下来说是做成这样这样,怎么不是你想要的呢?问题可能会归根于与客户沟通的方式和手法上,但是对于需求的控制来说,对如何避免需求的反复,客户脑门一热就有新点子出来,还有许多不切实的要求等等,都在需求的控制范围内。
    有些人会说我们和客户说好了,协议也签订说:除了纸上描述的东西之外,其余的都是变更追加。但是这个观点固然好,也是完全归于一方有利来考虑,而且有很多时候我们签署在合同内的需求文档也比较含糊,而且双方在问题的理解上可能会有歧义,一旦真正要将合同拿出来对峙的时候,我想彼此都很难说服对方。就像树上有十只鸟一样,没有说好环境,状态等等的假设,一切的结果应该说都可能是合理的。
    如何控制需求,我想出了软件工程上提出的那些理论之外,也很难有新的观点,但是在实际的操作过程中,我们可能一方面要维护和客户的关系,另一方面也要考虑系统的开发时间和整体工数等等,做一个权衡。不过我个人更趋向使用问题具体化的方式来控制,尽量能够将能够想出的问题通通罗列出来和客户确认,同时采用换位思考的方式,尽量能够让客户理解我们所描述 的系统的状况,如果在调研和需求的确认阶段能够把工作做得很好,在后期的开发过程中变更的内容就会比较少,变更的内容也就容易控制。
    和客户进行良好的沟通,多为客户做一个考虑,避免将自己以一个高调姿态介入和客户的沟通中,说一些客户很难懂的专业术语,将客户喷的云里雾里,自以为自己的专业领域多么了不起,这种和客户的共通方式最容易造成需求空洞,后期翻盘的概率很高。如果客户不懂你口中所说的内容,可能问题出于客户,另外更大的程度出于你,我们需要考虑采用的沟通的方式以及内容是不适通俗易懂,能将复杂的问题讲的简单就表示你不简单。

Feedback

#1楼 [楼主]   回复  引用  查看    

2008-06-01 15:38 by 小余(Yice)      
自己先鄙一下

#2楼    回复  引用    

2008-06-01 15:47 by 负荷开关 [未注册用户]
呵呵 楼主很幽默哦

#3楼 [楼主]   回复  引用  查看    

2008-06-01 15:50 by 小余(Yice)      
@负荷开关
小故事不是我想出的,只是我从网上看到,觉得很有意思,便引用了。

#4楼    回复  引用  查看    

2008-06-01 15:57 by 赵俊      
笑话很长但很好玩,感觉像程序员的思维模式。

#5楼    回复  引用  查看    

2008-06-01 16:15 by Yannic Yang      
我觉得一定要身临其境设身处地在客户的角度考虑问题 思考客户到底需要解决什么样的问题 如何去解决
这显然不是技术活,跟谈恋爱差不多……

#6楼 [楼主]   回复  引用  查看    

2008-06-01 16:18 by 小余(Yice)      
@Yannic Yang
有时候项目失败的主要因素不在于技术,而在于很多技术外的东西。

#7楼    回复  引用  查看    

2008-06-01 16:34 by 水言木      
好文,顶。

#8楼    回复  引用  查看    

2008-06-01 16:48 by Kai.Ma      
項目成功不成功,在于客戶承認不承認。
有人靠關係,有人靠實力,有人兩者都靠。

作者 的 思維, 是典型的 、理想 的 環境下 産生的 客戶關係(靠實力)。

實際上這種理想的關係在國內很少。

當然僅從辦事角度來講,作者的論述還是頗有見地的

#9楼    回复  引用  查看    

2008-06-01 16:54 by Beginor      
汗!这么长的笑话!

#10楼 [楼主]   回复  引用  查看    

2008-06-01 16:56 by 小余(Yice)      
@Kai.Ma
谢谢你的留言,本文所写的确实是带有点理想的味道,在实际的项目中项目的具体进展不时单方面做好就可以了,有的时候中国特色的许多规则造成了项目中途停止,项目失败的事情时有发生。对于做技术开发的角度来说,我们可能更多先做好自己的这边的事情,然后在根据实际的情况去处理那些难以预计的苦难,这些都不会是理想的状态,确实需要考关系,人际等等。

#11楼    回复  引用  查看    

2008-06-01 17:02 by 阿森纳      
回了
再看一遍需求调研。

#12楼    回复  引用  查看    

2008-06-01 17:06 by Yannic Yang      
@小余(Yice)
我觉得应该更激进些
项目的成功有很多因素 技术只是众多因素之一
技术是必要条件 远非充要条件

#13楼 [楼主]   回复  引用  查看    

2008-06-01 17:13 by 小余(Yice)      
@Yannic Yang
所得很有道理。
技术只是基础,但不是关键。
在很多的项目中,即使你的技术遥遥领先,不代表就会成功。

#14楼    回复  引用  查看    

2008-06-01 18:12 by 皇帝的新装      
很多年了,我还没有碰到这样的用户。其实这都是需求调研人的错。

#15楼    回复  引用  查看    

2008-06-01 18:34 by 求知无傲      
中国特色的许多规则造成了项目中途停止,项目失败的事情时有发生。顶。有时候我们也很无奈,能做的也只能说是尽我们自己的能力动用一切我们可以动用的资源进行协调。

#16楼    回复  引用  查看    

2008-06-01 18:36 by 求知无傲      
对了,兄弟的淘气女友学编程怎么米继续哩?看好你喔。HOHO。程序员的生活本来是很枯燥乏味,我们要懂得自己调剂,润色。

#17楼    回复  引用  查看    

2008-06-01 18:51 by 丁学      
我倒是觉得这个小孩不适合做需求调研,因为他根本没有准确获取用户的需求,只是用自己的想法去强迫用户,然后把问题复杂化
如果哪个项目组有这样的需求人员,那死定了

#18楼    回复  引用  查看    

2008-06-01 18:51 by Mien      
适当的人在适当的环境中才能对事物的发展有促定作用。比如这个小孩,我要是他老师,立马劝其退学,另送一个适合他发展的学校。

另,说到需求调研,真的是程序开发中非常非常非常重要的环节。对于没有进行良好需求分析的项目,套用同学的口头禅“不知道你们怎么看,反正我是受不了”,哈哈。

#19楼    回复  引用  查看    

2008-06-01 18:54 by Mien      
@丁学
看了十七楼的话,非常认同,很多时间,客户是不明确自己要什么的(至少从实现上来讲是一点都不知道),通常是有一个想法,然后让你做。

#20楼    回复  引用    

2008-06-01 19:21 by 中央空调 [未注册用户]
中非常非常非常重要的环节

#21楼    回复  引用  查看    

2008-06-01 20:19 by 啊不才      
那个学生是人才,真的很人才,很好,很强大

#22楼    回复  引用  查看    

2008-06-01 20:46 by 生鱼片      
有很多时候都停留在用户测试---提出新需求--用户测试--提出新需求......

#23楼 [楼主]   回复  引用  查看    

2008-06-01 21:13 by 小余(Yice)      
--引用--------------------------------------------------
求知无傲: 对了,兄弟的淘气女友学编程怎么米继续哩?看好你喔。HOHO。程序员的生活本来是很枯燥乏味,我们要懂得自己调剂,润色。
--------------------------------------------------------
哈哈,谢谢支持。这一系列的文章我会抽空继续写。

#24楼 [楼主]   回复  引用  查看    

2008-06-01 21:15 by 小余(Yice)      
--引用--------------------------------------------------
丁学: 我倒是觉得这个小孩不适合做需求调研,因为他根本没有准确获取用户的需求,只是用自己的想法去强迫用户,然后把问题复杂化
如果哪个项目组有这样的需求人员,那死定了
--------------------------------------------------------
其实这是个相互制约的问题,所以我才在文章中提出,需求调研需要技巧。或许我该在针对这个问题再写一篇,然后大家在探讨一下。

#25楼 [楼主]   回复  引用  查看    

2008-06-01 21:16 by 小余(Yice)      
--引用--------------------------------------------------
啊不才: 那个学生是人才,真的很人才,很好,很强大
--------------------------------------------------------
其实每一个人都可能是人才,只不过要看是不是将他放在合适的位置上。

#26楼 [楼主]   回复  引用  查看    

2008-06-01 21:18 by 小余(Yice)      
--引用--------------------------------------------------
生鱼片: 有很多时候都停留在用户测试---提出新需求--用户测试--提出新需求......
--------------------------------------------------------
这个是做开发的死循环,问题也最大的根源也在于客户本身很难知道他们具体要什么东西。

#27楼    回复  引用  查看    

2008-06-01 22:00 by 熊掌      
@小余(Yice)
我倒是不觉得需求变化会导致一个死循环。
需求变化是我们作为程序员生存的根本道理,若需求不再变化,要我们何用?

因此,我认为问题的根源不是客户的需求变化了,而是我们暂时还没有足够的能力去应对这种变化 或者 没有找到应对变化的方法,而如何找到一种暂时的不变应对某个阶段内的需求变化正是我们的价值所在。

若有人因为需求变化,而抱怨,甚至鄙视,进而极力去贬低需求变化的合理性,那么我认为这个认为这人是可悲的。

他们没有看清自己之所以存在的理由,他在质疑自己存在的意义。就好比对自己说【为什么我不去死.....】

#28楼    回复  引用  查看    

2008-06-01 23:11 by 龙山居士      
--引用--------------------------------------------------
丁学: 我倒是觉得这个小孩不适合做需求调研,因为他根本没有准确获取用户的需求,只是用自己的想法去强迫用户,然后把问题复杂化
如果哪个项目组有这样的需求人员,那死定了
--------------------------------------------------------
我觉得说强迫似乎有些言重了,需求调研过程中,对于很多连客户都没有明确需求的问题,我想做选择题是个不错的办法,是一种积极的推进项目的技巧。

#29楼    回复  引用  查看    

2008-06-02 02:08 by 求知无傲      
物尽其用,人尽其才。那啥时候可以看到成品哩?兄弟!

#30楼    回复  引用  查看    

2008-06-02 08:49 by Goumh      
有趣!
我觉得这是在软件开发过程中,很难解决的一对矛盾,一般来说,用户对软件开发,计算机技术没有什么概念,他即使对自已的业务比较清楚,但是也很难于向IT人员清楚、完整地表述他的需求,所以说,即使IT人员对技术很精通,有丰富的想象力,有严密的逻辑思维能力,也很维捕捉到准确完整的需求,这就为后来的项目进展带来了难度。
  一些大的软件公司,都有产品经理这个角色,我想他应该就是这个桥梁吧。

#31楼    回复  引用  查看    

2008-06-02 09:23 by 巫云      
--引用--------------------------------------------------
小余(Yice): --引用--------------------------------------------------
生鱼片: 有很多时候都停留在用户测试---提出新需求--用户测试--提出新需求......
--------------------------------------------------------
这个是做开发的死循环,问题也最大的根源也在于客户本身很难知道他们具体要什么东西。
--------------------------------------------------------

这个是不是就是传说中的敏捷开发啊?^_^

#32楼    回复  引用  查看    

2008-06-02 09:29 by 飄lá┽蕩去      
开头很经典

#33楼    回复  引用    

2008-06-02 10:06 by 汪凌峰 [未注册用户]
为了避免失败在开始,这不乏是一个好策略。

#34楼    回复  引用  查看    

2008-06-02 10:08 by Windie Chai(笑煞天)      
好文,哈哈

#35楼    回复  引用  查看    

2008-06-02 10:33 by 夜风777      
那位同学很有前途!不过好像现实中的需求关系不是学生和老师!

#36楼    回复  引用  查看    

2008-06-02 13:03 by 水平线      
仔细的看了,很有道理

#37楼    回复  引用  查看    

2008-06-02 13:28 by 成长的强强      
笑死我了,,,,那小孩子太牛了/

#38楼    回复  引用    

2008-06-02 20:37 by 何 [未注册用户]
这应该是个难题吧。应该是个难题。沟通非常重要。

#39楼    回复  引用  查看    

2008-06-02 23:14 by gguowang      
哎 这真正到道出了程序员做需求的苦衷啊 !
不确定性和可能性太多了 !!

#40楼    回复  引用  查看    

2008-06-03 12:42 by 黑羽飘舞      
客户脑门一热就有新点子出来,还有许多不切实的要求等等,都在需求的控制范围内。


非常赞同这但,很多时候销售或是协调人员也会脑子一热答应这些,但是对后续的开发绝对是不利的

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
博客园首页

新闻频道

社区

小组

博问

网摘

闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
成果网帮您增加网站收入


相关链接: