ISO9000和CMM,谁更适合软件开发?

ISO9000 和 CMM 是国际上通用的软件质量评估和管理方法。二者有很多相似之处,它们的实施都可以改变软件开发的不规范、文档不齐、维护跟不上、质量漏洞多等弊病。因此,尽管ISO9000标准的一些要求在CMM中不存在,而CMM的一些要求在ISO9000标准中也不存在,但两者之间都受到类似的关系驱动,有着相似之处。它们的核心思想都涉及质量管理和过程管理。因此,往往会产生这样的问题:ISO9000和CMM,谁更适合软件开发?

(1)两者相通的联系

两者最大的相似点是都强调规范化和文档化的过程管理。在基本原理方面,ISO9000和CMM都十分关注软件产品质量和过程改进。尤其是ISO 9000:2000版标准增加持续改进、质量目标的量化等方面的要求后,在基本思路上和CMM更加接近。

它们的共同点都是认为:过程管理的核心是使过程状态可见并使过程可控。也就是说:如果组织还没有一个规范化的开发过程,则首要任务是对当前的开发过程进行分析、整理并文档化,制定出一个符合本组织实际开发过程的规范,并从制度上确保开发过程规范的执行。如果已经具备了相对规范的开发过程,则需要对这个开发过程的规范表现进行持续的评估,找出问题,然后进行补充修订。这就是我们通常所说的持续改进。

(2)CMM和ISO有什么区别?

一般来说,ISO9001会被认为是适用于所有领域的一种质量保证模式。针对质量管理而言,ISO可以看作是一个浓缩的管理学框架。它是一个大而全的系统,几乎覆盖了公司管理的各个方面。它对于一个尚无完整质量管理体系和规范的公司来说,是一个很好的快速建立公司系统化管理框架的参照体系。通过这个体系的建立,可把公司的各个部门的业务流程、接口关系、人员岗位、部门职能界定及各种公司管理制度有机的整合起来。

而CMM 主要是对软件开发实践所涉及的整个开发流程的规定和分析,它的体系既包括软件工程过程本身,也包括对这一过程的管理。它更多的是提示组织所处于各个成熟度等级的阶段目标,以及为了达到这些特定的阶段目标而需要的具体活动。对于一个具有一定管理基础的组织,引入 CMM会对其持续提高过程能力、持续改进过程质量将起到极大的推动作用。

CMM与ISO9000的区别主要有以下几点:①ISO9000的通用性太强,针对性太弱。ISO9000适用范围是所有设计\制造\开发及服务的行业,对软件质量管理体系的要求是很低的,通过ISO9000认证的企业只相当于CMM的2级或3级,而且要求不是很具体。②CMM是专门针对软件开发及服务的。它提出的是对软件开发过程改善的全程指导。它的每一级对所要实现的关键过程都有详细的要求,关键实现的说明就有500页之多,这对于推动软件企业自身质量管理素质是非常有利的。③CMM强调软件开发过程的成熟度,即不断改进和提高开发过程,而ISO9000仅是描述了可接受的最低标准。就软件过程来说,CMM3级的覆盖范围是要大于ISO9000的覆盖范围。④ISO认证过程只有两种结果:要么通过认证,要么不通过认证。CMM则给出一个过程改善的框架,它将成熟度分为五个级别。

简单的说,不同点在于CMM是把焦点严格对准软件开发,ISO9000则是包括硬件、软件、流程性材料和服务。一个是软件行业"专用"的,另一个则是"泛用"的。因此,尽管两者在涉及质量管理和软件过程中有着相似之处,但也存在很大差别。

选择两种质量体系的策略和建议

就软件企业来说,两者在质量管理指导原则上的要求是差不多的。只是实现和表述上是不同的,但不能笼统的说谁比谁好。因此,对于软件过程改进应该是基于CMM模型还是ISO9001呢?明智的回答是应该同时考虑两者,虽然两者有很大程度的重叠。那么,到底是先选择CMM还是ISO呢?从笔者的实践经验来看,应从以下几个方面进行考虑:

(1)从软件企业的业务特点考虑

一般来说,ISO9000是全面规范企业的质量管理,而解决软件过程问题则是CMM模型有很好的优势。也就是说:如果企业只希望提高自己在项目管理、开发活动或者过程管理等方面中的某些能力,那么就可以应用CMM方法来增强自己的过程控制能力。而如果软件企业希望全面提高质量管理,那么就可以先选择ISO9000。所以,当企业的规模不是很大,业务又主要集中在软件开发为主的话,应是CMM比较适用。但如果企业的规模比较大,并且业务不仅仅集中在软件开发,还包括硬件开发、硬件代理(采购)和其它服务,则可以考虑先实施ISO9000体系。

(2)软件企业对质量过程改进的熟悉程度

这一点的考虑主要是因为很多软件企业长期以来形成的管理陋习和企业文化与CMM制度化的管理理念会存在一些相冲突的地方。因此,在打破旧体制建立新体制时就必然会带来软件企业的阵痛。此外,由于CMM是强调逐步改进,而非突变,故很难在短时间内看到显著 的效果,这样直接实施CMM的话会打击大家对CMM的信心。因此,可以借助ISO9000质量体系先建立规范化的软件过程,熟悉质量管理内容和建立质量管理体系。也就是说,如果过去没有接触过类似的规范化质量管理,那么最好先从ISO9000开始,首先建立持续过程改进的思想。因为ISO9000的要求比CMM要稍低一些,可以适当的降低实施难度。如果企业已经实施过ISO9000了,并且取得了较好的效果,这时再考虑实施CMM就会顺利得多了。

(3)软件企业对开发过程改进的预算

