软件开发过程(CMMI/RUP/XP/MSF)是与非?
经常看到和听到大家在争论敏捷过程、RUP和CMM 哪个软件开发过程更好或者哪个过程不好,各自都有理由、争论得不亦乐乎......实际上,没有十全十美的过程,也不存在更好的过程。关键是什么样的过程适合自己(的组织),适合自己的过程才是好的过程。更重要的是,适合自己的过程需要时间积累、需要不断实践,对已定义的过程进行剪裁、补充和完善,才会建立最适合自己的软件开发过程。
?????? 引用Alistair Cockburn的一句话 “不同的项目需要不同的方法论,一个项目的最佳过程是这个项目所能负担的最小过程。”, 这说明,对一个组织,往往有几种方法并存,而对不同类型的项目,采用不同的方法。选择一个合适的生命周期模型对于任何软件项目的成功都是至关重要的。大量项目严重拖延、产品迟迟不能交付,究其根本原因往往是与错误运用了生命周期模型有关,这其中就包括存在明显缺陷的瀑布模型所引起的误区,虽然70年代提出的瀑布模型多年来一直被我们的软件工程教育奉为经典来传授,实践上瀑布模型往往会将软件过程引入歧途。与之不同是,新的过程方法论,不论轻型、重型, 还是XP、RUP或者TSP,无一例外地都主张采用能显著减少风险的迭代演进式生命周期模型,强调迭代。但过分强调迭代,可能会忽视需求分析和定义、忽视设计,在后期不断改动,使软件开发的不良成本(返工、修正缺陷等)大大增加,增加了企业成本。
?? 例如,越来越多的人在讨论、推崇敏捷过程、极限编程(XP),实际也是有问题的,虽然敏捷过程、极限编程适合Web的开发、适合免费的Web服务、适合永远的Beta版本,其中也有许多思想也确实值得应用,如持续集成、重构、强调测试等,但也存在其它问题,如结队编程、计划博弈、代码集体所有等。极限编程只适合小型团队、适合开源社区等,而不适合大型软件企业;在软件开发过程的全局上,更适合采用统一过程(RUP)、微软软件开发框架(MSF),而在局部、细节,吸收敏捷思想。有位美国朋友告诉我,XP可能昙花一现。不管他说得对否,当软件作为成熟的产业,肯定是不会允许完全像“XP”这种做法的。
?? 由于篇幅和时间有限,在这里,可以将目前的流行的过程模式进行一个对比分析,大家就会对不同的软件过程的优缺点,一目了然。
????
??? 概括起来, 不存在一种通用的或一成不变的适合软件开发和维护所有项目的软件过程模型。在组织软件过程中,存在不同的企业文化和业务环境、不同的层次和规模、不同的架构和产品类型、不同的资源和能力等因素制约,需要根据不同的项目、不同时期来选择和运用不同的过程模型和方法。不断吸收已有过程的思想,不断探索、不断实践,最终慢慢形成适合自己的自我定义的过程。