软件项目是发现与发明的过程。发现与发明融合为一的最佳方式是透过“阶段性完成”的做法,将产品的功能分阶段完成,而最重要的功能最早完成。当项目进行时,许多活动交互重叠,把产品有抽象概念转化成具体成果。项目进行中的源代码倾向以S形曲线而非线性成长,而大部分的程序代码都是在项目中间第三部分完成的。追踪程序代码的成长提供对项目状态的洞悉力。执行良好的项目也可以由一名上层主管选择最有效的一组来进行追踪。
本文描述一个成功的项目由两万尺的高空鸟瞰时的样子。它提供了通过不同的角度透视项目流程、人员、进展活动、程序代码成长与主要成效。
思考阶段
在讨论软件项目依照规划阶段分期完成的方法之前,我认为先对项目整个过程进行通盘了解会有用处。
软件项目如图5-1,被切分成三个概念阶段。在项目初期,焦点摆在“发现”,特别是发现使用者的真正需要。透过技术性调查、与使用者访谈和建立接口雏形,把不确定性的概念转换成确定的观念,这就是第一阶段的特色。
在项目进行中期,焦点移到了“发明”上。往大方向看,开发人员要发明软件构架与设计方式。细节的地方,如每个函数式或对象类别也不能忽略。
如同发现阶段般,发明阶段的特征在于将不确定的概念转换成确定的观念。如果还有别的特征,就是发明阶段的不确定性要高得多。在发现阶段,开发人员可以确定答案“就在”某个地方。可是在发明阶段,就不能以此类推。
在项目的最后部分,焦点又转移了,这次摆在实作上。不同于发现与发明阶段的是,实作阶段的不确定性少多了,故可发掘出许多已确定的观念并可实现成具体成果。
如图5-1所描述的,发现、发明与实作在软件项目中各自以一定程度进行着。太严格分段规划反而不能有效运作,好的项目计划必须让发现、发明与实作一起出现。
项目流程
在某些软件开发方式中,项目团队几乎是秘密完成开发的大部分工作。技术性项目常提供如“完成90%”之类的状态报告。对顾客来说,如果完成项目的90%就花去了90%的时间,那剩下的10%可能会花去另一个“90%”的时间。
本文提供的项目规划依循着“阶段性完成”的轮廓进行。由于她将项目中开发的软件分阶段完成,而不是到了项目结尾才一次完成,这种方式称做“阶段性完成”。图5-2说明了这种方式。
如你从这图所看到的,阶段性完成强调项目规划与风险降低。项目团队先发展软件概念,分析汇集需求;再完成构架设计。这些工作透过积极的风险管理与精心规划,朝着消除风险的目标前进。