做了6年的配置管理,一直在用自己公司开发的配置管理系统。但是基于CVS的特性,总有一些不如意的地方。于是就想,能不能重新开发一套开源的基于工作流的与SVN紧密结合的配置管理系统。
在我的设想中,理想的配置管理系统,应该包含以下功能模块,以便做到涵盖软件的整个生命周期。
需求管理:需求管理中,按以下流程工作:
用户提出需求---->CCB确认需求---->需求分析人员分析需求---->评审需求--发布需求基线---->......---->需求发布(到用户)。
在这中间,CCB可以拒绝需求。或将用户提出的需求确认为新需求或与已经发布的需求关联,生成变更需求。需求分析人员,分析需求,根据需要可以扩展成跨产品的复合需求,并生成复合需求单。并分析需求,生成需求分析文档,提交评审,评审问题解决后,由CM发布需求基线。
设计管理:设计管理中,流程如下:需求文档---->功能点(设计文档)---->评审---->设计完成(到编码阶段)
评审管理:评审流程按项目阶段分为:需求评审、设计评审、代码评审(走查),按形式分为:会议评审、离线评审。会议评审需要预定会议室等,需要会议记录员,需要投影仪等设备。离线评审则可以通过系统,让相关人签收即可。
评审流程如下:评审计划提出---->问题提出---->问题修正---->评审通过(基线发布)。
任务管理:任务管理根据需求、设计的产物:需求单、功能点单,分派任务单。其中牵扯到绩效管理、任务分派、任务跟踪、任务提醒等。
需求任务:原始需求---->分析后需求单---->任务单完成。
设计任务:分析后需求单---->设计后产物(功能点)---->任务单完成。
开发任务:功能点---->代码编写---->编译(通过进入测试状态,不通过进入开发状态)---->测试(通过,任务完成、未通过提出BUG)---->任务单完成。
由于这是一个基于工作流的系统,所以任务单的状态变更,也会导致需求单、设计单的状态变化,一个需求或设计任务可能会有多个任务单,所以需求单或设计单的状态需要综合考虑。
接口管理:接口分为数据库接口、代码接口及配置文件接口。按申请类型分为:新增和变更。提交接口变更,提交变更必须选任务单或BUG。
流程如下:提出申请---->审批申请---->变更申请---->发布变更。
数据库管理:数据库变更,不只是增减字段,还包括字段类型、长度、索引建立删除、优化执行计划、存储过程、触发器等。提交变更必须选任务单或BUG单。
流程如下:提出申请---->审批申请---->变更申请---->发布变更。
源码管理:包括代码变更、编译、打tag、环境准备、分支管理、合并等。
流程如下:提交编译---->编译(通过打tag,获取编译结果特征串,比如hash值,不通过转开发)---->冒烟测试(通过转QA测试、不通过转开发)---->QA测试---->发布。
BUG管理:提交BUG需要关联任务单或由工程故障生成。
QA提出BUG---->DEV处理BUG---->QA关闭BUG(不通过转DEV再处理)。
发布管理:发布管理包括,版本管理、标签管理、发布管理。按类型分为:需求基线发布、设计基线发布、发布基线发布。
发布信息包括:文档、模板、数据库变更、配置文件、需求、BUG、数据库变更、接口变更等。
发布提出---->发布信息收集---->功能审计---->物理审计---->发布---->发布反馈
工程故障管理:提交工程故障,需要选需求。
工程故障---->QA_LD分派任务---->QA诊断(转需求或BUG或关闭)---->工程故障关闭。
报表管理:用于统计、展示各种流程信息、比如月完成需求数、完成任务单数、新增BUG数等。
计划管理:用于跟踪从需求到发布的所有过程。分发布计划、开发计划、测试计划等,可以设定需求的紧急程度,故障的严重程度。跟踪、修改需求、任务单、BUG的最后完成时间等。
系统管理:基础数据维护,各种枚举值、产品、工程、模块信息等。
用户管理:包括权限管理、角色管理、用户管理、离职工作移交等
在整个系统中,不只是代码存放在SVN中,在各种变更中用到的文档也需要存放在SVN中。
尽量做到无须单独的文档管理,全部通过系统存放在SVN中。
要求与svnmanager、viewvc集成,实现可视化管理SVN。
要求对SVN命令封装,实现多分枝、多任务并行、串行开发。可以在脚本中执行源码管理中的操作。
在提交编译单中与任务或BUG关联。自动获取变更文件提交后的版本,记入数据库,以便跟踪。
要求做到在发布后,通过被发布文件,查询出相关联的需求、设计、评审、故障、接口、任务单、编译单、源码等,以便做故障修复、回退等操作。
要求这个系统实现单点登录,以便与域服务器、邮件服务器等集成。
最好在最后与工时、报销、请假等系统结合在一起,成为软件公司的核心系统。