静态代码检查新利器

简介: 静态代码检查新利器

静态代码检查


静态测试是指不运行被测程序本身,通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。而动态测试是通过运行被测程序来检查运行结果与预期结果的差异,并分析运行效率和健壮性等指标。静态测试被测对象是各种与软件相关的有必要进行测试的产物,是对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。静态测试可以手工进行,充分发挥人的思维的优势,并且不需要特别的条件,容易展开,但是静态测试对测试人员的要求较高,至少测试人员需要具有编程经验。静态测试主要包括各阶段的评审、代码检查、程序分析、软件质量度量等,用于对被测程序进行特性分析。其中评审通常有人来执行;代码检查程序分析、软件质量度量等即可人工完成,也可用工具来完成,但工具的作用和效果相对更大更好一些。


从上面我们可以了解到代码检查是静态测试中的关键一步,那么代码检查到底是个什么工作内容吗?


代码检查包括代码走查、桌面检查、代码审查等,主要检查代码和设计的一致性,代码对标准的遵循、可读性,代码的逻辑表达的正确性,代码结构的合理性等方面;可以发现违背程序编写标准的问题,程序中不安全、不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。从代码检查的定义中我们可以看出代码检查不需要自动任何服务就可以通过代码扫描完成,全部过程都是按照预定义好的规则完成的,只要针对不同的编程语言设计好不同的规则就可以对其进行代码扫描,完成代码检查任务了。如果能将其放到一个工具中完成,那么人工可以完全不参与,是一个完全自动化的流程。这也就导致了通过代码扫描完成的代码检查工作只是一个代码预定规则的检查,并不能保障其编写逻辑符合预期设计,同时如果预定规则不合理那么代码扫描的结果的偏差就会很大。


新工具Qodana


从上面的内容可以看出,代码扫描虽然尤其优越性也有其弊端,但是如果有很好的开放性的工具完成,通过修订并选取合适的规则是可以达到质量保障的预期的。在代码扫描的工具上选择并不多,如果站在平台化、服务化的角度,并且兼顾CI流水线的需求。每次说到静态代码扫描,相信所有人第一个想到的就是SonarQube,除了SonarQube我今天给你介绍一款JetBrains Qodana,Qobana 是 JetBrains 系列工具的新代码质量平台。官方地址如下:https://www.jetbrains.com/qodana

image.png


使用方法

Qodana提供了Docker的运行方式,那么我们仅需要拉取对应的docker image就可以在呢运行了,具体步骤如下:

- 1、 拉取Qodana的linter 镜像

docker pull jetbrains/qodana-<linter>

其中,Qodana的linter目前提供的种类如下:

image.png


具体可以进入官网自己查看。但运行pull命令后,如下:

image.png


- 2、当下载结束后,可以通过如下命令,进行扫描了。

docker run --rm -it -v <project-root-directory>/:/data/project/  -p 8080:8080 jetbrains/qodana-<linter> --show-report

image.png



- 3、当分析结束后,进入 http://localhost:8080,就可以看到结果了。


image.png


在第一次运行期间,Qodana仅使用重要检查指标来分析被测试项目。非重要检查和包含非重要代码的文件夹(如 Tests 文件夹)将被忽略。Qodana还报告了任何可能影响结果真实性或完整性的情况。例如,如果项目依赖于外部资源或生成的代码,而这些资源或生成的代码在分析过程中不可用,则最终结果可能会受到影响,Qodana会通知此类可疑结果。


Qodana提供了建立技术债的baseline的功能,这样我们就可以在baseline之上完成技术债的偿还。(Qodana将baseline存入qodana.sarif.json文件中)。下次一检测我们就可以基于这个baseline进行分析。

docker run -p 8080:8080 -v <project-root-directory>:/data/project jetbrains/qodana-<linter> --show-report --baseline=baseline.sarif.json


image.png


具体Qodana好不好用,你可以在自己的项目中试一下。


目录
相关文章
|
监控 安全 API
Outlook邮箱API发送邮件的具体步骤
使用Outlook邮箱API发送邮件涉及五个步骤:1) 注册Azure应用并获取API访问权限;2) 构建包含邮件详情的POST请求;3) 发送请求至API端点,附带验证信息和访问令牌;4) 检查API响应状态码确保邮件发送成功;5) 监控邮件发送状态。AokSend提供高效发信服务,支持触发式和SMTP/API接口。确保遵循最佳实践,保证邮件发送安全可靠。
|
9月前
|
人工智能 自然语言处理 安全
代码静态扫描工具集成与实践
代码静态扫描工具(Static Application Security Testing, SAST)是在不运行代码的情况下,通过分析源代码或二进制代码来发现潜在安全漏洞、代码缺陷和质量问题的工具
1069 4
|
5月前
|
弹性计算 容灾 数据库
2026年阿里云服务器地域与可用区全解析:分布、选择与机房查询
阿里云服务器的地域与可用区布局是保障业务稳定性、降低访问延迟的核心基础。其全球数据中心覆盖多国家和地区,国内以北京、杭州、上海等为核心节点,海外延伸至新加坡、东京、法兰克福等关键城市,不同地域与可用区在网络、容灾能力上差异显著。本文结合官方最新数据,详解地域与可用区的概念、分布规律、选择逻辑及机房地址查询方法,为业务部署提供客观参考。
|
编解码
FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作
《FFmpeg开发实战》书中3.4.3节讲解如何将H.264流封装成MP4。H.264流通常以SPS→PPS→IDR帧开始,这一说法通过雷霄骅的H264分析器得到验证。分析器能解析H.264文件但不支持MP4。ZLMediaKit服务器在遇到I帧时会自动插入SPS和PPS配置帧,确保流符合标准格式。若缺少这些帧,客户端拉流时会报错。FFmpeg开发实战:从零基础到短视频上线》书中提供了更多FFmpeg开发细节。
743 0
FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作
|
前端开发 JavaScript API
2025年前端框架是该选vue还是react?有了大模型-例如通义灵码辅助编码,就不用纠结了!vue用的多选react,react用的多选vue
本文比较了Vue和React两大前端框架,从状态管理、数据流、依赖注入、组件管理等方面进行了详细对比。当前版本和下载量数据显示React更为流行,但Vue在国内用户量增长迅速。Vue 3通过组合式API提供了更灵活的状态管理和组件逻辑复用,适合中小型项目;React则更适合大型项目和复杂交互逻辑。文章还给出了选型建议,强调了多框架学习的重要性,认为技术问题已不再是选型的关键,熟悉各框架的最佳实践更为重要。
11473 1
|
数据可视化 开发者 索引
详解Wireshark LUA插件函数:function p_myproto.dissector(buffer, pinfo, tree)
在 Wireshark 中,LUA 插件通过 `function p_myproto.dissector(buffer, pinfo, tree)` 扩展协议解析能力,解析自定义应用层协议。参数 `buffer` 是 `PacketBuffer` 类型,表示原始数据包内容;`pinfo` 是 `ProtoInfo` 类型,包含数据包元信息(如 IP 地址、协议类型等);`tree` 是
1035 1
|
存储 缓存 Linux
Ramfs、rootfs和initramfs【ChatGPT】
Ramfs、rootfs和initramfs【ChatGPT】
1087 2
|
JSON 前端开发 Java
HTTP连接客户端,选 HttpClient 还是 OkHttp ?
HTTP连接客户端,选 HttpClient 还是 OkHttp ?
1519 0
HTTP连接客户端,选 HttpClient 还是 OkHttp ?