论文部分内容阅读
[摘要]介绍CMM的概念、关键技术和在企业中实施的要点以及在软件工程化发展中的作用,以及以CMM带动后的软件工程化发展方向。目的是让软件开发人员认识CMM过程环节和实施CMM的必要性以及CMM的不足和软件工程化的发展方向。
[关键词]CMM 关键过程域 目标 关键实践 软件工程
中图分类号:TP3文献标识码:A文章编号:1671-7597 (2008) 0220016-02
20世纪80年代中期在通过软件工程克服软件危机过程中人们已经认识到,软件过程是否完善是软件风险大小的决定因素。这方面重大突破的标志是1987年美国卡内基-梅隆大学的软件工程研究所(SEI)的研究组发表的研究成果“承包商软件工程能力的评估方法”,该成果在1991年发展为软件过程能力成熟度模型(Capability Maturity Model For Software,CMM)。其核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化、使企业能够更好地实现相应的目标。
一、CMM给我们带来什么
(一)软件市场的通行证
高品质的管理决定了高品质的产品,从而也确立了市场的垄断地位。通过了CMM相关等级认证,在软件市场竞争中就处于较大的优势。企业获得CMM认证,同样在同类企业中具有较大的竞争力,反之如果拿不到CMM认证就会减少甚至丢失市场。CMM认证作为“市场通行证”的能力显然不言而喻。
(二)规范的软件开发过程
更重要的还是在于控制企业的软件规范管理过程和提高产品质量,打造企业软件开发文化。在CMM认证的过程中,实施软件过程严格按照CMM的标准,让整个软件开发过程受控,让软件过程的目标和实现软件产品的活动受控,从而形成高质量的软件产品和企业独特的软件开发文化。同时软件企业通过实施CMM,可以更好地规范软件生产和管理流程,使企业组织规范化,为企业更好更快地发展和进一步扩大规模打下坚实的基础。
二、CMM的关键技术
(一)CMM技术框架
软件能力成熟度模型将组织的软件能力成熟度分为五个等级,等级1称为初始级,等级2称为可重复级,等级3称为已定义级,等级4称为定量管理级,等级5称为优化级。CMM框架用5个不断进化的层次来评定软件生产的历史与现状:其中初始层是混沌的过程,可重复层是经过训练的软件过程,定义层是标准一致的软件过程,定量管理层是可预测的软件过程,优化层是能持续改善的软件过程,在某个层次内部,也有成熟程度的区别。CMM分为三个层次,即成熟度等级、关键过程域和关键实践。每个成熟度等级由若干关键过程域组成,这几个关键过程域共同形成一种软件过程能力。每个关键过程域都有特定的目标,并且均包含五类关键实践,即:执行承诺类、执行能力类、执行活动类、测量分析类和验证实施类。每类关键实践规定相应组织机构或有关责任者应实施的一些关键实践,通过这五类关键实践来实现关键过程域的目标。
(二)CMM的“关键过程域”
CMM的关键过程域(Key Process Area,KPA)是软件人员在实施CMM过程中首先需要关注的重点,关键过程域是一组相关的活动,当这些活动共同完成时,对建立过程能力至关重要的一组目标就能实现。需要着重了解关键过程域和软件工程中软件生命周期划分的生命周期阶段是两个不同的概念,每个关键过程域都是贯穿整个软件生命周期的一组相关活动,而软件生命周期阶段的每个阶段如概要设计只是生命周期内的一个时间段,是和软件的生命周期模型密切联系的。对关键过程域的理解是理解CMM及其内涵的关键起步。
(三)CMM的“目标”
CMM模型定义了52个需要实现的“目标”。目标是对关键过程域关键实践的一种概况,可用于去定组织或项目是否已经有效地实施该关键过程域。目标表示每个关键过程域的范围、边界和意图。同时目标也隐含了软件工程活动中需要产生的软件产品,所有的目标都实现了,代表软件工程的过程已经完全规范化。
(四)CMM的“关键实践”
CMM模型定义了300多个“关键实践”。关键实践是对关键过程域的有效实施和制度化贡献最大的基础实施和活动。活动代表了在软件工程实现中需要干的事情,或者说完成了某个活动就意味在软件过程化实施过程中某一个环节已经受到控制。
三、CMM在企业实施过程中的要点
(一)实施CMM的必要性
软件开发和管理的风险之所以大,是由于软件过程能力低,其中关键的问题在于软件开发团队不能很好地管理其软件过程,从而使一些好的开发方法和技术起不到预期的作用。而项目的成功也是通过团队的杰出努力,仅建立在特定技术人员上的成功不能为全组织的生产和质量的长期提高打下基础,必须在建立有效软件管理等方面,坚持不懈地努力,才能不断改进和持续成功,实施CMM是改进软件过程和质量的一种有效方法。
(二)实施CMM的关键点
各企业在实施CMM过程中,应该根据本企业自身的发展情况和软件水平选取CMM的相关等级,制定相应的实施过程文件和计划,成立专门的组织机构和选择合适的认证机构。各个企业在实施CMM过程中应按照CMM的标准制定相应的软件工程管理文件及发布和实施。而软件开发人员在实施CMM的过程中,应该严格执行本企业制定过程文件中规定的过程和规程,要持之以恒,形成习惯。软件开发团队按照标准实施软件过程就可以水到渠成的通过CMM的标准检查。而开发人员应该在实施CMM过程的各个环节中把握哪些对软件质量的控制有重要意义,哪些是为控制软件质量的而做的证据,从而深入理解CMM要求的本质,提高自身的软件过程能力和软件组织能力,对软件工程化才能有真正的了解。
(三)实施CMM的一些认识
(1)关于额外工作量。软件相关人员包括软件负责人在实施CMM的初期会因履行各种各样的手续和编制各种各样的文档感到不习惯或繁琐,感觉在浪费时间。但是这些控制文档(软件工程规范开发过程证据)是CMM评价机构查证和评价的关键,在CMM认证和质量认证过程中是必不可少的,但对提高软件质量不一定是必需的。
(2)实施CMM是使用先进的管理工具是有联系又是两个不同的概念。CMM过程关注的是软件工程过程的规范性,在高等级中同时关注软件开发的技术。先进和有效的工具本身和过程控制没有必然的关系,但是能提高过程控制的效率和节省时间。例如不用DOORS(Telelogic公司的需求管理工具)照样进行需求分析,但是使用它更管理方便、跟踪快捷和操作规范。
(3)实施CMM不会影响进度。企业软件产品在以往的开发中有进度推迟的现象,很大一部分原因是由于软件策划力度和风险控制不够导致软件开发不受控。实施CMM虽然在认证过程中需要保留证据而增加了一些软件工程中间产品,但是软件策划、监督和质量保证有效的使人工不断监督和干预软件开发的过程,使得进度完全受控。
(4)提高软件质量、降低软件维护的工作量和提供软件复用的程度都是CMM旨在解决的目的,软件开发和组织人员要善于从其过程中揣摩和总结其带来的优点和自身的不足。
四、CMM的不足和实施思考
CMM参考模型本身同时也是一个理想化的模型,对软件过程控制和软件开发人员也提出了各种各样的要求,也暴露了CMM本身的缺陷,主要表现在以下方面:
CMM是一个相当复杂的标准,为如何改进软件开发过程提供了很好的指导,它规定了应该做哪些事,没有规定应该如何去做。这种方法给实施企业留下了很大的空间来开发适合自己的软件过程、规范和标准,但也对实施企业提出了非常高的要求。
CMM过程时间非常长,在实施CMM的过程中将过程复杂化了,增加了软件开发的难度和复杂性,整个过程操作起来比较困难,尤其是第一次评估时。
软件开发人员的CMM培训比较困难,即使CMM二级也有近百种实践要求,就是每个开发人培训一个星期,还是很难记住这些操作。
同时在实施CMM的过程中,也要充分认识不是实施了CMM,软件项目的质量就能有所保障。CMM是一种资质认证,它可以证明一个软件企业对整个软件开发过程的控制能力。按照CMM的思想进行管理与通过CMM认证并不能划等号,认证的过程是纠正企业偏差的过程,应借此来改变我们在软件领域长久以来形成的不规范开发习惯。
五、软件工程化管理发展方向
软件工程化管理的发展,在经历了从70年代开始以结构化分析与设计、结构化评审、结构化程序设计以及结构化测试为特征的结构化生产时代,到90年代中期,以CMM模型的成熟模型和日益为市场接受为标志,已经进入以过程成熟模型CMM为标志的以过程为中心向着软件过程技术的成熟和面向对象技术、构件技术的发展为基础的真正软件工业化生产的道路,这个趋势应该引起企业软件的高度重视,及早采取措施,跟上世界软件发展的脚步,控制软件过程和软件技术,提高软件产品质量和软件核心竞争力。软件生产转向以改善软件过程为中心,是软件产业或迟或早都要走的道路。
这个过程可能需要在软件开发行业持续很长的时间,需要有更加先进的开发和管理理念尤其是评估手段,也有可能带来软件工程化的重大变革。而软件实现企业也要突破原来的管理方式,在不影响软件质量和客户需求的基础上简化管理过程,形成高效的管理手段并缩短开发周期。同时在控制软件过程和提高软件质量的基础上积极研究和总结软件有形资产,无限提高软件产品的复用度,充分探讨软件构件技术和面向用户需求动态变化的技术,在短期内实现真正的软件工业化生产。
六、结束语
CMM是一种有效的软件工程化管理标准,其过程管理是软件开发人员和实施企业应该重点关注的核心,充分认识CMM的优点和弊端,对CMM过程认证也应有正确的认识,在通过CMM相关等级认证后应充分继承过程控制和质量控制精髓,丢弃繁琐的手续和文档,真正提高自身软件核心竞争力及创造新型的属于自己的软件开发理念和文化。
参考文献:
[1]何新贵、石柱、王纬等,GJB5000《军用软件能力成熟度模型实施指南》。国防工业出版社,2004.
[2]GJB5000《军用软件能力成熟度模型》,2003.
[3]李素民、周玉芳、方建勇等,中船重工第七一六所《软件工程管理文件》,2007.
作者简介:
方建勇,男,大学本科,助理工程师,主要研究方向大型软件系统体系结构/分布式支撑软件/软件工程化。
[关键词]CMM 关键过程域 目标 关键实践 软件工程
中图分类号:TP3文献标识码:A文章编号:1671-7597 (2008) 0220016-02
20世纪80年代中期在通过软件工程克服软件危机过程中人们已经认识到,软件过程是否完善是软件风险大小的决定因素。这方面重大突破的标志是1987年美国卡内基-梅隆大学的软件工程研究所(SEI)的研究组发表的研究成果“承包商软件工程能力的评估方法”,该成果在1991年发展为软件过程能力成熟度模型(Capability Maturity Model For Software,CMM)。其核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化、使企业能够更好地实现相应的目标。
一、CMM给我们带来什么
(一)软件市场的通行证
高品质的管理决定了高品质的产品,从而也确立了市场的垄断地位。通过了CMM相关等级认证,在软件市场竞争中就处于较大的优势。企业获得CMM认证,同样在同类企业中具有较大的竞争力,反之如果拿不到CMM认证就会减少甚至丢失市场。CMM认证作为“市场通行证”的能力显然不言而喻。
(二)规范的软件开发过程
更重要的还是在于控制企业的软件规范管理过程和提高产品质量,打造企业软件开发文化。在CMM认证的过程中,实施软件过程严格按照CMM的标准,让整个软件开发过程受控,让软件过程的目标和实现软件产品的活动受控,从而形成高质量的软件产品和企业独特的软件开发文化。同时软件企业通过实施CMM,可以更好地规范软件生产和管理流程,使企业组织规范化,为企业更好更快地发展和进一步扩大规模打下坚实的基础。
二、CMM的关键技术
(一)CMM技术框架
软件能力成熟度模型将组织的软件能力成熟度分为五个等级,等级1称为初始级,等级2称为可重复级,等级3称为已定义级,等级4称为定量管理级,等级5称为优化级。CMM框架用5个不断进化的层次来评定软件生产的历史与现状:其中初始层是混沌的过程,可重复层是经过训练的软件过程,定义层是标准一致的软件过程,定量管理层是可预测的软件过程,优化层是能持续改善的软件过程,在某个层次内部,也有成熟程度的区别。CMM分为三个层次,即成熟度等级、关键过程域和关键实践。每个成熟度等级由若干关键过程域组成,这几个关键过程域共同形成一种软件过程能力。每个关键过程域都有特定的目标,并且均包含五类关键实践,即:执行承诺类、执行能力类、执行活动类、测量分析类和验证实施类。每类关键实践规定相应组织机构或有关责任者应实施的一些关键实践,通过这五类关键实践来实现关键过程域的目标。
(二)CMM的“关键过程域”
CMM的关键过程域(Key Process Area,KPA)是软件人员在实施CMM过程中首先需要关注的重点,关键过程域是一组相关的活动,当这些活动共同完成时,对建立过程能力至关重要的一组目标就能实现。需要着重了解关键过程域和软件工程中软件生命周期划分的生命周期阶段是两个不同的概念,每个关键过程域都是贯穿整个软件生命周期的一组相关活动,而软件生命周期阶段的每个阶段如概要设计只是生命周期内的一个时间段,是和软件的生命周期模型密切联系的。对关键过程域的理解是理解CMM及其内涵的关键起步。
(三)CMM的“目标”
CMM模型定义了52个需要实现的“目标”。目标是对关键过程域关键实践的一种概况,可用于去定组织或项目是否已经有效地实施该关键过程域。目标表示每个关键过程域的范围、边界和意图。同时目标也隐含了软件工程活动中需要产生的软件产品,所有的目标都实现了,代表软件工程的过程已经完全规范化。
(四)CMM的“关键实践”
CMM模型定义了300多个“关键实践”。关键实践是对关键过程域的有效实施和制度化贡献最大的基础实施和活动。活动代表了在软件工程实现中需要干的事情,或者说完成了某个活动就意味在软件过程化实施过程中某一个环节已经受到控制。
三、CMM在企业实施过程中的要点
(一)实施CMM的必要性
软件开发和管理的风险之所以大,是由于软件过程能力低,其中关键的问题在于软件开发团队不能很好地管理其软件过程,从而使一些好的开发方法和技术起不到预期的作用。而项目的成功也是通过团队的杰出努力,仅建立在特定技术人员上的成功不能为全组织的生产和质量的长期提高打下基础,必须在建立有效软件管理等方面,坚持不懈地努力,才能不断改进和持续成功,实施CMM是改进软件过程和质量的一种有效方法。
(二)实施CMM的关键点
各企业在实施CMM过程中,应该根据本企业自身的发展情况和软件水平选取CMM的相关等级,制定相应的实施过程文件和计划,成立专门的组织机构和选择合适的认证机构。各个企业在实施CMM过程中应按照CMM的标准制定相应的软件工程管理文件及发布和实施。而软件开发人员在实施CMM的过程中,应该严格执行本企业制定过程文件中规定的过程和规程,要持之以恒,形成习惯。软件开发团队按照标准实施软件过程就可以水到渠成的通过CMM的标准检查。而开发人员应该在实施CMM过程的各个环节中把握哪些对软件质量的控制有重要意义,哪些是为控制软件质量的而做的证据,从而深入理解CMM要求的本质,提高自身的软件过程能力和软件组织能力,对软件工程化才能有真正的了解。
(三)实施CMM的一些认识
(1)关于额外工作量。软件相关人员包括软件负责人在实施CMM的初期会因履行各种各样的手续和编制各种各样的文档感到不习惯或繁琐,感觉在浪费时间。但是这些控制文档(软件工程规范开发过程证据)是CMM评价机构查证和评价的关键,在CMM认证和质量认证过程中是必不可少的,但对提高软件质量不一定是必需的。
(2)实施CMM是使用先进的管理工具是有联系又是两个不同的概念。CMM过程关注的是软件工程过程的规范性,在高等级中同时关注软件开发的技术。先进和有效的工具本身和过程控制没有必然的关系,但是能提高过程控制的效率和节省时间。例如不用DOORS(Telelogic公司的需求管理工具)照样进行需求分析,但是使用它更管理方便、跟踪快捷和操作规范。
(3)实施CMM不会影响进度。企业软件产品在以往的开发中有进度推迟的现象,很大一部分原因是由于软件策划力度和风险控制不够导致软件开发不受控。实施CMM虽然在认证过程中需要保留证据而增加了一些软件工程中间产品,但是软件策划、监督和质量保证有效的使人工不断监督和干预软件开发的过程,使得进度完全受控。
(4)提高软件质量、降低软件维护的工作量和提供软件复用的程度都是CMM旨在解决的目的,软件开发和组织人员要善于从其过程中揣摩和总结其带来的优点和自身的不足。
四、CMM的不足和实施思考
CMM参考模型本身同时也是一个理想化的模型,对软件过程控制和软件开发人员也提出了各种各样的要求,也暴露了CMM本身的缺陷,主要表现在以下方面:
CMM是一个相当复杂的标准,为如何改进软件开发过程提供了很好的指导,它规定了应该做哪些事,没有规定应该如何去做。这种方法给实施企业留下了很大的空间来开发适合自己的软件过程、规范和标准,但也对实施企业提出了非常高的要求。
CMM过程时间非常长,在实施CMM的过程中将过程复杂化了,增加了软件开发的难度和复杂性,整个过程操作起来比较困难,尤其是第一次评估时。
软件开发人员的CMM培训比较困难,即使CMM二级也有近百种实践要求,就是每个开发人培训一个星期,还是很难记住这些操作。
同时在实施CMM的过程中,也要充分认识不是实施了CMM,软件项目的质量就能有所保障。CMM是一种资质认证,它可以证明一个软件企业对整个软件开发过程的控制能力。按照CMM的思想进行管理与通过CMM认证并不能划等号,认证的过程是纠正企业偏差的过程,应借此来改变我们在软件领域长久以来形成的不规范开发习惯。
五、软件工程化管理发展方向
软件工程化管理的发展,在经历了从70年代开始以结构化分析与设计、结构化评审、结构化程序设计以及结构化测试为特征的结构化生产时代,到90年代中期,以CMM模型的成熟模型和日益为市场接受为标志,已经进入以过程成熟模型CMM为标志的以过程为中心向着软件过程技术的成熟和面向对象技术、构件技术的发展为基础的真正软件工业化生产的道路,这个趋势应该引起企业软件的高度重视,及早采取措施,跟上世界软件发展的脚步,控制软件过程和软件技术,提高软件产品质量和软件核心竞争力。软件生产转向以改善软件过程为中心,是软件产业或迟或早都要走的道路。
这个过程可能需要在软件开发行业持续很长的时间,需要有更加先进的开发和管理理念尤其是评估手段,也有可能带来软件工程化的重大变革。而软件实现企业也要突破原来的管理方式,在不影响软件质量和客户需求的基础上简化管理过程,形成高效的管理手段并缩短开发周期。同时在控制软件过程和提高软件质量的基础上积极研究和总结软件有形资产,无限提高软件产品的复用度,充分探讨软件构件技术和面向用户需求动态变化的技术,在短期内实现真正的软件工业化生产。
六、结束语
CMM是一种有效的软件工程化管理标准,其过程管理是软件开发人员和实施企业应该重点关注的核心,充分认识CMM的优点和弊端,对CMM过程认证也应有正确的认识,在通过CMM相关等级认证后应充分继承过程控制和质量控制精髓,丢弃繁琐的手续和文档,真正提高自身软件核心竞争力及创造新型的属于自己的软件开发理念和文化。
参考文献:
[1]何新贵、石柱、王纬等,GJB5000《军用软件能力成熟度模型实施指南》。国防工业出版社,2004.
[2]GJB5000《军用软件能力成熟度模型》,2003.
[3]李素民、周玉芳、方建勇等,中船重工第七一六所《软件工程管理文件》,2007.
作者简介:
方建勇,男,大学本科,助理工程师,主要研究方向大型软件系统体系结构/分布式支撑软件/软件工程化。