当前位置: 首页 > 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;访问这个端口会把报文实际的转发到集…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...