Python的圈复杂度度量实践



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

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

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

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

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

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

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

Python 在

圈复杂度方面并不特别。 CC 测量代码块中有多少分支逻辑。

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

对于指标,通常重要的不是绝对值;而是组织所经历的相对值。 你应该做的是测量各种指标(CC是其中之一),并在曲线中寻找一个膝盖,将该指标与代码中的错误联系起来。 一旦你知道膝盖在哪里,请编码人员编写复杂度低于膝盖的模块。 这是与长期维护的联系。

你无法

衡量的,你无法控制。

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

您也可以使用McCabe图书馆。它只计算McCabe的复杂性,并且可以集成到您的薄片8短绒中。

最新更新