日本的大多数情况是采用瀑布式开发
本节将稍稍改变风格,与你聊聊系统开发的事。
系统的开发方式有 瀑布式 和 敏捷式 两种。使用哪种方式能使工作效率更高呢?
这实际上是一个很难的问题。
瀑布式开发 是1970年左右在软件行业开始采用的方法,它基本按照 需求分析→设计→编码→测试→发布→运用和维护 的步骤进行开发。也就是说,前一道工序完成后,才能进行下一道工序,步骤从直观来看很容易理解。如果进展顺利的话还能使项目高效完成。
与此相对, 敏捷开发 始于2000年左右,是比瀑布式开发更新颖的开发方式。 它以2周左右为一个短周期(期间),在短周期内进行一定量的开发和测试。 不是一口气地制订计划,而是把每个短周期内运行的软件都展示给项目所有者看,并寻求其反馈。
因此,在初期阶段,这种开发就能让项目所有者看到整个系统的运行。通过早期的测试和来自项目所有者的反馈,防止大面积的返工,实现降低开发成本的目标。敏捷开发以变化和不确定性为前提,进行软件的灵活开发。
然而,在瀑布式开发中,一直到开发的最终阶段,项目所有者都无法看到系统的实际运行情况。因此,有时会发生这样的悲剧:项目所有者在系统开发完成后才发现这并不是自己想要的东西。如果发生了那样的悲剧,进行大面积的返工成为必然,项目也会延期。
另外,在瀑布式开发中,测试是在开发的最后阶段集中进行的。也就是说,开发可以在前一道工序不准确的情况下继续。结果,前期累积的故障会在测试阶段爆发,处理起来就会变得很困难,导致系统发布需要更多时间,项目也会产生延期风险。
就算在实际情况下,项目所有者在最初的需求分析阶段也无法确定开发要求,即使要求确定了,软件规格也会发生改变。或者在设计阶段之后,软件规格还会发生变化。这些变化会导致返工,项目也随之延迟。
原本系统开发就应该在确认每个步骤正确与否后再向前推进,这样就不易发生返工。但实际上,仍有不少项目因返工而延期。
这样的话,你最好选择敏捷开发。事实上敏捷开发在当今世界已经成了主流。
但是,日本的情况并没有那么简单。
其原因在于日本的系统开发具有特殊性。在其他国家,系统是由公司自己的工程师开发的。但是,日本的大型企业自己并不开发系统,而采用外包的形式。他们都倾向于将系统开发工作外包给系统开发公司。
系统开发公司制订整体计划,估算每个步骤所需的工作量,然后乘以人工单价来做出预算。如果是大规模开发,单靠总承包商某系统开发公司是无法实现人员调配的,还需要进一步联合相关公司或子公司,动员他们的员工一同进行系统开发。此时,能够明确每个步骤所需人员的瀑布式开发,在人员调配环节非常便利。
结果,大多数日本系统工程师精通的都是瀑布式开发。也就是说,实行自主开发的公司容易引进敏捷开发,但如果是实行外包开发的话就很难。
虽然笔者写得有些极端,但瀑布式开发的目标明确,朝着既定目标就能以最快的速度完成开发,理论上是一种高效的开发方法;而与此相对,敏捷开发需要每2周修正一次,理论上属于低效的开发方法,因此从逻辑上考虑,瀑布式开发的工作效率更高。但现实中结果可能并非如此,原因已在前文中进行了叙述。
瀑布式开发固然有其缺点,但它有多年的实际应用成果,并且有很多熟练的工程师,若遇到合适的项目对公司来说会是不错的选择。但是,近几年,在这个难以预测未来的时代,有很多系统适合使用敏捷开发,因为它们需要进行短周期修正以削减开发成本。
笔者建议有系统开发需求的公司在充分考虑项目的特点后再讨论出最合适的开发方法。