前期准备
一般说来,每个项目都会有一个项目的提出者。在实际中项目提出者往往也会成为整个项目的中心人物甚至负责人。在开始开源开发之前有必要进行一些前期的准备。主要包括对项目本身的评估和对开源开发的一些基本知识的了解。其中对项目本身的评估包括: 项目的规模、对开发者的技能和人数的要求、项目的预期开发时间,个人能够付出的时间和精力等。
在前期准备中,容易忽视的一点就是组织者对自己的把握。尽管开源项目有很多志愿者的协助,但实践中,组织者本人往往是项目中最重要的一个人物,往往也会花费较多的精力,因此有必要在项目开始前确认自己是否有足够的技能和精力来运作这个项目,不打无准备之仗。
在这个阶段最重要的一点就是明确自己提出的项目是否适合进行开源开发,因为并不是任何项目都适合进行开源开发的。其次就是明确需要的人力、物力和时间等因素。
人员招募
一般说来,开源项目的人员招募通常可以采用以下方法: 从身边入手,拉上几个志同道合者; 或者在开源项目网站上注册自己的项目计划,吸引开发者; 也可以通过自己的网站或其他活动进行宣传。
国内做过志愿者的开发人员并不多,是不是因为大家都没有兴趣呢?笔者曾经做过一次调查,询问北大天网的用户是否愿意参与我们项目的开发,共485人参与了本次调查,结果如图1所示。可以看到,虽然目前国内有开源开发经历的人并不多,但有热情、想作为志愿者参与开发与运作的人还是相当多的。
在天网千帆开放源码文件搜索引擎项目中,我们采用了第三种招募方法。首先进行了一场类似“宣讲会”的报告,然后在我们的网站上发布了一个广告。由于我们的网站访问量较大,报名的人数也比较多,10天之后就有100余人报名。
下面谈谈在人员招募的过程应当注意的两个问题,主要针对初次涉足开源开发项目者。
首先,如果可能的话,应当确保团队
其次,在我们的印象中,国外的开源项目的开发者往往是一些技术精英,因此我们通常也希望招募一些技术高手。不过在实践中,一方面这样的高手很难找到,另一方面大家也大可不必如此在意技术水平。因为国内整体开发确实同国外还存在一定的差距,另外如果一个团队里有一半高手,一半水平中庸,技术水平相差过于悬殊的话,反而不利于开发。
开发模式
现有的成功的开放源码开发模式有很多种,其中最常用的有两种:
1. 小型开源软件开发模式
2. 中型开源软件开发模式
其特点为拥有3~5 名核心维护人员,参与开发的人员10到40 人之间,采用CVS 进行代码管理,通过Maillist/IRC进行开发交流,有明确的开发计划和日程。用户提出的错误报告和修正数量很多,并且有一些分支产生。
除此之外,还有其他一些开发模式,比如完全封闭的商业开源软件、比较封闭的大型开源软件的开发、由商业软件转化过来的大型开源软件开发、“独裁”式的大型开源软件的开发、“民主”式的大型开源软件的开发。一般说来,根据项目的规模,我们很容易确定一种开发模式。我们这次实践采用的是“中型开源软件开发模式”,并根据我们自己的特征做了适当的调整。
不过,如果项目规模在中型以上的话,可以考虑同时采用多种不同的开发模式。最初我们曾经考虑全部严格遵循软件工程,并借鉴小组软件开发过程的思想。整个开发周期计划为16个星期。项目采用迭代式开发,分为两个阶段。但很快发现一个现实: 面对一个松散的开源团队,单纯的较严格开发方式有时反而并不高效,于是我们调整了开发方式。我们在项目中根据功能的需要,在某些独立模块的开发上采用下面两种开发方式。
首先,对于需求非常明确、有相当的把握开发成功的、成熟的独立模块,可以交付给熟练的开发人员独立开发,开发人员可以按照自己喜爱的开发方式,只要在规定的时间内完成即可,不必严格遵循团队的整体开发流程,但要保证开发模块的质量。
其次,对于无把握的或需要探索的新功能、新模块的开发,由于风险
这样,整个开源团队就存在三条并行前进的线路:遵循软件工程进行迭代开发的主团队、进行成熟模块开发的小分队,以及进行新功能尝试、探索的探险队。项目的最终成功开发证明我们的这种开发方式确实是一种成功的开发模式。
人员交流
在这里把交流单独列为一节,足以表明交流在开发中的重要性,尤其是在开源项目中,由于各个开发人员不在同一间办公室中,因此往往缺乏最直接的交流。网络的出现,虽然在一定程度上缓解了交流的困难,但也在一定程度上掩盖了交流问题的严重性。
在交流上最大的误解就是很多人误以为“开源开发只要通过电子邮件进行交流就足够了”。在我们这次开发中,我们发现其实这是远远不够的。如果可能的话,面对面的交流依然是最有效的交流方式,尽可能找到你的同伴,当面说清你的问题,进行面对面的谈话。
即时通信工具,如QQ、MSN等,已经成为第二高效的交流方法了。其他交流方式,如网络语音聊天工具、论坛、手机短信息、邮件列表、网络会议、电子邮件等几乎全部能够想到的方式几乎都被我们采用了。而且事实证明这依然毫不过分,交流是最重要的,而且是最容易欠缺的。
时间风险
图2 开发成员的工作时间统计