求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
     
   
分享到
一切皆可复用
 
火龙果软件    发布于 2013-10-15
 

摘要:

人类文明不断地进步,并不是现在的人比古代的人要聪明,而是我们能不断地“复用”前人的知识、经验。你能不能成为优秀的软件人才,也视乎你能不能不断地“复制”你的成功。一流的软件公司,关注的不止是在技术方面的复用,实际上软件开发过程中几乎所有的东西都可以复用!

你有复用习惯吗?

你是程序员吗?我们经常要写数据库连接的代码,这些代码都类似,无非是new一个connection,然后配置connection的参数,然后open。很多编码新手,常常会在不同的地方编写这段类似的代码。其实很简单,这段代码应该抽取出来供每个地方调用。如果你编写的代码中发现很多类似的甚至相同的代码到处都是,应该好好考虑重构一下了。

读小学的时候,老师要求我们写日记,当时觉得很难写,也不想写。后来读高中的时候,我的思想来了个大转变,突然写起日记来,一写就是几年。写日记并不是记下每天干了啥,而是每天都总结一下当天的得失,看看有什么东西是可以“复用”的。现在写文章对我来说并不是什么很难的事情,我也比较容易观察出周围一些事物的闪光点,并学习它,供自己“复用”。

复用其实不复杂,从小处做起,养成一种习惯,这种好的习惯会让你的成功速度加倍!

你的企业有复用习惯吗?

你们公司有组件库、类库或者是共享代码库吗?每次你们做项目,有没有之前的一些东西可直接供本项目使用的,还是需要全部重新开发的?

A项目遇到一个问题,而这个问题B项目已经解决了,但A项目的人还不知道,这种情况多见吗?

你们做项目,是不是时间压力非常大,公司有没有要求你们完成项目的时候要提交一些可复用的组件出来?项目能按期完成就阿弥陀佛了,还管什么复用呢L

很多公司可能不太注意“复制成功”,每天都在干救火的事情,老员工陆续离职,新员工陆续入职,公司一直没有什么积累。一流的软件企业,都有一套“复用”机制,能不断地积累知识和成功经验,不断地保持公司的竞争优势。

一切皆可复用!

一说到软件复用,很多人可能只想到技术方面的复用,我们应该把复用的范围再扩大。我们为什么要复用呢?因为我们想利用别人或者自己之前的成果,加快进步的步伐。正是因为我们这个目的,所以只要有利于进步的东西,都可以复用。

软件企业之间的竞争说到底是人才的竞争、智力的竞争和知识的竞争,每个公司都想网罗最优秀的人才。但千军易得,良将难求,企业有什么办法把优秀人才的优秀做法“固化”下来,让整个企业都具备优秀人才的特点呢?优秀的人才包括很多方面的人才,技术人才、管理人才、行业知识专家等等,通过一套“复用管理办法”,可以让这些专家的先进的做法,贯彻到整个企业中去。这样就相当于企业复制了很多个这样的优秀人才,企业的战斗力就会达到超强的境界。

技术复用

我们公司的某个项目,要通过网页的方式展示一些列表,并且要把列表的内容导出成Excel。开发人员经常抱怨客户的需求在变,列表及导出成Excel的表格,客户经常修改对列的要求,什么列要显示什么列不需要不显示,列的顺序、宽度、列标题等经常要修改。很多时候客户确实不是无理取闹的,业务是发生变化的,人的认识也是不断加深的,这是一种合理的变化要求,软件应该满足这样的要求,只是我们的技术能力还不过关,每次这样的修改都需要去改代码,修改成本高,开发人员不高兴,客户也不高兴,因为每次修改我们都要跟他讨价还价。

当时我就问开发人员,能不能把这部分的做成可定制的呢?客户想显示什么列就让自己去配制,我们不需要改代码,客户也不会来“骚扰”我们。但开发人员就以难度大,时间紧为由而不同意。

