CnPack协同开发预案
2002.02.19 by yygw
一、简介

对CnPack这样的网上协同开发项目来说,选择一种合理的开发方式是极为重要的。经过近三个月的筹划和准备,CnPack的开发即将走入正轨,推出这份文档的目的就是要定义一套开发制度,以保证项目开发的顺利进行。

在开发组中,除了开发小组的划分,相应地也将管理权限分为项目管理员、小组负责人和开发员三类,各司其责。权限大的成员意味着他将为项目的开发投入更多的精力,承担更多的义务。

整个开发过程分为若干个阶段,每个阶段又由管理员设计若干个相对独立的任务,而开发员则选择自己有能力完成的任务进行开发,最终完成整个项目。

多人分散开发的协调工作是极为繁顼的,幸运的是,“共创软件联盟”为我们提供了一个极好的开发平台,包括项目主页、邮件列表、讨论组、CVS服务、错误跟踪、文档发布等等。现在,CnPack已经是该联盟的一个正式项目,以后我们就可以利用它来方便地进行开发管理了。(谁说天下没有免费的午餐呢?)

二、开发组组织方式

若干年前,一句“人多力量大”的口号让中国人口蹦到了1X亿,而经过这段时间的磨炼,我才终于以自己的切身体会理解了无数被大家老生长谈的东西。

现在开发组正式报名成员有20多人,成员们能力、经验、空余时间各不相同,参考网上其它类似项目的开发经验,现对开发组织方式做以下调整:

首先申明一点,成员为开发组所做的工作完全是自愿的,成员可以自由加入和离开,开发组没有权利对任何一个成员的失职或错误进行惩罚,下面的规定只是为了保证开发工作能顺利的进行下去。

开发队伍的分组基本上仍按以前的方式来,大组分为“开发包设计组”、“代码编写组”和“辅助开发组”,其中以前的“网站维护组”合并到“辅助开发组”。“开发包设计组”成员主要由各小组负责人组成;“代码编写组”分为“不可视工具组件”、“界面控件”、“数据库报表”、“网络通讯”、“专家工具”、“版本控制系统”、“外部工具”、“窗体仓库”这些小组;辅助开发组负责资料收集、测试、翻译、网站维护等辅助工作。

新的分组方法是相对宽松的,小组划分是为了让各小组负责人对小组的整体开发能力心中有数。除了少数专职人员外,大部分开发员都可以根据当前发布的任务表为开发包编写代码,而不必终日等待自己小组的任务。同时,这样调整也是为了适应开发队伍日渐庞大的需要。

CnPack的设计目标过大过全一直是一个重点问题,当前的解决方案是实行“小组负责制”和“以任务驱动开发的机制”。各个小组在没有正式负责人前处于休眠状态,当有能力的成员承担起小组负责人这一职务后,小组的开发工作才启动。而项目的最终设计目标则保证了整个开发计划的“可持续发展性”:-)

与前面的分组方案相适应,开发人员的管理权限分为项目管理员、小组负责人和开发员三级,在项目管理中承担不同的责任。

项目管理员具有最高的管理权限,负责整个项目的开发协调和管理工作,以小弟初出江湖的资历和浅薄的个人能力,仅凭“发起人”这一身份暂时担任这一职务,很有些诚惶诚恐呢:-),还望大家多多指点和包涵!

小组负责人为各个开发小组的管理员,当然他们同时也是开发包设计组成员,更是小组的主力开发员。每个小组可有一到两名管理员,对该小组的开发全权负责,工作包括制定详细开发计划、功能定义、接口定义、任务发布等。

开发员则是开发组的主力队伍,所有开发、测试、发布工作都由他们完成。

三、任务驱动方式的开发过程

CnPack的开发不同于常规的项目,在这方面我们并没有太多的先验知识,项目设计不太可能一步到位。整个开发过程总体上分为筹划设计、代码实现、整理发布三个阶段,互相交叉往复。

开发包的设计又分为开发包整体设计、各小组整体设计、各模块详细设计等几部分,贯穿于整个开发过程。由于开发内容较多,各个小组的设计开发进度不要求一致,可以同时进行,也可分阶段完成。

开发包整体设计完成后,每个小组具体的开发采用“任务驱动方式”进行:

1、首先,小组负责人在广泛参考了开发员的建议后,拟写一些软件各模块的开发文档(逐步推出),包括系统结构、组件或模块功能描述、接口描述等等。然后由负责人向项目的任务表添加相应的新任务描述。

2、开发人员可通过三种方法参与开发:

