迭代型软件项目开发计划的编制
林镇锋(深圳市康拓普电力自动化有限公司,PMP)
摘要
项目计划的编制对一个项目的成功执行起着非常重要的作用,而在软件开发领域,面对不确定的用户需求,瀑布型的项目计划往往成了一纸空文,迭代型的项目计划又无章可循。本文针对这种现象提出一种适用于迭代型软件项目开发计划的编制方法。
引言
我们知道对于软件开发来说,变化的需求才是不变的道理,在制定计划时期望事情的一切都按照计划进行,是不切实际的。如果我们拿计划来评估绩效,人们将会说一切都很好,一切都按部就班,即便已经出现了某些危险的征兆。这几年在软件工程领域有越来越多的有识之士提出,现实中存在两种生产方式:可预测的生产和不可预测的生产,而软件开发就属于不可预测的生产方式,因此软件开发项目不适宜采用可预测的计划方式。
正文
经过几十年的发展,软件工程领域出现了很多种软件生命周期模型,有瀑布型,迭代型,增量型等等。软件项目的开发计划的编制要取决于软件项目的生命周期模型,换句话说,就是瀑布型项目和迭代式项目的开发计划的编制方法并不相同。而瀑布模型来源于建筑行业、制造行业等可预测的生产,本来就无法适应需求不稳定的软件项目。因此许多项目尽管在一开始就规定采用瀑布型,却在实践中慢慢变成了迭代型。许多采用了瀑布型的项目计划与现实差距太大,最终变成了无法落实的一纸空文。
其实迭代不是什么新的发明,其中思想与PDCA的思想也是一致的,都是通过一个螺旋上升的过程不断逼近目标或者期望。这个道理很朴素,现实世界中俯拾皆是,客户的头脑中也有这样的模型,难怪他们动辄说:“刚才提到的这些需求,你们先开发出来,我们试用一下,看是否合适,再来改进。”
又例如我还发现在编程领域的重构就是迭代思想一种体现。所谓重构是这样一个过程:「在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构」。重构是一种有纪律的、经过训练的、有条不紊的程序整理方法,可以将整理过程中不小心引入错误的机率降到最低。本质上说,重构就是「在代码写好之后改进它的设计」。我们可以打个比方,重构就是编码过程的迭代,通过一次次重构的迭代达到更佳的设计,每次重构的迭代都保证了程序的正常运行,这意味着每次迭代的结果都是可以观察到的。
图一
瀑布和迭代
瀑布型的软件开发进度计划一般按照阶段划分,即分为策划与估计,需求调研与分析,概要设计,详细设计,编码与单元测试,集成测试,系统测试,实施交付,项目收尾。
迭代型的开发进度计划可以分为两个层次,第一个层次是总体的计划,可能历时几年或者几个月,如XP的发布计划,RUP的阶段计划。第二个层次是短期的详细计划,历时从一周到2、3个月不等。总体计划划分整个项目的工作到各个迭代周期中,并不关注执行细节,时间跨度较大可能会因为需求的变化而修订;而短期计划是一个迭代周期的计划,关注执行细节,将具体的任务落实到人,并且由于时间跨度小相对稳定。
制定总体计划
项目总是存在约束条件,例如客户方要求某年某月完成系统一个版本,这个版本应该包含若干功能。或者这个项目与类似项目相比,可以得到一个大致的完成日期。这些都是制定总体计划时关键信息。
总体计划为团队的工作指出了方向。在总体计划中主要关注里程碑,每个里程碑要完成的目标或者功能项。因此总体计划也可以被称为里程碑计划。不要为各个活动设定一个完成时间点,例如设定详细设计的完成日期,编码与单元测试的完成日期都是没有意义的。因为这些活动在整个项目进行中都是不断重复进行的,即便进行了系统测试也回过来进行详细设计和编码。
有了总的完成日期和各个