寻找开发管理的辅助工具,实现软件公司及研发部门本身的信息化
来源:中国电子政务网 更新时间:2008-03-11

当笔者在《软件工艺的革命》一文中提出软件工艺的概念时,得到了读者的很多反馈,

有相当多数的读者认为,文中所阐述的理念在目前的软件行业来看,不过是一种理想主义,很难成为现实。我们所提出的软件四化中,“构架平台化”是解决应用软件最底层的问题;“组件业务化”是解决每个应用业务功能的模型问题;“编码自动化”是解决业务组件的来源问题;而“管理工厂化”则是统领性地解决了软件设计和生产过程中的管理方法论的问题,对整个软件行业提出了新的变革期望。这个新变革只能是一种理想主义吗?不,我们之所以一直没有实现它,不过是因为缺少一个很好的辅助性工具来协助我们管理软件开发中那些“艺术性”的部分。众所周知,管理在任何一个行业中都是最艺术化的,那么,开发管理也是软件开发中最“艺术化”的部分。再加之,软件是以设计过程为主的一个行业,其管理的“艺术性”就更强了。究竟开发管理中哪些因素影响我们的产量和质量,其中可量化的部分又有哪些?而我们该如何对可量化的部分进行科学管理,又如何对不可量化的部分通过采用传统经验性的管理方式合理管理起来呢?

首先,开发管理要考虑的因素包括:项目时间、团队大小、产品功能、产品质量、工程

师素质、项目经理素质。在10 多年前,正从软件工程师向开发管理角色转换的时候,我非常崇拜这样一个软件开发管理公式:项目时间+团队大小+产品功能+产品质量=常量!所以曾理直气壮地按照这个公式向公司研发副总要求增加团队人数,那位副总回答我:“如果按这个公式计算的话,我就不需要你了!一个研发经理的水平就是超越本公式,以最小的团队,最短的时间做出最好的产品。”也就是说,“管理工厂化”并不是机械地学习传统产业的管理,而是规范化、流程化、明确分工的代名词。

其次,开发管理所追求的是:第一步,达到岗位分析明确,开发流程清晰;第二步,达到岗位间知识传递文档化和流程管理工具化;最后,在大型团队的管理中,可以追求CMM5的管理规范,因为大团队的管理仅仅凭借人的责任心或文档都是很困难的,必须依靠辅助管理工具(软件公司及研发部门本身的信息化),这点非常重要。同时,我们不能忽视管理也是有成本的,所以不同规模、不同阶段的公司必须采用不同的管理方法,切忌生搬硬套CMM 之类的条款。事实上,最适合企业自身的管理模式就是自己摸索出来的量身定做的制度。在此提供一个参考流程和岗位设置,其中沉淀了国外大型应用软件开发公司的研发管理经验,是以研发团队的不同规模和阶段来分类,提供了应执行的流程、建议增加的岗位的参考信息。

项目组/工程产

品组的规模

应执行的流程建议增加的岗位<5

1、以源代码线为中心的配置管理软件开发工程师>5

2、缺陷跟踪管理流程项目经理,测试工程师>10

3、基于源代码配置管理的产品打包和发布流程

4、以里程碑为中心的项目进度管理发布工程师( ReleaseEngineer>20

5、以需要分析PRD 为中心的需要文档和设构架师(技术经理),测试经计文档管理流程

6、以测试计划为中心的测试管理流程(单元测试和集成测试计划)

7、开发工程师单元测试管理

8、开发工程师CODE REVIEW 管理

9、产品补丁制作与发布流程理,界面工程师,技术文案>30

10、以CODE FREEZE 为核心的研发末期(end-game)管理流程

11、对外工程文档管理流程

12、产品制造与许可证发布管理流程

13、市场对产品反馈意见进入产品的管理流程

14、项目可行性计划审核流程工程总监,产品制造工程师,产品经理>50

15、第三方插件/组件管理流程

16、严格需求变更管理流程

17、自动测试管理制度(压力测试,单元测试的自动化)

18、新人培训流程和制度技术总监,质量总监,技术委员会,管家婆PM,自动测试工程师>100

19、套件集成和发布流程

20、合作伙伴产品集成测试流程

21、研发流程修改审批和执行审计流程工程副总,套件产品项目经理,产品线集成测试实验室研发团队超过100 人以上的软件企业,其管理岗位与流程基本相似,在产品型公司中,一般将以产品线为界来分割管理;在项目型公司中,一般以行业为单位来分割。也就是说,超过100 人以上的软件研发工程团队,无论多大,都将以产品线、行业或者自己公司的业特性来分组管理。总之,我们管理软件开发的目的是让编程人员能有更多精力去思考架构和性能的问题,从而使软件开发真正实现高质量、低成本。之所以CMM CMMI 等都不能够实现这个目的,主要是因为它们都仅仅是一套管理思想,虽然很优秀,并沉淀了多年管理经验,但缺乏一个合适的辅助性工具来帮助实现,尤其在国内的企业管理现状下,更难贯彻并持续施行下去。

但是,对产品、人员的管理已经成为软件业必须考虑的难题。我们提出管理工厂化,就是要规范代码编写、确定角色分工、明确开发流程,将“艺术”转化为“科学”,将隐性知识的传递以工具来实现,所以,要真正实现软件开发管理,关键在工具,并且必须是能够沉淀经验的开发工具!