Python的循环复杂性度量实践

时间:2016-07-13 14:33:31

标签: python python-2.7 code-metrics cyclomatic-complexity

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

Python中的圈复杂度工具有多重要?您或您的项目是否使用它们并发现它们有效?我喜欢一个很好的前/后故事,如果有人有一个,所以我们可以从答案中采取一些主观性(即在我们没有使用循环补偿工具之前,我们介绍之后)它,好事A发生了,坏事B发生了,等等)。这类问题还有很多其他的一般答案,但我没有特别为Python项目找到一个。

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

4 个答案:

答案 0 :(得分:6)

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

RADON

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

取决于RADON工具输出,有几次我们重新考虑了代码,添加了更多方法并修改了循环。

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

答案 1 :(得分:4)

当涉及到圈复杂性时,Python并不特别。 CC测量一大块代码中的分支逻辑。

经验表明,当分支为" high"时,该代码比分支较低的代码更难理解和更改。

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

wemake-python-styleguide支持Cyclomatic Complexity的radonmccabe实现。

还有一些复杂度指标,而不仅仅是循环复杂度,包括:

  • 函数装饰器的数量;越低越好
  • 参数数量;越低越好
  • 注释数量;越高越好
  • 局部变量数;越低越好
  • 回报,收益,等待数量;越低越好
  • 语句和表达式的数量;越低越好

详细了解遵守它们的重要性:https://sobolevn.me/2019/10/complexity-waterfall

它们全部包含在wemake-python-styleguide中。 回购:https://github.com/wemake-services/wemake-python-styleguide 文件:https://wemake-python-stylegui.de