不论怎样,几乎可以肯定地说实施CMM的费用肯定要比实施ISO9000的高出一些。据有关方面的统计,通过CMM4级以上的直接和间接的投入会是超过百万元级的。因此,如果企业的预算不多的话,我们立足于"少花钱、多办事"的原则,可以先采用ISO9000的实施和评估方法,先建立规范化的质量控制过程。这样不但经济很多,而且效果还不错。在预算充足的时候,再上CMM就也会事半功倍了。通常来说,单纯比较软件过程的话CMM的价值会更大些。但总的来说CMM和ISO没有孰轻孰重之分,而是可以互相结合的。例如,ISO的质量目标是非常好的思想,CMM管控软件开发过程则相对比较细致。

总之,单纯实施CMM,永远不能真正做到能力成熟度的升级,只有将实施CMM与实施ISO9000有机地结合起来,才能发挥最大的效力。因此,我倾向于一个公司先基于ISO9000建立起质量管理体系框架,培养质量意识。然后,在此基础上再选择若干开发过程进行重点监控,以逐步达到CMM成熟度等级的要求。

ISO9000和CMM的更多相关文章

  1. 【转】成为it精英,我奋斗7年

    转载地址:http://liangwang985.blog.163.com/blog/static/119549233201191394259491/ 这些日子 我一直在写一个实时操作系统内核,已有小 ...

  2. 一个IT人士的个人经历,给迷失方向的朋友

    这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没有方向 ,所以把我的经历写出来与大家共勉,希望能 ...

  3. 成为IT精英,我奋斗了7年

    成为IT精英,我奋斗了7年 这些日子 我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没有方向 ,所以把我 ...

  4. 一个IT人士的个人经历,给迷失方向的朋友(转)

    作者: 果子狸  来源: WP开发者社区  发布时间: 2013-11-08 10:43  阅读: 50078 次  推荐: 494   原文链接   [收藏] 这些日子我一直在写一个实时操作系统内核 ...

  5. 成为IT精英,我奋斗7年【转】

    这些日子 我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没 有方向 ,所以把我的经历写出来与大家共勉,希 ...

  6. ruanjiangongcheng1

    软体工程的方法有很多方面的意义.包括专案管理,分析,设计,程序的编写,测试和质量控制. 软体设计方法可以区别为重量级的方法和轻量级的方法.重量级的方法中产生大量的正式文档. 著名的重量级开发方法包括I ...

  7. asf

    这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能  够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没有方向  ,所以把我的经历写出来与大家共勉, ...

  8. 早日选择一门自己喜欢的,然后瞄准目标,不达目的誓不罢休。像文章的作者一样成为一名成功的IT人士。

    hawk的奋斗历程. 来自:LinuxForum  :http://www3.linuxforum.net/ 原址:http://www.linuxforum.net/forum/gshowflat. ...

  9. Java程序员面试题收集(3)

    面试中被问到过的题目: 1.<%@ include=""/>和<jsp:include page="" flush="true&qu ...

随机推荐

  1. windows cmd相关操作

    一:文件夹1. 新建文件夹方式一:md[盘符:\][路径\]新目录例如:md c:\test\newtest 方式二:先使用cmd进入需要新建文件的根目录下,使用md或者mkdir 直接创建文件夹ne ...

  2. DMA及cache一致性的学习心得 --dma_alloc_writecombine【转】

    转自:https://www.cnblogs.com/hoys/archive/2012/02/17/2355914.html 来源:http://xmxohy.blog.163.com/blog/s ...

  3. nodejs的process模块如何获取其他进程的pid

    var cmd=process.platform=='win32'?'tasklist':'ps aux'; var exec = require('child_process').exec; var ...

  4. 【转】CString与string、char*的区别和转换

    我们在C++的开发中经常会碰到string.char*以及CString,这三种都表示字符串类型,有很多相似又不同的地方,常常让人混淆.下面详细介绍这三者的区别.联系和转换: 各自的区别 char*: ...

  5. Vue.js——循环(Java、JSTL标签库、数据库)

    一.Vue.js循环 Vue.js循环要使用 v-for 指令. v-for 指令需要以 student in StudentList 形式的特殊语法使用, StudentList 是源数据数组并且s ...

  6. python 生成器与协程

    生成器在迭代中以某种方式生成下一个值并且返回和next()调用一样的东西. 挂起返回出中间值并多次继续的协同程序被称作生成器. 语法上讲,生成器是一个带yield语句的函数.一个函数或者子程序只返回一 ...

  7. centos6.5生产环境编译安装nginx-1.11.3并增加第三方模块ngx_cache_purge、nginx_upstream_check、ngx_devel_kit、lua-nginx

    1.安装依赖包 yum install -y gcc gcc-c++ pcre-devel openssl-devel geoip-devel 2.下载需要的安装包 LuaJIT-2.0.4.zip ...

  8. https协议的接口测试

    用jmeter测试https接口: 和传统的http协议套路不太一样. 注意细节: 1.取样器正常选择http请求,端口号:为443(具体根据接口文档我刚开始用的80端口所以错了) 2.请求方法,一定 ...

  9. Python-JS事件与面向对象操作

    目录一.函数高级 循环绑定: 使用循环绑定会出现的问题及解决方案: 二.面向对象 3.构造函数(ES5) 三.JS选择器 1.getElement系列(最严谨) 2.querySelector系列(最 ...

  10. 【 总结 】Tcp Keepalive 和 HTTP Keepalive 详解

    TCP Keepalive Tcp keepalive的起源          双方建立交互的连接,但是并不是一直存在数据交互,有些连接会在数据交互完毕后,主动释放连接,而有些不会,那么在长时间无数据 ...