如何分析Python代码以识别有问题的区域?

时间:2008-09-19 07:40:22

标签: python static-analysis cyclomatic-complexity

我有一个跨多个项目的大型源存储库。我想编写一份关于源代码健康状况的报告,找出需要解决的问题领域。

具体来说,我想调用具有高圈复杂度的例程,识别重复,并且可能运行一些类似lint的静态分析来发现可疑的(因而可能是错误的)构造。

我如何构建这样的报告?

8 个答案:

答案 0 :(得分:36)

为了测量圈复杂度,traceback.org提供了一个很好的工具。该页面还概述了如何解释结果。

+1 pylint。它非常适合验证遵守编码标准(无论是PEP8还是您自己的组织的变体),这最终有助于降低圈复杂度。

答案 1 :(得分:28)

对于圈复杂度,您可以使用radonhttps://github.com/rubik/radon

(使用pip进行安装:pip install radon

此外,它还具有以下功能:

  • 原始指标(包括SLOC,评论行,空行和& c。)
  • Halstead指标(所有这些)
  • 可维护性索引(Visual Studio中使用的索引)

答案 2 :(得分:18)

对于静态分析,有pylintpychecker。我个人使用pylint,因为它似乎比pychecker更全面。

对于圈复杂度,你可以尝试this perl program,或者这个article引入一个python程序来做同样的事情

答案 3 :(得分:11)

当您需要了解新项目时,Pycana就像魅力一样!

  

PyCAna(Python代码分析器)是   一个简单代码的奇特名称   python的分析器创建一个   执行你的后的类图   代码。

了解它的工作原理: http://pycana.sourceforge.net/

输出:

alt text http://pycana.sourceforge.net/relations.png

答案 4 :(得分:6)

感谢Pydev,您可以非常轻松地integrate pylint Eclipse IDE,并在每次保存修改后的文件时获取代码报告。

答案 5 :(得分:5)

使用flake8,在一个工具中提供pep8,pyflakes和圈复杂度分析

答案 6 :(得分:4)

有一个名为的工具 CloneDigger可帮助您找到类似的代码段。

答案 7 :(得分:3)

为了检查圈复杂度,当然有mccabe包。

安装:

$ pip install --upgrade mccabe

用法:

$ python -m mccabe --min=6 path/to/myfile.py

注意上面的阈值为6。根据{{​​3}},分数> 5可能应该简化。

--min=3的示例输出:

68:1: 'Fetcher.fetch' 3
48:1: 'Fetcher._read_dom_tag' 3
103:1: 'main' 3

也可以选择通过this answerpylint-mccabe等方式使用