企业研发之道:论质量效率和成本
_Toc236545094
企业研发管理的目的
企业研发管理的目的是:开发正确的产品(正确决策),并且正确地开发产品(正确执行)。前者是领导的主要职责,后者是团队的主要职责。
开发正确的产品
所谓“开发正确的产品”是指“开发能够赚取合理利润的产品”。对于企业而言,评判产品“好坏”的最主要指标是该产品产生的“利润”,而不是产品功能的多少强弱。
研发工作主要存在于企业和大学。千万要注意,不可把大学搞科研的方式照搬到企业中来。我看到不少企业从大学里请来所谓的“专家、学科带头人”到企业搞产品研发,结果做出自我感觉良好、却没有人买的东西,把企业亏得一塌糊涂。
政府及社会各界给大学投资很多钱搞科研,允许人们去研发不赚钱的东西,那是因为大学科研机构的主要考核指标是学术水平而不是经济效益。但是企业的职能和大学科研机构的不同,大学科研机构不赚钱不会倒闭,而企业不赚钱就要命了。企业必须开发“能够赚取合理利润”的产品,否则就是错误的决策。
判断一个设想中的产品能否给企业带来合理利润,这绝对不是一件碰运气的事情。不论是开发自主产品还是合同项目,企业研发流程中一个必不可少的重要过程域是“立项管理”。立项管理的目的是:通过规范化的流程,分析并采纳符合企业根本目标的立项建议,使之成为正式项目,并将人力资源、资金、时间投入到项目上,最终获得期望的效益。反之,拒绝不符合企业目标的立项建议,避免浪费公司的资源和机会。
_Toc236545096
正确地开发产品
当企业已经决定开发某个产品时,产品决策过程已经完成,之后进入执行过程。“正确地开发产品”是开发团队的职责,即:
(1)开发团队应当在预定的时间和成本之内,完成质量合格的产品。(基本目标)
(2)开发团队要尽最大努力把产品做得好、做得快并且少花钱。(奋斗目标)
开发团队要想实现上述目标,必须打好以下基础:
(1)要有合适的研发流程,避免开发过程混乱。
(2)开发团队要具备充分必要的工作技能。
综上所述,企业研发机构的主要工作是:一方面要根据市场需求和公司决策“正确地开发产品”,为企业创造效益;另一方面,要持续地改进研发流程和提升工作技能,把前者做得更好。
_Toc236545097
衡量研发优劣的关键指标:质量、效率和成本
评价研发做得好不好,最重要的指标当然是研发产生的经济效益。但遗憾的是,在研发过程中人们无法得知当前项目(或产品)究竟会产生多少经济效益。
拿什么来衡量正在进行的研发工作做得好不好呢?
假设产品决策是正确的,如果开发团队把产品做得又好、又快、又省钱,我们自然认为研发工作做得好。把口语“好、快、省”翻译成为专业术语,就是“高质量、高效率、低成本”。
所以衡量企业研发工作优劣的关键指标是“质量、效率和成本”,企业研发管理的奋斗目标是“提高质量、提高效率并且降低成本”。
“质量、效率、成本”三者天然存在对抗关系。俗话说“一分钱一分货”,人们买东西的时候大多认可“质量越好、价格也就越高”,即高质量意味着高成本。再如俗话“慢工出细活”,言下之意若想获得高质量,干活就比较慢,效率降低了。
古人云:鱼和熊掌不可兼得,舍鱼而取熊掌者也。提高质量、提高效率并且降低成本,犹如“鱼、熊掌和美酒”三者兼得,谈何容易!
物理学中有个富有哲学意义的熵增定律,大意是:复杂系统的各个成分自然趋向于混乱无序,越混乱越稳定。如果要打破混乱,建立秩序,就要赋予系统一定的力量或能量。
熵增定律也适合于人类社会。混乱是事物的最自然状态,秩序不是最自然的状态。但是人们希望社会有秩序,所以要付出代价来建立制度,要有人维持秩序。
如果企业没有研发管理,那么研发机构最自然的状态是“质量越来越差、效率越来越低、成本越来越高”,即最大程度的混乱。这样的状况显然不是人们希望的,所以研发机构必须寻求能够改变混乱状况的力量,这种力量就是“正确的方法”加“坚强的执行力”。
我们只有充分理解“质量、效率、成本”和企业效益之间的关系,才能找到正确的方法来“提高质量、提高效率并且降低成本”。
_Toc236545098
论质量
_Toc236545099
什么是软件质量
词典对质量的定义是:① 典型的或本质的特征;② 事物固有的或区别于其他事物的特征或本质;③ 优良或出色的程度。
CMM对质量的定义是:① 一个系统、组件或过程符合特定需求的程度;② 一个系统、组件或过程符合客户或用户的要求或期望的程度。
上述定义很抽象,人们看了准会一脸迷惘。就让我们用“人的健康”来类比解释软件质量:
古时候人们以为长得结实、饭量大就是健康,这显然是不科学的。现代人总是通过考察多方面的生理因素来判断是否健康,如测量身高、体重、心跳、血压、血液、体温等。如果上述因素都合格,那么表明这人是健康的。如果某个因素不合格,则表明此人在某个方面不健康,医生会对症下药。
通过类比,我们这样理解软件质量:
软件质量是许多质量属性的综合体现,各种质量属性反映了软件质量的方方面面。人们通过改善软件的各种质量属性,从而提高软件的整体质量(否则无从下手)。
质量属性可分为2大类:
(1) 产品专有的质量属性。例如手机产品的专有质量属性:通话质量、重量、体积、耗电量、样式等。
(2) 软件公共质量属性。不管什么产品,只要有软件,就有软件公共质量属性,如正确性、健壮性、可靠性、性能、易用性、安全性、可扩展性、可复用性、兼容性、可移植性、可测试性、可维护性、灵活性等。
表2-1是常见的十个软件公共质量属性,供读者了解。
表2-1 常见的软件公共质量属性
质量属性
描 述
正确性
正确性是指软件按照需求正确执行任务的能力。“正确性”的语义涵盖了“精确性”。正确性无疑是第一重要的软件质量属性。
健壮性
健壮性是指在异常情况下,软件能够正常运行的能力。正确性与健壮性的区别是:前者描述软件在需求范围之内的行为,而后者描述软件在需求范围之外的行为。健壮性有两层含义:一是容错能力,二是恢复能力。
可靠性
可靠性是一个与时间相关的属性,指的是在一定环境下,在一定的时间段内,程序不出现故障的概率,因此是一个统计量,通常用平均无故障时间来衡量。软件可靠性问题通常是由于设计中没有料到的异常和测试中没有暴露的代码缺陷而引起的。
性能
性能通常是指软件的“时间—空间”效率,而不仅是指软件的运行速度。人们总希望软件的运行速度快些,并且占用资源少些。
易用性
易用性是指用户使用软件的容易程度。软件的易用性要让用户来评价。
清晰(易理解)
清晰意味着工作成果易读、易理解,开发人员只有在自己思路清晰的时候才可能写出让别人易读、易理解的程序和文档。
安全性
安全性是指防止系统被非法入侵的能力,既属于技术问题又属于管理问题。一般地,如果黑客为非法入侵花费的代价(考虑时间、费用、风险等因素)高于得到的好处,那么这样的系统就可以认为是安全的。
可扩展性
可扩展性反映了软件适应“变化”的能力。在软件开发过程中,“变化”是司空见惯的事情,如需求、设计的变化,算法的改进、程序的变化等。可扩展性是系统设计阶段重点考虑的质量属性。
兼容性
兼容性是指两个或两个以上的软件相互交换信息的能力。兼容性的商业规则是:弱者设法与强者兼容,否则无容身之地;强者应当避免被兼容,否则市场将被瓜分。
可移植性
软件的可移植性指的是软件不经修改或稍加修改就可以运行于不同软硬件环境(CPU、OS和编译器)的能力,主要体现为代码的可移植性。
一个产品的质量因素可能非常多,我们还要学会识别质量要素(即重要的质量因素):
(1)从商业角度讲,客户最关心的、能成为卖点的质量属性才是质量要素。
(2)从技术角度讲,对整体质量影响最大的那些质量属性才是质量要素。
对于任何一个商业产品,我们首先要识别质量要素,才能给出提高质量的有效措施。如果某些质量属性并不能产生显著的经济效益,那么要少花费精力,只要及格就行。要把精力用在对经济效益贡献最大的质量要素上,而不是一股脑地想把所有的质量属性都做好,否则不仅做不好,还可能得不偿失。
_Toc236545100
企业的质量观念
大凡软件工程教科书为了强调质量的重要性,总是要举一些历史上发生过的重大软件质量事故,例如航天飞机爆炸、核电站失事、爱国者导弹发生故障等等。
学术界喜欢宣扬质量至上的理念,而忽视企业的利益,将质量目标凌驾于企业利益之上,这种做法会误导大量读者。许多技术人员都有“质量越高越好”的观念,这种观念是被教科书灌输的。
质量的最高境界是什么?是尽善尽美,即零缺陷,可是哪个企业能够做到零缺陷?
我曾在2002的著作《高质量程序设计指南——C++/C语言》中宣扬了高质量程序设计的理念,力求使C/C++程序达到零缺陷的质量目标。尽管此书得到了许多程序员的赞同,但是难以在企业中推行。我经过反思之后改变了质量观念:
重视软件质量是应该的,但并不是“质量越高越好”。只有极少数软件应该追求“零缺陷”,对于绝大多数软件而言,企业利益决定了质量目标,而不该把质量目标凌驾于企业利益之上。
航空航天系统对质量要求极高,任何缺陷都有可能导致机毁人亡,所以人们会不惜一切代价去消除缺陷。在发射航天器之前,只要发现任何异常,就会立即取消发射指令,直到异常被消除为止。前苏联做得更过分,许多重大武器系统的负责人都签了生死状,系统研制成功则获得英雄勋章,失败则被枪毙。在这种压力下没有人敢对质量有一丝松懈。
上述严格系统毕竟是少数,世上绝大多数商业软件的缺陷并不会造成机毁人亡这样的重大损失,否则没有人敢从事软件开发了。迄今为止,我认识的所有软件人员都没有因为软件缺陷而坐牢或被枪毙。
在日常工作中,我们接触过的软件几乎都是有缺陷的,即便是软件业老大Microsoft,它的软件产品也经常出错甚至经常死机,人们骂几句后还会照样使用这样的的软件。
如果企业销售出去的产品质量比较差,轻则挨骂,重则被退货甚至被索赔,因此为了提高用户对产品的满意度,企业必须提高产品的质量。但是企业不可能为了追求完美的质量而不惜一切代价,当企业为提高质量所付出的代价超过收入时,这个产品已经没有商业价值了,还不如不开发。
企业的主要目标是为了获取合理的利润,而不是生产完美无缺的产品。产品质量太低了或者太高了,都有可能不利于企业获取利润。企业理想的质量目标不是“零缺陷”,而是恰好让广大用户满意,并且将提高质量所付出的代价控制在预算之内。
事实上,在合法经营的前提下,“质量高低”和“企业效益高低”有四种对应关系:
Ø 质量提升,效益增加。(人之常识)
Ø 质量降低,效益下降。(人之常识)
Ø 质量提升,效益下降。(出乎意料)
Ø 质量降低,效益增加。(出乎意料)
前2种符合人之常识,而后2种不符合人之常识(出乎意料),但却客观存在。
_Toc236825198
质量与效益关系之一:质量高↑效益高↑
若产品质量提高(比自己的老产品或者比竞争对手的产品质量高),一般会使企业产生更高的效益,这符合人们的常识。
一、产品质量提高,直接效益提高
通常产品质量更高,售价也更高,预计的单价利润也更高。如果产品的“质量和价格”匹配合理,在消费者的购买力范围之内,消费者倾向于付出更多的钱购买品质更好的产品,只要消费者觉得值。尤其是涉及健康、安全等领域的产品,更是如此。
例如牛奶是老百姓的生活必需品,2008年中国发生了毒奶粉事件,全国人心惶惶。老百姓都在寻找高品质、让人放心的牛奶。
富裕阶层直接花高价买进口奶粉(高质量),一度导致进口奶粉脱销,这是一类“高质量产生高效益”的现象。
普通老百姓虽然买不起进口奶粉,但是也愿意多付一些钱买更好一些的国产牛奶。此时哪个产品质量高、企业信誉好,赚钱就多。
有一天我在超市里买鲜牛奶,每个厂家都说自己最近的牛奶没有参三聚氰胺,我不敢轻信,厂家会不会把积压的问题牛奶换个新日期呢?。促销员向我推荐某个牌子的牛奶,见我犹豫,就说:先生您放心地买,绝对没有三聚氰胺,为了答谢顾客,我们买一送一,您多划算那。
听促销员说“买一送一”,我赶紧放下牛奶就走。我的想法很简单,如果是好牛奶,此时应该涨价,只有差的东西才“买一送一”。
“便宜没好货、好货不便宜”,是大众消费心理。所以产品质量提高,使得消费者的购买几率以及单价利润更高,直接提升总销量和总利润。
二、产品质量提高,间接效益提高
如果消费者买了高品质的产品,而且觉得值,他可能会多次购买这个品牌的产品,同时会向他的亲戚朋友推荐这个牌子。
例如我有个亲戚喜欢SONY的相机和笔记本电脑,不知不觉已经买了十多个了,每次用新产品都赞不绝口。导致我家人受他影响,也跟着买SONY的相机和笔记本电脑。
我家人喜欢“宜家的家居产品”,同样也影响那位亲戚,他从外地开车到上海,总要到宜家买点东西带回家。
即使消费者当时买不起高品质的产品,他也会因为喜欢和羡慕而长期关注这个品牌,而且暗暗下决定:等咱将来有钱了,我也买个XX。
“高品质”会给消费者留下良好印象,为该产品乃至该企业带来“美誉度”,从而为企业带来了长期的间接效益。
三、高档产品,带来高额利润
高档产品的特征是:其质量和成本比普通同类产品高一些,但是售价高很多。此时“质量、成本、价格”之间不是等比例的,可能质量提升了50%,成本增加了100%,售格却增加几十倍、上百倍。
当高档产品“高”到普通人消费不起,但是内心羡慕的时候,就叫“奢侈品”。例如普通的衬衫、皮包售价百元,而高端的衬衫、皮包售价上万元,成为奢侈品。
高档产品凭啥卖那么贵?
主要凭:
Ø 技术门槛高。例如CPU的主要原材料是硅和铜,到处都是,一个CPU的原材料成本至多1毛钱。可是中国没有一个企业能够使1毛钱的硅和铜变成神奇的CPU,但是Intel和AMD做得到,于是卖千元1个,售价比成本高1万倍。我们技不如人,只能说“I 服了You”。
Ø 经营门槛高。有些奢侈品的技术门槛很低,但是经营门槛很高。例如卖几万元的衬衫和皮包,就在中国或非洲制造,不存在技术问题。我们贴上本地牌子只卖100元,LV贴上牌子就卖几万元。世上绝大多数男人无法理解女人为什么对LV的皮包朝思暮想,而且即使买不起也在想。
Ø 稀缺性。我老家农村造个不错的三层楼房只要10万元,而在上海相似质量和面积的房子则卖1000万。不是技术问题,也不是牌子问题,主要是上海土地稀缺导致房价比农村高很多倍。男人找一个美女做朋友或老婆,要付出很高代价,那也是应该的,因为美女稀缺。让你找一个不稀缺的、代价很低的,你又不愿意了。
高档产品那么贵,为什么还有很多人购买?主要因为:
(1) 商品经济越发达,富人就很多,当今社会有庞大的富人消费群体支撑高档产品市场。
(2) 高档产品不仅仅提供产品功能,而且提供了与众不同的精神享受。精神享受是难以用价格衡量的。不管是富人还是普通老百姓,人们内心总是有购买高档产品的欲望,一旦有机会,忍不住要奢侈一把。
当产品的价值超出了“市场普遍认可的功能价值”时,多出的那部分叫“附加值”。高档产品的主要利润来源于这个“附加值”。
一斤荔枝的价值是多少?从功能价值角度讲,市场上一斤荔枝的价值大约10元钱。若荔枝价格太高了,老百姓就不买了,可以找其它水果替代。
一斤荔枝的“精神享受”值多少钱?那就要看谁享受了。“一骑红尘妃子笑,无人知是荔枝来”,这时一斤荔枝价值“千金”。唐玄宗把心思都用在取悦杨贵妃,以至于把大唐帝国差点毁灭了,这些奢侈品的成本达“亿金”。
大部分企业希望自己生产、销售高档产品,以获取更高的利润。但是你不能一厢情愿地把产品划分成为“高档、中档、抵挡”,一定要根据消费群体的特征来制定对策。
如果消费群体中“穷人和富人”混杂在一起买相同品质的产品,而且不同财富阶层的人希望买到不同品质的产品,那么把产品分档次才有意义,这叫细分市场。
而有一些产品是不能根据消费者的财富来划分档次的。例如学校的教科书,不管你来自富家庭还是穷家庭,只要是学生都要读相同的书。
对于大多数软件企业而言,软件产品很难划分“档次”,但是“收费服务”可以划分“档次”。你不能把卖给富裕客户的软件产品的质量有意弄高一些,而把卖给普通客户的软件产品的质量有意弄低一些。在同一时刻,所有客户购买的软件产品的质量理应都是一样的。如果软件企业想获得更高的附加值,要设法为客户提供“不同档次”的“收费服务”,供客户选择。
世上的高档产品数不完,老百姓不可能时时进行高档消费(否则就是败家子)。对于一个家庭而言,什么是“最值得”的奢侈消费呢?
我认为一个家庭最值得的奢侈消费是,把太太送到服务质量最好的医院生小孩,哪怕这个医院收费比其它地方贵5-10倍。我在不富裕的时候,还在愁着养活公司的时候,就积蓄了这笔钱,用在了这个地方,没有一丝心疼和计较。
从生产到出院,可能是女人一生中最脆弱、最恐惧的一周时间,如果多花钱能够换来最大程度的安全和安慰的话,还有什么比这个更值的?天下当丈夫的,可要记住啊。
_Toc236825199
质量与效益关系之二:质量低↓效益低↓
产品质量低,导致企业效益低,这符合人之常识。
如果产品A比产品B的质量好一些,虽然A比B贵一些,但是贵得合理,若A和B都在消费者购买力之内,那么消费者倾向于选择A。因为质量高一些的产品更让人放心,而且更加有面子。
如果消费者能够清楚地判断待购产品的质量,基于“放心和面子”双重原因,在购买力允许的情况下,消费者购买高质量产品的几率大大高于低质量产品。所以质量低,消费者购买几率低,导致效益低。
如果消费者在购买时不能识别产品的质量,那么购买的随机性比较大,影响购买的因素就比较多。倘若消费者购买之后发现产品有比较多的缺陷,觉得很不值。消费者会非常恼火,他会要求卖方维修、退货甚至赔款,此时卖方将为低质量付出代价。如果卖方通过各种方式逃避了责任,那么消费者就会通过各种途径报复,导致卖方信誉降低,购买者更少,最终导致效益降低。
_Toc236825200
质量与效益关系之三:质量高↑效益低↓
产品质量提高了,反而使企业的效益变低了,这不符合人之常识(出乎意料之外)。但这种情况却是普遍存在的,真是因为不符合人之常识,企业经营者更要冷静分析,避免好心干坏事。
一、产品质量提高了,但是多付出的成本却无法转嫁出去。
为了提高产品的质量,开发方多付出了成本(时间、精力、资源等都可以折算为成本),这个成本要设法转嫁出去,否则开发方亏了。
(1)要么把产品售价提高,抵消多出来的成本,至少保持单机利润不变。但是如果消费者的购买力有限,卖方提价后导致购买者少了,这样总销量降低,总效益也下降。
(2)要么保持产品售价不变,由于成本增加,单机利润降低了,但质量提高肯定会增加吸引力。如果销量因此而大大增加的话,也会使总效益增加。但是如果消费群体总数有限,即使增加了吸引力,也没有增加总销量,由于单机利润降低了,总效益也下降。
所以企业一定要分析“消费者是否愿意为产品质量提升而多付钱”!否则质量过剩,吃力不讨好。
二、产品质量提高了,再次消费机会减少了。
由于产品质量提高了,如果导致消费者再次消费的机会(如维护、更新换代等)大大减少了,也会使企业效益降低。
设想一下,如果所有汽车的质量极高无比,使用寿命长达100年。由于质量极高,价格也极高,能买得起的人很少(销售总量很有限),不利于销售。如果我买了汽车,传给曾孙都还能用,期间100年所有汽车公司都无事可干,会饿死的。
汽车的使用寿命一般设定为10年,人们把10年当一代来看,隔代的人消费观念会发生巨大的变化,所以10年几乎是人们更新汽车的最长时间,普通汽车的使用寿命就没有必要超过10年。
再如电脑CPU几乎每18个月更新换代,目的也是促使人们及时地再次消费。
产品质量太低了卖不出去,质量太高了却使再次消费机会减少了,所以企业一定要用心设计“恰如其分”的质量。
三、为了提升产品质量而消耗更多时间,导致失去了重要的商业机会。
有些产品上市没有明显的时效性,多花些时间提升质量一般不是坏事情。
但是有些产品上市有明显的、甚至严格的时效性。例如一年只有一次销售旺季,错估了本季,只能等到明年;例如重大项目招标有截止时间,晚于截止时间你再来竞标就无效。
倘若你比对手多花了10%的时间,使你的产品质量比对手高10%,但是你因此错过了商业机会,这就太不值得了。
如果你为了赶时间,急急忙忙地比对手先推出一款到处是毛病的产品,结果把品牌给毁了,同样也太不值得了。
所以对于有时效性的产品,企业一定要综合考虑“质量和时间”对效益的影响,拿捏分寸。
上述是“质量提高导致效益下降”的三种典型情况,还有一些非典型情况。有一次我给中山大学管理学硕士讲课,让学生们自己举例说明“质量提高了反而对企业不利”的情况:
A同学说:企业为了打造品牌,付出很大努力把产品质量大大提高了,但是价格不提高。消费者太高兴了,这辈子没有见过这么物美价廉的产品,结果高兴过头,就像范进中举那样中风了了,或者抢购的人太多以至于受伤。企业还得赔偿医疗费,亏大了。(读者权当笑话)
B同学说:如果企业做出物美价廉的产品,把竞争对手们打趴下了,搞得他们没有饭吃,他们就会联合起来,把你干掉。企业老板的命都没有了,损失太大。我当时听得目瞪口呆,叹了一口气:可见广州治安之差啊。
_Toc236825201
质量与效益关系之四:质量低↓效益高↑
在合法经营的前提下,低质量的产品有可能比高质量产品创造的效益高得多,这不符合人之常识(出乎意料之外),但这种情况也普遍存在。
出现这种现象的主要原因是:在不危害健康、安全的情况下,购买力弱的群体倾向于购买质量低一些,但是更加便宜的产品。
例如:我的父母经常买便宜的低档产品,怎么劝都改不了。咱们父母辈苦惯了,即使现在不差钱了,也该不了“买便宜货”的习惯。
我在农村长大,上大学之前没有穿过皮鞋,因为穷买不起皮鞋。80年代中后期和90年代初期,温州大量生产便宜的皮鞋,只卖8元钱一双。这下我穿得起了,农民们也可以穿着皮鞋到田边溜达了。走着走着,到了第8天,脚底很凉,抬脚一看,鞋底没了。
广大消费者很生气,都骂温州货,温州货一时成为“假冒伪劣”的代名词。有一天我遇到一个温州人,大家都讨伐温州货。没想到他理直气壮地说:谁说温州货是“假冒伪劣、欺骗消费者”?我们从来都是明码标价,卖8元一双的皮鞋,你还指望能够穿800天?你这只自欺欺人!你要是有钱,就买800元穿800天的。你没有钱,也可以买8元穿8天的,很公平合理嘛。
大家顿时无语,此话有理啊。只要卖方是合法的,不有意欺骗消费者,低质量产品低价格,高质量产品高价格,消费者可以根据自己的购买力去选择,这是公平买卖。
中国的富人很多,能够支撑高档产品市场。而中国的穷人实在太多了,所以有更加庞大的低档产品市场。
我认为低档产品的存在是合法合理的,经营好了也能赚大钱。但我不鼓励企业长期做低档产品,因为不是长久之计,不能使企业健康长久地发展。低档产品的门槛太低,很容易招来太多竞争对手,导致无序竞争而无利可图。你卖的皮鞋8元钱穿8天,难保不会出现一个更狠的,只卖6元钱穿6天。随着社会的发展,人们的收入会不断增加,人们自然会购买质量更好的产品。你总不能指望穷人越多越好吧。
企业和消费者都不能鄙视、敌视低档产品。质量高得什么地步,和企业的开发能力,以及消费者的购买力都有关。很多知名企业在刚成立的时候,由于研发能力有限,只能生产低档产品。后来随着能力提升,才逐渐提升产品质量。你看看现在的温州皮鞋多好多贵啊。
_Toc236825202
全面软件质量管理模型
质量的死对头是缺陷,缺陷是混在产品中的人们不喜欢、不想要的东西,它对产品没有好处只有坏处。人们常说的Bug就是缺陷的形象比喻。
显然,缺陷越多质量越低,缺陷越少质量越高,提高软件质量的基本手段是消除软件缺陷。
让我们看看中国古代郎中治病的故事,受点启发。
在中国古代,有一家三兄弟全是郎中。其中老三知名度最高,二哥次之,大哥最低。人们好奇,问老三:“你们兄弟三人谁的医术最高?”
老三回答说:“我常用猛药给病危者医治,偶尔有些病危者被我救活,于是我成了全国名医。我二哥通常在人们刚刚生病的时候马上就治愈他们,临近村庄的人都说二哥是好郎中。我大哥不外出治病,他深知人们生病的原因,所以能够预防家里人生病,他的医术只有我们家里才知道。”
上述故事里,郎中三兄弟是三种治病方式的代言人。相似地,提高软件质量也有三种方式。
一、老大治病方式
老大治病的方式最高明,如果人们能够预防生病的话,那么没病就用不着看医生了。提高软件质量最高明的手段是:在开发过程中有效地防止工作成果产生缺陷,将高质量内建于开发过程之中。主要措施是“不断地提高技术水平,不断地提高规范化水平”。
二、老二治病方式
即使一个人严守养生之道,身体状况良好,但总是会意外地生病的,生了病就要去看医生。老二治病的方式就是医院的模式,病人越早看病,就越早治好,治病的代价就越低。同理,在开发软件的时候,即使人们的技术水平很高,并且严格遵守规范,但是人非机器,总是会犯错误的,因此无法完全避免软件中的缺陷。那么怎么办呢?
当工作成果刚刚产生时马上进行质量检查,及时找出并消除工作成果中的缺陷。这种方式效果比较好,人们一般都能学会。最常用的方法是技术评审、软件测试和过程检查,已经被企业广泛采用并取得了成效。
三、老三治病方式
老三治病的方式代价最高,只能是不得已而为之。可在现实之中,大多数软件企业都采用老三的方式来对付质量问题。典型现象是:在软件交付之前,没有及时消除缺陷。当软件交付给用户后,用着用着就出错了,赶紧请开发者来补救。可笑的是,当软件系统在用户那里出故障了,那些现场补救成功的人倒成了英雄。
四、全面软件质量管理模型
根据上述事例和分析,我们提炼出直观的“全面软件质量管理模型”,如图2-1所示。该模型的主要措施有:
Ø 质量要素和目标分析。从商业利益和技术角度识别哪些质量属性是本软件的质量要素,给出各个质量要素的恰当目标。这样相关人员可以把精力集中在改善质量要素上,既要使客户感到满意,又要使开发方承受得起。
Ø 技术评审。通过同行专家对工作成果的评审讨论,尽早地发现工作成果中的缺陷,并帮助开发人员及时消除缺陷,从而有效地提高产品的质量。技术评审可以在任何开发阶段执行,不必等到软件可以运行之际,越早消除缺陷就越能降低开发成本。开发人员能够及时地得到同行专家的帮助和指导,无疑会加深对工作成果的理解,更好地预防缺陷,一定程度上提高了开发生产率。
Ø 测试与纠错。一旦完成某个软件模块,开发者要先进行自我测试,然后请测试员测试。若测试发现缺陷,开发者要及时纠错。
Ø 过程检查。也叫质量保证,实质就是检查项目的“工作过程和工作成果”是否符合既定的规范。符合规范的工作成果不见得就是高质量的,但是明显不符合规范的工作成果十有八九是不合格的。在执行过程检查的时候,如果发现问题,应该记录在问题跟踪工具中,以便问题得到及时处理。
Ø 缺陷(问题)跟踪。人们在技术评审、测试、过程检查时,可能发现不少缺陷(或问题),应当使用缺陷(问题)跟踪工具,便于相关人员及时处理缺陷,随时了解缺陷的状态变化。
Ø 持续提升企业的技术水平和规范化水平。这是企业要长期坚持的内功,不要指望速成。内功打好了,无论什么项目(产品),都能够实现内建高质量。
_Toc236545102
论效率
_Toc236545103
加快进度的办法:加入,加班,提高效率
假设一个软件项目原定10个人6个月完成,现在情况发生变化,必须在3个月内完成,该怎么办?通常我们想到的是“加人、加班,或者提高效率”。
一、加人
首先想到增加项目人员。项目时间缩短一半,即进度加快一倍,那么应当增加一倍的人员。这个法子有什么依据?
依据来自于“民工作业”。如果一个民工花2天时间挖完一块地,那么2个民工可以在1天时间挖完那块地。纯体力劳动大体有这样的规律,在不增加管理复杂度的前提下,增加N倍的劳动力,可以使进度加快N倍。
尽管当今软件人员收入不高,干活挺累,已经沦落为“软件民工”。可软件开发是智力劳动,不同于体力劳动,这个性质没有变。增加软件项目的人员并不见得就能加快进度。
假设增加了一倍的新手到软件项目中,情况会怎么样呢?
(1)老手指导新手干活,消耗了老手的精力。
(2)新手一边干活一边制造很多Bug,消耗老手更多的精力。
所以在新手没有成为老手之前,这个项目的进度反而不断被延误。
那么给项目增加一批同等熟练的老手,情况会怎么样呢?一般来说进度的确会加快。可是公司里面的老手总是有限的,把老手们都调集到某个项目,那么其它项目该怎么办?这是“拆东墙补西墙”的办法。
即使公司有充足的人力资源,也不能使太多的人力资源集中到一个项目。原本10个人的项目,倘若增加到1000人,是不是只要用1%的时间就可以完成项目?
不能,估计这辈子都完成不了项目。因为1000个人成天忙着相互认识、相互吵架、不断制造麻烦,没法干活了。
对于智力劳动的项目,增加人员势必增加管理复杂度(不是等比例增加),当人数达到项目领导的管理能力极限时,再增加人员就会使项目的进度和质量倒退。
遗憾的是,国内绝大多数软件项目经理的管理能力不超过10个人。企业领导企图招聘更多的人员去做更多、更大的项目,这是非常危险的,因为智力劳动不适合于用“人海战术”。
二、加班
加班是通过“增加人们的劳动强度,从而加快了进度”。加班有优点也有缺点。
先谈优点。
加班没有增加管理复杂度,操作起来最简单。适度的加班(例如加班1-2小时)并不会使人劳累过度、伤害健康、乃至猝死。
如果是自己分内的工作没有做好,自己加班弥补过失是应该的。有些年轻员工下班没有事情可干,与其呆在宿舍里面玩游戏,还不如在公司里干活。既对公司有利,又让自己进步,顺便晚餐费和车费也省了(通常公司支付)。如果由于突发事件需要晚上或周末加班,公司会给补贴,也可以调休。
所以合法合理的适度加班是加快进度的有效措施。
再谈缺点。
加班时间不能太短也不能太长。
加班时间太短,没有效果。例如你加班10分钟,等你把加班的准备工作做好了,刚进入状态时,就已经结束了。
加班时间太长了,得不偿失。如果你晚上加班8小时,那么之后几天你要睡N个8小时才能使自己恢复正常状态。即使你年轻力壮,可以连续疲劳上班,你的工作质量会下降。
合理的加班时间应该是上班时间的20%至40%(上限)。
反对长期不合理的加班。
首先,不合法的加班,肯定要反对并且要禁止(2008年,人们震惊地发现山西煤窑仍然出现旧社会包身工现象,窑主竟然让童工们没日没夜地干活,真是该杀)。
不合法加班这种情况在软件企业比较少见,但是不合理加班却随处可见,已经成为行业病态。
例如公司接太多项目,或者项目计划完成日期明显不合人理,有太多不可能完成的任务,让员工们疲于奔命;公司管理太混乱,公司领导不花精力去找出问题、解决问题,却依赖人海战术和疲劳战术,只要比竞争对手晚些累死,就是胜利。
有些公司几乎每天加班,导致员工一周时间与家人相处只有几小时。从周1到周5,你早上7点迷迷糊糊出门,9点前到公司上班,晚上10点回到家,闷头就睡。到了周6,本该是家庭度周末的时间,你又要到公司加班。周日你终于可以休息了,一觉睡到中午。你和家人相处的时间只有周日下午和晚上那几个小时。
你加班若干年后,钱挣来了,健康没了,家人陌生了。这人生过得有什么意义!
如果一个企业长期不合理地加班,企业领导要么管理能力太差(他自己也鞠躬尽瘁),要么太贪婪、心太黑。
企业家的责任不仅使企业活下来,还要使企业健康长久地发展。这里“健康长久”意味着企业全体人员能够安居乐业,否则哪来的健康长久。
企业长期不合理地加班,明显是企业领导失职。企业领导若不能使员工们安居乐业,就无脸称为“企业家”,至多是经理人。
三、提高效率
既没有增加人员,也没有增加劳动强度,通过提高效率的方式来加快进度,这是最佳方法。
提高效率意味着在单位时间内产生了更多的成果。并不是你动作加快了,就能提高效率。提高工作效率的前提条件是所有工作成果的质量必须合格。否则,你干活越快,产品中的缺陷就越多,那么用于测试和维护的代价也越高,得不偿失。
_Toc236545104
如何提高效率
提高效率不是喊口号那么简单,在不对质量和成本产生负面影响的前提下提高工作效率,这才是真本事。
提高效率的常见措施如下:
² 提高项目成员的工作技能,包括技术能力和管理能力。显然,工作技能提高了,肯定比过去做得更好、更快。即使组建项目团队时每个成员的技能都是合格的,每个人仍然需要不断学习,提升自己的能力,无论对于项目还是人生而言都是有益的。项目经理应当组织一些有针对性的培训(外聘培训或者内部培训),提高项目成员的工作技能,使他们在开发产品时不仅做得好而且做得快。
² 制定合适的流程规范。流程规范定义了团队的工作步骤和规则,如果过程混乱,做事颠三倒四的话,势必降低生产率。世上并不存在放之四海而皆准的流程规范,团队领导应当制定(或采用)适合于本项目的流程规范,并随着项目进展加以适当优化。
² 反省过错、不二过。过去犯过的错误,在新项目中又重复犯错,然后重复纠错。这种浪费简直是愚蠢。“反省过程、不二过”的意义和方法详见第1章第6节“如何使企业持续进步”。
² 成果标准化和复用。在新项目开发过程中,不可能所有的事情都是全新的、需要从零开始做起。如果能够找到过去已经实现的同类成果,拿来就用,或者简单修改就能用,那该多快啊。这就是成果复用,可以大大提高效率。人们在工作的时候,要设法把共性成果提炼成为标准件,以便将来可以直接复用。“成果标准化和复用”的意义和方法详见第1章第6节“如何使企业持续进步”。
² 使用合适的开发工具和管理工具。工欲善其事,必先利其器,使用好的工具无疑有助于提高人们的工作效率。国内开发人员都会使用最新版本的开发工具(既然都用盗版,那就盗最先进的)。然而管理工具就难选了,功能复杂号称最先进的管理工具对于大部分中小企业而言不见得合适(即使买得起或者盗得起,也可能用不起来)。企业领导应当根据本企业的规模、复杂度、经济实力等因素,选择合适的管理工具,并且要坚持使用才能提高团队的效率。
_Toc236545105
论成本
_Toc237140838
软件企业的主要成本
软件企业的主要成本分两类:“物的成本”和“人的成本”。
由于软件企业没有制造过程和物流过程,相比于制造业而言,大大地省了“物的成本”。一般有设备成本,办公场地成本,和日常办公消耗等。
软件公司的主要成本是人力资源成本,主要用在营销、开发和维护三个方面。
软件公司一般舍得在营销和开发方面投入成本,期待产生更大的效益。软件产品开发完成卖出去后,通常都送给客户一定时间的免费维护服务。大部分软件公司视“维护成本”为净亏损,所以都在寻找降低维护成本的措施。
维护工作大体可分两类:纠错性维护和改善性维护。
如果开发环节的测试和纠错做得不好,留下很多缺陷,只好在维护期间不断修补软件。那么纠错性的维护代价很高(显然高于开发过程的纠错代价)。
如果开发环节的需求和设计做得不好,后期修改某个功能,牵一发而动全身,那么改善性的维护代价就很高。
即使开发团队在“需求、设计、编程、测试”方面的能力不错,但是如果营销部门承接了太多的开发项目,导致开发力量过于分散,而使哪个项目都做不好,那么后期的维护代价必然很高。
所以降低维护成本的办法不在维护环节,而在“开发环节”和“销售环节”。有诗为证:汝果欲写诗,功夫在诗外。
人力资源成本和工资的关系
人力资源成本 = 人员工资 * 成本系数。
成本系数是多少?它可能是大于零的任何数字。
一般情况下,正常企业的成本系数至少。雇主除了给雇员支付工资之外,还要为他买设备、支付办公消耗、缴社保金等。
成本系数越高,意味着办公条件越好,或者福利越高。当成本系数高到离谱的境界,表明出现了贪污腐败。例如一个官员的法定年薪10万,但是单位为他支付了1000万的成本,成本系数高达100。不用侦查就知道,这家伙可能贪污、挥霍了980万元。
成本系数越低,意味着福利越低。如果成本系数等于,即雇主不必支付除工资之外的任何成本。这个工作性质要么是“钟点工、临时工”,要么雇主极其抠门,把长期雇员当做“钟点工、临时工”。
如果成本系数小于。表明雇主发给雇员的不是全薪,而是白条。这事情经常发生在民工身上,只好麻烦政府领导为民工讨债。
_Toc237140839
上班要对得起几倍工资?
人们常说,上班要对得起良心。这句话绝对正确,不光是上班,人在任何时候做任何事情都要对得起良心。
上班族又说:上班对得起工资就行。这句话肯定错误。
企业为你支付的成本至少是你工资的倍,如果你干活只对得起倍的工资,那么企业岂非亏了倍的工资!
那么改一下,上班对得起倍工资就行。这句话也不行。
如果你的贡献只有倍工资,你自己拿走了倍工资,剩余倍工资抵消了成本,企业得到的利润为零。企业不赚钱,光陪你玩啊。
那么再改一下,上班对得起倍工资总行了吧。这句话也不行。
你自己拿走倍工资,扣除成本,好歹也为企业贡献了倍工资。可是企业要发奖金啊,要投入再生产啊,结果把钱用光了,企业老板没有赚到利润。你总得让老板也挣点钱吧。
所以上班至少要对得起倍工资。你拿走1份,扣除成本1份,用于奖金和再生产1份,老板得1份。
_Toc237140840
省钱的困惑
2001年初,我在某电信设备公司工作期间,发现公司的电信网管项目总是购买国外的网管软件平台。每年这个平台的采购费达数百万元,多年累计起来超过了千万元。我认为凭公司的研发能力,我们能够在2年时间内开发出类似功能和质量的软件平台,自主研发的成本二、三百万元就可以了。以后就不必购买国外软件平台了,大大节约了研发成本。
于是我写了email给公司的研发副总裁,向他说明问题,并给出了节约成本的建议。
第2天早上,副总裁秘书就通知我说“今天晚上老板约你谈话”,看来效率很高。我很高兴,内心提前做好了新官上任的准备。
我走进老板办公室,老板第一句话就给我拨了冷水:我约你谈话,不是因为采纳你的建议,而是我否决了你的建议。对我们公司而言,省钱可能并不是好事情,我怕你想不通,所以要当面和你谈。
我当时真的反应不过来。你明明知道我的建议能够节约成本,替公司省钱还说不是好事,中华民族“勤俭节约”的优良传统难道不对?
老板说:你想不通那是正常的,我刚工作的时候也想不通,也是经过别人指点后才明白的。穷人首先想到的是节约,却想不到比节约更好的赚钱方法,真是人穷志短那。
于是老板对我讲了他的感悟,我归纳总结如下:
在某个领域,当市场上只有一家产品或者少数几家产品时(尚未形成竞争),这个时候产品价格基本上是卖方自己说了算。如果消费者想和卖方砍价,基本办不成,卖方会说“这就是市场价(Marketing Price),哪里都是这个价”。卖方自己定的市场价肯定远高于成本,利润很高。例如80年代的彩电,你有钱也未必买得到,所以那个时候彩电贵得很。
当市场充分竞争时,就会出现“杀价”现象。如果各家产品的功能、质量旗鼓相当,那么竞争实质上是在拼成本。谁的成本低,谁就有利可图。这时的产品价格越来越接近于成本,称为“成本价”(Cost Price)。如今大部分彩电卖的就是成本价,把卖方逼到微利的地步。
大部分企业都渴望能够生产和销售“市场价”的产品,而不是“成本价”的产品。如果自己在技术上不能领先于竞争对手的话,那么只有在时间上领先,才能卖出“市场价”。这就是“时间比钱更值钱”的道理。
如果一个企业什么东西都自主研发,必定会消耗很多时间,等你埋头研发出来了,发现市场已经被别人抢走了。所以为了节约时间,加快产品上市速度,有些东西要买现成的,尽管多付出了成本,但是对于大局而言是值得的。这个道理可以解释为什么“我的自主研发、节约成本的提议”被否决。
在大多数情况下,降低成本有益于企业获取更多的利润,但并不是绝对的。在某些时候企业会不惜成本地去抢占市场,以使未来获取更多的利润。开源或节流,都是“此一时、彼一时”的盈利手段,都要顺应市场形势的变化。
_GoBack