《程序员度量:改善软件团队的分析学》一有价值的数据

有价值的数据

本书后续章节将讨论一些特定的程序员度量。某些度量相当简单,基于产品bug这类原子数据;而有些度量相对更复杂一些,它们需要利用公式以及多个数据元素的组合。
无论如何,在深入探究特定的度量之前,我们都应考虑各种可用于程序员度量的数据类型,并思考这些数据是否有用处。我们需要广泛而深入地思考那些令人关注的、新的数据元素,因为它们能够带来更有意义的度量。同样,程序员和软件团队的工作需要关联到团队和组织的目标。我们也同样需要认真地思考如何确定这些数据。
下面的列表是我发现的一些有用的数据示例,将在后续章节深入讨论。此处只是说明性质的,因此仅仅描述了信息的类别或分类,而具体的数值(例如计数或者平均值)会在后面的内容中讨论。

  • 程序员加入团队的时间。
  • 团队规模、团队优化和团队建设。
  • 按复杂度分类并由程序员完成的任务。
  • 程序员协同完成的任务或程序员帮助他人完成的任务。
  • 特别紧急的任务,如修复严重的产品问题。
  • 显示程序员超常的创造力、创新和主动性的任务。
  • 延期的、失败的或者取消的任务。
  • 程序员参与的项目、产品和产品领域。
  • 花在任务上的时间。
  • 花在会议上的时间,或者处理自己中断的事宜花费的时间。
  • 客户发现的问题,以严重性和复杂度进行分类。
  • 为了客户支持工作而进行联系的次数(电话、邮件或者聊天)。
  • 购买或使用产品或特性的客户数。
  • 试用了产品或特性,但决定不再使用的客户数。
  • 取消或停止使用产品或特性的客户数。
  • 维持、获得或直接竞争对手失去的客户数。
  • 从产品或特性的改变中获益的现有客户数。
  • 从产品、特性或者其他完成任务中获益的内部员工数。

以上仅是可使用在度量中的一些数据类型的例子。除了本书中提及的一些数据之外,毋庸置疑,也确实存在其他有助于程序员度量的数据类别。按一般原则,极有可能我并未完全尝试或考虑过许多潜在的数据。但对于有些数据类型,我本人曾经尝试或者深入思考过,而由于各种原因,这些数据并不是很有用或者存在更好的选择,因此本书中没有使用这些数据类型。下面是关于这些排除的数据类型的几个例子以及我排除它们的原因。
千行代码量(KLOC)
我们常常认为用代码行数(KLOC代表1000行代码)来测量程序员的效率是非常有用的一种方法,并且也有不少实例认为KLOC在估计技术和降低项目估计失误的工具方面是有用的,特别是对一些大型项目而言。但一般而言,我认为KLOC更像是活动而不是代码的度量指标。我很难将这个度量指标关联到明确的团队目标上,例如客户接受度、满意度或者产品质量。KLOC的另一个问题是,对不同的编程语言来说,它们没有一个统一的标准。比如,写1000行Java代码所花的时间和能力与写1000行JavaScript、XML、PHP或者Ruby代码是完全不同的( 虽然理论上可以有这样的一个方法来进行跨语言的KLOC标准化)。最后,我认为程序员很难认为这个度量指标与其工作业绩或者成败有什么关系。从而,也就很难有效地使用KLOC作为一种手段就技能与贡献进行讨论。因此,出于本书中讨论的目的,我发现关注任务和基于复杂度的任务分类会比使用KLOC更有意义。
开发阶段的bug数量
bug数量肯定是评定代码质量的一种度量。但是根据我的经验,在开发阶段的bug不同于发布后产品的bug,由于存在太多的可变性,因此很难使得开发中的bug数量成为一个很有用的度量。开发过程中发现的bug的多寡会随着测试人员的数量、测试的深度和代码在开发中的成熟度而波动。如果我们在开发周期早期就开始对一块复杂的代码进行彻底地测试,会发现许多bug,但是这并不能告诉我们什么。也许会有人认为确实存在这样一些bug,如果bug是在程序员认为功能已经实现且完成单元测试的情况下发现的,它们可以成为有用的度量。但是我发现,在实践中,这项指标不太一致,也很难下结论。最后,我认为我们仅需保持关于任务的复杂度和完成这些任务所花的时间的度量,它已经包含了充分修改开发bug的时间,否则代码就无法发布。如果程序员制造了许多bug,其结果就是完成任务的时间更长。对于同样复杂的工作,花费时间更少的程序员一般更井然有序且产生的bug数目也较少。
产品收入
产品收入(毛收入或净收入)是商业规划和产品规划中的一个关键部分。我们建造什么产品,新增哪些特性,哪些问题值得花时间去修改,都依赖于财务分析的结果。在大多数情形下,软件开发的预算与产品收入有直接的关系。事情本该如此。然而,如果把产品收入作为软件开发流程中的度量,去衡量程序员和团队的成功与相关贡献,我认为这是有问题的。首先,很多软件根本就没有收入(开源项目和内部项目就是两个很好的例子)。即使存在收入,这也不总是与软件和软件开发团队的工作直接相关。它们广泛地依赖于折扣、不同销售人员的能力和更多的因素(包括国家或全球经济)等。另一个重要的问题是,将金钱作为度量,很容易转移注意力和带来误导。人们会变得更关注金钱,而不是度量的目标和意义。比如,每个客户需要为新的iPhone应用程序付费2美元,如果今天有1000个人购买,从许多方面来说,客户数比2000美元的毛利能提供更清晰、正面的阐释(2000美元无法让人留下深刻印象)。相反,如果你的公司本周仅仅成交了一个10万美元的订单,这个数字或许听起来令人印象深刻,但如果关注到存在那么多的业务却只签订了一份订单,这样的事实就需要我们更为关注。我个人的感觉是,产品收入的意识和理解收入预测如何驱动产品计划的决策对软件开发团队来说是有用的。但是,作为软件开发团队工作进度的度量,我更愿意测量特性的交付、试用用户到客户的转换率、产品bug数量,并且对用户数和使用量保持关注。
总之,探索新的数据类型并尝试使用它们不会带来损失。我们应该乐于试验新想法。也可以相信,其中非常有用的、合理的那些数据会显现出来,而剩余的部分可以舍弃。

