企业化软件项目和商业软件的(承包开发)还是有很大的不一样的,最大的区别就在于项目需求的重点不一样,以致于这两种同样称为软件工程,就其项目过程管理是几乎完全不一样的。商业软件的开发最大的特点是就是基本功能非常明确,只在细节上有多种选择,所以商业软件开发的项目管理重在源代码管理和算法的优化,以及测试严格,就测试要求的强度上单纯软件代码的质量来说,要强于企业信息化的软件工程项目。
企业信息工程项目一般来源于企业某一特定的业务软件需求,象要上一个仓库管理系统,从进货到定期定标出仓平衡责任追踪等;或者是一个生产流程配料系统,象MRP2;或者是一个购销一体计划系统,象ERP(资源管理),等等。这种软件有时侯会象国产的那些变相的会计软件式的ERP一样当成商业软件开发,显然,这时侯与上述的成形商业软件没有太大的区别,但在企业实际上千差万别的应用需求上,几乎就是一堆电子垃圾。企业业务软件是一种必须适应同时能够优化企业流程的计算机辅助运营系统,真正起作用的,通常只能是一对一实现定制;这种需求是如此广泛,以致于大型企业如果不是聘有一两家软件咨询顾问公司就是自建一个计算机部门专门负责这一方面的工作;最典型的例子就是沃尔玛特。
正由于企业用的软件都存在着强烈的需求一对一定制的要求,所以这种项目其一是不便宜;如果一个企业客户以购买商业成形软件的理解水平来购买一个"项目"洽谈的话,在他理解什么叫企业项目前,最好不要打算做他的生意。一个企业项目动辄数百万上千万是不奇怪的,上亿也寻常,而一套商业软件,无论名称多么好听,什么第几代ERP,都只不过是一万几千大洋就可以打发的;实在不愿意给钱又不怕给罚盗版的话,还可以花五个铜板上街买一套盗版光盘现装现用。
为了应付企业业务软件项目的强烈的定制需求,供应商都提供了广泛的基础组件和嵌套工具,以便可以由二三级的程度员可以在现场为用户一对一的进行定制试用更改再定制等项目实现。典型如SAP,有朋友问我拿SAP的盗版玩玩,保证不外流。我费了很大的工夫才让他明白,SAP有的只是基础组件库,还很丰富,涉及到27个项目常用业务场合的组件库,包括与之配合的数据库预制定义(表定义),但绝不是象国内那些ERP那样装起来可以玩的东东。一个SAP项目要求用户按自已需求定购这些组件库,以及必须的支持软硬件,数据库操作系统什么的,最经常的就是ORACLE和SOLARIS了;然后SAP项目组要到企业里蹲点,听各个部门讲流程故事;然后是写需求文档,建原型,让企业的项目组试用部门流程,基干流程确定合乎需求了,下一步的工作就是简单了,找几个三流的程序员用ABAP/4这种比javascript还简单的脚本语言把各个组件的功能连成一个统一的流程。这个工作就完成了一大半了。——可别小看这些三流程序员,在软件蛮荒年代他们凭这一招可以拿到每个月两万人民币的工资呢!其实呢,那是一个高中生就可以完成的工作。
由此可见,企业软件项目的关键在于需求管理和流程建模,相反,算法和基本功能以及BUG什么的,那是作为商业软件开发的组件保证的,那一般以外包的形式由印度这些公司早早做了出来。企业软件需求最大的困难就是用户根本不知道自已要干什么,最常犯的错误就是把现有的落后流程要求电脑重复一遍,拿了机关枪,总是要求上面没有装刺刀,还抱怨不比红缨枪好用。另一个常见的错误就是随着企业项目主管,(职业最低成是电脑科主任,高点就是一二把手了)知识开始丰富后,总是把有用没有用,暂时有用或永远没有用的需求要项目组一一实现,反正,每条要求都是振振有词,仿佛都是非立刻实现不可的。作为承包方的人员是没有办法与之争业务上有没有用的,(谁是这一行业的专家啊?人家已经是霸主了才上软件,你算那们子专家啊?),但如果真的一一跟着他的点子走,就算累死了,这个项目也是永远没有法子完成的。而在商业需求明确的商业软件开发中就不会碰上这种事情。
这时侯需要对客户的需求进行分级管理,简单地说,把需求分成五级:urgent(必须立刻优先实现),necessary(必须实现,但不一定马上进行),needed(需要的,不过没有也还凑合),better(现在似乎也可以,但可以更好一点),useful(总会有用的)。一个需求等级的确认需要两个过程,首先是从正面论证它是不是必须的,是不是好得多;然后从反而论证,不要他是不是可以回避的,天会不会塌下来?这样,一个软件需求就可以相当定一个级别。毫无疑问,如果一个项目各项需求验证下来只是useful的,不但赚不了多少钱,而且,这个项目未必有必要存在;但如果都是urgent的话,如果不是大幅度加价的话,就叫神仙来做好了。显然,无论客户是如何那般的行业专家,他的需求只能是平均地分配在这五个级别,否则就说明他不是专家,(呵呵,也算是个逻辑陷阱),在实现时,当然就挑urgent&necessary来实现,其余的,升级再说了。