近年来,开放源码思想在国际上越来越受到人们的重视,在这个思想下已经成功开发了一系列著名软件,比如Linux就是其中典型代表。开放源码思想与Internet有着内在的天然联系,通过二者的有机结合能够将许多人的智力集聚到一起,反映了一种新的软件开发思路,本节试图探究其成功经验。
相对传统软件工程而言,开放源码社区似乎没有准备接受或实践现代软件工程过程,但他们的确在开发适用于特定用户团体的软件,这些软件通常是极具价值的、可靠的、被广泛接受的和高可用的。那么,究竟什么样的开发过程正在开放源码社区中被常规应用和实践呢?一项研究表明,有五种软件开发过程在开放源码社区得到广泛应用:
1) 需求分析和说明
2) 受控的版本管理、系统构建和按阶段的增量发布
3) 维护被看作是演进式开发、重新精练细化和重新发行
4) 项目管理
5) 软件技术转移
以上每个过程都与传统软件工程规定体现出不同之处,而且没有哪个过程应被独立构造或凌驾于其他过程之上。更进一步,这些过程相互之间通常是并行开展的,而不象传统软件生命周期模型中那样严格的或部分的按序进行,开放源码软件开发从本质上讲是一种复杂的由社会-技术过程、开发条件和动态产生的开发上下文所组成的网络,以Internet为基础支撑平台,并随着Internet的发展而不断完善。
对于许多开放源码项目而言,开发人员对于是否遵循了某种规定的软件工程方法和过程并不关心,有些项目甚至没有特定的用户和发布截止期限,但是诸如“经常发布”、“简化设计”、“测试”、“编码标准”、“集体参与”等基本原理却被本能地执行着。
对于开放源码软件协同开发原理的经典论述来自开源社区领袖之一的Eric Redmond的《大教堂与市集》一文,在该文中作者形象地将传统的严格管理的软件开发活动比喻为构筑大教堂的行为,而将分布于Internet之上的开放源码社区的协同开发活动则看作是市集行为,作者根据亲身经历系统地论述了市集型开发的基本方法和哲学问题,阐释了开放源码社区成功的内在原因,对于传统软件开发不无借鉴之处,比如“早发布、常发布、听取用户的建议”、“把用户当做协作开发者和Beta测试人员”、“聪明的数据结构和笨拙的代码要比相反的搭配工作的更好”、“最好的设计不是再也没有什么东西可以添加了,而是再也没有什么东西可以去掉”、“好程序员知道该写什么,伟大的程序员知道该重写(和重用)什么”等等。
目前,人们对于基于开放源码的Internet协同开发实践还缺乏深入研究和理解,但是已经得到越来越多的软件工程人士的关注,并取得一定的研究成果。一个软件工程研究小组在过去5年中深入研究了几个大型的开放源码系统的体系结构和进化过程,包括Linux、GCC、VIM、Mozilla和Apache,发现他们与类似的商业系统之间表现出令人感兴趣的不同之处,比如,开放源码软件的体系结构通常是可浏览的以允许开发人员进行交互,对于那些可能阻碍程序理解(因为程序员通常是分布在Internet上各个角落互相独立的工作)的体系结构部分进行特殊声明;从同类的开放源码软件如Web服务器中可以提取其共性的参考体系结构,而在商业软件公司中却难以通过Web服务器体系结构获得几种不同的实现;开放源码软件的体系结构和开发模式是导致其超线性增长的主要因素,并且被尽可能设计的易于移植,其发行版通常不是针对特定平台,而是将各种平台的共性抽象到一个发行版中,通过配置工具来帮助构建系统。
另外,针对如何借鉴开放源码项目的经验用于指导商业软件项目也有相关研究成果,该项研究表明,尽管完全利用开放源码开发模式来代替传统商业软件开发模式目前看来还不太可能,但无疑可以相互借鉴经验教训而获得收益。研究人员认为,一些可供商业软件项目借鉴的开源项目经验包括:
人员组织——开源项目通常由很少的核心成员完成多数开发和升级任务,这一点与商业软件开发类似,但差别在于这些任务是如何在核心小组内分配的。开源项目通常是自发形成,职责的分配是基于对开发人员如何看待他们在项目中的角色的推理而确定,并不是硬性指派产生,这一点无疑对于商业软件的管理具有借鉴意义。