方法过程
软件开发的方法过程的提出是针对开发的随意性,即边写边改(code and fix)。它主要是借鉴了其他工程领域的方法,最著名的当数“瀑布式”过程了,即把软件开发分解成这样一些阶段:需求分析、规范说明、系统设计、编码实现、测试验证。而在开发实践中完全遵循这种过程取得成功的并不多。其原因在于这种方法有一个前提条件,那就是系统需求必须是明确的,需求分析一经完成就应该不变了。而在现实世界中,特别是在商用系统开发中,这几乎是不可能的。需求通常是模糊的,并且在系统开发期间随时都在变化的。因此要求采用的方法过程也必须是能适应这种变化的,毕竟一个软件系统的第一要求是它的正确性,即能正确地完成所要求的任务。
最近几年兴起的以极限程序设计(Extreme Programming 或简称XP),引发了一场软件“敏捷开发” (agile development)运动。“敏捷开发”的基本要义是采用递增式(或称之为迭代式、螺旋式等)的开发方式。系统功能被分解成若干小的功能。每一个递增周期为两周到一两月(视具体情况而定),实现一项新功能。每个周期做的代码必须经过充分的(单元)测试。业务人员(business people)或用户必须和开发组在一起,以随时保证做出的功能是满足用户的需求的。项目组成员应在同一地点工作以保证高效的、面对面交流。要经常性地(典型地是在每个周期结束时)进行回顾检讨,随时调整方法过程以达到最有效的开发。
我所参加的大部分项目基本上都是采用了这种“敏捷”型开发方法。有些是比较严格地按照这些原则去做。而在有些项目中,因为种种原因没严格遵循有些原则,其结果是从反面证明了这些原则的重要性。如有个项目,开发组分散在两个国家,做主要开发工作的一边没有业务人员和用户。这样的后果是开发人员在审读需求文档,以及在编码实现中遇到问题时得通过电话和email去和另一边业务人员讨论,其效率和质量都大打折扣,还很可能会留下一些隐患。
提到软件开发,大家可能会想到CMM。我想在这里提一下的是有CMM之父之称的Watts S. Humphrey。他最近在一个“敏捷”方法大会上作了一次演讲,题目是“Setting the agile context”,其中他列出了一些软件开发原则,还着重描述了如何运用他前些年提出的TSP(Team Software Process)与PSP(Personal Software Process)来进行开发的过程。这些原则和过程与前面提到的“敏捷”原则与过程相当类似。另外,Humphrey在前两年一份技术报告中把CMM、TSP和PSP统一在一个框架中,并把它们分别定位为:CMM用于改进一个(软件)企业的管理能力,TSP以提高一个开发团队的有效性,PSP则是增强个人的技能与纪律性。