很多公司都会出现类似这样的情形,一般情况下指望项目组内能解决这些问题是不太可能的,原因有二:一是项目所有人基本都是进度优先的,基本上对于这样的改进都是听不进去的;二是项目中的人没有能力去做这个技术改进,或者是项目中利害的人没有时间来处理这个问题。

如果我告诉开发人员,公司组件库中有这样的一个组件,能做到可定制的,能完满满足要求,我想项目组会毫不犹豫地使用这个组件。项目组其实并不否认这样的做法的好处,只是没有时间做或者是自己做不出来。
公司应成立专门的部门,管理整个公司的技术复用,技术复用包括设计复用、组件复用、类库复用、代码复用等。该部门有两大任务:一、不断地研究能为公司使用的先进技术;二、关注每个项目,提取项目中可重用的内容,并为项目提供可重用的组件,为项目解决技术难题,从技术上加快项目的进度和保证质量。这个部门是很重要的,优秀的技术人才放到这里,会使他的作用成倍地放大。

关于技术复用,请看我的另外一篇文章《超越竞争对手的秘密武器——技术重用》,这里仅做简单介绍。

项目管理复用

为什么有项目经理管项目就比较好,有些项目经理就做得不太好了?优秀项目经理的管理经验能不能重用呢?

微软总结了很多项目的成功经验,总结出MSF(Microsoft Solution Framework),并向整个微软甚至是全世界的软件公司推荐MSF。MSF的八大原理以及MSF的团队模型,对提高业界项目管理水平发挥了不可估量的作用。除了MSF,业界还有RUP、敏捷、XP等各种方法供大家参考,这些东西都不妨“拿来主义”,为我所用。

除了复用别人成功的管理经验,更重要的是要复用具有自己企业特色的项目管理经验。把优秀的做法写成过程,“固化”下来,让全部的项目遵照执行,并不断地完善此过程。

过程必须是经过公司实践的提炼出来的,而不要“照搬”外部的一套过程来实施。我们公司刚建立过程的时候,是通过两个试点项目各自的实践摸索出来的,我们总结了这两个项目的成功经验,建立了过程的初稿。以后所有过程的修改,都不是凭空构思,而是“复用”了实践中的成功经验。

管理这东西是有点虚的,不能照搬理论,一定要通过实践来总结经验,把最佳实践写成过程,让整个公司学习和执行这个过程,这样优秀项目管理者的成功经验就会被“复用”到每个项目中去。

行业知识复用

你们做行业软件吗?比方说财务软件、房地产、股票交易软件、建筑预算软件、医院系统。有位项目经理负责一个医院的管理系统,做完后他颇有感触地说,现在就连那个医院的院长也不比我对医院的业务熟悉了!

行业知识不精,最直接后果就是难以把握好需求,被动地响应客户的变化,难以做出客户真正想要的东西。如果你们公司是专注于某个行业的软件的,如果行业知识不精,很容易被竞争对手超越。

作为客户,他们除了关注软件公司技术水平,可能更关注软件公司能不能帮助他们重整业务流程,实现更大的业务价值。很多大型的ERP系统、MIS系统实施不成功,很可能是因为对业务的理解不够,难以推动客户重整业务流程。

为了保证在行业知识方面的优势,很多公司会招聘熟悉该行业的人士,甚至用即懂该行业又懂软件开发的人来负责项目。除此以外,我们应该关注行业知识的复用,公司只有少数几个业务精英是不够的,我们希望每个人都是业务精英。要做到业务知识复用并不复杂,关键做好以下的事情:

1. 安排业务高手讲业务知识文档化,如写出产品的需求规格说明书、使用手册等。

2. 由业务高手安排一些培训,让负责该行业软件的项目经理、开发、测试、实施都接受培训和考核,保证项目组全部成员都具备相应的知识。

3. 持续地更新业务知识文档,并持续地进行培训。

软件公司除了要关注技术积累,也要注重行业知识积累,其实应该首先关注行业知识积累,行业知识就是需求的根源,而技术是为实现需求服务的。

