第一次能把事情做对吗?
—— 软件项目质量管理实践
四川科瑞软件有限责任公司刘余 2007-9-10

摘要:世界管理学大师克劳斯比曾在项目质量管理方面倡导的一个重要理念:“第一次就把事情做对”。该理念的基础是预防,从知识库中的总结贴切的过程,采取合理的方法,配合有效的管理工具,实现零缺陷(Zero Defects)。所谓“第一次就把事情做对”,你完全可以简单地理解为:一次做对。本文将结合笔者经历过的两个典型的软件项目来讨论在软件项目质量管理过程中实现“第一次就把事情做对”这一质量管理梦想的可能性和实现途径。

关键词:软件质量管理,质量保证,质量控制,RUP,MSF,CMMI

第一章软件项目质量管理基本认识

中国软件业发展的曲折历程,决定了一个从底层程序员出生的软件人,必然经过各种不同行业属性的软件项目。与其它产业相比,其管理体会更丰富、更深刻。软件业,特别是中国的软件,发展还很年轻,软件项目管理过程的完善性,无法跟象建筑业这种传统工程管理活动相比。但同样做为项目管理,管理者都关注项目的九大管理领域,即整理管理、范围、时间、成本、质量、人力资源、沟通、风险和采购。针对项目管理三个重要方面T、Q、C,笔者将结合自身软件项目实践经验,讨论‘Q’(Quality 质量)管理体会。

那么,如何理解软件的质量呢?一般定义为:“与软件产品满足明确或隐含需求的能力有关的特征和特征的总和⑴”。有四个含义:1、能满足给定需要的特性之全体;2、具有所希望的各种属性的组合的程度;3、顾客或用户认为能满足其综合期望的程度;4、软件的组合特性,它确定软件在使用中将满足顾客预期要求的程度。

“软件质量管理是保证项目满足其目标要求所需要的过程,它包括编制质量计划、质量控制、质量保证等过程。⑴” 从对它的定义来看,软件项目质量管理包括:质量计划编制、质量保证和质量控制三个过程域。当前,国内质量管理做得较好的小型软件公司只能做到“质量控制”这一层。能建立一套稳定的质量保证体系的软件组织,都是一些大型的软件集团。

软件质量管理的从经济学的角度分析,成本主要包括两方面:第一,预防成本。包括培训、购买工具、方法引进、过程引进;第二,重做成本。包括需求变更重做费用、维护人员薪资福利、差旅费、用户现场实施费。

世界著名管理大师克劳斯比就软件质量管理提出他的核心理念:预防。他提出,所有的过程、质量控制、质量保证都为预防,追求项目的“零缺陷”。在克劳斯比的倡导下,“零缺陷”已经成为国际众多卓越企业的工作标准。克劳斯比有句名言:“Quality is free”。他认为“真正费钱的是不符合质量标准的事情——没有第一次就把事情做对”。在实际的项目活动中,因为那些不符合质量标准的工作,那些没有第一次就做好的工作,必须进行补救,就会使组织产生额外的支出(包括时间、金钱和精力),无形中增大项目成本,造成项目质量损失。

怎么才算是做对事情?《孔子家语》中讲述了一个子贡花钱赎鲁国人的故事:鲁国制定了一条法律赎奴回国,可凭票报销。而子贡赎人后,把那些“收据”、“发票”全部当众撕毁,并声称:愿意自己承担所有的费用。此事在孔子看来,子贡虽然做得“好”,却没有做“对”。因为此举严重影响报销制度,肯于出钱赎买的人就越来越少,影响到政策执行的效果。任何工作只有符合客观要求,才能进入可执行的过程,从而达到预期的效率和效果。做对就是符合要求,而不是好或者最好。

所谓“第一次就把事情做对”,你完全可以理解为:一次做对,这是一个简单的道理,质量管理者将它作为一种管理追求。一个组织能做好这一点,必将有效提升该组织的核心竞争力(看得见,摸得着,拿不走,永存)。安德鲁.卡内基有句名言:“如果把我的厂房,设备,材料全部烧掉,但只要留下我的全班人马,几年后我仍将是一个钢铁大王”。

第二章有体系第一次没把质量管理做对

曾经在托普就职时,笔者有幸参加过淮南市电子政务项目。当时,做为中国IT巨头的托普,在软件过程管理方面,率先通过CMM3级认证(2001年底全球通过5级和4级认证的企业中尚无中国本地企业,通过3级认证的中国企业仅有包括托普在内的两家)。应该说有了Rational Unified Process统一软件过程体系做保障,项目质量不会出现大问题。但是,事实是残酷的:

