首先是项目启动阶段。任何软件开发都要有一个起动说明书,如果你是作为跟客户谈判的项目人员,你要经过跟客户谈判了解项目的范围和要求,在做开发之前写一个意向总结书。意向总结书出来以后,你要讲到要花多少钱、多少人力、用多少时间,这些就是所谓的金三角,三个因素都要提到,最后这个项目是该上还是不该上,项目起动的决定在项目意向书的管理上。最终决定可能是你和公司的领导还有项目的客户一起来讨论的。这个阶段我们叫做软件项目开发的项目启动阶段。在很多情况下,绝大部分软件人员都跳开这一步了,把项目交给你了,你作为项目管理人员去管理这个项目。但是严格来讲,应该包括这一部分。
软件计划阶段。软件一旦确定了,就要有需求总结。还没有讲到设计,还没有讲到这个软件该怎么做,该设计什么东西,首先要讲清楚这个软件到底是干什么的,为客户到底解决什么问题,客户到底怎么样用这个软件,这些问题你要能够回答,而且能够回答得很清楚。
接下来的工作就是要制定项目进度表,一旦知道你要做什么东西了,你就要制定一个进度表。你需要定一个时间表,将每项工作砍成一小段一小段的,每一小段都有一个时间,先做最核心最重要的,后做次要一些的内容。
这在欧美叫做瀑布,瀑布就是一节节的流水下来,这就是刚刚提到的甘特表。每根长框就是表示这段工作的长短,严格地来讲,甘特表还不止这些东西,包括表里头可以完成多少数字,表上有具体工作的职责,执行人员是多少,所有的信息都可以放上,纵向的还有一个时间,每个月、每个星期的安排,甘特图表就是来表示这个项目流程要花多少时间。项目进度表不包含具体细节,几个大的杠杆起到的作用就是可以看到每个阶段做什么工作。之后我们要制定一个设计规范书,或者是设计蓝图。就象盖房子一样,盖之前要知道花多少钱,盖在什么地方,之后我去跟银行贷款,能不能贷到,之后怎么盖房子,谁住进去,这些就是项目的需求管理,第一部分需求管理就是确定你要做什么东西。然后确定时间表,这个房子要盖一年六个月,盖在上海杨浦区,所有这些就是时间表。之后的设计蓝图书类似于房子的蓝图,这个房子怎么样的,大门是怎么样的,里面多少间屋子,屋子里面有些什么设备,这就是具体描述一个软件具备的功能,这是最关键的。在微软里就很明显,没有时间表和设计规范书,一行编码都不可以写。国内有些软件公司也开始执行这样的政策。如果没有时间表的话,让人员任意开发,开发出来的东西根本不符合需求。我举的房子例子就很明显,如果我随便雇一个施工队去盖,他可以盖成一个大城堡,花了三倍的成本,但是这个房子根本不是我所需要的。作为项目管理,我们要避免这样的情况。
有了蓝图书以后、有了设计规范以后,我们才开始开发。在开发之前最好还是要制定开发计划。开发计划是由开发团队来制定的,就是我这个设计该怎么设计,说我这个项目管理产品一直规定产品该做什么样的东西,有什么样的功能,但是具体下面怎么样去实现,比如说构架怎么回事,他用什么样的语言,这个不用管。就像你是盖房子的负责人,你画了蓝图以后至于砖是什么颜色的,里面水泥要多少,这个你不用管,这是真正造房子的人需要知道的。一个是房子的需求和设计,一个是盖房子的具体使用和材料的具体使用。开发计划就是开发软件里具体设计的计划,如果这个计划没有定出来的话,开发团队里几十个人可以各自开发,开发出来的组件没法交流信息,这样就会造成浪费,所以开发团队要有自己的开发计划,有了开发计划以后才做具体的开发工作。开发工作就是写你的开发程序了,到这个时候才真正开发了。很多国内的小公司,客户跟你说开发东西,大约知道开始做什么东西,就开始编程了,中间的需求管理、计划书都省了,你当然也可以写出来程序,可是这样你给自己找了一大堆麻烦,最后开发一定是失败的,因为你根本没有想清楚开发的要求是什么。就象你今天盖房子根本没有说房子要什么样的,如果盖了一个古城堡,这是违反你的开发概念的。
尤其要注意的是,在开发、计划执行的时候,测试和开发必须齐头并进,这样可以减低开发时间,缩短整个流程。在制定开发计划的时候也必须同时制定你的测试计划。开发计划和测试计划的前提就是你的设计蓝图书或者叫设计规范,但是是不是要等设计规范完全结束以后才可以制定开发计划和测试计划?也不是。如果我的整个产品要设计二十个功能,在我设计前十个功能完成以后就可以撰写针对这十个功能的开发计划,很多工作都是可以齐头并进的,可以用交错的方法来缩短整个开发流程。
开发和管理就是你的执行阶段。计划定完了以后我执行了,所有的软件按照项目理论的道路,从计划到执行,这两个连起来是一个控制阶段,这个控制阶段是可以重复的,可以再回来。一旦发行完了以后并不是说项目结束了,很多软件完了以后还要做结尾和善后工作,包括对客户的教育,写说明书等等。软件完成之后有两种发布方法,一个是送给一个制造商,刻录到DVD上去,还有就是放在网上,大家可以下载。最后的这个阶段我们称作项目的结束阶段。
把这五个流程理清楚,每个流程工作具体做得很好,都实践应用到工作当中去,软件开发的成功性就应该是大大提高了。