估算复用

要做准确的估算,对估算者的要求很高,要考虑的问题很全面和深入。

以前我们公司做项目估算很不准,一个开始估计是10万的项目,最后可能要20万。如果每次估算,都有一些资深的项目高手来估算就好了,这样能比较全面充分地考虑问题,于是我们想到了这样的一个办法:

我们集中全公司的资深项目经理,一起来对项目估算进行总结,一起列出做估算需要考虑的内容,并加上详细的说明。最后做出了一个估算用的模板,这既是一个模板也是一个指南,列出了项目整个周期需要考虑的工作,并给出详细的说明。这个模板“固化”很多人的智慧,项目组使用这个模板进行估算,就相当于“复用”了大家的智慧。采用此模板后,估算准确率提高了很多,估算的偏差由原来50%以上,控制在20%以内。

业界有很多估算办法,如功能点法、代码行数法,倒不是说这些方法不好,不过很多公司都没有办法很好地掌握这些方法,也没有让这些方法发挥作用。估算这个事情也不是什么方法就能搞定的,是很依赖于估算人的智慧、经验、判断能力的,想办法“复用”他们的智慧,这可能才是解决估算问题的有效办法。

测试复用

发现了一个缺陷,如何保证以后测试不会遗漏?

软件发布了新功能,进行测试的时候如何保证老功能不会有问题?

测试复用对于提高测试质量、保证软件质量和降低测试工作量太重要了。凡发现缺陷的测试用例都需要重视,这个测试用例以后要复用!进行新功能测试的时候,我们还需要跑一下测试老功能的测试用例,检验做新功能有没有导致老功能出问题。测试中其实是非常关注复用的,也有很多公司在研究自动化测试工具,特别是功能自动化测试工具,以便更好地复用。

但实际上很多公司并没有做得那么理想,测试时间经常被压缩,测试人员得不到重视,测试自动化工具一直也没办法用上,测试工程师们周而复始地进行原始的手工测试,软件还是持续地遗留大量的缺陷发布给客户。
要做好测试复用,可以先从简单做起:

1. 规范测试的过程,保证缺陷都被准确地记录下来,并且详细地记录发现缺陷的测试步骤。

2. 每次测试都需要总结经验教训供以后使用。
我们公司为了让测试的水平能持续地提高,我们针对我们的产品编写了功能树,列出了全部的测试点,以及测试时的注意事项,测试时要按照此树进行测试,要覆盖全部的点。如果发现测试有遗漏,或者软件功能调整,我们马上更新功能树。这样即使我们安排不同的人去测试,都基本能保证测试的效果,我们的测试工程师通过功能树“复用”了前人的经验教训,避免了重犯。

持续培训,把复用发挥到极致!

说到底,复用就是一个实践、总结、学习、应用的过程,我们公司的“每日培训”把复用发挥到极致。每个公司都应该有持续培训的制度,把公司各方面的复用推向极致!

培养知识共享、乐于交流、追求进步的企业文化

不少软件公司的技术人员,都或多或少的有一些技术保留的想法。但持续培训机制,让每个人都很热衷把自己研究的成果与大家分享,乐于解答别人在工作上遇到的困难和问题,乐于与大家争论技术问题,每个人都急于吸收新知识、新技术,每个人每天都会觉得自己有很多东西要学、想学。

员工与公司共同进步

公司是由每位员工组成了,每位员工进步了,公司也就进步了。持续培训机制是每位员工个人发展的加速器,员工通过不断的学习,甚至是自己亲自做讲师,个人水平得到了全面地提高。伴随着员工水平的提高,公司的生产力也不断地提升。

打破部门界限、项目组界限

持续培训制度,彻底打碎部门界限、项目界限,所有人不分部门、不分项目组地坐在一起上课、讨论,不同部门的人、不同项目的人轮流上台讲课,讲授各自的经验和知识。不同部门、不同项目组之间的员工关系将非常融洽,彼此了解对方正在什么工作,也非常乐意提供跨部门、跨项目的帮助。

