SonarQube安全扫描常见问题
目录
一、SonarQube质量报告
二、SonarQube扫描常见问题和修复方法
三、SonarQube质量配置
最近小编在使用SonarQube工具进行代码扫描,检查代码异味,系统漏洞等,实际过程中也遇到了不少问题,这篇文章主要列举我遇到的常见问题和解决方法。
如何使用SonarQube进行安全扫描,可以查看往期文章:SonarQube安全扫描_sonarqube 安全扫描-CSDN博客
一、SonarQube质量报告
进入到SonarQube首页,可以看到项目报告的全部信息,如下图所示:
点击项目名称,可查看报告详情,New Code(新增代码)Overall Code(全量代码)
二、SonarQube扫描常见问题和修复方法
1.(不应重复字符串文字)String literals should not be duplicated.
问题分析:重复输出某个文字
解决方法:定义一个常量来代替重复的字面值
上述代码可修改为:
const errmsg = "check request fields required failed, %w"
err, errResp := CheckRequestFieldsRequired(req, reflect.TypeOf(*req))if err != nil {return fmt.Errorf(errmsg, err), errResp}
2.(认知功能的复杂度不应过高)Cognitive Complexity of functions should not be too high.
问题分析:代码复杂度过高
解决方法:将封装的函数可以拆分成多个函数,其实每个if...else...或者for语句都可以根据代码需求封装为函数,降低代码复杂度。
3.(函数不能为空)Functions should not be empty.
问题分析:函数为空
解决方法:首先确定函数体为空的原因,可能的点:预留的钩子,实现接口所必需,遗漏实现功能。
如果是预留的狗子或者满足接口的需要可以在函数内添加注释,说明当前的情况和未来可能的计划。
如果是遗漏了某个功能的实现,根据实际需求补充相关的逻辑。
4.(函数不应该有太多的参数)Functions should not have too many parameters.
问题分析:函数存在过多的参数,增加了调用该函数的复杂性,同时也降低了代码的可读性和可维护性。
解决方法:可以使用参数对象模式,创建一个包含所有这些参数的新结构体类型,可以减少函数的参数数量。
上述代码可修改为:
type AssembleHPCJobRequestParams struct {Context context.ContextLogger *zap.SugaredLoggerJob *models.JobAppImage stringEnvVars map[string]stringSchedulerSubmitFlags map[string]stringNoTransfer boolLocalImage boolCoresPerNode int
}func AssembleHPCJobRequest(params AssembleHPCJobRequestParams) hpc.SystemPostRequest {// 函数的实现逻辑...
}//在调用这个函数的时候
params := AssembleHPCJobRequestParams{Context: ctx,Logger: logger,Job: job,AppImage: appImage,EnvVars: envVars,SchedulerSubmitFlags: schedulerSubmitFlags,NoTransfer: noTransfer,LocalImage: localImage,CoresPerNode: coresPerNode,
}request := AssembleHPCJobRequest(params)
5.(局部变量和函数参数名称应遵守命名约定)Local variable and function parameter names should comply with a naming convention.
问题分析:此局部变量命名不符合正则表达式
解决方法: 上述命名其实已经符合正则表达式规则,但是按照常见的Go语言命名习惯,变量名一般采用驼峰式命名(CamelCase),而非下划线分隔。
上述命名可修改为:可以将user_combo
更名为userCombo
,将turn_info_each
更名为turnInfoEach
三、SonarQube质量配置
质量规则 | go:Sonar way Bug:6 坏味道:17 | ||
规则 | 类型 | 违规级别 | 中文 |
Variables should not be self-assigned | Bug | 主要 | 变量不应自赋值 |
Identical expressions should not be used on both sides of a binary operator | Bug | 主要 | 不应在二元运算符的两侧使用相同的表达式 |
All code should be reachable | Bug | 主要 | 所有代码都应该是可访问的 |
Related "if/else if" statements should not have the same condition | Bug | 主要 | 相关的“if/elseif'语句不应具有相同的条件 |
"=+" should not be used instead of "+=" | Bug | 主要 | 不能用“=+”代替“+=” |
All branches in a conditional structure should not have exactly the same implementation | Bug | 主要 | 条件结构中的所有分支都不应有完全相同的实现 |
Cognitive Complexity of functions should not be too high | 坏味道 | 严重 | 认知功能的复杂度不应过高 |
String literals should not be duplicated | 坏味道 | 严重 | 不应重复字符串文字 |
Functions should not be empty | 坏味道 | 严重 | 函数不能为空 |
Track uses of "FIXME" tags | 坏味道 | 主要 | 跟踪"FIXME"标签的使用情况 |
Two branches in a conditional structure should not have exactly the same implementation | 坏味道 | 主要 | 条件结构中的两个分支不应该有完全相同的实现 |
Redundant pairs of parentheses should be removed | 坏味道 | 主要 | 应删除多余的圆括号对 |
Functions should not have identical implementations | 坏味道 | 主要 | 函数不应该有相同的实现 |
Track parsing failures | 坏味道 | 主要 | 跟踪解析失败 |
"switch" statements should not have too many "case" clauses | 坏味道 | 主要 | "switch"语句不应该有太多的"case"从句 |
Functions should not have too many parameters | 坏味道 | 主要 | 函数不应该有太多的参数 |
Nested blocks of code should not be left empty | 坏味道 | 主要 | 嵌套的代码块不应为空 |
Multi-line comments should not be empty | 坏味道 | 次要 | 多行注释不应为空 |
Boolean checks should not be inverted | 坏味道 | 次要 | 布尔值检查不应倒置 |
Boolean literals should not be redundant | 坏味道 | 次要 | 布尔字面值不应是多余的 |
Function and method names should comply with a naming convention | 坏味道 | 次要 | 函数和方法的名称应符合 命名约定 |
Local variable and function parameter names should comply with a naming convention | 坏味道 | 次要 | 局部变量和函数参数名称应遵守命名约定 |
Track uses of "TODO" tags | 坏味道 | 提示 | 跟踪“TODO”标签的使用 |
经过上述分享,应该对SonarQube工具进行安全扫描和解决代码异味有了一定的了解,请继续关注小编~带来更多的分享哦~
相关文章:

