我如何分析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
等来使用