当前位置: 首页 > news >正文

【Python】如何度量优秀代码——静态分析工具

静态分析工具

    • 背景
    • 有哪些静态分析工具呢
      • 度量Python代码的静态属性
      • 度量Python的生态系统
    • 代码的坏味道
      • 在类层面上
      • 在方法层面上
    • 结语

背景

静态代码分析工具能够提炼出丰富的代码静态属性信息,这使得程序员可以对代码的复杂性、可修改性和可读性有进一步的了解。

有哪些静态分析工具呢

度量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,是设计坏味道,这是系统设计中的表面症状表明在架构中存在较深层次的问题。

结语

现在是下午两点,上班时间到,本文送你我的关怀:送你如意, 把烦恼打败;送你快乐,把忧伤击倒;送你轻松,把忙碌扫除;

相关文章:

【Python】如何度量优秀代码——静态分析工具

静态分析工具背景有哪些静态分析工具呢度量Python代码的静态属性度量Python的生态系统代码的坏味道在类层面上在方法层面上结语背景 静态代码分析工具能够提炼出丰富的代码静态属性信息,这使得程序员可以对代码的复杂性、可修改性和可读性有进一步的了解。 有哪些…...

Open3D 点云高程归一化(基于2维地面点,Python版本)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 之前的博客中Open3D 点云高程归一化(基于地面点,Python版本)是基于三维空间进行最近地面点的查询操作,这里对其进行修改一下,将点云投影到水平面,基于二维空间进行最近地面点的查询,这种方式对一些较为陡峭的…...

动态系统的建模与分析

前言 CS小菜鸡控制理论入门 视频学习笔记 视频传送门:动态系统的建模与分析】9_一阶系统的频率响应_低通滤波器_Matlab/Simulink分析 拉普拉斯变换 F(s)L{f(t)}∫0∞f(t)e−stdtF(s)\mathcal{L}\{f(t)\}\int_0^\infty f(t)e^{-st}\mathrm{d}tF(s)L{f(t)}∫0∞​f(t)…...

QCC51XX---HCI log

高通在新的S3/S5以及往后新的平台上面,引入了一个新的调试功能。就是标题说的HCI log,他类似air trace那样用来分析蓝牙协议的,这样我们就可以很详细地找到通信协议之间哪个部分出了问题。以前我们都是通过抓包器抓air trace分析的,抓包器一个要几十万,学会这个功能就相当…...

Redis四 原理篇

《Redis四 原理篇》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《Redis四 原理篇》《Redis四 原理篇》1、原理篇-Redis数据结构1.1 Redis数据结构-动态字符串1.2 Redis数据结构-intset1.3 Redis数据结构-Dict1.4 Redis数据结构-ZipList1.4.1 Redis数据…...

从0开始写Vue项目-Vue实现数据渲染和数据的增删改查

从0开始写Vue项目-环境和项目搭建_慕言要努力的博客-CSDN博客从0开始写Vue项目-Vue2集成Element-ui和后台主体框架搭建_慕言要努力的博客-CSDN博客从0开始写Vue项目-Vue页面主体布局和登录、注册页面_慕言要努力的博客-CSDN博客从0开始写Vue项目-SpringBoot整合Mybatis-plus实现…...

AI技术的发展,人工智能对我们的生活有那些影响?

人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一…...

Unity中的Mathf数学运算讲解(值得收藏)

Unity中的Mathf数学运算有哪些? Mathf.Abs(f)绝对值 计算并返回指定参数 f 绝对值 例如: // 输出 10 Debug.log(Mathf.Abs(-10)) Debug.log(Mathf.Abs(10))Mathf.Sin正弦 static function Sin (f : float) : float 计算并返回以弧度为单位指定的角 f 的…...

ABBYY FineReader16最新PDF图片文字识别软件

ABBYY FineReader16是非常好的一款 OCR 识别软件(可以识别不可编辑的PDF和图片文件),操作非常简单。ABBYY FineReader 16是一款知名的OCR文字识别软件(图片文字识别)。ABBYY 16采用了ABBYY最新推出的基于AI的OCR技术&a…...

Leetcode14. 最长公共前缀

