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下的用户可能不太习惯，开发网站主要是提供一个方便操作的界面和接口。 新的网站正在重新设计制作之中，有什么建议请与“项目管理员”联系。