【发布时间】:2010-09-11 03:32:08
【问题描述】:
我有一个跨多个项目的大型源存储库。我想生成一份关于源代码运行状况的报告,确定需要解决的问题领域。
具体来说,我想调用具有高圈复杂度的例程,识别重复,并可能运行一些类似于 lint 的静态分析来发现可疑(因此可能是错误的)构造。
我该如何构建这样的报告?
【问题讨论】:
标签: python static-analysis cyclomatic-complexity
我有一个跨多个项目的大型源存储库。我想生成一份关于源代码运行状况的报告,确定需要解决的问题领域。
具体来说,我想调用具有高圈复杂度的例程,识别重复,并可能运行一些类似于 lint 的静态分析来发现可疑(因此可能是错误的)构造。
我该如何构建这样的报告?
【问题讨论】:
标签: python static-analysis cyclomatic-complexity
对于静态分析,有pylint 和pychecker。我个人使用 pylint,因为它似乎比 pychecker 更全面。
对于圈复杂度,你可以试试this perl program,或者这个article,它引入了一个python程序来做同样的事情
【讨论】:
感谢Pydev,您可以非常轻松地在Eclipse IDE 中integrate pylint,并在每次保存修改后的文件时获取代码报告。
【讨论】:
对于测量圈复杂度,traceback.org 提供了一个不错的工具。该页面还很好地概述了如何解释结果。
为pylint+1。它非常适合验证对编码标准的遵守情况(无论是 PEP8 还是您自己组织的变体),这最终有助于降低圈复杂度。
【讨论】:
https://flakehell.readthedocs.io/config.html,因为它的执行模型更加健壮和可配置。
有一个工具叫 CloneDigger帮助你找到类似的代码sn-ps。
【讨论】:
当您需要了解一个新项目时,Pycana 就像魅力一样!
PyCAna(Python 代码分析器)是 一个简单代码的花哨名称 用于创建一个 执行后的类图 代码。
看看它是如何工作的: http://pycana.sourceforge.net/
输出:
【讨论】:
对于圈复杂度,您可以使用radon:https://github.com/rubik/radon
(使用pip安装:pip install radon)
此外,它还具有以下功能:
【讨论】:
使用flake8,它在一个工具中提供了pep8、pyflakes和圈复杂度分析
【讨论】:
为了检查圈复杂度,当然有mccabe 包。
安装:
$ pip install --upgrade mccabe
用法:
$ python -m mccabe --min=6 path/to/myfile.py
注意上面的阈值 6。根据this answer,>5 的分数可能应该被简化。
--min=3 的示例输出:
68:1: 'Fetcher.fetch' 3
48:1: 'Fetcher._read_dom_tag' 3
103:1: 'main' 3
也可以选择通过pylint-mccabe或pytest-mccabe等方式使用。
【讨论】: