Process 敏捷方法中的软件度量

Process 敏捷方法中的软件度量,process,agile,metrics,Process,Agile,Metrics,敏捷方法现在相当流行,但我似乎找不到多少关于什么指标最有用以及为什么最有用的文档。我发现更多的东西表明,一些传统指标,如LOC和测试的代码覆盖率是不合适的,留下两个主要问题: 为什么这两个(和其他)指标不合适 什么指标最适合敏捷,为什么 即使使用敏捷过程,您不想知道单元测试的代码覆盖率有多高吗?或者仅仅是因为这个指标(和其他指标)不如圈复杂度和速度等其他指标有用吗?1.1)LOC很容易回答 他们真的依赖于你使用的语言!例如,在JAVA或Ruby上编写相同的功能时,可能会有很大的不同 一个写得不

敏捷方法现在相当流行,但我似乎找不到多少关于什么指标最有用以及为什么最有用的文档。我发现更多的东西表明,一些传统指标,如LOC和测试的代码覆盖率是不合适的,留下两个主要问题:

  • 为什么这两个(和其他)指标不合适
  • 什么指标最适合敏捷,为什么
  • 即使使用敏捷过程,您不想知道单元测试的代码覆盖率有多高吗?或者仅仅是因为这个指标(和其他指标)不如圈复杂度和速度等其他指标有用吗?

    1.1)LOC很容易回答

    • 他们真的依赖于你使用的语言!例如,在JAVA或Ruby上编写相同的功能时,可能会有很大的不同

    • 一个写得不好的软件可能比一个好的软件有更多的行

    1.2)代码覆盖率

    • 我想您应该如何使用度量,尽管它并不完美,但它应该让您很好地理解代码需要更多测试的地方

    • 这里你需要注意的一点是,它也依赖于语言。在某些情况下,您可能有一个真正不需要测试的类或方法!例如,只有getter和setter的类

    2) 从(1)中,您刚刚提到了代码度量,但从您关于velocity的问题来看,您对所有创建过程的度量都感兴趣,因此我将列出一些:

    • Velocity:经典的一个,如果使用得当,它可以很好地提高敏捷团队的绩效,因为您将知道您的团队在固定时间内真正可以做什么

    • 燃尽图和燃尽图:它们可以让您很好地了解团队在交互过程中的表现(sprint)


    InfoQ上有一些关于这方面的文章。而且。

    无论采用何种方法,都可以而且应该使用一些基本指标。
    据了解,最重要的是以下三个方面:

    • 产品尺寸
    • 测试最后阶段发现的缺陷数量
    • 以及现场发现的缺陷数量
    如果您只跟踪了这些,那么至少有五种方法可以使用它们:

    • 计算产品缺陷率(A)
    • 计算测试缺陷率(B)
    • 确定一个理想的目标,并监控绩效
    • 确定B的理想目标并监控绩效
    • 评估A和B之间的相关性
    • 如果发现相关性,则形成测试有效性度量(B/A*100%)

    尽管阅读起来并不一定有趣,但它提供了一个非常深入的软件工程和度量概述

    至于问题1,我不认为这些指标在敏捷过程中有什么不好的原因

    LOC为您提供了相对尺寸测量。虽然比较项目之间的数字可能并不总是有用,但它可以为您提供项目内的增长率。如果您可以得到它,那么sprint中更改的行数对于跟踪速率或重构也很有用

    代码覆盖率(代码行数)让您大致了解您的团队是否满足项目中自动化测试的最低要求

    关于问题2,保留上面的项目,这里还有一些:

    • LOC与测试计数。如果可以,为单元测试、集成测试和系统测试保持单独的比率
    • 每个故事的验收标准与测试场景(或测试)的平均数量。它可以帮助你更好地了解你的测试是否违背了故事的意图
    • 发现的缺陷数量
    • 发现的工作量(通常由敏捷跟踪软件捕获)不是原始估计的一部分。它将帮助你判断你是否做了足够的计划
    • 跟踪速度冲刺与冲刺之间的一致性或缺乏一致性
    • 虽然可能不受欢迎,也可能有潜在危险,但跟踪每个开发人员完成的工作估计。虽然团队应该是自我组织和驱动的,但并非所有团队都能够处理人为问题

    敏捷是一种面向业务的东西,敏捷是关于最大化客户价值,同时最小化浪费以提供最佳的投资回报率。这是应该衡量的。为此,我使用了Mary Poppendieck设计的系统。该系统基于三个整体测量,必须作为一个整体:

  • 周期时间
    • 从产品概念到首次发布或发布
    • 从功能请求到功能部署或
    • 从缺陷检测到解决
  • 业务案例实现(没有这一点,其他一切都无关紧要)
    • 损益表或
    • 投资回报率
    • 投资目标
  • 顾客满意度
    • e、 g
  • 当然,在团队级别,您可以跟踪测试覆盖率、圈复杂度、编码标准的一致性等,但高质量本身并不是目的,它只是一种手段。不要误解我,我并不是说高质量不重要,高质量是实现可持续发展的必由之路(我们在“完成”的定义中包括“不增加技术债务”),但目标仍然是以快速和盈利的方式向客户提供价值

    只需添加

    测试的LOC和代码覆盖率不理想的原因:

    敏捷强调结果,而不是输出(参见敏捷宣言)。这两个简单地跟踪输出。而且,它们没有正确地度量重构,重构是敏捷过程的一个重要方面


    要考虑的另一个度量是运行测试的特性。我无法形容比这更好的了:

    我要回答这个非常古老的问题<