2022-05-21 如何建立一套简单又高效的研发管理体系
如何建立一套简单又高效的研发管理体系 对于一个研发管理体系,其核心是围绕着产品的整个生命周期来进行的。因此,根据一个产品的生命周期,可以把研发体系划分为几个关键的环节,如图所示: 可知,即时沟通和技术提升虽然不属于研发流程中的某一个环节,但它们是贯穿整个研发体系不可或缺的一部分,有着不可替代的作用。此外,任务管理需要对任务做整个研发生命周期的管理,除了作为其中的一个关键环节,也是贯穿整个研发流程的。 任务管理 任务管理是产品整个生命周期首要的环节,其对研发体系也是至关重要的。项目生命周期模型,传统的有五种:瀑布模型、原型模型、螺旋模型、增量模型、V模型,而现在最为流行的是迭代开发模型,敏捷开发则是采用迭代模型的一种典型项目管理方法集合。Scrum是目前敏捷开发中最为大家熟知的开发模式(XP极限编程也是一种比较常见的敏捷开发模式),其开发流程的概览如下图所示: 简单来说,Scrum是依赖于三种角色、四种会议的自组织、信息透明化、成员平等的一种敏捷开发流程。更为详细的描述,可参见此篇文章:。 除了Scrum之外,看板是最近兴起的另一种开发模式,在最近很火的美剧《硅谷》里面“魔笛手”就是采用的这种方式。看板将工作流程形象化,首先把工作细分成任务并根据需要将任务分为Pending、Analysis、Development、Test、Deploy等状态,然后根据任务的进行,在几种状态之间进行转换。对比Scrum,看板使用开发周期作为计划和过程改进的度量数据,不强调迭代的概念,也没有很强的时间期间概念,也不需要制定任何团队角色。对于看板方法论的详细介绍可见此篇文章:,这篇则做了比较形象具体的说明。这里有一点需要注意,Scrum和看板并非是对立的,它们是可以结合起来使用的。使用看板来管理每一次迭代的任务是一种可取也是很常见的精益实践。 依赖于任务管理方法论,市面上很多软件都做了相应的支撑,自己曾经使用过的任务管理软件如下: : 这个是自己最开始接触的任务管理软件,使用也比较广泛。比较遗憾的是,redmine安装有点繁琐,而且基于ROR,如果需要二次开发,需要重新学习ROR。 : 这是一个任务管理云服务,界面设计的简单优雅,一目了然。很多小的私有项目,我都会用这个进行任务管理。类似的还有teambeation等。 : 这款软件是商业版的任务管理软件,对于这一块做的是非常专业的,很多大公司都在使用。但是,它是收费的。所以,如果你要用,要么付钱,要么去破解。。。 :这款软件最早是叫做bugfree, 是开源且主要针对Bug管理的,后面慢慢发展成现在的集任务管理、bug管理、团队管理等的项目管理软件,并开启了收费策略。总体来说,功能很全,也比较专业,但是ui上有种传统it系统的感觉,流程上也不具有现在敏捷开发的一些优势。 : 是实现了Kanban方法论的任务管理软件。 对于个人的项目,其实依赖于tower.im这种第三方云服务完全足够了。如果担心数据安全的话,那么推荐在内网搭建Kanboard进行看板任务管理。 文档协作 研发中首当其冲的就是文档撰写,这个很多情况下都决定了项目的可维护、可管理性。有人会说现在流行的是敏捷开发,根本不需要写文档,但其实这是对敏捷的误解。敏捷开发强调的是快速试错、快速迭代,而非简单粗暴,对比传统开发模型虽然并不强调文档,但并不代表不需要。对于一个项目,从开始就需要需求文档、产品原型文档、项目进度文档等等,而到了研发这一步,在系统实现、写代码之前最好的就是先“想”再做,而“想”的一种比较好的输出形式就是文档。对于一个软件系统,一般来说需要写的文档有以下几种: 系统业务流程文档:描述系统业务逻辑的文档,能清晰的说明真个业务的流程。 系统架构设计文档:对整个系统的架构的描述,需要包含系统的各个关键组成模块以及相关的各个关键技术点等。 系统功能模块概要设计/详细设计文档:对于某一个模块的流程、逻辑的描述。 数据DDL/DML文档: 与系统相关的数据库的DDL和DML文档,对于前者,是需要包含所有的操作的,而对于后者,必不可少的是查询语句,用来提供给DBA,来做查询sql的review,以保证索引的正确建立等。 系统部署文档:描述系统关键部分部署在哪里,需要做哪些配置。 尤其对于一些相对复杂的功能来说,整理思路形成文档,不仅可以让自己逻辑清晰,也能让后续维护的人更快的接手下去。 而对于文档撰写协作的方式,我自己经历过的有以下几种: 使用word撰写各种文档,提交到svn等版本管理工具上 使用google doc进行协作 使用word撰写文档,然后提交到项目管理软件中进行管理 使用markdown撰写文档,提交到版本管理工具上 我自己比较推崇的是使用markdown撰写文档,然后使用git、svn版本管理工具或者是其他团队协作工具做版本管理。之所以使用markdown, 能够极大地节省使用word时调各种格式、样式耗费的时间。对于程序员来说真的是如虎添翼。如果是对文档多人协同编辑有刚需的团队,可以选择使用google doc或者国内的石墨()。 此外,在移动app开发中,还有一个非常关键的文档就是api文档,是服务端提供给客户端调用接口的说明文档。比较简单直接的方法就是定制一套api文档模板,然后在写接口代码之前或者之后,按照模板编写接口文档。此外,可以实现一套根据源码自动生成文档的机制,在代码编写的同时就能自动生成相应的接口说明文档。在使用Spring MVC开发的后端应用中,个人推荐,使用此项目能够通过在Controller中加入相应的注解信息从而自动生成Api接口文档,同时也提供了在线调试的功能,极大减少了api文档的工作量。 代码协作 对于一个技术团队,最最关键的肯定是写代码。一个人单打独斗那倒好说,但是这就像篮球场上,一对一靠个人硬实力,但是5对5,那就不仅仅是一个人实力强就赢得了的了。因此对于技术团队来说,代码协作是至关重要的一个部分。 代码版本管理:Git + SVN 几年前最流行的代码版本管理工具是svn(当然此前,更加古老的还有cvs之流),的确为程序员们的代码管理带来了很多便捷。但到了现在,相比起这种集中式代码管理,目前最为火热的当属git这种分布式代码管理工具,在Linux上直接搭建git服务器来构建项目的git系统的。而这几年随着Github以及类似系统的涌现,对于很多私人项目我都是采用oschina或者gitcafe提供的git私有代码管理来做代码版本管理的。当然,对于公司来说,有很多开源类github系统可以搭建在企业内网。详细的可以参见:。当然,对比svn,git也是有缺点的。无法天然的支持对于目录级别的权限管理和基于目录的版本管理操作是目前不得不结合svn和git一起使用的重要原因。通常情况下,可以使用git做版本管理,辅以svn做基于目录级别的发布包管理。 代码分支/Tag管理: Git Flow 其实分支/Tag管理是代码版本管理包含的内容,之所以单独出来,是因为对于分支的使用其实还是有一定的原则和技巧的。并非如很多人一样,所有项目就一个master分支,所有修改都往这里塞。目前,最为流行的一种基于分支的工作方式就是:Git flow。介绍可以见: 。简单概括就是: 用于开发新功能时所使用的feature分支; 用于辅助版本发布的release分支; 用于修正生产代码中的缺陷的hotfix分支。…