• 迭代和增量的过程改进方法——采访Jeff Dalton先生纪实-程序员宅基地

技术标签: 月刊  



您觉得什么样的过程改进的对策或策略对您或您的客户最有效?

答:我之前一直在思考这个问题。我的结论是: 过程改进最难的部分不是告诉客户他们应该怎么做,也不是写一个过程给客户,甚至它也不是让他们写一个过程,做一个计划并执行它  (尽管这对过程改

 

进是有一定的作用)。最艰难,也是最有帮助的部分,是如何使客户推行过程改进。换而言之,如何让人们接受它并使用它。

我们一直采用一种迭代和增量的方法,也一直都很成功,我把它称作敏捷CMMI。在某种程度上,你可以想象类似敏捷软件开发方法。

我们提倡使用敏捷软件开发中的方法:如增量交付(incremental delivery)、持续构建(continuousbuild)、协作(collaboration)等, 去推广过程,并让人们更好地接受它。您可以看出我们做了很多不同的事,来帮助机构接受并施行过程。因为就算是最好的过程,如果你不能让客户真正去接受它、采用它,还是毫无用处的。

只有他们接受并采用它,你不知道你计划的过程是否有用。所以我们在逐步地部署详细步骤时使用增量的方法。所以我们可能要发布两个或三个子过程并进行测试,然后一旦公司已经接受了那些简小实用的过程,我们再给他们另一组过程。

现在,我们预先做好了整个计划,如此一来,他们就能在适当的时候获得适当的子过程。其真正的好处,跟我们平时学习的习惯是一样的。我们知道,人们会从细微之处消化吸收东西。当你看到很多的流程实现常常失败,关键的在于:该公司试图把一套制定好的流程丢给他们的雇员,然后说,“这将是你的新过程”,而我们是反过来说:“我们不会那样做,我们将让人们从非常小的流程开始工作,我们将继续指导他们,直到他们有了一套完整的过程。提供给他们过程改进学、方法论等,实施一段时间后,他们把这些事情做到细处,以便能搞懂这些方法,熟练运用,然后他们就可以开始接受并使用新的流程。

这套理论起源于什么?您是否随时间在更新发展这套理论?

答:这是个好问题。我是个咨询师,曾在Ernst and Young做了10年软件开发。这么多年里,做了许多次商业咨询或过程咨询,我注意到几乎每一个过程的实现都失败——类似于大型软件实现或者软件开发实施常有的失败。

我努力探究原因,发现了两件事:一是,人们并不是用瀑布方法,而是用增量的方式来学习的。采用和使用新流程也是学习的过程,所以也是用增量的方法来学习。人们学习如何做事情——人们学习是因为这有利于他们。想法改变做事方式,所以想要有一个有效的过程改进就必须改变他们的企业文化和思维习惯。

近十年来,我一直思考:“我们本末倒置了,所以我们应把过程改进转回学习经验的模式”。我得出的结论是,用迭代和增量的方式去做;

二是,作为一个软件开发者,我意识到,过程专家们在这个行业讨论六西格玛、CMMI、过程改进和ISO使用——所有这些都是以过程为中心语言,我意识到,除非开始与软件开发人员和项目经理谈论他们理解的事情,类似于面向对象的封装、多态性和所有与软件开发相关的事情,否则他们难以理解我们谈论的内容。

敏捷CMMI方法不仅需要第一个增量和迭代的概念设计和部署,也包含了第二个概念——通过提供给开发人员一切他们理解和使用UML图表和数据流图的一种语言,都是他们比较习惯的方式,而不是试图推他们进入到他们不想进入的流程的世界。

我的结论是,过程对于公司不应是额外的负担,并非让人们做一件额外的事情,过程的另一个名词是工程。作为一个以验证过程为核心的行业, 在过去的几十年里,我们没有将核心概念解释清楚,其中一部分原因就是我们的工具集和方法论有问题。

我们的敏捷CMMI方法帮助客户解决了上述两个问题:将客户过程改进变回学习经验;将方法论用他们熟知的语言来解释。我们有多名客户全心全意接受它,有人甚至开始在其他部分业务使用它,在它支持下我们真正成功了。

问:在客户方面,如何使他们接受您的观点或推销您的观点?

答:有趣的问题。如果你跟其他顾问交流,他们很可能会提起两类客户:一种只要认证的客户,及一种真的想要改进的客户。我们也有类似的想法。我们叫它“通往卓越的道路”,这是我们的口号。显然你希望客户都拥有这样的心态,但事实上,我有95%的客户,他们说,“我需要一个认证,我需要这张纸,我需要成熟度三级或二级认证。”