时间: 2024-08-03 17:03:50

《程序员度量:改善软件团队的分析学》一有价值的数据的相关文章

《程序员度量:改善软件团队的分析学》一第1章

第1章概述让我们不要太确信,我们没有错过一些重要的东西.--比尔·詹姆斯(棒球统计学家和作者),摘自"Underestimating the Fog"这是一本关于程序员.软件开发团队的度量和模式的书.本书的一些想法源于我在多年前开始的对软件开发团队构成的思考:无论好坏,所有细微贡献以及无名英雄的辛勤汗水都是项目成功的关键组成部分.近二十年里,我一直在负责设计师.程序员和测试团队的组建与管理工作.这些年,我意识到一个软件开发团队就像一支球队一样,需要有各种角色的球员和不同的技能的专业人员

《程序员度量:改善软件团队的分析学》一观测员和统计表

观测员和统计表 当无法从现有系统中获得数据时,最好的办法是用现行职业球队的方法--也就是观测员和统计表.职业球队利用特定的统计分析管理者,也就是观测员,去观看比赛,为球员个体和球队填写统计表格.在一些运动(如棒球比赛)中,可能有官方的记录员来跟踪统计数值,并且在必要的时候负责主观判决(judgment call),如决定某个回合是安打还是失误.但即使在这样的例子中,记录员常常也需要观测员来协助他们,另外,球队拥有自己的观测员来跟踪那些并没有被记录员记录的统计数据.技术可以自动化一些统计收集的过程

《程序员度量:改善软件团队的分析学》一数据获取

数据获取 很多系统都能帮助收集数据元素.有些可以提供易于访问的有用数据,特别是那些直接打交道的或控制的并且与开发相关的系统.对度量而言最有用的系统之一可能就是实际产品本身,一些适当的手段和监控可以提供关于客户采用.使用或特定特性和产品改变的成功的大量数据.有些系统可能不容易访问,通常是你无法授权使用其他业务部门的数据.我的经验是,如果你向系统所有者或管理员解释数据的有用性和使用目的,而且说明你并不需要保密和敏感的数据,你应该能得到授权.有时我们可以直接从系统中得到数据,而有时数据是从常规报告或者

《程序员度量:改善软件团队的分析学》一关于软件采用、问题以及竞争的数据

