软件过程改进与管理
软软件件过过程程改改进进与与C CM MM MI I 第一章第一章 绪论绪论 1.11.1 本课题研究的背景本课题研究的背景 21 世纪是信息社会高速发展的世纪,软件作为信息技术的核心,将在其中 起着至关重要的作用。随着信息经济、网络经济和科学技术的发展,各行各业已 经越来越离不开软件的支持,软件产业的发展, 各行各业已经越来越离不开软件 的支持,软件产业的发展水平已经成为衡量信息技术发展水平的一个重要因素。 自出现软件危机以来, 学术界和企业界对软件工程的研究都倾注了大量的人 力、物力和财力,多年来也取得了一些成效。但就全世界而言,软件质量问题仍 然非常严重,特别对于军方来说,更是一个致命的问题。正因为如此,美国国防 部不惜花费重金,委托美国卡内基梅龙软件工程学院SEI研究制定软件质量保 证规范。 1991 年, 第一个软件保证规范能力成熟度模型CMMCapabiliy Maturity Model制定完成并在美国应用, 随后 CMM 作为一种软件能力成熟度评估标准在全 世界推广实施, 主要用于指导软件开发过程改进软件管理能力的提高,从而极大 地提高了软件项目的控制能力和软件产品的质量, 促进了全世界软件产业的健康 发展。 CMM 的应用虽然得到了很好的成效,但也存在一些缺陷,能力成熟度模型集 成CMMICapability Maturity Model Integration应运而生,它是在 CMM 基础 之上的发展和完善,2002 年 SEI 正式推出 CMMI,2005 年开始逐步取代 CMM. 从我国软件产业的发展现状来看, 企业管理软件过程的能力还比较弱,过程 混乱使得新技术、新工具的优势难以体现。究其原因,是因为我国的软件过程管 理缺乏规范化和标准化。于是, 越来越多的软件企业开始关注软件过程能力的提 高, 我们把这种用于提高软件过程能力的实践称为软件过程改进。有人将软件过 程改进比喻成“练内功” ,作为软件企业,只有通过苦练内功,加强软件过程改 进,才能够参与到国际化的竞争中去。CMM 和 CMMI 是软件过程改进领域的重要 成果,也是适用于软件企业质量管理和过程改进的重要标准。近年来,国内软件 企业也兴起了认证热潮,CMM 受欢迎的程度远远超过了 ISO 同类标准。 中央和地方政府也出台了一些优惠政策支持软件企业的 CMM 认证国务院出 台了 鼓励软件产业和集成电路产业发展若干政策 ,第十七条 鼓励软件企业出 口型企业通过GB/T19000-ISO9000系列质量保证体系认证和CMM认证的软件出口 企业,可向外经贸主管部门申请认证费用资助。 本论文正是在这样的背景下,研究分析了软件过程改进的 CMM/CMMI 理论, 并理论联系实际,以某公司为对象,对软件企业基于 CMMI 的过程改进实践作了 更为深入的研究和分析,以期为国内其他软件企业实施软件过程改进、提高软件 质量、提高企业管理水平提供思路和借鉴。 第二章第二章 软件过程与软件过程改进软件过程与软件过程改进 2.12.1 软件过程软件过程 2.1.1 软件过程概念 1993 年,过程理念的倡导者 Hammer 和 Campy 指出,过去200 年来,人们所 熟知的面向任务的思维方式正面临着挑战, 未来所有的商业运作都将以过程的方 式来对待。在软件领域,软件过程理念的领袖 Watts Humphery 领导并完成了软 件过程改进领域的巨大成果 CMM,他认为要解决软件危机,首要的是把软件活动 看作可控的、可度量的和可改进的过程。 不关注和关注过程的组织有着明显不同的文化。 前一种组织里,人们期望活 动都能产生出实在的“东西” ,比较关注活动的短期效果,认为与过程相关的是 一些低优先级的活动;在后一种组织里,认为生产的“东西”只是过程的一个节 点,只是全局的一部分,过程文档只被看作一个帮助过程执行的工具,而不是被 看做最终的目标。实际上,在以过程为核心的组织里,过程并不是一成不变的经 典,它本身会通过反馈、评估等一系列活动不断取得改进。 当然并不是说不关注过程的组织没有过程, 只是这些组织的过程可能并不一 致、协调,每个人都有自己的过程;过程可能是随机并且在无规则的改进着。对 于软件团队而言, 具体例子就是成员采用不同的编译规范和开发语言变可以变更 任何程序而不考虑他人等。当然这是当前盛行面向客户的小组协作所不期望的。 过程理念还在快速发展,2000 年版的 ISO9000 的一大变化要求以过程为中 心描述活动,而 CMM 的最新版本 CMMI 已超越软件的行业局限,成为可以适合多 种行业的过程改进模型。 2.1.2 软件过程定义 由于不同的人和不同的软件开发组织关注点不一样, 因此可能会给软件过程 下不一样的定义,这些定义往往会强调了过程的某个方面而忽略了其他方面。美 国卡耐基梅隆大学软件工程研究所SEI在 CMM 模型中给过程的定义是“过程就 是指用于生产以及软件进化的一系列的活动、方法及实践。 ”软件过程就是指 将用户需求转化为可执行系统的的开发和演化过程中所进行的软件工程活动的 全体,是用于生产软件产品的工具、方法和实践的集合。这可以说是关于过程的 经典的、全面的定义,它包含了过程的三个方面的特性过程定义、过程活动、 过程结果 第一,过程应该被定义。通常情况下,是指将过程所包含的活动及程序文档 化可以采用保存于纸介质上也可以采用电子文档的形式; 第二, 执行过程的每一个人都要学习过程的知识。 即让每个过程执行者的头 脑中都有对过程知识的深刻认识,且以此来驱动他们的行为活动; 第三,通过执行过程中的活动,获得最终预期的过程结果。 该过程定义的三个方面都很重要,它们之间的关系是相辅相成的; 第一,任何过程只有被大家学习、理解并且执行,才能解决实际问题。如果 一个过程只停留在定义阶段,那么这个过程只能永远停留在文本阶段。 第二, 在过程进行了明确的定义之后, 如果过程的参与者接受了关于过程的 培训、学习了过程相关的知识,但是却在实践中没有遵循过程,那么该过程也是 没有实际效果的过程。反之,如果参与过程的组织成员都理解了过程的定义,接 受了与过程相关的培训, 而且在实际的工作中都能按照过程的要求去规范自己的 活动,那么该过程就是一个真正的、完整的、有效的过程。 2.22.2 软件过程改进软件过程改进 2.2.1 软件过程为什么要改进 提高软件过程能力的实践称为软件过程改进。软件过程改进的根本目的是 提高质量、 提高生产率并且降低开发成本。我们可以把软件组织的软件过程与人 作比较,人在成长的过程中,存在不同的成熟状态。同样,我们也可以把软件过 程分为不成熟的过程、成熟的过程和制度化的过程。 不成熟的软件过程一般具有以下特点 过程未被严格的遵循和实施; 特别依赖于英雄人物,人离开了过程就丢了; 过程是临时拼凑而成的; 过程和质量的可见度低; 质量难于预测; 功能和质量为了满足进度而妥协。 成熟的软件过程具有以下特点 很好地进行了文档化; 持续地进行改进; 正规、严格地使用; 良好的控制; 对产品和过程进行了度量; 制度化的过程具有的特点 过程成为人们