他们通常会带着认证的需求和问题来找我们:“认证需要多少钱?”作为顾问专家我会说:“好,我们可以帮你解决问题,同时帮你获得认证。”接着我开始与他们合作,真正开始改变他们对待整个工作的态度和帮助他们,使其受益。”

与其他咨询师不同是,我们认为改变他们的想法是我工作的一部分。所以我认为我们有责任去做的事情,你可以阅读我们的网站,它不是纯粹商业化的网站,你在那里阅读到任何你喜欢的信息。我相信,作为一个过程改进方面的专家或顾问,帮助客户理解这样做对他们有好处是我们的工作。

一般而言,我需要三到六个月的时间,来改变客户对于CMMI的理解并尝试使用它。一旦他们开始相信,就会很乐意去推广并在自己身边传播这样的观念。我认为遗漏了很多的东西是,有许多人误解了CMMI工作或者过程改进工作,这个词写进你的名片并不难,但我觉得,在我们的行业缺少了某些东西——了解这一点的人不多,就是给客户真正的咨询帮助,帮助他们理解,这为什么对他们有价值的?他们可以将此作为一个业务上的战略武器。而我的职责是告诉他们这个事实。

问:完全同意, Jeff。当我在做一个成功的实施,能看到这个想法吸引住人们,当他们看到事情发生了,成果出现了,的确有所变化,就像黑暗中忽然有了指路明灯。

答:我不得不承认,顾问这个词有点泛滥。我相信一个全面的顾问意味着帮助客户理解文化,帮助他们沟通、学习。所有这些事都不仅仅为了拿证。

我们的方法论,融入了上述内容。这是近年来对客户提出的问题的总结。最终对客户有益。

问:你会如何描述你公司的使命?

答:我认为是在帮助人们理解,这是一种企业文化,而不只是认证。重点是,让客户知道,过程对于公司并不是额外的负担,而是帮助定义每天的工作的流程。

我会使用一些小技巧,例如:当我在交流会上时,用一种新的方式来拼写“过程(process)”,然后在屏幕上显示一个发音有细微区别的拼写单词“工程(engineering)”,让人们拼读,因为它的发音有细微区别并且不是很明显,最后帮助学生理解过程其实就是工程。

这的确说明了过程不会增加做事的成本、时间和精力。如果世界上每一个工程师有了我们灌输给他的正确的方法,过程就是他们如何每天执行工程任务。我们认为我们的敏捷CMMI方法是正确的方式,任何优秀的工程师都将同意这一观点并接受它——这是我们公司的使命。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011250455/article/details/10910409

智能推荐

如何在P4中管理Unreal Engine 代码-程序员宅基地

文章浏览阅读2.1k次。准备引擎开发环境下载代码Unreal Engine代码库在Github上,要下载Github上的源代码,需要具有Github账号和虚幻引擎的订阅账号,并且将二者相关联。步骤如下。登陆www.github.com使用虚幻引擎订阅账号登陆unrealengine.com点击CONNECTIONS菜单-> ACCOUNTS->GITHUB一路按照提示操作,最终会收到一个Github的通知邮件,邀请参加EpicGames Organization。点击链接,就可以看到源

SpringBoot基于数据库的定时任务实现_spring定时任务本地日志只有一条插入语句,但是数据库有多条-程序员宅基地

文章浏览阅读410次。在我们平时开发的项目中,定时任务基本属于必不可少的功能,那大家都是怎么做的呢?但我知道的大多都是静态定时任务实现。基于注解来创建定时任务非常简单,只需几行代码便可完成。实现如下:[Java]纯文本查看复制代码? 01 02 03 04 05 06 07 08 09 10 11 ..._spring定时任务本地日志只有一条插入语句,但是数据库有多条

常见的Java错误以及规避方法-程序员宅基地