SonarQube安全扫描常见问题
目录 一、SonarQube质量报告 二、SonarQube扫描常见问题和修复方法 三、SonarQube质量配置 最近小编在使用SonarQube工具进行代码扫描,检查代码异味,系统漏洞等,实际过程中也遇到了不少问题,这篇文章主要列举我遇到的常见问题和…...

Golang内存模型与分配机制
简述 mheap为堆,堆和进程是一对一的;mcentral(小mheadp),mcahe(GMP的P私有),分配内存顺序由后向前。 在解决这个问题,Golang 在堆 mheap 之上,依次细化粒度&a…...

HarmoneyOS星河版 安装和启动
一、下载和安装DevEco Studio 官网链接:OpenAtom OpenHarmony 1.1 找到对应的操作系统进行下载 创建安装Harmony的文件夹: 1.2 下载后进行安装 1.3 分别安装Node、Ohpm、SDK 分别安装Node、Ohpm和SDK 二、.创建一个新项目并运行 2.1 选择[OpenHarmon…...

奇舞周刊第530期:AIGC和低代码结合应用全栈研发实践总结
周五快乐(图片由midjourney生成) 奇舞推荐 ■ ■ ■ AIGC 和低代码结合应用全栈研发实践总结 得物通过低代码和大模型技术简化电商供应链系统开发。尽管低代码工具存在一些局限,但结合大模型生成脚本和理解配置,提高了效率。未来将…...
linux上运行js脚本
貌似学运维,啥都要懂一点儿?????? 我们将使用 Node.js 和 ES6 模块语法。 首先,确保你已经安装了 Node.js。 创建项目文件结构 假设我们的项目结构如下: my_project/…...
PCA 在图像分析上的应用
同一物体旋转角度求取 直接上代码: import cv2, os import numpy as np import timedef perform_pca(image, num_components):# 将图像转换为浮点型img_float np.float32(image)img_flatten img_float.reshape(-1, 2)# 计算均值和协方差矩阵mean, eigenvectors …...

springboot项目mapper无法自动装配,未找到 ‘userMapper‘ 类型的Bean解决办法.
一开始我看到了这个回答:springboot项目mapper无法自动装配,未找到 ‘userMapper‘ 类型的 Bean解决办法(含报错原因)_无法自动装配。找不到 usermapper 类型的 bean。-CSDN博客 mapper无法自动装配,未找到 ‘userMap…...

TC3xx A\B SWAP机制的小细节(2)
目录 1.引入 2.TC3xx Swap机制小细节 3.小结 1.引入 上文TC3xx A\B SWAP机制的小细节(1)-CSDN博客主要把OTA的概念,以及MCU的硬件A\B Swap机制做了简单介绍,下面我们来聊聊TC3xx的SWAP机制 2.TC3xx Swap机制小细节 英飞凌TC3xx提供了硬件SOTA机制&…...

双绞线(网线)的制作与测试
实验目的 1、熟悉常用双绞线(网线)及其制作工具的使用; 2、掌握非屏蔽双绞线的直通线、交叉线的制作及连接方法; 3、掌握双绞线连通性的测试。 设备要求:RJ45压线钳,RJ45水晶头,UTP线缆&…...
高效处理海量慢SQL日志文件:Java与JSQLParser去重方案详解
在大数据处理环境下,慢SQL日志优化是一个必要的步骤,尤其当日志文件达到数GB时,直接操作日志文件会带来诸多不便。本文将介绍如何通过Java和JSQLParser库来解析和去重慢SQL日志,以提高性能和可维护性。 背景 公司生产环境中&…...

企业内部、与合作伙伴/客户文档协作如何高效安全地收集资料?
在企业的日常运营与对外合作中,「文件收集」是一项特别常见的文档协作需求。例如,公司举办项目经验分享大会,组织者需要提前收集演讲者的材料;新项目启动时,项目经理需要快速收集技术方案和报价方案以便招投标和商务活…...
用Unity创造自己的绿洲
“谢谢你能玩我的游戏!” 希望将来我也能做出一款影响全世界的游戏,就比如现在的《英雄联盟》,或是电影里的《绿洲》!然后也说出这么一句话:谢谢你能玩我的游戏! 阶段性的总结一下 那就展示一下最近完成的…...

服务器数据恢复—KVM虚拟机被误删除如何恢复虚拟磁盘文件?
服务器数据恢复环境&故障: 1台服务器,Linux操作系统EXT4文件系统,部署了数台KVM虚拟机,每台虚拟机包含一个qcow2格式的磁盘文件,和一个raw格式的磁盘文件。 工作人员操作失误删除了3台服务器上的KVM虚拟机…...
工具清单 - 看板工具
# 工具清单 Crepido在新窗口打开 - Create (kanban) boards to track users and projects from flat markdown files. MIT NodejsKanboard在新窗口打开 - Simple and open source visual task board. (Source Code在新窗口打开) MIT PHPmyTinyTodo在新窗口打开 - Simple way t…...
Go微服务: 分布式之发送带有事务消息的示例
分布式之发送带有事务消息 现在做一个RocketMQ的事务消息的 demo 1 )生产者 package mainimport ("context""fmt""time""github.com/apache/rocketmq-client-go/v2""github.com/apache/rocketmq-client-go/v2/prim…...
【go】go初始化命令总结
包初始化 test项目目录下执行 go mod init test go mod tidy生成二进制可执行文件 go build -o test .\main.go...

vue音乐播放条
先看效果 再看代码 <template><div class"footer-player z-30 flex items-center p-2"><div v-if"isShow" class"h-12 w-60 overflow-hidden"><div :style"activeStyle" class"open-detail-control-wrap&…...

halcon实现浓淡补正,中间值补正-抽取暗
代码效果 抽取前 中值抽取暗 halcon函数代码 测试图片参数 NoiseCut:16 Gain:1 输入ImagePart NoiseCut Gain *获取直方图 get_domain (ImagePart, Domain) gray_histo_range(Domain,ImagePart,0,255,256, Histo, BinSize) area_center(Domain, NumPixels, Row, Column) …...

太速科技-FMC213V3-基于FMC兼容1.8V IO的Full Camera Link 输入子卡
FMC213V3-基于FMC兼容1.8V IO的Full Camera Link 输入子卡 一、板卡概述 该板卡为了考虑兼容1.8V电平IO,适配Virtex7,Kintex Ultrascale,Virtex ultrasacle FPGA而特制,如果要兼容原来的3.3V 也可以修改硬件参数。板卡支持1路…...
GPU短缺和模型效率的推动
1. 引言 随着全球GPU短缺和云计算成本的不断上升,开发更高效的AI模型成为了当前的焦点。技术如低秩适应(LoRA)和量化(Quantization)在优化性能的同时,减少了资源需求。这些技术不仅在当前的AI开发中至关重…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...