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

我有一个很大的源代码库分割在多个项目。 我想编写一份关于源代码健康状况的报告,找出需要解决的问题。

具体来说,我想召唤出具有高回圈复杂性的程序,识别重复,也许运行一些类似皮棉的静态分析来发现可疑的(因此可能是错误的)结构。

我怎样才能构build这样的报告呢?

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

+1为pylint 。 validation遵守编码标准(无论是PEP8还是您自己组织的变体)是非常有用的,这可以最终帮助减less圈复杂度。

为了圈复杂性,你可以使用radon : https : //github.com/rubik/radon

(使用pip来安装: pip install radon

另外它也有这些function:

  • 原始指标(包括SLOC,注释行,空白行等)。
  • Halstead指标(全部)
  • 可维护性索引(Visual Studio中使用的索引)

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

对于圈复杂性,你可以试试这个perl程序 ,或者这篇介绍python程序的文章来做同样的事情

当你需要了解一个新项目时,Pycana就像魅力一样工作!

PyCAna (Python代码分析器)是python的一个简单的代码分析器的一个奇怪的名字,在执行你的代码后创build一个类图。

看看它是如何工作的: http : //pycana.sourceforge.net/

输出:

替代文字relations.png

感谢Pydev ,您可以很容易地将pylint集成到Eclipse IDE中,并且每次保存修改的文件时都可以获取代码报告。

有一个名为CloneDigger的工具,可以帮助您find类似的代码片段。

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

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

安装:

 $ pip install --upgrade mccabe 

用法:

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

注意上面6的门槛。 根据这个答案 ,大概5分应该被简化。

使用--min=3示例输出:

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

它也可以通过pylint-mccabe等来使用