首先是需求偏差。在政务办公子系统编码已经开始一段时期后,一次列会上环保局的相关人员发现,当时强调的车辆维修管理功能,系统完全没提供;在与信息中心领导偶然交流过程中发现,公众信息门户子系统中的“政务公开”模块,表现形式完全客户需求偏离。如此等等一系列偏差,让我们不得不回头看是哪一阶段出问题:电子政务总体设计方案虽然评审通过,得到用户认可。但子系统的需求评审,完全被忽略。

跟帕金森综合症相似,需求的重新整理,导致大部份功能的重新开发,开发进度严重滞后。3月份应该交付的系统,5月份还在测试过程中,系统的BUG还没修复完。交付物一拖再拖,屡次失信与用户。项目形势异常艰辛,在多次列会上,用户直接表达他们的不满,甚至直接提出合同赔偿,严重影响项目后期的沟通交流。为赶进度,测试人员大部被安排到开发小组。

此时,员工没有成就感,团队士气受到打击。该项目团队的组建本身具有特殊性:从北京、上海、成都以及安徽本地抽调不同角色的开发人员组成。之前团队成员间有沟通,但都是电子方式(Email,SameTime,内部BBS)。虽然都是根据各自的技术特点分配工作任务,但团队组建后发现,相互配合还是有问题,特别是不同区域的团队成员沟通交流,更是发生不小的波折。此时,项目受挫,无疑雪上加霜,甚至出现个别成员离开团队的情况。

最后,交付给用户的软件产品出现严重的质量问题。其中,提交给淮南市信息中心的CMS系统,用户使用过程中发现严重BUG:所见即所得(WYSIWYG)编译器中图片上传出错。这是缺陷是致命,整个门户无法发布有图片的信息。开发人员虽然很快修复这个BUG,但造成的影响已无法挽回。其它“小”BUG不断,维护不断,用户的抱怨电话不断。

小结:在没有实践经验的情况下,“第一次就把事情做对”很难。

1、前期为降低成本,省去质量控制重要环节:需求评审。

在项目整体管理过程中,项目活动认识时没有将需求评审这个重要活动挖掘出来,是此项目管理的严重缺陷。虽然前期做过总体方案设计,方案上已经罗列大量需求信息,但方案不能作为需求基线。这一步省钱的办法,省出以下后果:

Ø        带来后期的大量维护;

Ø        造成用户的不满;

Ø        人员进入维护项目,不仅不能创造新的财富,还要消耗利润;

Ø        重新实现用户的需求,投入更多人力,项目延期;

Ø        低质量、项目延期、项目失败、员工没有成就感、效率低下;

Ø        熟悉的人员离开,影响在职员工情绪;

2、出现质量问题时,项目决策层的Q、C取舍,决定项目走向。

地产新秀万科集团曾提出“质量是我们的底线。当质量与速度发生冲突时,质量第一;当质量与成本发生冲突时,质量第一。”

我觉得项目决策层当时可以主动承担项目延期的违约成本。但在直接经济利益面前,要做到这一点很难。

3、项目实践是对质量保证体系执行力的真正考验。

前程无忧总裁甄荣辉这样描述执行力:“公司要赢利,30%在战略,70%是在执行。因为,找一个好的战略并不是很难的,难的是你能不能非常有效的执行。”把RUP放一边,质量当然无法保证。

第三章找工具质量管理无法落到实处

随着项目实践经验的不断积累,笔者逐渐意识到质量管理工具的重要性。另一方面,要将软件质量管理落到实处,不能不考虑组织结构对质量管理的影响。组织的素质,决定项目的成败。

笔者在写一个《纳税评估系统》项目总结时曾这样写到:“该项目的成功,归结于有效的沟通…… 技术与技术之间需要捻合。单依靠某一技术,不可能为客户提供全方位的服务,更不可能形成产品,占有市场。比如:数据库技术与B/S技术,数据库是客户的存储核心,而B/S窗口是业务交互载体。客户需要的是二者完美的结合…… 这就是我对管理的初浅认识。能够将不同特性的人员捻合,利用先进技术,形成合力、战斗力,为公司创造效益的管理就是好的管理。”现在回想起来,当时的认识是肤浅的,项目“成功”只是某一(些)方面的表现:

