本文版权信息作者:Jake Lin(Jake's Blog on 博客园)
出处:http://www.cnblogs.com/procoder/archive/2010/02/10/About-Open-Source-4.html
本作品由Jake Lin创作,采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。 任何转载必须保留完整文章,在显要地方显示署名以及原文链接。如您有任何疑问或者授权方面的协商,请给我留言。

背景

随着iToday项目的发展,人员的扩展,需要一定的项目管理流程来保证项目不会流产。一个具有一定规范的开源项目,单靠个人激情和能力来完成项目的几率非常的低,没有项目管理流程,后续开展会变得困难,项目的可延续性也得不到保证。因此需要想办法实施有效的项目管理。

简介

本文讲述如何使用CodePlex进行开源项目的管理。

项目管理理论与个人理解

书本上的项目管理定义了九大关键域,包括范围管理 风险管理 沟通管理 质量管理 时间管理 成本管理 人力资源管理 采购管理 整合管理。包罗万象,林林种种。但是到了实施过程中每个人都有自己的理解,我对项目管理的理解是:有效利用有限的资源,使用一定的控制手段,达到预定的目标。 由于人力资源,资金成本等是永远都有限,特别是开源项目,主要由有兴趣的贡献者参与,人员不能保证,所以如何有效利用有限的资源很重要。在有效的资源下,通过计划,沟通等手段保证把有限的资源能充分的发挥作用,例如做开源的时候把贡献者安排到其最感兴趣的领域,发挥其最大的作用。这些控制手段同时包括风险控制和质量控制,使用版本管理工具一定程度的减低风险。完成预定的目标这个很重要,资源本身有限,时间也是有限,制定一个可预见的目标十分重要,我会使用版本管理来指定目标。下面讲述如果通过Codeplex实施项目管理,来达到我理解的项目管理目的。

项目管理原则

我的原则是尽量减少所有Stakeholder(项目干系人)的工作,同时最大程度的保证项目的可延续性。这本身就是博弈,世界没有银弹,只能尽量均衡。这里说的stakeholder包括开发者,测试者,协调人员等等,大家都是无偿的贡献,没必要走一个很完美的流程,例如CMMI那些来增加大家的工作量,所以我尽量的简化项目流程,使得大家可以专注于自己喜欢的事情上。在尽量少的项目管理工作来保证项目的延续性。

Codeplex Issue Tracker

我使用Codeplex 的 Issue Tracker功能进行项目管理,地址如下: itoday.codeplex.com/WorkItem/List.aspx ,因为Codeplex本身带了这个系统,不需要另外找项目管理系统,尽管这个系统不是很完善,我们还是可以在其基础上使用。

Issue Tracker是一个问题跟踪系统,一般用在bug处理上,但是也可以用到需求管理,任务分配,版本控制等功能,下面讲述每个Issue包含了那些内容。

版本

我认为版本是Issue最关键的信息,代表着目的与目标,任何Issue都是有目标而做的。当前我把版本分成三类,真实的版本,Future版本和Konwn Issues版本。

真实的版本

例如V 1.0.0, V2.0.0那些,就是需要发布的版本,在开源软件里面是提供给用户下载的版本,也是需要完成的目标。

上面是Version 1.0.0的需要完成的功能,我们把需求作为Issue关联到Version 1.0.0,一旦完成了这些需求,就可以发布Version 1.0.0了。当然在开发过程中如果发现bugs,而且这些bugs关联到Version 1.0.0,那么发布之前也需要修改这些bugs,发布版本的标志是完成该版本下所有的Issues。

Future版本

由于资源的有限性,不可能在一个版本内完成所有的需求,那么一些需求需要放到Future版本中去了。这些需求可能在未来的版本中实现。

Konwn Issues版本

有些问题在当前版本中存在,但是由于某些客观条件限制,不能在当前版本中实现,可以归类为Known Issues。

状态

每个Issue都有状态,包括计划的,活动和已经修改的,创建Issue的时候是Proposed,Assigned to的人会开始处理这个Issue,修改为Active,如果Issue完成了就改为Fixed。发布版本之前所有Issues都应该为Fixed。在我看来,这些状态是不够的,太简单了,至少需要Won't Fix和Duplicate,Cannot Reproduce,有些所谓的bug是不需要fix的,有些Issue是重复的,有些bug是不可重现的。所以我说Codeplex Issue Tracker的功能不够完善。

类型

类型分Feature,Issue和Task。Feature是软件具备的功能,可以理解为需求。Issue是一些问题,可以理解为bug。Task表示一些任务,包括各种任务,例如实现需求的子步骤,编写文档,一些项目管理工作等等。

举一个实例:

我们需要完成Weather Panel的功能。

我新建了一个“新增Weather Panel”的Feature。

链接在http://itoday.codeplex.com/WorkItem/View.aspx?WorkItemId=5992

同时实现这个Feature至少需要下面两个子任务(Task),可能更多Tasks,但是先列举两个。

链接在 http://itoday.codeplex.com/WorkItem/View.aspx?WorkItemId=5993

链接在 http://itoday.codeplex.com/WorkItem/View.aspx?WorkItemId=5994

作为类型,我觉得只有Feature,Issue和Task是不够的,我们使用的另外一套系统中,类型包括下面那些:

但是CodePlex只是提供那么多,我们先用吧。

优先级

优先级很好理解,如下图:

组件

当前iToday有两个组件,一个是Panels,表示应用,如何Home,Weather,Contact Panel那些。而UtilityLib表示一些非UI的公开库,例如WebService属于UtilityLib。

如何使用Codeplex Issue Tracker进行项目管理

流程

项目开始之初收集需求,所有需求都记录下来作为Feature。

然后定义版本,例如定义Version 1.0.0,把需要实现的需求作为Feature绑定到Version 1.0.0中,分派任务。

得到任务的开发者可以根据需求自己定义子任务,例如上面例子的封装WebService等等。

开发人员把任务变成Active,开展自己的开发工作。

任务完成后,把任务变成Fixed。

版本Version 1.0.0下所有Issues变成Fixed以后,项目协调人统一发布版本。

定义版本Version 1.0.1,作为Version 1.0.0的完善版本。

测试人员开始测试,使用Issue Tracker提交bug,类型为Issue,关联到Version 1.0.1。

修改Version 1.0.1下所有问题,Fixed所有Issues,发布Version 1.0.1。

周而复始(Version 1.0.1,Version 1.0.2……),一直完善当初Version 1.0.0下的所有Feature。注意不需要把新功能加入Version1.0.1,否则Issue会越来越多,新需求是Version 2.0.0或者Future版本。

与此同时可以定义Version 2.0.0,从Future版本中的一些Feature移到Version 2.0.0,重复Version 1.0.0的步骤。

Version 2.0.0和Version 1.0.0需要同步,这里包含了如何使用SVN等细节,但是不影响Codeplex Issue Tracker的项目管理流程,我先不在这里讲述了。

贡献者责任

各种贡献者如何使用Codeplex Issue Tracker来完成项目管理流程如下:

项目协调人:定义版本的Feature。分配任务(Feature和Task)。发布版本。

开发人员:定义子任务(Task)。开发。提交版本。

测试人员:提交bug(Issue)。

我觉得流程很简单了,如果可以简化继续简化。这是一个蓝本,大家在实施过程中做流程完善。有问题及时提出,及时修改流程。

还有SVN的管理也是非常重要,后续讲。

[转]开源那些事儿(四)-如何使用CodePlex进行项目管理的更多相关文章

  1. 开源企业平台Odoo 15社区版之项目管理应用模块功能简介

    项目管理无论是各类证书的认证,如PMP.软考高级的信息系统项目管理师.中级的系统集成项目管理工程师等,还是企业实践都有着广泛的实际应用中,至今还是处于热门的行业,合格的或优化的项目经理还是偏少,对于I ...

  2. Qt Style Sheet实践(一):按钮及关联菜单(24K纯开源,一共四篇)

    导读 正如web前端开发中CSS(Cascade Style Sheet)的作用一样,Qt开发中也可以使用修改版的QSS将逻辑业务和用户界面进行隔离.这样,美工设计人员和逻辑实现者可以各司其职而不受干 ...

  3. itest(爱测试) 开源一站式敏捷测试管理平台&极简项目管理,重大升级(接口测试)6.0.0 发布

    itest 简介 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试5合1,又有丰富的统计分析.可按测试包分配测试用例执行,也可建测试迭代 ...

  4. 不错的开源FTP类库

    socket开源ftp类库代码:http://netftp.codeplex.com/ 需要注意事项,如果以下代码出现乱码问题,可以设置其中的Encoding属性就可以. 用法示例: using Sy ...

  5. 拥抱开源,Office 365开发迎来新时代

    前言 作为全球最大的开放源代码托管平台,Github在上周迎来了它的十岁生日.自从2008年正式上线以来,Github上面汇聚了数以千万计的开发人员和各种项目,它几乎成为了开源的代名词和风向标,各大软 ...

  6. 一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源

    前言: 自从我2014年下半年到现在的某电商公司工作后,工作太忙,一直没有写过一篇博客,甚至连14年股票市场的牛市都错过了,现在马上要过年了,而今天又是立春节气,如果再不动手,那么明年这个无春的年,也 ...

  7. Android 开源项目及其学习

    Android 系统研究:http://blog.csdn.net/luoshengyang/article/details/8923485 Android 腾讯技术人员博客 http://hukai ...

  8. 【开源】OSharp框架解说系列(5.1):EntityFramework数据层设计

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  9. [转]Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多 ...

随机推荐

  1. android webview如何加载asset目录里的页面

    在asset里的页面都可以这样获得 file:///android_asset/index.html

  2. Sqlserver CheckPoint 在三种恢复模式中的不同表现

    准备: 日志截断在下列情况下发生: 1.执行完 BACKUP LOG 语句时.2.在每次处理检查点时(如果数据库使用的是简单恢复模式).这包括 CHECKPOINT 语句所产生的显式检查点和系统生成的 ...

  3. UI学习笔记---第四天

    事件处理 事件概述 UIEvent:事件,是由硬件捕捉的一个表示用户操作设备的对象 分三类:触摸事件\  晃动事件\ 远程控制事件 触摸事件:会包含1个到多个触摸点 实现触摸 UIView支持触摸事件 ...

  4. SAP 审计

    SAP 权限审计:SA38--- RSUSR002 还有其它事务码待续,,,

  5. 简单实用的纯CSS百分比圆形进度条插件

    percircle是一款简单实用的纯CSS百分比圆形进度条插件.你不需要做任何设置,只需要按该圆形进度条插件提供的标准HTML结构来编写代码,就可以生成一个漂亮的百分比圆形进度条. 首先要做的就是引入 ...

  6. form的onsubmit事件--表单提交前的验证最佳实现方式

    今天遇到了一个问题,页面中include了很多的公共页面(都是没有form的),并且里面好多的地方都是自行提交的(页面中加入一个type=“submit”域,然后js中写入sumbit.click来执 ...

  7. 【P1351】构建双塔

    奇怪的DP 原题: 2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr. F曾亲眼目睹了这次灾难.为了纪念“9?11”事件,Mr. F决定自己用水晶来搭建一座双塔. Mr. F有 ...

  8. kuangbin_UnionFind J (POJ 2492)

    加权并查集mod2模板 本体的难点是bug的释义(笑) #include <iostream> #include <string> #include <cstdio> ...

  9. Linux驱动设计—— 中断与时钟

    中断和时钟技术可以提升驱动程序的效率 中断 中断在Linux中的实现 通常情况下,一个驱动程序只需要申请中断,并添加中断处理函数就可以了,中断的到达和中断函数的调用都是内核实现框架完成的.所以程序员只 ...

  10. spring源码学习之【准备】jdk动态代理例子

    一:被代理的对象所要实现的接口 package com.yeepay.testpoxy; import java.util.Map; /** * 被动态代理的接口 * @author shangxia ...