背景
静态代码分析工具能够提炼出丰富的代码静态属性信息,这使得程序员可以对代码的复杂性、可修改性和可读性有进一步的了解。
有哪些静态分析工具呢
度量Python代码的静态属性
是否符合编码标准,如 PEP8
代码复杂度度量,如 McCabe 度量
代码中的错误,如语法错误、缩进问题、缺少相关导入包、变量覆盖以及其它问题
代码的逻辑问题
度量Python的生态系统
Pylint:Pylint 是Python 代码的一个静态检查工具,它能够检测一系列的代码错
误、代码坏味道和格式错误。Pylint 使用的编码格式类似于 PEP-8。它的最新版本还提
供代码复杂度的相关统计数据,并能打印相应报告。不过在检查之前,Pylint 需要先执行
代码。具体可以参考 http:/ /pylint.orgo
Pyflakes:Pyflakes 相对于Pylint 而言出现的时间较晚,不同于 Pylint 的是,它不
需要在检查之前执行代码来获取代码中的错误。Pytfakes 不检查代码的格式错误,只检
查逻辑错误。具体可以参考 http://launchpad.net/pyflakes。
MeCabe:它是一个脚本,根据 McCabe 指标检查代码复杂性并打印报告
具体可以参考 https://pypi.python.org/ pyp1/ mccabe。
Pycodestyle: Pycodestyle 是一个按照 PEP-8 的部分内容检查 Python 代码的一个
工具。这个工具之前叫作PEP-8,具体可以参考 http://github.com/PyCQA/pycodestyle。
Flake8:Flake8封装了Pyflakes、 MeCabe 和Pycodestyle 工具,它可以执行这:
个工具提供的检查。具体可以参考 https://gitlab.com/pycga/flake8/。
代码的坏味道
代码的坏味道指代码中深层问题的表面症状,它通常暗示着设计上的问题,这可能会导致未来的错误或者对特定代码段的开发产生负面影响。代码坏味道本身并不是错误,但是它们暗示着代码中采用的问题解决方法是不正确的,这应该通过重构代码来解决,一些常见的代码坏味道如下。
在类层面上
上帝对象(god object):一种试图做很多事情的对象。换言之,这种对象没有任何的内聚力。
常量类 (constant class):一种只有常量集合的类,而常量集合在其他地方被使用。事实上,该常量在理想状态下不应该属于这个类。
拒绝遗赠 (refused buquest):一种不符合基类使用原则的类,它打破了继承的替
代原则(所有引用基类的地方必须能透明地使用其子类的对象)。
吃白食 (freeloader):一种有很少功能的类,几乎不做什么事情,有很少的属性。
特征妒忌 (fcature eavy):一种过分依赖其他类方法的类,也就是有高男合性。
在方法层面上
长方法 (long method):太大和太复杂的方法。
参数蠕变 ( parameter crecp):方法中有过多的参数。这会导致方法的调用和测试变得困难。
圈复杂度 (cydomatic complexity):方法中有过多的分支和循环,以至于代码逻辑难以理解,而且容易导致不易察觉的缺陷。这样的方法应该被重构分解成多个方法,或者重新构思逻辑以避免过多的分支。
标识符过长或过短 (ovedly long or short identifier) :函数使用了过长或过短的变量名以至于难以看出该变量的含义,函数的名字也是如此。代码坏味道的一个相关" antipattern,是设计坏味道,这是系统设计中的表面症状表明在架构中存在较深层次的问题。