该项目基本成功,体现在软件质量特性上有以下几个方面:

Ø        性能:严格按照用户需求实现,包括众多非功能性需求。

Ø        美学性:界面操作友好,以类似Window传统窗口界面Bindow技术实现。

Ø        特殊功能:跨国税/地税征管平台,通过配置,自由切换。

Ø        安全性:独立身份认证、用户操作有详细日志记录。

Ø        可靠性:7x24小时运行,服务器无需人工干预。

Ø        售后服务:凭借地理优势,24小时内响应。

项目成功的另一表现在于:成功引进了VSTS团队开发工具,引进MSF (微软解决方案框架结构)团队开发模型。MSF为项目提供一组建立、开发和实现分布式企业系统应用的工作模型、开发准则和应用指南。为质量保证提供理论基础,为质量控制提供有效工具。结合VSTS团队开发工具(包括Team Architect、Team Developer、Team Tester,以及强大的Team Foundation服务器),融合企业的商业目标,为项目成功的提供了坚实保障。项目按照MSF团队模型所展示的来组织项目团队,包括Program Management、Product Management、Development、Testing、Logistics、User Education,有效实现项目质量控制。

基于MSF提倡的“充分授权和信任”和“各司其职,对项目共同负责”基本原则,与项目重要干系人——税务局共同组建起项目团队。在项目开发进入关键时期,项目务实地进行现场开发,确保需求分析质量,这为项目成功增添又一砝码。另外值得补充的一点:项目80-20原则应用适当,并没有把任务平均分配给每个项目成员,而是考虑到开发人员能力的多样性、稳定性,将主要工作分配给其中几名主要开发人员身上,有利于项目的顺利进行。

在欢呼项目成功的同时,我们不能片面乐观,而忽视两个严重的质量问题:

首先,项目后期出现大量的升级维护工作。有一段时间基本上是每周有一次升级。项目成本直线攀升,包括维护人员的薪资福利、差旅费、用户现场实施费。为什么会出现这种现象?后来通过因果分析图(鱼刺图)发现两个重要的因素:(1)Bug回归测试不够,引发新BUG;(2)系统可扩展性不够,环境稍有变化,系统必须重构。

其次,项目有一次短暂的“重造”过程。项目开发到后期,开发人员花了一周的时间,对指标计算、报盘系统、UI框架进行了较大调整。为什么?虽然开发人员能如期交付产品,但加班赶进度产生的时间成本不能忽略。可以清晰的看出:对设计过程的质量控制,出现了问题。项目到实现阶段的后期,开发人员才发现已经花了大量时间在一个不成功的设计方案上。

小结:有组织提供对质量管理强有力的支持,质量管理才能落到实处。

1、回想当时的组织构成,QA人员职责不明,QC人员跟开发人员同在一个部门管理。公司并没有组建专门的PMO部门,对项目进行统一管理。更没有组织SEPG人员,对公司质量保证过程进行改进。

2、项目的成功与否,是一个模糊概念,不是绝对的。你完全可以用自己的视角去看待项目的成功与否。

第四章思方法如何实现零缺陷

If you don't know where you are, a map won't help.

-- Watts S.Humphrey(IBM软件质量之父)

从以上两个典型的软件项目的质量管理总结中,可以看出:软件质量管理,不容忽视,不容乐观。在知道 “为何去做”软件质量管理后,必须清醒的认识组织当前的质量管理处理什么位置(Where)。以下是笔者结合公司当前形势,对软件质量管理提出的一些改进方案:

第一、树立组织级质量方针,建过程基准。

知道“为何去做”后,接下来就是“如何去做”的问题。这时,我们需要借鉴一起成熟的管理模型,建立组织级质量方针,为组织建立过程基准。当前国际流行(实用的)的标准:Capability Maturity Model Integration(能力成熟度集成模型),非常适合公司目前的软件产品结构的管理要求。它同时可以为公司开辟新战场(如软件外包)提供一张入场券。

第二、建立团队开发模型。

团队开发是软件产业化发展的必然趋势。世界知名IT巨头如IBM、Microsoft纷纷提出自己的团队开发模型。MSF团队开发模型,以其高度集成性、灵性性,已经融入Microsft的多款集成开发工具中。MSF在微软的许多大客户中得以大显身手,比如:瀛海威、中国投资银行、香港跑马场、香港汇丰银行等。据了解,目前在国内已经有众多软件厂商应用MSF。如国家财务软件领袖——用友公司,不但最终使用客户购买用友软件,现在有很多众多系统集商也来购买用友财务软件。

