摘要: 首先介绍小型软件企业进行过程改进所面临的困难,解释为什么小型企业和项目实施CMMI时会遇到很多阻力,然后基于作者参与的一个典型组织CMMI改进进程,分析为什么CMMI有关内容不适合于小型企业和项目的实际情况,并概括如何在文档、管理、评审、资源和培训等方面进行剪裁和改进,使之适合于小型企业和项目的实际需求。
关键字: 软件过程;过程改进模型;CMMI;剪裁
中图分类号:TP311 文献标识码:A
Reaseach and Practices of CMMI Process Improvement
in Small Software Organizations
Abstract: The article explains the difficulties of process improvement in small software organizations, the resaons of emerging the difficulities,finally we analyze why CMMI model partially don’t meet requirements of small organizations or small projects,and conclude how to tailor CMMI model.
Key Words: Software Process ;Process Improvement Model;CMMI;Tailoring
1.引言
在过去十年中,高质量软件生产变得越加复杂和难以管理,其中部分原因是生产软件的技术和方法快速变革,要开发的应用程序愈加复杂。这两个因素是密切相关:技术的快速发展促使新产品、服务和活动不断产生,不断替换旧产品,而此也对技术产生新的需求。其次,软件过程是面向人的[2],人之间,以及人与工具之间具有高度可变性和不可预测性。这个事实进一步增加软件过程的复杂性,对管理提出更高要求。最后,软件过程也许持续很长一段时间,在其生命周内也许会出现很多新需求,经历许多变更[3],这类变更涉及到开发技术改变、开发策略和规程更新。软件过程改进的其他重要原因包括动态调整软件过程以适应项目参与人的需求和偏好,或者处理不可以预测的情况。
现在业界最成熟的过程评估和改进方法是美国卡内基-梅隆大学的软件工程研究所(SEI)提出的过程能力成熟度模型。这些模型描述了有效的过程单元的框架,为组织描述了从混乱的、不成熟的过程向成熟的、有纪律的过程改进的一条途径。自从1991年SEI发布SW-CMM(V1.0)以来,SEI逐渐开发了多种CMM模型,其中最有影响的包括:系统工程(SE-CMM)、软件工程(SW-CMM)、软件采办(SA-CMM)、人力资源管理(P-CMM),以及集成的化产品和过程开发(IPPD-CMM)等。虽然这些模型对许多组织是有用的,有助于改善组织过程,以构造更好的产品,提高质量,降低成本。但是多种模型的共存逐渐显露出弊端。
于是出现了能力成熟度模型集成(Capability Maturity Model Integration ,CMMI)。集成的目的是通过以下手段降低基于多学科模型的过程改进成本:消除不一致性;减少重复;增加透明度和可理解性;提供公共术语;提供一致的风格;建立统一的构造规则;维护公共构件;确保与ISO 15504保存一致;实现尽量好的可继承性。SEI计划逐步用CMMI取代现行的包括SW-CMM和SA-CMM在内的多个现行的成熟度模型 [11][12]。
1.1小型企业实施过程改进遇到的困难
实施CMM和ISO 9001的经验表明:在人员只有15人,甚至更少的小型软件企业中,应用这些模型时会遇到很多困难。即使对于大型软件企业来言,其中的小部门和小项目在单独应用这些模型时也会遇到这种问题,需要对这些模型进行调整,以适应小型企业、小部门和小项目(SB/SO/SP)的资源、结构和实践。SB/SO/SP环境下遇到的问题可以分成三大类[1]:
(1)与软件企业组织结构相关的问题
小型软件组织的组织结构是实施过程改进的最大困难,通常这种企业没有正式定义角色、职责和过程。做法经常是每日都变化,没有长期计划,这种结构使得软件企业很难生成高质量大规模软件,或者及时满足不断变化的用户需求。总结如下:
l 缺乏负责质量的专门人员。在小型企业中,通常没有人具备软件过程改进的经验和相关培训,即使知道基本概念和技术,但是对底层原理缺乏正确认识,无法解释本组织的质量模型需求。
l 人员有限。在小型软件企业中,难以形成专职的过程改进团队。
l 资金有限。小型软件企业通常资金有限,很容易受到市场的影响。
l 当前过程的状态。小型软件企业通常只处于CMM等级1的水平。经验表明等级1的公司需要花费4或者6年的水平才能达到CMM 3级的水平。对于大多数小型企业而言,这么长时间难以忍受。
l 非软件过程的问题。在小型软件企业中,对于那些与软件开发不直接相关的组织过程,通常缺乏所必需的成熟度。这个问题进一步加剧解决软件开发相关问题的难度。
l 黑客文化。小型软件企业通常具有黑客文化,严重依赖于少数高水平的程序员。
l 缺乏定量数据。小型软件企业通常没有收集数据以度量过程和执行情况,这与它们缺乏定义明确的过程和固有开发模式紧密相关。
(2)与软件过程改进模型相关的问题
诸如CMM和ISO 9001之类被广泛应用的软件过程改进模型有很多不适合小型软件企业的固有问题,总结如下:
l 缺乏指导。质量模型,尤其是ISO 9001,解释了应该具备的质量系统基本元素,但是没有提供何处启动和如何启动这些属性的指南。CMM稍强一点,定义了关键过程域,然而对于小型企业而言,没有那么多资源来实现这么多关键过程域,而且没有关于如何实施的详细指南。如果操作顺序不符合规范,则所有努力有可能付之东流。
l 缺乏行动知识。缺乏软件过程改进专门知识的小型软件企业需要如何在企业内部应用质量模型需求的详细步骤说明。
l 没有从小型企业角度考虑。已有的软件过程改进模型没有考虑到小型软件企业的特点,那就是灵活、快速反应和沟通能力。
l 假设具备多种领域的专门知识。当前过程改进模型隐含地假设软件组织具备形成能够在不同过程域中并行实施的资源,而小型企业没有那么多人力资源来组建这么多成员组。
(3)与小型企业所面对市场相关的问题
小型软件企业面对的市场有很多影响改进活动的特性。通常而言,小型软件企业与其顾客关系紧密沟通,容易受到市场经济的影响。与市场相关的问题总结如下:
l 应变能力假设。小型软件企业的软件的用户群较小(相对于庞大的软件企业),与客户关系很密切。这种密切关系有助于企业更加快捷了解用户需求,同时这也是一个问题。正如Brooks所说的那样,当用户的需求发生变化时,它们首先想到修改软件,而且认为软件修改起来更加容易。
l 低投资回报率。小型软件企业通常的市场用户比较少,如果组织不能显著的扩展其市场份额,则投资回报率也许会使公司上层丧失信心。
2.案例
由于多种CMM模型引起的混乱,以及在CMMI推出之后,SEI宣称在不久将来不再进行支持CMM,我们决定使用CMMI作为研究课题,研究如何在小型软件企业中剪裁CMMI,克服“小”带来的问题,以适应小型软件企业的改进需求。
本文研究对象是一家小型软件组织A1,有员工12人,其中10人从事软件开发,2人从事管理、市场和销售等其他事务。A1细分为两个部门:生产部门和研发部门。这个组织属于典型的CMM级别1的组织,没有明显的过程支持,靠的是精英,没有质量控制和度量数据。
我们从2002年10月开展对这家企业的过程改进,按照CMMI模型提出一套简单可行的实施过程和模型,给出简单可行的操作步骤,大大减轻了企业的过程改进压力,充分利用兼职和全职资源,并同时提供“小型软件企业过程改进支持环境(SSE-PISE)”过程改进支持软件来支持其过程改进。
3.相关研究
关于小型企业如何实施过程改进问题,已经引起美国和欧洲等国家等重视,并就此开展多项研究和试验。
[1]中提出一个基于CMM、ISO 9001和ISO 9000-3的综合模型,该模型改造ISO 9001和CMM的需求以满足小型企业的需求,本模型包含三个阶段,分别是:准备阶段、控制阶段和稳定阶段。[4]提出改造IDEAL模型的各个阶段和步骤,给出比较仔细的行动计划。[5]尝试在小型软件企业中创建ISO 9001兼容的质量系统。[6]介绍了European Commission支持的项目SPIRE( Software Process Improvement in Region of European)的进展情况,”SPIRE Handbook——Better ,Faster, Cheaper, Software Development in Small Organization” 使用SPICE自评估指南的结果,提供在小型软件企业中实施过程改进的详细指南。改进方法分为6个步骤,分别是:(1)细化与软件相关的商业目标;(2)评估当前软件实践;(3)评价员工态度;(4)开发过程改进的焦点计划;(5)基于既定改进目标来实施计划;(6)评价改进过程和结果。本改进方法的一个特点是专门对员工态度进行特殊评价。[7]分析小型软件企业实施过程化改进时应该包含的8种SPI特性,分别是:与企业商业目标相关;集中于最重要的软件过程;充分利用资金;进行能够在尽可能短时间内提供尽可能大收效的改进;提供快速的投资回报;面向过程;与其他软件模型相关;足够灵活和易于使用。[8]简单介绍LOGOS Tailored CMM的基本思想,以及简单实施指南,并给出剪裁过程,宣称本方法适合于所有规模的组织和项目,不是CMM的简单重写和改进。
文章来源于领测软件测试网 https://www.ltesting.net/