【问题标题】:Cyclomatic complexity metric practices for Python [closed]Python的圈复杂度度量实践[关闭]
【发布时间】:2016-11-16 05:10:36
【问题描述】:

我正在处理一个相对较大的 Python 项目,我们没有任何圈复杂度工具作为我们自动化测试和部署过程的一部分。

Python 中的圈复杂度工具有多重要?您或您的项目是否使用它们并发现它们有效?如果有人有,我想要一个不错的前后故事,这样我们就可以从答案中消除一些主观性(即在我们也没有 cyclo-comp 工具之前,在我们介绍它之后,好事A发生了,坏事B发生了,等等)。这类问题还有很多其他通用答案,但我没有找到专门针对 Python 项目的答案。

我最终会尝试决定是否值得将它添加到我们的流程中,以及哪些特定指标和工具/库最适合大型 Python 项目。我们的主要目标之一是长期维护。

【问题讨论】:

标签: python cyclomatic-complexity code-metrics


【解决方案1】:

我们在一个与测试自动化相关的项目中使用了 RADON 工具。

RADON

根据新功能和要求,我们需要在该项目中添加/修改/更新/删除代码。此外,几乎有 4-5 人正在为此工作。因此,作为审查过程的一部分,我们确定并使用了 RADON 工具,因为我们希望我们的代码可维护和可读。

根据 RADON 工具的输出,我们曾多次重构代码,添加更多方法并修改循环。

如果这对你有用,请告诉我。

【讨论】:

  • 我已经开始喜欢氡气了。虽然将其包含在自动构建过程中比较困难,但付出的努力是值得的。
【解决方案2】:

在圈复杂度方面,Python 并不特别。 CC 衡量一段代码中有多少分支逻辑。

经验表明,当分支“高”时,该代码比分支较低的代码更难理解和可靠地更改。

对于指标,重要的通常不是绝对值;它是您的组织所经历的相对价值。你应该做的是测量各种指标(CC 就是其中之一)并在曲线中寻找一个拐点,该指标与代码中的错误发现相关联。一旦你知道膝盖在哪里,就让程序员编写复杂度低于膝盖的模块。这与长期维护有关。

你无法衡量,你无法控制。

【讨论】:

  • 你在 python 中使用过任何特定的工具吗?氡气好吗?您是如何计算出您的 cyclocomp 度量阈值的?是否只是通过跟踪 JIRA 上的问题并在每个发布/冲刺结束时返回并手动找出您修复/修复了哪些错误?
  • 我们使用不寻常的编程 DSL 来构建指标工具,CC 对这些 DSL 没有多大意义。 (我们实际上对通过构建更好的内部 DSL 获得的生产力感兴趣)。大多数试图理解指标的人通常会结合来自多个来源的信息:用于计算模块指标的版本控制系统(例如源代码),以及来自错误跟踪的信息(跟踪到模块的错误)。您定期运行所有这些数据收集以跟踪趋势。 (有关指标工具,请参阅我的简历并点击我网站的链接)。
【解决方案3】:

wemake-python-styleguide 支持循环复杂度的 radonmccabe 实现。

还有一些不同的复杂度指标不包括在圈复杂度中,包括:

  • 函数装饰器的数量;越低越好
  • 参数数量;越低越好
  • 注释数;越高越好
  • 局部变量的数量;越低越好
  • 退货次数、产量、等待次数;越低越好
  • 语句和表达式的数量;越低越好

详细了解为什么遵守它们很重要:https://sobolevn.me/2019/10/complexity-waterfall

它们都被wemake-python-styleguide 覆盖。 回购:https://github.com/wemake-services/wemake-python-styleguide 文档:https://wemake-python-stylegui.de

【讨论】:

    【解决方案4】:

    您也可以使用mccabe 库。它只计算 McCabe 复杂性,并且可以集成到您的 flake8 linter 中。

    【讨论】:

      猜你喜欢
      • 2013-11-20
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多