第三、用好管理工具。

没有度量就没有管理。我们需要收集管理过程中每个阶段、每个活动的详细数据,将其组织成有意义的数据表格、质量图表。Team Foundation中强大的工作项管理、缺陷管理、报表功能为管理提供了便捷。同时TFS中团队Portal为团队成员沟通管理也提供有效途径。

第四:建立稳定的质量控制流程。

任何软件开发模型都不一个有魔力的帽子,“人人都可以戴”。组织需要在有理论做指导的前提下,建立起适合自己发展的质量控制流程。如从客户需求到、功能说明、程序设计、设计审核、编码与单元测试、整合、代码走查、功能及系统测试、可用性测试、最后到用户验收的完整过程。

值得一提的一种代码质量控制方法:Code Review 。“是指程序员定期向其他人讲解自己源程序的活动,这个方法被众多公司采用并被认为是一个行之有效的方法。”此法可有效提高程序员代码质量,在相互学习同时及时发现问题,提升程序员设计思想和方法。

第五:加大质量投入

通过加大质量投入,预防质量内、外部损失的产生。质量投入包括两个方面:预防和鉴定。见效比较快的预防措施包括:(1)建立组织级知识文档库,将质量体系的手册、程序、指导书、清单、测试报告集中管理,形成知识库。(2)通过培训、会议,“零缺陷日”等多种方式方法,加强质量宣传。将软件项目质量管理的重要性、方法传送给公司每一个成员。

“质量是芭蕾舞,而不是曲棍球”,只有每一个管理的动作都是标准化的,组合在一起才会产生美感,达到零缺陷。

第五章树追求第一次就把事情做对

“第一次就把事情做对”是一代“世界质量先生”克劳斯比的毕生追求。“做对”是战略,“把事情做对”是执行,“第一次”则是强调效率。

“第一次就把事情做对”不是一个简单量化的质量管理口号,而是一个改变所有组织和个人的有效工作哲学和方法。它强调代价最小,收效最大,达到组织管理的最高境界;它强调建立预防体系,实现无火可救;强调效率最高。

海尔总裁张瑞敏,把一个亏损的企业改造成全球500强跨国企业。他说过这样一句话:“我们所有的质量问题,都是人的问题。设备不好是人不好,零部件不合格是人不合格。我们所有发展不起来的问题都是思路问题,不是缺人是缺思路。”从中,我们可以看到张瑞敏对质量管理的重视程度和决心。

“毫无疑问,人就是一种习惯性的动物。没有什么比习惯的力量更强大。” 就让“第一次就把事情做对”成为组织中每个人的习惯,它会使你的组织得到做事情之外的回报。

第六章参考文献

1.       《削减质量成本——经理人缺陷预防工作手册》 作者:(美)克劳斯比著,杨钢、林海译,人民大学出版社2006出版;

2.       《A Guide to the Project Management Body of Knowledge, Third Edition》 作者:Project Management Institute著,Project Management Institute出版社2004年出版;

3.       《微软软件开发解决方案框架MSF(第2版)》 作者:麦中凡等编著,北京航空航天大学出版社 2003年出版;

4.       《RUP导论(原书第3版)》 作者:(美)克鲁奇特著,麻志毅等译,机械工业出版社 2004年出版;

5.       《组织项目管理成熟度模型》 作者:(美)科兹纳著,张增华、吕义怀译,电子工业出版社2006年出版;

6.       《CMMI——过程集成与产品改进指南》 作者:(美)克里西斯、(美)科纳德、(美)沙恩著,清华大学出版社 2004年出版;

注:⑴ 引用于卢琳生的《软件项目质量管理层次模型》;