新技术、新过程迅速转化成生产力

采用新技术,实施新过程是公司不断革新的重要方法。新技术、新过程的顺利实施并转化成生产力的周期越短越好,持续培训制度,大大缩短了这个周期。所有新技术、新过程将会很快地被“复制”,大家会在培训上热烈讨论,加深了对新技术、新过程的理解,从而加速了新技术、新过程的实施。

新制度迅速落实

一个管理严格的公司一定会有严格的日常管理制度,而日常管理制度应该根据实际情况及时调整,持续培训制度对新的制度的迅速顺利落实起到了很大的作用。

成功迅速复制,错误不会重犯

持续培训制度,可以让每一个人的成功经验迅速“复制”给每一个人,而任何一个人的失败教训,可以迅速让每一个人体会,避免错误重现。

打造金牌讲师

每位讲师,由准备讲课到经历讲课,是对自己各方面能力的考验,每一次讲课就是一次能力提升的过程。持续培训制度,“复制”了大量的金牌讲师。

打造品牌课程

持续培训制度积累了大量的课程,所有的课程的资料全部保存到培训网站,可供所有后来的员工查阅和学习。而不少系列课程,经过多次的改版以及重讲,慢慢了形成了公司的经典课程,这些经典课程被不断地“复用”,教育着一批又一批的新员工。

打造卓越团队

持续培训制度,锻炼了大量的项目经理、部门经理,他们成为了公司的中坚力量,“复制”出一个又一个的卓越团队。

关于培训,请参考我的系列文章《不可思议的每日培训》。

打造企业的复用库!

能复用的东西非常,如:风险识别办法和缓解办法、设计方案的复用、缺陷的解决办法等等,复用思想的本质其实就是要不断地总结经验教训为今后所用。要做到这点,除了在公司倡导总结和学习的企业文化外,需要制度化地管理复用工作。

CMMI中提到资产库,资产库的重要组成部分就是复用库,复用库可以包含组件、代码、设计方案、各种工作模板、工作指导书等等,然实有利于以后更好地工作的,这些内容都可以纳入复用库中。每个公司都应该好好规划自己的复用库,持续地更新这个库,持续地推动项目使用复用库中的知识。

试想一下,如果每个项目开展之前,能在复用库中得到大量的帮助,对于提高项目速度、保证质量是有多么重大的意义。一个公司也只有通过这样的方式,才能让公司具备越来越强的竞争力。

每个公司都不可能网罗全部的精英,精英也不可能一直都呆在同一个公司,公司除了要关注招聘和留住优秀人才外,也需要打造自己的复用库,复用是每个公司成功的加速器!

一切可以复用,需要通过良好的持续培训制度,以及优秀的企业复用库来支撑,会复用的人才是最聪明的人,会复用的企业才是最厉害的企业!

 
相关文章

项目流程_IPD
EA中的项目管理-计划与跟踪
大型项目中的敏捷项目管理实践
敏捷项目管理概述
 
相关文档

IPD体系框架下的项目管理
项目管理基础与敏捷开发入门
IT项目管理培训
软件项目管理
 
相关课程

软件开发过程中的项目管理
基于IPD的项目管理方法与实践
敏捷项目管理实践
项目管理高级实践
 
分享到
 
 


如何有效地进行项目沟通
如何进行项目计划及质量管理
IT项目风险管理案例和应对之道
组建高效快速研发团队的必要
一个甲方项目经理的自白
TFS使用指南


软件项目管理
软件开发项目管理
研发项目管理
高级项目管理实战
敏捷项目管理实践
项目风险管理

相关咨询服务
建立项目管理规范


中国银行 IT外包项目管理
北京软件项目管理
某电子软件中心 项目外包管理
某电信服务商 项目外包管理
富士 软件外包项目管理与进度
Schneider 项目管理+软件质量
中国电信 软件项目管理