近年IT界流行“用数据管理过程”、“用数字说话”,软件度量成为热点话题。一个软件企业应该从何做起度量工作呢?
N年前,老板对我们过程改进工作曾指示:能量化的工作尽量量化,不能量化的就不要勉强。当时觉得这个指示非常好,我也相信这个观点很多人都会认同。实际上应该是这样吗?软件度量就必须用数字来说明问题吗?量化的结果一定比非量化的结果更准确客观吗?
没有一套好的度量工具,很难做好度量工作!这是很多人的认识。而一些度量工具的生产厂商,更加是大力渲染,目的是为了帮企业获取更大的利益。要做好度量工作,真的需要一套强大的度量工具吗?
处于手工作坊的软件公司,难以进行软件度量,软件度量只能在有一定过程基础的公司进行。另外,对于小公司、小项目没有度量的必要,度量更适用于大公司、大项目。是这样吗?难道小公司、不规范的公司、小项目就不能利用软件度量来改善生产力吗?
软件生产活动是智力活动,要客观度量是很难的,要做好将会是很花成本的事情,而且开始阶段要忍受比较高的成本,软件度量所带来的效果,需要长时间才能体现。软件度量难道就没有立竿见影的效果吗?难道软件度量是大公司、有钱公司才能玩得起吗?形形式式的度量陷阱,还远不止以上这些!
什么是度量?
搞清楚什么是软件度量,非常重要,将会让我们少走弯路,直接发挥度量的价值。
度量是这样的一种活动:基于一定的目的,采用一定的办法或者标准,对目标事物进行观察,得到客观的评价结果,根据评价结果,采取适当的行动。
如果有人给你一个度量任务,要求你度量水的温度,你会怎样做?
你会不会马上想到用温度计?
不好意思,如果是这样,你就落入了度量的其中一个陷阱了。你应该先问,为什么要度量水的温度?不同的目的,做法是不一样的。
如果度量的目的是为了判断煲水的时候水是不是开了。你还会用温度计吗?当然你可以用能测量一百摄氏度的温度计来度量水的温度,但我们更多的会用肉眼观察水的形态,来判断是否水开了,如果想更简单一点的,买一个水开的时候会响的水壶或者是搞个饮水机就可以搞定了。
如果度量水的温度,目的是希望水温合适,好帮孩子洗澡呢?有些妈妈会用温度计,有些妈妈会用自己的手直接去感觉水温,两种办法都可以。
一个小小的度量水温的问题,都很有学问,大家发现,不同的目的下,做法是不一样的。有些做法很简单实用,不需要什么专门的工具,直接用手感觉温度,或者肉眼观察就可以了。相反,如果我们搞不清目的,就很可能杀鸡用牛刀,甚至是受到伤害,一个不小心,你就可能直接用手去感觉开水的温度了。
另外我们也发现,度量的结果不一定都是数字来的,只要满足目的,越简单越好。水是否开的问题,我们只需要知道水是否开了就可以了,度量结果只有两个:是或者否,我们不需要知道这水是摄氏多少度。度量并不需要很精确,满足目的就好!
度量的目的不是光为了得到一个结果,而是要根据度量的结果采取行动。如果妈妈发现水温不够,她会加入一些热水,如果觉得太热,就会加入冷水。这些行动的目的就是为了让孩子有适合的水温洗澡。
公司的效益指标
软件度量工作是需要投入的,这个投入能带来多少价值呢?这个问题非常好,这也是每个想做软件度量的企业所关心的。
但这个问题背后,可能隐藏着另外一个软件度量的理解误区,就是认为度量是相对独立的工作,可与其它工作分离的,是一种“额外”的工作,但这个工作可以为“非额外”的工作带来价值。
其实不然,度量工作做得好的话,度量工作本身就和“非额外”的工作融合在一起了,是分不开的。在我们公司,每人每天都需要申报工时,而项目经理会审批属于他这个项目的工时,项目经理在审批工时的同时,其实也是在做项目跟踪的工作,看看项目成员每个人任务的完成情况,感觉到不妥时,会直接与相关人员沟通。工时度量这个工作,已成为项目跟踪的有效手段,而不是“额外”的工作。
当度量工作与实际工作融合在一起的时候,我们就很难区分哪些工作是度量工作,哪些不是度量工作了。这种境界是我们做度量工作所追求的,如果发现度量工作可以很容易就分离出来的,可做可不做的,那说明度量工作还没有做到实处。
“软件度量工作是需要投入的,这个投入能带来多少价值呢?”这个问题可能换成这样来问会更好:进行了软件度量工作后,公司的生产力提高了多少?
那么公司的生产力该如何度量呢?
所有想做好软件度量的公司,应首先想办法度量公司的生产力。似乎这很难做到,其实并不复杂,开动一下脑筋就可以搞定的。
公司有两大生产力指标,成本与收入。公司近一年的总体成本,包括人工、采购、水电费、房租费等全部费用加起来,财务肯定会有这样的一个数字。公司近一年所有人员的工作时间,所有人员包括开发、测试、行政、财务等,凡在公司的工作的所有人,这些人上了多少天的班,一定也会知道,每个公司都有考勤请假的记录吗,就算没有也可以大概估算。这样我们可以得到公司全部人员一年的总体工作时间,单位是小时。这样我们有这样的一个指标:
成本指数=公司总费用/总工作时间,单位:元/小时
这个数字表明,在这个公司工作的每一位员工,每工作一个小时,其实是需要这样的一个成本的。没有算的公司尽快算算,你可能会发现,原来这个数字还相当大呢,远远超过这个人的时薪。
关于收入,我们有这样的一个指标:
收入指数=公司总收入/总工作时间,单位:元/小时
这个数字表明,在这个公司工作的每一位员工,每工作一个小时,为公司带来多少的价值。
如果收入指数大于成本指数,说明公司是在赚钱的。公司的生产力就可以看这两个数字了,我们希望尽量降低成本指数,尽量提高收入指数,于是我们会得到下面这个指标:
效益指数=收入指数:成本指数
企业最终追求的是提高效益指数,成本大没关系,效益指数高就没问题了。
公司的效益指标的度量是任何公司都可以做的,而且应该是第一时间就要做的度量,并且要持续地做的。公司所做的任何工作,市场活动、过程改进工作、度量工作等等,最终目的还是为了提高效益指数。
缺陷度量
大多数软件公司都会有一套管理缺陷的系统,我们应该如何把缺陷度量做得更好呢?
我们需要目标驱动地把度量工作做好,首先有两个最基本的要求:缺陷被准确的记录和跟踪;客观地依据缺陷状况对软件发布进行决策。
根据这两个要求,我们需要详细定义缺陷的属性,这些缺陷的属性就是我们要度量的内容。很多公司都会定义缺陷的描述、严重程度等属性,另外也会规定发布的时候,什么严重级别的缺陷不能超过多少个等要求。
以上两个目标只是缺陷度量的两个基本目标,如果更深入一点,我们希望能预防缺陷的再次发生,最简单有效的办法就是:直接让项目组成员一起来分析缺陷的原因,让大家避免重犯。
如果想做更系统更深入的分析,就需要考虑在组织层面来做这个分析工作。这时有必要增加缺陷一个属性,叫做“缺陷来源”,就是说产生这个缺陷的源头是在哪里,是需求没有分析到位,还是设计没有做好,还是编码出问题?按“缺陷来源”来分析公司不同类型的项目的缺陷情况,您就会发现公司的软件开发过程最有问题的是哪个过程?哪些过程做得比较好?这些分析结果会很好的指引过程改进的方向。
缺陷度量有很多可以发掘的地方,这是每一个公司都应该做好也是最有条件做好的一种度量。
软件度量可以是很复杂的事情,也可以是很简单的事情,大家不必被一些复杂的度量办法、高价的度量工具、还有深奥的六西格玛给吓怕了。度量工作本身并不会有任何好处,产生好处的是对度量结果的分析及相应的改进工作。
做度量之前,要先思考当前公司存在一些什么大问题,有什么简单的度量办法,能让你更加清楚地了解问题,并更容易分析出原因。如果你要进行一系列的改进工作,你也需要思考,有什么简单的度量办法,能让你很容易地跟踪改进的情况,并能很容易地分析出原因及采取纠正措施。
目标驱动度量,而不是为了度量而度量,简单就是最好的!
链 接
度量活动四要素
基于一定的目的。
采用一定的办法或者标准。
得到客观的评价结果。
采取适当的行动。