软件是服务于业务需求的,没有业务需求的软件肯定是没有价值的,国内的软件业普遍现象是:软件项目远远大于软件产品。这也是国内软件所面临的一个严重问题,国内软件好象在死亡线上挣扎,项目成为软件企业生存的唯一依赖,而项目恰恰是最难于伺候的。
软件公司在积累一定的项目经验基础上,应该形成具有自我产权核心的技术与经验,把这经验总结与汇集成产品,才有可能大踏步的前进。然而这说来简单啊,本以为一个个的项目可以为以后的产品积累资金与经验,然而每个项目的需求不断变化,无休止的修改与维护,利润趋向于零;人才也“超市场规律”的流失,经验也“人去楼空”。
软件项目非常强调客户需求,而国内软件业好象对客户需求不够重视,不管是新上任的项目负责人还是有经验的项目负责人,好象都重技术,轻需求。中国的软件人员们都在追求高技术,好象技术好就是老大,21世纪谁最红----软件技术高手。你看看一个个软件技术高手,在网上听到的都是“大哥”“大侠”“高手”,这过分的崇拜技术也是导致轻视客户需求的一个原因,软件不是技术的积累,不是技术好就能设计软件,技术是可以解决软件开发中的一些问题,但它只是解决软件怎样实现,而不能解决软件如何去做。
项目开始了,设计者们都把了解客户需求作为软件的需求,把客户的要求拿回来后看看就着手DB设计,然后系统架构,接着开发,这也可以理解,因为我相信中国的软件项目好象没有一个不是急的。问问IT的同行们“项目急吗”,十有八九说“急啊,急死人了”。没办法啊,需求看着那么简单,报价自然便宜了,结果问题却很多很多,再不抓紧就是亏老本的事了。
最后呢,客户验收的周期远远大于开发周期,很简单,客户需求被低估了,验收时客户常会说:
这里的关系不是这样的,应该是那样那样
我们的流程不是这样走的,应该是那样那样
这里不是一一对应的,而是一对多的关系
要是这里删除了,那里怎么会出错呢
这个最好做成可维护的,我随时需要添加(fuck)
这时你的心肯定是拔凉拔凉的,问题是越改越多了,一方面是因为软件设计时确实误解了客户的意思,二是客户也是在使用时才想起来应该那样那样。有时客户初期说的和后来说的是矛盾的,可以理解,客户天生就没有这么强的逻辑性的,但作为软件开发,你又能把客户如何?他才是上帝,你难道非要让客户承认错误,承认不承认你都得改,平不了自己的气还要得罪客户,还是认命吧。这修改需求啊,就跟任贤齐说的:“一个还没过去,一个又来侵袭”。
其实问题出在开头,客户需求只是软件需求分析的一部分,虽然是比较重要的一部分,但也不要只是去记客户的需求,而是要把客户的需求进行分析,分析什么?
客户本身是不怎么懂技术的,客户只知道自己的业务需求,而在软件设计时,是在把业务需求抽象到系统中实现的,把业务转变为逻辑时,一切都应该符合逻辑的,但客户的业务思想有时候在软件系统实现时会有问题的,这就需要分析时分析出来的。少了分析,问题也会在后面的开发中暴露出来,到时可就更麻烦了。
还有客户的需求本身会有矛盾(这矛盾是指在逻辑角度来讲),客户本身是意识不到的,只有在分析设计时,才会分析出这里的矛盾,而这些问题,如果在期初时,软件负责人不分析,而是纯粹的“听从”客户要求去做,当暴露这些问题时,你怪客户也没用啊。
因此,很简单,在了解客户需求时,不要不动脑子,不要一味的点头说“I C”,其实在表面的业务里面可能包含着N多的细节,这些细节是需要你反问客户的,只有当你提的问题越多,最终获取的需求最具体,才能让项目越顺利。而且有很多问题,都是在你的反问中,客户也才开始思考本来没思考过的问题,客户也会找到一种合理的需求给你,有人会觉得这样了解客户需求未免太麻烦了。至于一些在技术上会遇到问题的地方,也要告诉客户,别以为到时候再说,客户是不关心你的技术细节的,但你如果给他解释的话,他也会试着理解的。
项目就算急,也不能急在需求分析上,软件再小,需求再简单,我想不可少的就是需求分析。在需求分析阶段解决问题的代价是最小的,越往后就成次方级递增。因此,要让你的项目能顺利下去,不要再追求技术了,冷静的先分析一下客户需求才是最关键的。
客户的需求本身是无休止,因为他们本身也在变,但当你期初的分析合理,后面的变动也将在逻辑上变动,相信代价已经不会那么大了。这其实也体现了系统的扩展性。
别指望着客户需求会停止,我想大家都有这方面的体验,当然了,也不是说客户的需求分析出来后都要去做,由于项目的价格,在软件设计时还是要分析哪些应该实现,哪些应该放弃,因为做项目跟做产品完全不一样,要对客户的需求进行合理的分析,该舍的还是要舍。但有一点可以相信,当系统最后表结构出问题,逻辑上不符合业务时,那肯定是需求分析没做好。要记得下次需求分析时多问问清楚了。
其实这些道理大家都知道,但在实践中却往往被忽略了,以此文章只是想让大家引起注意,客户的需求虽然不可能休止,但我们可以把代价压缩的尽可能小。