关于软件采用.问题以及竞争的数据 除了测量程序员技能,目标受众以及那些通过不同方式和软件打交道的人员(外部用户.内部用户.销售和支持人员或者上述所有人员)对软件的接受情况也是关键的测度.收集那些可以指示软件的成功以及人们对工作的响应的质量数据,包括收集关于采用.效益和问题的数据,还可以相对于已知的竞争对手来评估成功. 关注与采用 作为度量系统的基础,确定一个软件产品.项目或者特性是否可以积极或者消极地接受,以及尝试度量这种响应的程度,非常关键.可用来对响应进行跟踪的最基础的指标是使用情况.但是使

《程序员度量:改善软件团队的分析学》一连接活动与目标

连接活动与目标 程序员是软件开发团队中的球员,这个软件开发团队是某个商业活动或者组织的一部分.至少这个组织的一些目标同样也是这个软件开发团队的目标(因此,那些目标也同样是程序员的目标).最有意义和有用的度量允许将程序员和团队关联到组织目标上. 为了做到这一点,需要定义那些软件团队所共享的组织目标,并且这些目标可以精确地或近似地测量出.然后,需要确定程序员和团队的哪些技能是可以测量的,最终,必须建立一个模型或者度量将技能与目标关联在一起. 你可能说,运动团队有一个清晰的目标,那就是赢得比赛(并且最

《程序员度量:改善软件团队的分析学》一模式、异常点和离群点

模式.异常点和离群点 一般来说,我们收集和保持度量数据持续的时间越久,它们就会变得越有用.度量分析是一个模式识别的过程,意味着寻找一个重复的.可提供洞察力的模式.从单个时间段里收集到的一组度量或许会揭示出一些有趣的信息,并且我们可能会因此而得出一些有趣的假设,然而,从多个时间段里收集多个度量将可以改进我们的推测,或者把推测转化为知识. 我们在寻找模式的时候,很重要的一点是,必须认识到并不是所有的模式都是简单化的.我们必须仔细地寻找,而不仅仅只是关注于表面,因为从一些度量的组合中发现一些模式和解释

《程序员度量:改善软件团队的分析学》一软件团队是成功还是失败

软件团队是成功还是失败 在体育运动中,每个团队都为胜利而战,而成功的定义也很清晰.精确.软件开发与此不同,我们缺乏对成功的恰当测度.我所发现的最佳策略是软件开发团队的成功三角形,它基于三方面的因素:客户响应.质量指标和效率.这些都能按发布版.特性来测量,并且可以相对于先前的水平.团队目标和组织目标加以评估. 用户对每个软件发布版的响应是什么 开始时,你可以考虑以三个月为周期测量用户对新发布版的采用率是否达到了20%.你能够同设定的目标相比较.为客户响应.质量指标和效率进行这种检测,为团队提供了一

《程序员度量:改善软件团队的分析学》一假设检验

假设检验 真理并不总是赤裸裸的.基于这个原因,当自己的某些假设成为成功的关键因素时,常常询问一下自己,在这些假设中真正重要的是什么,不重要的又是什么,这样做很有裨益.在寻找有用度量的过程中,你应该目光长远一点,不只是蜻蜓点水,并且考虑所有的可能性.有时,某个地方不能看得很清楚,新的数据可能会帮助你找到隐藏在后面的真相.你可以收集并使用度量来挑战你的假设,并且即使推翻了你的假设,也同样有帮助,因为你真正掌握了知识.美式橄榄球有将近100年的历史,公认的一个教练理念是如果你的团队在3次进攻之后未能达

《程序员度量:改善软件团队的分析学》一数据选择

数据选择 为度量寻找合适的数据,有点像科学,有点像艺术,但更多的是试错.当决定使用哪些数据时,我们会面对很多选择.显然,你可以提出多种多样的测度,能获得相同的结果,或者发生几乎等同的一件事.例如,要决定一个程序员的质量测试有多好,我们可以选择去测量编写的测试用例数.代码的测试覆盖率,或者发现的bug数量和严重性.我们也可以测量所有这些.一般来说,当我不得不在多个可能使用的测度中去选择时,我基于以下经验法则来决定最优方案:选择最容易获得的数据.选择最容易让非程序员解释和理解的数据.第一条经验法则或