一、题目描述: 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入:strs [“flower”,“flow”,“flight”] 输出:“fl” 示例 2: 输入:…...

JTT808jt1078

前言 交通部与2016年10月份推出了JT/T 1078-2016标准&#xff0c;全称是<道路运输车辆卫星定位系统视频通信协议> JTT808 808消息头内容如下表所示&#xff1a; 起始字节字段数据类型描述及要求0消息IDWORD2消息体属性WORD消息体属性格式结构图见图24终端手机号BCD[6…...

数字孪生加持,水利水电工程或将实现全生命周期管理

水利水电工程在数字孪生技术的加持&#xff0c;使得建设和运营更加高效和智能化&#xff0c;将工程中各种元素、过程和系统数字化&#xff0c;并建立数字孪生模型&#xff0c;以实现工程建设和运营的智能化管理。数字孪生对水利水电实现对工程建设的全生命周期管理&#xff0c;…...

RA4M2开发(3)----读取ISL29035数据,并在OLED上显示,串口打印

概述 HS3003是一种数字式温湿度传感器&#xff0c;可以测量环境中的温度和湿度。读取HS3003的数据需要连接传感器到一个数据采集系统&#xff0c;一般是微处理器或者单片机。以下是一个简单的读取HS3003数据的概述&#xff1a; 连接电路&#xff1a;将HS3003传感器连接到微处…...

密码复杂度

检查账户认证失败次数限制 修复建议&#xff1a; 配置SSH方式账户认证失败次数限制 编辑/etc/pam.d/sshd文件 在auth行下方添加&#xff1a; auth required pam_tally.so deny5 unlock_time600 no_lock_time 在account行下方添加&#xff1a; account required pam_tally.s…...

Python打印() 中的 SEP 参数

默认情况下&#xff0c;Python 中 print&#xff08;&#xff09; 函数的参数之间的分隔符是空格&#xff08;softspace 功能&#xff09;&#xff0c;可以根据我们的选择对其进行修改并设置为任何字符、整数或字符串。“sep”参数用于实现相同的目的&#xff0c;它仅在python …...

AG9300方案替代|替代AG9300设计Type-C转VGA方案|CS5260设计原理图

AG9300方案替代|替代AG9300设计Type-C转VGA方案|CS5260设计原理图 安格 AG9300是一款实现USB TYPE-C到VGA数据的单片机解决方案转换器。ALGOLTEK AG9300支持USB Type-C显示端口交替模式&#xff0c;AG9300可以将视频和音频流从USB Type-C接口传输到VGA端口。在AG9300&#xff0…...

力扣-文章浏览

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1148. 文章浏览二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.其他总结前言 一、题目&#xff1a;1148…...

Unity提取场景中的静态文本

有些单机项目开发的时候没有做本地文本配置文件&#xff0c;全部写死在场景的对象上面&#xff0c;简单记录一下怎么提取场景里面的文本并且写入到配置文件里面using System.Collections.Generic;using System.IO;using TMPro;using UnityEditor;using UnityEngine;using Unity…...

Netty常用核心类说明

MessageToByteEncoder MessageToByteEncoder是一个抽象编码器&#xff0c;子类可重写encode方法把对象编码为ByteBuf输出。 MessageToByteEncoder继承自ChannelOutboundHandlerAdapter&#xff0c;encode在出站是被调用。 public class MyMessageEncoder extends MessageToB…...

ingress服务

user.default.svc.cluster.local是集群内部service的dns地址&#xff0c;集群外部想访问集群里面的service&#xff0c;可以通过LoadBalaner和NodePort。LoadBalaner可以获得一个公网ip&#xff1b;NodePort在宿主机上开一个端口&#xff0c;访问这个端口会把报文实际的转发到集…...

SEO_为什么你的SEO策略无效?常见原因与解决办法(372 )

SEO策略无效的常见原因 在当今数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;是网站流量和业务增长的关键。不少企业在实施SEO策略后&#xff0c;却发现效果并不理想。为什么你的SEO策略无效&#xff1f;我们将从多个角度分析常见原因&#xff0c;并给出相应…...