第一次能把事情做对吗?相关推荐

  1. 读《第一次把事情做对》有感

    上班的时候,领导在群里发了一个PDF书籍<第一次把事情做对>,被这个书籍名称吸引住了,因为作为程序员每天有开发新任务,解决旧任务的BUG,第一次就把事情做的完全正确几乎不可能呀,觉得很有看 ...

  2. 做正确的事情和把事情做正确

    做事情光努力是不够的,我们还要有效率. 为了可以有效率的做事,我们需要做到: 做正确的事:(效果) 正确的做事:(效率) 把事情做正确: 高效的做事的系统方法是:选择/方法/工具: 事情的选择可以依据 ...

  3. 傅盛:最可怕的不是把事情做差,而是越做越好后被淘汰

    傅盛:最可怕的不是把事情做差,而是越做越好后被淘汰 2018-01-25 敦鸿视界 在2018新榜大会的第二天,猎豹移动创始人兼CEO傅盛作为开场嘉宾发表演讲,就让我们一起来看看他对于认知升级有怎样的 ...

  4. 工作的高明在于:把复杂的事情做简单

    很多时候,我们总是为拥有一个复杂的算法和方案而激动,认为这是高技术,高能力的表现.有的时候,为了表现自己的技术,我们甚至把简单的事情做复杂,把简单流程可以实现的事情设计成看似更加完美的复杂流程.一个高 ...

  5. 怎样才能让最重要的事情做起来更容易?

    "精要主义之父"格雷戈·麦吉沃恩 怎样才能让最重要的事情做起来更容易? "21世纪的史蒂芬·柯维" "精要主义之父" 格雷戈·麦吉沃恩 我们 ...

  6. 人工智能跟脑神经科学没有关系。没有出差错的机会,就没有进化的可能。要想自己把事情做成功,就需要弄清楚事物的本质。...

    ​摘要:科技发展很快,但人性变化很慢!没有出差错的机会,就没有进化的可能.要想自己把事情做成功,就需要弄清楚事物的本质,找到自己领域的"空气动力学".图灵机只解决可计算的问题,不涉 ...

  7. 善用Google日历,让事情做得更高效

    以前我总是以为脑袋够用,从来不用备忘.日程等工具.但事实上我太高估自己的能力,一个日程表.一个事项提醒,或者一个todo list都是十分有用的.在Lifehacker的投票里,人们认为最有用的GTD ...

  8. 米洛个人修炼术:上班效率低事情做不完首先因为这

        我身边的一些同事,尤其是25岁左右的,明明在精力旺盛的年纪,却天天睡不醒,天天打着哈欠上班.作为老员工,讨论问题时候看到他打瞌睡就特别不爽. 如果你是老板,看到总打瞌睡的员工,会怎么想?如果加 ...

  9. 代理 设置wsl_第一次使用WSL我做了什么

    一直想要试试linux系统下,到底是怎么进行操作的,感觉那些命令行操作一直很酷,但是苦于麻烦,也没有闲置的电脑,就没 有用过linux.最近发下win下自动集成了一个简单的linux系统,感觉给我这样 ...

最新文章

  1. iOS Sprite Kit教程之场景的设置
  2. 访问者模式 php,18php访问者模式
  3. 腾讯云安装mysql本地主机名,腾讯云服务器上安装mysql,并用navicat连接
  4. linux sz到指定的机器,linux 机器之间 zssh, rz, sz互相传输讲解
  5. linux调整大页内存,Linux 系统如何进行大页面配置
  6. 高并发中计数器的实现方式有哪些?
  7. 守护线程和非守护线程
  8. Python入门--闭包,工程函数
  9. 我是这样在第一轮筛选简历的
  10. 数据库索引应用(ms-sql)
  11. html表白树代码程序怎么调,抖音表白弹窗vbs代码怎么制作 表白树特效程序代码教程详细介绍...
  12. 干货 | 日均5亿字符翻译量,百毫秒内响应,携程机器翻译平台实践
  13. Codeforces Raif Round 1 (Div. 1 + Div. 2) 1428D Bouncing Boomerangs 贪心+构造
  14. HAProxy 源代码阅读指引
  15. 浅述Docker的容器编排
  16. Python:OpenCV4识别一个蓝色的圆并估算到相机的距离
  17. java erp_用Java如何实现ERP系统?
  18. 【导航链接】计算机科研学习
  19. 模拟系统判断是否是你生日java
  20. buuctf - crypto - Rabbit

热门文章

  1. 升压电路(BOOST)与降压电路(BUCK)
  2. (附源码)ssm校园拼车服务系统 毕业设计211633
  3. li 一行2个图会错乱_2分钟做出的Excel复合饼图,简洁又美观、数据更清晰!
  4. PTC Creo 4.0 M150
  5. T410 Mac OS Lion 指点杆和触摸板
  6. 《涨知识啦41》——半导体中的光吸收
  7. Apk打包-安装过程
  8. 学术英语——学术词汇
  9. matlab小作业答案,MATLAB所有作业及答案
  10. SV学习笔记—覆盖率类型