第一种是“分配式”,小组负责人根据任务难度及小组成员具体情况,将新任务指定给一个成员并与之联系,如果该成员接受了这项任务,负责人就会在任务表中相应任务后加入此开发员的名字,表示该成员正在为这个任务工作。开发员在任务接近结束时应通知设计人员,并最终提交任务代码。

第二种称为“认领”,也就是开发员看到新任务描述后,可向负责人发信联系,表示自己可以胜任此工作,负责人收到信后更新任务表,将该任务交由该成员负责。

第三种参与开发的方法称为“默许协作式”,在这种方式中,开发员可以不必事先通知设计人员就根据文档着手开发,在开发接近结束时再通知设计人员,并最终提交任务代码。

这几种方法可以任选,没有任何强制要求。

3、小组负责人在得知开发员已完成任务后会在项目网站通知所有成员,其它成员可以对该开发员的代码进行测试、修改或扩展。开发员也可以随时向小组负责人提出自己的建议,这样往复循环,直至项目结束。

4、辅助开发人员对已完成的代码进行测试,编写相关文档并定期进行发布。

在开发过程中,除了编写代码的任务,小组负责人还可以发布收集资料、文档翻译等辅助任务并在开发网站中公布,除了开发组开发员外,其它人也可以接收这些任务。

所有为CnPack做出过贡献的人,包括没有加入开发组的,都会记录在“有贡献人员名单”中,在开发网站中公布并与开发包一起发布。

四、“共创软件联盟”开发平台

为了使CnPack能有一个稳定的协同开发平台,在经过漫长的奔波后,我最终决定在“共创软件联盟”上进行CnPack的项目开发。该联盟是一个受国家863计划支持的非盈利性组织, 成员大都是一些对自由编程感兴趣的程序员或编程爱好者。联盟内目前有近二千名注册成员,一百多个自由软件项目,CnPack开发计划已于2002年2月成为其中之一。

“共创软件联盟”向这些项目组提供包括免费网站、邮件列表、讨论组、CVS服务在内的很多网络资源,当然如果成员打算使用这些服务的话,前提是必须先加入该联盟。这样一个提供了如此强劲的协同开发支持的免费平台,我们有什么理由不选择它呢?

CnPack的大部分开发工作都将在此进行,开发成员请到“共创软件联盟”[IP 211.100.7.111] 中注册,并将用户名发给“项目管理员”,以便于以后的工作。注:注册时请使用小写英文字母的用户名,该联盟是定期更新的,注册后可能需要几个小时的时间才能收到确认信,CnPack项目注册了几天都开通了还没收到确认信:-(。

由于项目刚注册,很多东西仍不了解,下面仅介绍一下几个有用的功能:

1、邮件列表。一个项目可以创建任意多的邮件列表,分为内部列表和对外列表,可由管理员进行设定,作用就不用我说了吧:-)

2、论坛。一个项目同样也有好几个论坛,成员可以订阅某个论坛,这样上面帖的信息会自动发到注册的信箱里,非常适合开发工作。

3、CVS仓库。没有用过版本控制系统的人,永远也不会知道它是多么有用。CVS维护着一棵资源树的历史,这个历史是根据一系列的修改而来的。它记录了项目每一次的修改,并且记录修改的时间和做修改人的姓名。通常,那个人也会提供一小段文本,描述了为什么要做改动。关于在该联盟中使用CVS进行开发的内容请参见后继的文档。

4、任务管理。如前所述,这或许是多人分散开发最好的方式了。

5、从资料上看,联盟还提供网站空间、匿名FTP空间、文档监控、错误跟踪、技术支持、补丁、调查、新闻、文档管理、包发布、PHP、MySQL数据库等一系列资源,在今后的开发中我们将逐渐学会使用它们来为开发服务。

另外,该联盟使用SSL验证来保证开发作业的安全性,这样一来操作起来可能会相对复杂一些,没有接触过unix、linux的成员(小弟也是)将需要花一点时间来熟悉这些操作,有经验的成员可不要藏私喔。

上面提到的东西,联盟的网站上有较为详细的说明,大家可仔细阅读。

五、开发网站

有了前面的开发平台后,开发网站的建设变得相对容易,当前定义为一个对外发布信息、招兵买马、公布开发任务和开发进度的界面站点,同时负责将用户引导到联盟上。由于联盟的平台是在linux服务器上基于Sourceforge2.0改进的系统,普通Win32下的用户可能不太习惯,开发网站主要是提供一个方便操作的界面和接口。

新的网站正在重新设计制作之中,有什么建议请与“项目管理员”联系。