用数字解释软件开发的8个为什么
20年没干别的,都是在软件开发第一线,尤其是总是最受轻视的MIS开发
无论是给客户开发,还是给自己开发
所以别的啥也没有,有的只是第一线的认识和感受
软件开发,尤其是信息管理类软件的开发,失败率非常高【第1个为什么】
中国尤其突出,因为中国的甲方、用户特别牛
自己则比较幸运,做过的这些项目和系统,基本都还是比较成功,失败的相当少
要知道这些系统的用户有些是机关单位,有些是银行等金融机构
都是最难伺候的甲方了,居然能让他们满意,除了幸运就多一点后怕了
所以,希望能对还在沼泽泥坑里奋战的同行有所帮助和引起共鸣、探讨
业界一般总结的经验是,要想成功开发管理信息系统,工作量(时间进度)的分布为:
需求分析、设计阶段占60%
编码实现、内部调试占30%
最后联调验收占10% 【第2个为什么】
需求分析、设计是动嘴动脑而已,编码实现才是动手落实
一般都说“领导动动嘴,干活跑断腿”,
为什么“动嘴皮子”的反而比“跑腿杆子”的要工作量大?【第3个为什么】
系统分析师、设计师为什么比程序员“贵”那么多?【第4个为什么】
除了前者资历往往要比较高,可是有必要吗?
不同程序员的工作效能,为什么往往能差几倍到几十倍?!【第5个为什么】
同样的项目,不同人、团队实现,所需的时间也往往能差几倍到几十倍?!【第6个为什么】
为什么软件的错误,发现越早,修改的代价就越低。
发现修改的早、晚导致的工作量不同,往往能差几倍到几十倍?!【第7个为什么】
这么多“为什么”!有些“为什么”其实是其它“为什么”的原因,而最终的根源只有2点:
1、软件系统的功能,往往是很多步骤、环节组合而成的
每个环节都有多种潜在的不同做法,不连贯起来、系统性地看,很难判断哪一种做法就是本环节最佳的做法
2、用户在看到、使用到具体的系统、每个环节前,无法提出完整准确的需求意见
哪怕这个系统将由他自己使用,他以前也按传统、手工模式从事着同样的业务
由根源1可以得知,假如一个系统有10个环节,每个环节有2种做法供选择(这已经是很理想的情况了)
那么这个系统就有2^10=1024种选择(每种选择都是长度为10的路径),
而用户真正想要的选择只是其中一种:10个环节都选对做法了的情况(路径)。
这就能解释【第1个为什么】了:一千条路径里面只对了一条!
当然,开发者根据粗略的需求,替用户做的判断,也不是每个环节都是正好选错了的,
所以成功率由理论上的1‰“猛升”到现实中的5%至40%
正是“领导动动嘴,干活跑断腿”,
所以,开发者希望能实际干活跑腿前,能把用户的需求确定下来,
免得用户嘴巴乱动,开发人员跑断腿也跟不上
所以,开发前做好需求分析和功能设计,不是闲得没事的结果
而是血的教训和现实的逼迫
但是,根源2决定了没法直接从用户嘴里得到正确的路径!
即使用户很想配合,也没有用——人之常情,
所以,不能希望用户正好是合格的需求分析师
怎么办,只有开发者把这10个环节一一分解,逐个环节地展开每个可能的选择
同时,为每种选择举一个【典型示例】,说明选择它会有什么样的特别效果、影响
与其他选择的区别在哪里——不够典型就无法区分,用户的判断也就随意了
用户面对具体环节里的所有选择了,才能发挥他作为业务专家的作用:
哦,这个环节我是希望第一个做法,而不是第二个做法!
当然,前提还得是:具体来帮开发者做选择的用户的确是个熟悉业务的人,
而且是个能明白是非逻辑的人,另外,最重要的是他愿意配合!
(最后这个“配合”前提看似废话,其实也是非常难达到的,因为系统做好了,
他作为业务专家、业务骨干的价值、在单位里的地位,往往也就降低了,
有些甚至是浑水摸鱼、损公肥私的机会大大减少了,即使领导要他配合,他也只是阳奉阴违
当然,这不是本话题希望展开的内容了)
需求分析者要做的工作就是把这1024种选择逐个环节地罗列出来
分别配以能说明特征的【典型示例】
并从用户那里得到确认——这种情况下,用户是可以确认了
所以,需求、设计的“动嘴皮子”其实是在“嘴”上跑1000条路径后,
才能从用户那里得到确定的1条正确路径,
“跑腿杆子”则只需要以代码跑出这1条正确的路径!
所以,【第3个为什么】“动嘴皮子”的反而比“跑腿杆子”的要工作量大,
因为两者有相差更大的倍数(1000:1)!
所以,【第2个为什么】需求设计占60%,编码实现占30%
(从此可以反推:如果路径数量相同,“动嘴皮子”和“跑腿杆子”的工作量之比其实是1:500
说明“领导动动嘴,干活跑断腿”这句老话也的确没错)
磨刀不误砍柴工,这句老话在这里也是很好的总结
我自己都做过一个: http://xq.com.nu/?app=mytree
他看到了不合理的地方,才会发现自己真的错了(当然,前提也是他不是死要面子的人)
delphi就是最高效的win32桌面应用快速开发工具,没有之一,不但开发快速,运行也快速(意外)
只是已经多年不再流行了
实在没有快速开发能力,就需要【典型示例】了,
之所以一直强调典型,就是要求这个示例能明确区分自己和其他选择的不同后果注意,这种示例不是UML里的用例图(User Case),除非你的用户是同行,能接受用例图
有了这些,管理软件的开发应该不再是噩梦,MIS的成功率应该也会大幅攀升
同行们也可以有真正的舒心日子了