Kandinsky-5.0-I2V-Lite-5s应用场景:游戏NPC立绘动态化+过场动画快速生成

Kandinsky-5.0-I2V-Lite-5s应用场景&#xff1a;游戏NPC立绘动态化过场动画快速生成 1. 游戏开发中的视觉挑战 在游戏开发过程中&#xff0c;NPC立绘动态化和过场动画制作一直是两个耗时费力的环节。传统方法需要美术团队逐帧绘制动画&#xff0c;或者使用复杂的3D建模工具&a…...

智谱开源手机AI框架实测:一句话让Open-AutoGLM帮你搜索、购物、发微信

智谱开源手机AI框架实测&#xff1a;一句话让Open-AutoGLM帮你搜索、购物、发微信 1. 什么是Open-AutoGLM&#xff1f; Open-AutoGLM是智谱AI开源的手机端智能助理框架&#xff0c;它能像真人一样操作你的手机。想象一下&#xff0c;你只需要说"帮我订个外卖"&…...

揭秘宇树科技G1人形机器人:消费级市场的破局者与挑战

1. G1人形机器人&#xff1a;消费级市场的颠覆者 当身高1.3米的G1人形机器人站在我面前时&#xff0c;第一感觉是"这玩意儿居然不到10万"。作为宇树科技进军消费级市场的首款产品&#xff0c;G1确实在价格和体积上做了精准定位。相比那些动辄几十万的工业级机器人&am…...

深入Linux 0.11内核:从_syscall1宏到系统调用表的完整链路拆解

深入Linux 0.11内核&#xff1a;从_syscall1宏到系统调用表的完整链路拆解 在操作系统的演进历程中&#xff0c;系统调用机制始终扮演着用户程序与内核服务之间的关键桥梁角色。对于希望真正理解计算机系统底层运作的开发者而言&#xff0c;掌握系统调用的完整实现链路不仅是提…...

5分钟本地部署Asian Beauty Z-Image Turbo:零基础生成东方美学人像写真

5分钟本地部署Asian Beauty Z-Image Turbo&#xff1a;零基础生成东方美学人像写真 在数字内容创作蓬勃发展的今天&#xff0c;高质量人像图像的需求与日俱增。特别是对于东方审美风格的人像写真&#xff0c;传统拍摄方式成本高昂且效率低下。今天&#xff0c;我将带你快速部署…...

如何在没有 SEO 预算的情况下提高网站排名

如何在没有 SEO 预算的情况下提高网站排名 在当今互联网时代&#xff0c;网站的排名直接关系到其能否吸引到更多的流量和用户。不少小型企业和个人博客在没有 SEO 预算的情况下&#xff0c;往往陷入困境&#xff0c;不知道如何提高网站排名。如何在没有 SEO 预算的情况下提高网…...

OpenClaw模型微调:Kimi-VL-A3B-Thinking领域适配数据准备指南

OpenClaw模型微调&#xff1a;Kimi-VL-A3B-Thinking领域适配数据准备指南 1. 为什么需要领域特定数据微调 当我第一次尝试将Kimi-VL-A3B-Thinking模型应用到医疗影像分析场景时&#xff0c;发现模型对专业术语的理解和图像特征的把握都不够精准。这让我意识到&#xff0c;即使…...

蓝桥杯二分算法通关指南:模板+真题+避坑,O(logn)秒杀大数据题

蓝桥杯二分算法通关指南&#xff1a;模板真题避坑&#xff0c;O(logn)秒杀大数据题 文章目录蓝桥杯二分算法通关指南&#xff1a;模板真题避坑&#xff0c;O(logn)秒杀大数据题一、蓝桥杯二分核心题型&#xff08;精简必背&#xff09;1. 二分查找&#xff08;基础必考&#xf…...

从零到一:使用blog_demos构建企业级Flink流处理应用的完整指南

从零到一&#xff1a;使用blog_demos构建企业级Flink流处理应用的完整指南 【免费下载链接】blog_demos CSDN博客专家程序员欣宸的github&#xff0c;这里有六百多篇原创文章的详细分类和汇总&#xff0c;以及对应的源码&#xff0c;内容涉及Java、Docker、Kubernetes、DevOPS等…...