【IT168 技术文章】
早在20世纪60年代中期,人们就发现软件的生产出现了“问题”,主要表现在生产过程不规范,缺乏管理。其结果就是软件功能薄弱、漏洞众多等问题频频出现,后来,人们在软件工程方法学中引入了工程的概念、原理、技术和方法,这种思想在一定程度上解决了软件生产过程中遇到的问题。但是直至80年代还是没有提出一套管理软件开发的通用原则,软件管理不善、质量低下的问题依旧在大范围内存在。随着软件开发的深入、各种技术的不断创新以及软件产业的形成,人们越来越意识到软件质量的重要性,因此管理学和质量管理的思想逐渐融入软件开发过程中。
序曲:软件质量的困境
2005年11月1日,日本东京证券交易所股票交易系统发生大规模系统故障,导致所有股票交易全面告停,短短2个小时造成了上千亿元的损失。经查明,故障的“元凶”是今年10月为增强系统处理能力而更新的交易程序存在缺陷。
耗费了巨额投入的信息化系统,在预想中本应是提高企业工作效率、为企业创造价值的“法宝”,但为什么转瞬就变成了灾难之源?一切症结都指向了根本问题?软件质量。如果软件质量不过关,后果将不堪想象!!!因此在我们对许多软件开发者(特别是产品提供者)提供的保证进行考察时可以发现一个相似的保证模式:
有限保证
XXXX公司不为任何特定目的提供有关YYYY产品的性能、可靠性或适用性的的保证。XXXX公司不保证该软件及其文档满足你的需求。虽然XXXX公司已对该软件进行了彻底的测试,并评审了文档,但XXXX公司不提供任何有关软件及其文档无错的保证。XXXX公司不对任何意外的、直接的损坏、间接的或随后的损坏、由损伤数据带来的损坏、恢复费用、利润存食和第三方要求承担责任。软件“按现状”登记许可。购买人承担YYYY程序的应用、质量和性能的完全风险。
若在文档或含有YYYY的光盘上发现物理缺陷,XXXX公司将在购买后的180天之内无偿更换该文档或CD,只需提供购买的证明。
在这里,开发者都不声明软件没有缺陷,多数计算机硬件制造商惯常也这样声明。这种拒绝实际上反映了软件质量同其他制造产品(如汽车、洗衣机或录音机)的基本本质不同。这些不同可分类如下:
(1) 产品的复杂性:产品复杂性能够用产品许可的操作方式的数目来度量。工业产品,即便是高级的机器,也不允许由其不同的机器设置组合建立的几千钟以上的操作方式。看一下典型的软件包,人们可以发现上百万的软件操作可能性。确保正确确定大量的操作可能性,对软件产业来说是一个重大挑战。
(2) 产品的可见性:工业产品是看的见的,而软件产品不可见。工业产品中的大多数缺陷可在制造过程中检测出来。此外,通常工业产品中部件的缺失很容易看到(想象一下你的新车缺了一扇门)。然而,软件产品(不管是存放在光盘上还是在硬盘上)的缺陷是看不见的,软件包中的部件可能从一开始就缺失了。
(3) 产品开发与生产过程:工业产品有可能检测到缺陷的阶段是:产品研发、指定产品计划、制造。同工业产品相比,软件产品不能在生产过程的所有三个检测缺陷。能够检测缺陷的唯一阶段是开发阶段。
存在解决之道?
目前,我国软件业正处于高速发展的时期,许多企业已经从艰苦的创业阶段步入到快速成长期。伴随着这一进程,“成长的烦恼”开始困扰着企业。一个个曾一度被放置一边还没来得及解决的“小问题”,已经逐渐演变成妨碍企业进一步发展的“绊脚石”。我国已经入世多年,信息产业竞争更加严峻和激烈,很多企业的高层领导在这种压力下,已经感到企业管理问题业已成为影响企业发展的关键因素,但是由于外部其它因素的影响,又不可能全身心投入到企业质量管理体系的建立和完善工作中去。怎样才能切实有效地解决这些问题,促进产品质量上台阶,成为目前很多软件企业关注的焦点。
企业希望寻求一种简单易行,且一朝投入就可以持之以恒的方式来进行企业的过程改进和质量保证工作。存在这样的方法吗?
曾经有企业认识到"质量"对客户以及对公司的盈利水平的意义,同时专家告诉他们,没有SPC怎么能够叫做现代质量管理呢?他们决定用世界上非常先进的软件度量方式来"做"质量。他的确感到得意,因为他们用昂贵的投资博得了客户的青睐与订单;可没有多久,他们的笑容消失了,因为几个月过后,积累了大量的数据,可没有人对它们感兴趣;效果没有想象的那么好,没能使他们达到所想的"质量"优势。他们开始陷入困惑。
这时,ISO 9000风头渐起。他们又一次兴奋起来,决定与"国际接轨",并花高价让国外的认证公司来"保证"公司的质量。证书挂了起来,他们开始在广告中得意地宣称:我们是业内首家……,我们有了"国际质量"。但是,又没有过多久,他们开始沮丧地换掉了广告语,坐在窗前发呆:我不明白,为什么大家一下子都有了证书?具有国际认证就能够"保证"具有"国际质量"吗?ISO 9000的效果怎么又让我们失望了呢!!!
CMM的渐行渐近再次让他们看到了希望、在质量问题的汪洋大海中又有了救命的稻草…………。可最终的结果呢???
他们开始寻求各方面专家的咨询帮助。
专家说,SPC、Software Metrics、ISO 9000、CMM都是好东西,关键的是你的团队缺乏执行力。企业为什么普遍缺乏核心竞争力的原因是执行力太差。而造成执行力问题的三大原因(文化原因、制度原因和人员原因)中,文化原因是最关键的因素。这是因为:
1、中国是一个人治社会,我们讲究“用人不疑,疑人不用”,能人第一,制度第二,而现代企业制度讲究的是“用人要疑”,制度第一,能人第二。
2、中国是一种清淡文化,我们讲究“大道无术”,缺乏量化管理传统,而现代企业管理讲究“大道有术”?量化管理。
3、中国是一种面子文化,我们讲究“以情理服人”,情在前,理在后,而现代企业是一种利益文化,讲究“以理情服人”,理在前,情在后。
真是这样的吗???其实就此而言本无唯一正确答案,取决于看问题的角度。在我们强调要依据数据说话的时候,可以适当批判“大道无术”,这个时候我们必须大谈“大道有术”。但是我们要清楚地认识到,大道无术,这种说法非常中国化。老子的“大方无隅;大器晚(一作免,似更有道理)成;大音希声;大象无形”不必说了,大道无术的说法也有一种士先器识而后文艺,从心所欲不逾矩的味道。我们当然也记得巴金喜欢说的“最高的技巧是无技巧”。
这里要说明的是,在这里讲的大道无术的“术”主要是讲心术。有些身外之学的技术,如各种职业技术、军事技术、高科技术、体育技术、艺术技巧、医术特别是外科手术方面的技术也包括软件度量技术、SPC技术当然是不能无的。有人说中国文化的一大缺陷不是对于上述技术的过于重视而是过于忽略(所以有时候批判大道无术也不无道理,但是对于“重视”大道无术就做到了吗???)。中国人没有统一的宗教信仰,但是有概念崇拜。人们相信有那么一种大道,掌握了就功能较多了就百战不殆了就不战而胜了。我们谈论大道无术的时候,对这种玄秘之学还是要警惕的。
别总以为只有中国人才这样,在在有相对单一宗教信仰的西方也存在这样的概念崇拜。那就是“银弹 (Silver Bullet)”--在所有恐怖民间传说的妖怪中,最可怕的是人狼,因为它们可以完全出乎意料地从熟悉的面孔变成可怕的怪物。为了对付人狼,我们在寻找可以消灭它们的银弹。
软件项目具有一些人狼的特性,常常看似简单明了的东西,却有可能变成一个落后进度、超出预算、存在大量缺陷的怪物。因此,我们听到了近乎绝望的寻求银弹的呼唤,寻求一种可以使软件成本像计算机硬件成本一样降低的尚方宝剑。 但是,我们看看近十年来的情况,没有银弹的踪迹。没有任何技术或管理上的进展,能够独立地许诺在生产率、可靠性或简洁性上取得数量级的提高。
1996,Brooks发表了一篇著名的论文── "No Silver Bullet: Essence and Accidents of Software Engineering" 。他断言:There will be no silver bullet within ten years。
这文章激起许多软件专家的讨论与争辩,而“No Silver Bullet” 也成为脍炙人口的名词。历经了十年,果然不幸被他言中。
在商学院的课程中经常提到,企业的首要任务是要提高“效能”而不是提高“效率”,提高效能指的是“做正确的事”,只有在我们的路走对的前提下,提高效率(正确的做事)才有实际的意义,否则我们将越来越远离目标。
那么我们需要怎样的道、又需要怎样的术呢?这实际上用几本书才能说清的东西,而对大多数做质量的人员甚至做了一辈子也没有弄明白的问题--那就是?为什么要质量管理?
为什么要软件质量管理?
这是一个大多数做质量的人员甚至做了一辈子也没有弄明白的问题,其实,要弄明白这个问题,必须先要搞清楚另一个问题:你所在的组织为什么会存在?它的目的是什么?
常规的商学院里使用的西方教材会教给学生们这样的知识:股东利益最大化,而国内的教程往往强调的是企业价值最大化。在股东利益最大的前提下,首先要制定战略,然后确定结构,接下来就是建立系统;其中计划与控制就是系统运作的关键因素了。我们从中很容易地就可以发现现代管理之父亨利?法约尔在19世纪就调配好的管理学套餐的"配方"(过程管理),看到世界上第一个"大厨师"弗里德里克?泰勒的手法(测量、评价),也看到了质量管理大师戴明(William Edwards Deming)操作过程(PDCA--戴明环)。
时光冉冉,涤荡尘埃。21世纪的实际情况又是怎样的呢?我们看到国外的企业早就开始站在使用者的角度去改变餐食的配方,强调的不再是股东或自己的良好感觉,而是使用者与供应者的口味与感受。逐渐地,他们发现:自己所以能够驾驰着战车一路高歌猛进、所向披靡,不是因为遵循"正规的"管理原则,而是与时俱进地同客户、员工和合作伙伴商一起上路,同呼吸、共患难;如果要寻找其中的基本结构,你将发现,这类组织的大都遵循着"目的'过程'人员"的解决之道。
而我们的IT企业又都在忙着什么呢?他们对"组织目的"的基本假设与实践又是什么呢?我们看到的是越来越多的企业开始认为组织的目的就是要"赚钱",而且是"用最小的投入获得最大的利益",满足股东的需要就是最大的"政治"。那么无疑,你将会最大限度地、甚至不择手段地去取得财务的增长--通过忽悠客户、压榨合作伙伴、控制员工,填满股东的腰包;所谓组织的"目的",在这里已经被演绎得活灵活现。当然,结果也就可想而知了。那就是"来亦匆匆、去亦匆匆",因为他们"根基"不牢,没有扎根在肥沃的大地里,而是在沙漠里连续上演唐?吉科得勇战风车的滑稽剧。不过,对那些"老板"来说这应该是一场悲剧!
在这种背景下,整个组织必定是风声鹤唳、四面楚歌,因为老板们做事的基本假设,即"人之初、性本恶",所以,劳资矛盾不可能让企业展露笑容;"胡罗卜加大棒"就自然成为管理的重要手段。很难说"检查员制度"的建立是不是基于此,但有一点是肯定的,将管理人员和质量人员演变成"武装警察"、实施苛刻的管理制度绝对是这种体制的产物。
既然这时侯老板说我办企业的目的就是为了"钱",那么质量的目的自然也就成了"为赚钱消除麻烦"的工具,比如,罚开发人员的款、罚质量管理人员的款、罚设计人员的款等。但它毕竟没有销售、财务和生产离"钱"的距离那样近,于是,就自然地排在成本、进度、人员、合作伙伴管理…….之后,当然排为"臭老九"这样的位置还是问题不大的。
其实不难发现,一旦把"组织的目的"定义为"赚钱",就会在如何"卖产品"上绞尽脑汁,也一定会遵循数学和物理学的基本原理去经营管理,比如,产品分等级、可接受的质量水平、如何能偷工、怎样能减料、修修补补等,于是,"质量管理"变成了"数量思维",质量工作也就必然成为一种"数量工作";最后的结局,质量人都要成为"数学大师"。
所以,必须明白的是:我们谈了这么多年的"质量",回过头来,却发现自己还不懂"质量";或者说,质量的最大问题不在于人们不了解它,而在于人们自以为了解它。因为我们原来是在传统的质量智慧迷宫里打转转呢。
骚动与喧嚣,冲动与激情,都是对生活的渴望;足球和篮球,车间和会所,同样是工作的演绎;仿佛"黄河之水天上来",大禹疏导乃正章。中国篮球称霸亚洲,却被飞人乔丹点中要穴:"只有篮球,没有篮球哲学";在软件质量方面,我们是不是更象中国足球,“没有足球,更没有足球哲学”?没有做到大道有术也没有做到大道无术;国际质量控制方法达到高峰的时候,一个人站出来为它把脉:"只有数量方法,没有质量哲学"--他就是菲利浦?克劳士比。 克劳士比指出:"我们基本的工作哲学便是:预防为主,坚持'第一次就把事情做对'的态度(全面质量管理的要素之一),使质量成为一种生活方式。 " 所以,质量管理就是有目的、有计划地创建一种文化或"共同的语言",从而帮助人们把日常工作每次都做对,与员工、客户和供应商的关系都获得成功。因此,作为"一种理念和哲学上的训练和纪律",质量管理能够"把所有这些人带入一种人们能够欣赏和运用的舒畅文化","使自己置身于'诚信'的现实世界的阳光下"。
曾经有一首歌唱道:大海航行靠舵手。因问:舵手航行靠什么?其必曰:工作哲学--一种以客户为中心、结果为导向、数据与事实为基础的预防哲学,一种"第一次就把事情做对"坚定信念;一种指导日常业务获得成功、所有的关系获得成功的工作哲学,一种"有用的和可信赖的"的工作伦理。数据与事实从何而来呢?来源于软件度量技术。
软件度量技术?大道有术
判断和衡量代码质量一直是开发过程中令人苦恼的问题,在同样完成功能的情况下,如何判别一种写法比另一种写法好呢?在代码重构的过程中,如何确定代码质量是在不断的改进当中呢?引入一种设计模式以后,代码真的变的比以前好了吗?
大部分时候我们凭感觉和经验做这些事情,我们使用很多模糊的词语来描述我们的判断,比如这样做以后,代码的可维护性更好,可扩展性提高等等。在越来越注重代码设计的今天,很多人开始使用更感性化,更形而上学的词语来形容软件质量,我们会听到评价软件结构很优雅,带来美的享受,甚至一些设计原则被提升到了哲学高度,:)。
不得不承认这些词语的描述确实很符合我们看到一段高质量代码的心境,但是这些新词语的出现并没有帮助我们解决软件质量判定中遇到的问题,因为这些感性的判定,由于每个人的经验不同,经历不同,所得出的结论也不尽相同。
众所周知,度量对任意一个工程产品研制都是很重要的,度量让人们更加 了解产品,可以评价产品,衡量产品质量从而进行改进。对于软件产品也一样,只有定性的评估是不够的,只有通过定量的评估才可以根本的解决评估软件产品质量这样的问题。然而,软件产品的度量却非常困难,对它的测量可能永远无法做到和物理产品一样的完美,但是,软件测量仍然具有重要的意义。
要度量软件质量,首先需要定义软件质量要素,比如,软件的功能性(functionality)、可用性(usability)、可靠性(reliability)、性能(performance)和支持度(supportability)都衡量软件质量的要素。不过,要真正定量的从技术上度量这些要素,就是非常困难的了。
软件度量工作首先需要确定能够表示软件质量的各种属性和指标;然后,分析软件,收集数据;接着运用公式换算代码的各种指标值;最后,通过这些指标就可以分析代码的质量。确定哪些属性和指标可以表示软件质量,收集哪些数据,如何用公式推导指标,都是软件度量这门科学的研究重点。它所确定的各种软件度量指标为我们了解软件属性,衡量软件质量提供了科学的依据。
软件度量经历了几十年的发展,在软件的各个方面和领域都开发出了各种度量套件。有针对分析模型的度量,体系结构设计的度量,构件级设计的度量,界面设计的度量,以及源代码级的度量等等,要了解这些度量套件如何进行质量测量可以参考相关的资料。不过,这些度量套件并不是都具备实际的操作意义,有些度量就太复杂不可操作,或者脱离实际很难理解。但是也有一些度量套件具备很实际的指导意义。本文打算介绍的构件级度量套件和源码级度量套件都是很有意义的。
软件度量可以帮助我们理解软件属性,衡量软件质量,但是,软件度量并没有真正的去测量软件质量,而是测量软件质量的表现,因此,仍然需要我们去分析确定所测量的指标和软件质量的准确关系。
“大道无术”理念在核心团队的管理的作用通过上面的讨论我们可以发现,真正的执行的根本出路在于对原则的始终追求,是人的问题,因此核心员工是企业最大的资产。
“大道无术”主要是指在核心团队的管理上,让大家围绕一个共同的目标和远景去努力,而不是运用权术或者大棒(制度是必须的,但不是功能较多的,制度也不是银弹)。TCL的领导者李东生说过:“你直接管理的就是十几个人,如果老想把人管住,你一个人想的办法是想不过十几个人的。”他认为,“东方文化氛围里,大部分企业管理者和关键员工对他所工作的环境、内心的实在感觉会比较看重。如果当领导的老是过分依赖管理的权术或者“制度”,可以在某些事情方面、某些项目方面,达到好的效果,但长远来看,会失去团队对你内心的依赖,如果你对管理团队没有‘大道’认同的话,你这个企业的凝聚力就不行”,而“企业竞争力很大程度靠的是团队工作的凝聚力。”
这样的“道”,找到了一个让大家共同兴奋的点,凝聚了一个有个性、创造性、强有力的团队。
并非虚构的故事
一曲“敖包相会”使得内蒙古的敖包名声远扬。去过内蒙你就会知道,原来此“敖包”并非是蒙古包,而是一种由大小石块堆积而成的圆形的实心的包状“建筑”。在敖包上面,竖立有木幡杆,上面还挂有一些五色彩带。在蒙古语中,敖包就是“堆”的意思。它通常建在山顶、湖畔或者滩中醒目之处。据说在敖包旁绕三圈,然后再拣三块石头丢到包上,这样就会得到神灵的庇佑;并且,每年阴历六月举行的“祭敖包”的宗教活动也是蒙古人最隆重的仪式之一。
然而经过考证,敖包先于神学的意义却是一种草原中的导航标志。按理说,建造路标是人人得益的事情,并且,牧民每每遇到路标时奉献几块石头也不是什么难事,然而,放牧时还要留意石块并且一路要携带直到遇到路标,的确是件辛苦的活。更何况有那多人贡献,某个人的几块石头也就无足轻重了。但是如果大家都这么想,那么路标的建设成本的分担就变得棘手了,谁都需要路标,但是谁都有让别人去添砖加瓦自己却坐享其成的心态,最终好事难成。
聪明的蒙古人的解决方案让人拍案叫绝,他们赋予了功能性的路标以宗教的意义,让路过的每个人,都自觉地对发挥路标功能的敖包进行建设,在祈福中,完成了自己的贡献。
敖包的故事告诉我们:
没有信仰,制度就形同虚设;
没有信仰,就不会产生执行力。
我们如何看世界、如何看自己,如何做人、如何做事,这些都是关乎思想和信念的东西。宗教作为人类心智模式的雏型也昭示出:人如果没有信念与价值取向,将得不到幸福;圣人亚理士多德说:受哲学家规范的人永远福足;莎士比亚也借用哈姆雷特的嘴指出:人是灵长动物,区别于动物的东西正是语言和思想。
语言是思想的载体,"共同的语言"实际上传达出的就是一种共同的价值观。"新教伦理"作为一种工作伦理,它调节人们的价值观和信念,创造并维持着美国的资本主义精神和现代社会。同样,语言的不同必然反映出思想的混乱,最终导致行动的混乱和灾难的降临。人类建造"通天塔"的故事不正是向我们昭示此理吗?