加入WTO以来,面对国际化的竞争,国内软件组织尤其是承接外包业务的软件企业越来越重视市场对自己软件过程能力的认可。这样也就有了越来越多的软件企业通过CMM/CMMI各级别的认证。但通过与多家企业的沟通,我们发现,普遍存在即使拿到CMM/CMMI某级别的证书,在过程能力方面仍然感受不到明显的变化。
那么,是否存在一种有效的策略,在帮助我们实施基于CMM/CMMI过程改进通过评估的同时也能带给我们实质性的收益?本人在工作过程中基于本领域的实践在第6届中关村电脑节CMM/CMMI/6Sigma国际论坛上提出了软件过程信息化的理念,为很多软件企业所认可。现文档化下来,供业界参考。
软件过程信息化是什么
现在信息化这个词很流行,制造业、金融业、政府等很多行业,包括奥运都在强调信息化,而各行业的信息化项目又主要是软件、系统集成企业来完成的。那么软件/系统集成企业生产过程本身是否存在信息化的需要呢?软件过程信息化应该包括哪些方面呢?
其实企业在自身的发展过程中一般都会或多或少引入几个各自独立运行的系统来解放员工的一部分生产力。但在这个过程中也遇到了许多的问题。如:每一个系统都需要单独的身份认证,每个研发人员都需要记住多个账号,但这一点就会让大家很头疼。加上各个系统相对独立运行,如果不及时整合,将来严重的企业应用集成问题就会摆在面前,对企业的过程改进也将是一个灾难。我们发现,软件过程信息化是一门学问,应该系统地来考虑这个问题。应该存在一个软件过程信息化理念模型。
软件过程信息化为什么
本人所供职的国内一家知名软件组织,2002年1月通过了CMM3级评估,这在国内业界算是比较领先的。事实上我们当时4级该怎么做的规范也已经有了,有些事情也在尝试着做。但在我们把目光从已定义级投向已管理级的时候,我们发现我们的过程似乎并不是想象中的那么好,我们好像还很难真正开展定量过程管理和软件质量管理相关的活动,或者说还很难真正地让大家从实践中认识到定量管理能给我们带来多大的好处。
这家企业的优势之一是管理,强调斯巴达克方阵式地执行,如果我们当时强力推进,2002年完成4、5级的评估其实也应该没有多大问题。但当时大老板给我们提出了一个要求:研发过程管理体系不能单纯考虑过级需要,要以保障项目成功为目标,必须要可操作性强、简单高效,要能真正提高在项目上实际的研发过程能力。这一句话让我们过程改进团队整整探索、实践了两年。终于摸索提炼出了一套实践方法,那就是软件过程信息化策略。事实证明它是行之有效的。
如果抛开单纯过级的因素,其实我们软件过程能力从CMM3到CMM4要面对的障碍主要有3个:
1.研发效率亟待提升
通过内部评估诊断我们发现,项目组其实也很希望能够按照我们的过程规范来开展工作,但我们的过程规范太完美了,似乎每一步工作都有规程,都有条条框框:工作量的数据、变更的申请、BUG的信息、跟踪的矩阵,缺陷记录和跟踪表……似乎只有过程专家才能全部搞清楚,而他们不是过程专家,他们也不想成为过程专家。虽然有培训,但到了实际工作中还是理不清头绪。他们认为大量低层次的沟通和大量的文档浪费了他们很多时间。他们的愿望很单纯:我愿意按照过程规范去做,但我并不希望成为过程专家。研发人员的这种意见同时也给软件过程的实施带来了极大的挑战。
2.项目、组织过程决策对数据的要求
项目和组织在做很多决策时需要基于大量实时的数据。而我们提供的数据总是历史性太强,慢好几拍。原因是多方面的。过程数据绝大多数要来自研发人员,这让他们感觉增加了很多工作量,而且并没有明显的从中受益。部分人不提供必要数据就会造成数据的缺失,可用性很差。当然我们可以对研发人员说他们所提供的数据对过程改进、对将来项目的估计等等有多么重要,但还需要真正能为当前项目提供支持他们才会信。人都有一种农民心理,都希望播下的种子当年就有收成。而一旦发现自己所作的很多工作并不能为当前项目提供及时支持的时候,他们的积极性就会受到打击。
3.知识管理和过程改进陷入泥潭
随着企业的发展,做过的项目越来越多,历史项目的经验教训,组织过程财富的有效管理成为新的挑战。以前我们也陆续应用过几个过程辅助系统,由于是独立运行,客观上存在项目信息的不一致,信息孤岛初现雏形。过程数据的可用性大大降低。另外,持续的过程改进需要我们定期地分析过程数据,看到我们项目过程性能的情况、组织过程能力的变化,分析我们过程中的薄弱环节,找出需要解决的共同原因。每到这个时候我们就会有很多人参与到这项工作中来,汇总数据、分析数据;这种周而复始的活动让我们身心疲惫,无法将主要精力放到过程分析上去,高智商高成本的人去做大量的体力活,也抹杀了大家的成就感。
面对这3方面主要问题,我们发现必须要做3方面的事情:
1.我们必须考虑如何提高我们过程的可操作性和效率,最大化地解放研发人员的生产力以获得他们对过程的支持;
2.我们必须考虑如何将项目过程数据实时获取、呈现和分析,以支持项目和组织的决策,以获取他们对过程改进的支持;
3.我们必须要考虑如何固化流程规范,统一管理组织的知识财富,对组织的过程能力变化提供科学的视图,使知识管理和过程改进工作迈上量化的台阶。
软件过程信息化怎么做
本人提出了软件过程信息化的理念,并带领一个团队拿出了一个软件过程信息化理念模型和一套软件过程信息化解决方案。其实如何实施软件过程的信息化也一定是一个仁者见仁智者见智的事情,也一定会根据组织的具体情况在细节上有所不同。
软件过程信息化建设模型
在软件过程信息化建设中软件过程即业务流程自动化是基础,通过这个手段能够极大解放研发人员的生产力,解决效率的问题,会在取得组织层次全面支持方面有明显效果。因此可以进一步解决定量管理缺陷预防等较高层次上的问题,站在第2个层次再来解决决策支持的问题将会非常简单。虽然软件过程信息化可以从底层往上一步一步建设实施,但经验表明,从一开始就统一全面考虑3层的需求和关系,同时三个层次的信息化都应该和组织的知识管理结合起来,形成闭环,达到持续过程改进和组织财富良性积累有效复用的境界,才会取得非常好的的效果。但限于专家资源的匮乏,也可以先从业务流程自动化入手。
软件过程信息化收益
软件过程信息化实施模型是一个新的模型,在联想软件因业务因素只实施了一部分,但已经见到了很好的成效。通过过程信息化来打通软件组织业务逻辑过程,定量管理缺陷预防过程和过程决策三个层次,将逐渐建立自己的Bench Marking,估计也将更加准确。更重要的,也将使整个组织各角色对于个体项目和全组织在所关注的方方面面都具有极高的可视性,将达到CMM4可预测/CMM5持续改进的过程能力,进而将极大地提高组织的市场竞争力。
软件过程工具与软件过程信息化的关系
软件过程工具往往解决的是某一专题领域的过程自动化问题,如VSS、CVS等解决的是配置管理方面的过程自动化问题。即使有极少定位于为企业提供完整研发生命周期的解决方案,也基本是解决工程过程自动化问题。
软件过程信息化倡导的不仅仅是软件业务逻辑过程的自动化以提高效率解放生产力,这只是软件过程信息化的初级目标而已。软件过程信息化还倡导打通业务逻辑和数据、度量分析解决方案,进一步实现定量管理、缺陷预防以达到可预测、持续过程改进的过程能力,不断提升TQC的控制能力,提升企业的市场竞争力。软件过程信息化的终极目标是在组织级项目管理的基础上,最终还要上升到知识管理的层次,通过组织过程财富的积累和复用实现企业的可持续性健康高速发展。
软件过程工具虽然不能解决软件企业研发过程管理所有的问题,但也是软件过程信息化的一个必要条件。只是我们在选择工具的时候无法从整个组织过程信息化的高度来看待它,要考虑到整体软件工程环境的要求,进而决策哪些自己开发哪些外购,哪些要集成。避免出现多个工具无法协同工作的尴尬局面。