文章浏览阅读1.7k次,点赞3次,收藏4次。1. “Cannot Find Symbol”这是一个非常常见的问题,因为Java中的所有标识符都需要在使用之前进行声明。出现这个错误是因为,在编译代码时,编译器不明白该标识符的含义。![在这里插入图片描述](https://img-blog.csdnimg.cn/20201107220714255.png#pic_center2. “Public Class XXX Should Be in File”当XXX类和Java程序文件名不匹配时,就会产生“public class XXX should

LOJ2540 「PKUWC2018」随机算法(状态压缩)_pkuwc2018 状态压缩-程序员宅基地

文章浏览阅读138次。传送门:https://loj.ac/problem/2540solutionsolutionsolution:直接状压dpdpdp做fs,if_{s,i}fs,i​表示独立集的状态为sss,考虑到排列的第iii位枚举下一位转移考虑下一位可以填什么考虑现在可以加入独立集的点,之前肯定没考虑过,直接转移到fs∪x,i+1f_{s∪{x},i+1}fs∪x,i+1​不可以加入独立集的点..._pkuwc2018 状态压缩

快速搭建一个网关服务,动态路由、鉴权的流程,看完秒会(含流程图)-程序员宅基地

文章浏览阅读150次。点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达前言本文记录一下我是如何使用Gateway搭建网关服务及实现动态路由的,帮助大家学习如何快速搭建一个网关服务,了解路由相关配置,鉴权的流程及业务处理,有兴趣的一定看到最后,非常适合没接触过网关服务的同学当作入门教程。搭建服务框架SpringBoot 2.1<parent><groupId&...

看懂这篇文章就够了!什么是Redis缓存雪崩、缓存穿透和缓存击穿?五分钟统统搞定-程序员宅基地

文章浏览阅读462次。前言今天的分享主要是讲下这个 redis,什么是缓存雪崩、穿透和击穿。这三个技术问题是我们平时开发工作中和面试过程中,必须要会的知识点,因为目前的互联网系统没有几个不需要用到缓存的,只要用到缓存的话,就需要掌握这三个技术问题。基本上无论哪个老哥去大厂面试,都会被问题这几个问题,所以作为一个互联网开发程序员来说,这个几个技术问题大家是需要搞懂的。而解决这几个问题的方案,通常有布隆过滤器,还有分布式锁。布隆过滤器是1970年的一项技术,距今也有50年了,之所以能够应用至今,说明这项技术还是挺优秀的,

随便推点

生信分析--入门实践一条龙的CWL中文教程_生信分析入门教程csdn-程序员宅基地

文章浏览阅读2.3k次。生信分析--入门实践一条龙的CWL中文教程。关于下载安装所有中文教程,开始学习吧_生信分析入门教程csdn

JavaScript的学习4——面向对象编程_编写一个函数来创建xiaoming:-程序员宅基地

文章浏览阅读177次。前言JavaScript不区分类和实例的概念,而是通过原型(prototype)来实现面向对象编程。Object.create()方法可以传入一个原型对象,并创建一个基于该原型的新对象,但是新对象什么属性都没有,因此,我们可以编写一个函数来创建xiaoming:// 原型对象:var Student = { name: 'Robot', height: 1.2, run: function () { console.log(this.name + ' is r_编写一个函数来创建xiaoming:

前端:webpack-程序员宅基地

文章浏览阅读39次。前端相关基础知识webpackwebpack1.1 什么是webpack1.2 webpack安装安装webpackvue脚手架webpack1.1 什么是webpackwebpack 是一个现代 JavaScript 应用程序的模块打包器(module bundler),分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Sass,TypeScript等),并将其转换和打包为合适的格式供浏览器使用。1.2 webpack安装注意:请先安装node环境we

Kryo序列化实现源码分析_python kryo 实现-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏2次。在使用Kryo序列化之前需要将被序列化的类通过register()方法注册到其中去。在register的过程中,实则是要根据要序列化的类生成对应的Registration,Registration中记录了类的唯一id与对应的序列化类,在Kryo中,默认的序列化对象是FieldSerializer,没有特别指明的,都将以FieldSerializer来进行序列化。public Regist..._python kryo 实现

最全面的AndroidStudio配置指南总结-包括护眼模式-程序员宅基地

文章浏览阅读3.7k次。使用AndroidStudio开发APP已有半年多的时间了,从刚开始的不习惯到慢慢适应再到逐渐喜欢上AndroidStudio,中间的过程颇有一番曲折,现在把自己对AndroidStudio的配置心得总结下来,分享给大家,希望给后来人带来方便。强迫症童鞋的护眼模式设置方法传统模式的编辑域护眼模式的编辑域设置保护视力颜色 #C7EDCC(护眼绿)

【批处理DOS-CMD命令-汇总和小结】-跳转、循环、条件命令(goto、errorlevel、if、for[读取、切分、提取字符串]、)cmd命令错误汇总,cmd错误_cmd errorlevel-程序员宅基地

文章浏览阅读4k次,点赞5次,收藏28次。此文主要研究对代码分支化执行和重复利用的实现。分支化执行指根据中途的实际执行结果决定下一步执行的代码,跳转的代码行号;分支化执行大概分为跳转执行、条件判断执行;因此,分支化执行基本是只执行部分代码,部分代码不执行。代码重复利用的实现,一方面依赖程序调用(详见本人写的CMD命令实现程序调用一文),另一方面基于循环命令。打印goto命令的帮助信息。我们可以看到该命令的参数只有一个label。具体应用方法——在goto命令的下方放一行,开头是英文冒号后边紧跟“分支标识符”,然后再goto所在行后面加上“分支标识符_cmd errorlevel