很多正在实施软件过程改进的公司或许有这样一些困惑:他们实施过程改进有一段时间了,花费的时间和金钱也不少,但是却为何收效甚微?
的确,不少公司花费了巨资请了CMMI的咨询机构对公司的软件开发过程体系进行咨询和培训,从无到有建立了软件过程改进小组(SEPG),制定了一套比较完善的流程框架体系,同时对研发人员进行过若干次培训。经历了这些努力后,期待着公司研发人员的行为比以前要规范,软件质量比以前要好,客户比以前更满意,但实际情况是这样的吗?答案往往不尽如人意。不少公司甚至出现没有预料到的负面现象:开发人员比以前更抵制流程,流程执行表面化,开发效率反而降低,产品质量没有明显的改善。因此,他们不禁要问,到底是什么出了问题?
笔者所在的公司同样遇到类似的问题,经过长期实践,我们终于发现,造成上述问题的症结主要是在流程的执行环节上,没有一个从上到下的自动化的流程执行体系,导致过程改进始终停留在书面文档上,没有真正落到实处。笔者就这个话题,结合所在公司几年来的实际经验,介绍如何利用软件工程工具来切实提高软件过程改进的实际效果。
发现短板
过程改进的实施是一个综合的系统工程,最终实施的效果取决于多方面的因素。卡内基-梅隆大学软件工程研究所(SEI)很早就描绘出了着名的“质量三角形”,形象地 说明了产品质量和生产率一般是由三个主要的因素决定:人、流程和技术/工具。如图1所示。
图1:质量三角形
其实这个图也可以用时下比较流行的“木桶”理论来进一步的解释,即过程改进的效果是由三块木板拼成的一个木桶,实施效果取决于构成整个木桶的最短的那块木板。我们需要找出其中到底是哪块木板最短。而在实际情况中,我们会发现,大部分公司往往重视的是“流程”和“人”这两块木板,在完善流程和大力培训人员的同时,忽略了“工具”的同步改进。“工具”便成为制约过程改进实施的短板。
以项目管理工具为核心
我们知道,大部分的公司或多或少都需要用到项目管理理论中涉及的一些知识体系,如项目计划、风险管理、人力资源管理、沟通管理等等。据我们观察,中小型企业在项目管理的活动中,在工具的运用上还是仅仅限于项目进度的管理,即只管理到计划本身,没有综合管理项目过程中的管理活动。其实流程改进的很多的活动,最终也是会体现在项目管理的活动中,如果忽略这些活动的管理,流程的贯彻和执行就会进入一个黑盒子状态,SEPG的人员不清楚制定的流程是否合理的运用,SQA的人员不清楚流程执行中的细节状态,找不出偏差和问题,公司领导也不知道质量问题的发生根源在哪里。针对项目管理在产品开发过程的重要性,我们考察了业界一些项目管理工具的优缺点后,发现很难有一个现成的工具产品符合我们对项目管理和流程管理有机结合的需求,于是笔者带领了一支有丰富开发经验的技术小组,开始了自行研制开发基于WEB的综合项目管理系统的工作,历时一年之后,我们的系统ProgramConsole开发完成。这个系统在公司推广后,收到很好的效果。ProgramConsole可以很方便的了解到目前全公司各部门正在执行的项目情况,包括计划进度、问题列表、风险列表、流程执行情况、人力资源使用情况和质量情况。同时,由于ProgramConsole设计之初就定位为综合项目管理信息门户,所以集成了即互相独立,又紧密关联的其他工具的内容。这些工具包括流程管理系统、文档管理系统、缺陷跟踪系统、需求管理系统和测试管理等。
以流程管理工具为引擎
流程(Process),即一系列有关联的、有顺序的活动的集合。流程是以前好的经验的总结,是不断重复以前正确做事的方法。更精炼的说,流程要告诉我们的是:正确的人,在正确的时间,做正确的事情,将会得到正确的结果。CMMI其实就是一个以流程改进为核心的一种软件企业能力提高的模型。因此流程改进在一定程度上成为过程改进的核心工作。
一般来说,流程体系可以用一个金字塔来描述,最上面一层是公司级政策性文件(Policy),中间是具体的开发流程,如软件开发流程、测试管理流程等。最下面的是一些更详细的指导文件,如检查表(Checklist)、模板(Template)等等,如图2所示。
图2:流程体系框架
正如前文所述,很多公司往往把注意力放在流程本身的完善上面,始终把制定书面流程作为工作重点,而忽视了流程如何更好的执行,更好的被贯彻到日常工作中。其实,对于大部分的研发人员,甚至包括领导层,都没有太多的时间去阅读繁杂的、枯燥的流程内容,无法记住流程中太多的规定,如果要靠个人的自觉性来保证流程的执行,其难度可想而知。
笔者所在部门也承担着流程制定和改进的重任,在意识到流程执行不力的真实原因后,决定引入流程自动化工具来保证流程的顺畅执行,让工具通过email的方式来提醒每个人在什么时候 做什么事情。从而避免了大家因为不知道或者忘记了,导致流程没有被执行。
流程管理工具在业界有很多的选择,笔者所在部门经过全面考查,仔细分析各种流程工具的优缺点后,最终选择了美国Serena公司的TeamTrack工作流产品作为我们的流程管理工具。TeamTrack具有流程设计灵活,可视化显示流程执行状态,支持强大的二次开发等特点。有了流程管理工具后,我们把很多的书面流程都转化成了电子化的流程,这样就很方便的把需要多人、跨部门、有上下游协作的工作通过电子化的流程固化下来。大大降低了流程执行的难度,有效的提高了流程执行的效率,收到很好的效果。同时,由于TeamTrack可以很方便的和我们自主开发的综合项目管理系统ProgramConsole有机的结合,可以在ProgramConsole上面进行流程任务的计划、发起和查看状态。
举例来说,变更管理(Change Control)是过程改进中比较重要的环节,面对瞬息万变的市场需求和公司内部的变化,有效的变更管理可以防止变更在最后一分钟才通知到受影响的部门和个人,最大限度的降低变更带来的负面影响。而变更的种类很多,例如需求变更、计划变更、人员变更等等,所以针对不同的变更,有相应的虚拟组织—“变更管理委员会”(Change Control Board,CCB)来评估和批准变更。通过流程工具的实现,建立变更管理工作流,可以把变更发起、评估、批准、实施等变更生命周期有效的管理起来,自动让一个虚拟团队在一个集中的平台上协同工作,极大的提高了内部的沟通效率。
我们比喻流程管理工具为过程改进的引擎,它让过程改进的活动有序的转动起来。
以软件生命周期为主线,构造完整的工具平台
软件生命周期在不同的公司可能会有不同的描述,但不管是采用传统的瀑布式,还是用RUP的迭代开发,或者是采用Agile(敏捷开发)模式,在微观上,都会存在需求、编码、测试、软件发布等活动。所有的这些活动,其实都有相对应的工具进行辅助执行。以软件生命周期为主线,把各环节的工具整合起来,就可以构造一个完整的过程管理工具集。
图3展示了我们已经应用的以软件生命周期为主线的,完整的软件工程工具平台。
图3:软件工程工具平台
图3中列出的工具平台中,项目管理工具ProgramConsole、需求管理工具RequirementConsole、测试管理工具TestConsole、软件发布管理工具ReleaseConsole这四个产品都是笔者所在公司软件工程部结合自己多年的过程改进实施经验,借鉴业界通用的产品,而自行研制开发的。前文已经详细介绍了ProgramConsole和TeamTrack,这里就其他几个产品进行简单的介绍。
◆RequirementConsole, 需求管理工具
需求管理工具主要是对需求的生命周期进行管理,把需求管理的对象细化。从以前传统的一篇需求文章,细化到一个一个条目化的需求项。这样更方便需求的追踪和验证。
◆TestConsole,测试管理工具
测试管理工具是对测试活动和测试用例的生命周期进行管理。可以管理从单元测试、集成测试、系统测试、Beta现成测试等所有测试环节的用例数据库,自动汇总测试报告。同时可以集成RequirementConsole,设置需求的测试状态。
◆ReleaseConsole,发布管理工具
发布管理工具是对发布给客户的软件包进行管理,可以集成自动化编译平台进行自动构建。非常适合多模块的复杂软件包的发布。
◆ClearCase、ClearQuest,配置管理工具
ClearCase和ClearQuest是IBM Rational的产品,也是业界广泛采用的软件配置管理工具。ClearCase是一个非常优秀的软件源代码版本控制工具。而ClearQuest是一个灵活的缺陷跟踪工具。
这个工具平台中列出的软件工程工具,它们即可以独立运行,之间又可以互相有机集成。例如RequirementConsole中的需求项可以追踪到TestConsole中的测试用例,这样可以很方便的了解到哪些需求被实现了,是否通过测试。ClearCase中的代码版本修改,可以关联到ClearQuest的具体缺陷,了解是什么原因导致代码的修改。在ReleaseConsole发布的软件版本中,可以了解这个版本解决了哪些ClearQuest中的缺陷,新增了哪些RequirementConsole中的需求。而ProgramConsole可以把一些领导们关心的,分布在各个系统中的数据进行统计,显示在界面上。
经过两年多的实际应用,我们切实体会到了软件工程工具给我们的软件过程改进带来的实实在在的好处。我们的流程执行更规范了,项目相关人员之间的沟通也更顺畅了,领导层更方便的了解和监控产品开发的全过程,决策也更快速和准确。
没有最好,只有最适合
笔者认为,选择工具的原则是“没有最好,只有最适合”。不管是自行开发,还是购买市场上成熟产品,最终的目标是应该选择最适合自己公司实际情况的产品,从而能够解决在过程改进中遇到的实际问题,为提高过程改进的实际效果起到积极的作用。