目录
一、静态代码分析介绍
根据维基百科,静态代码检查又称为静态程序分析,是指在不运行计算机程序的条件下,进行程序分析的方法。静态代码检查工具会从词法、语法、语义等多维度去对工程代码扫描分析,发现可能存在的问题,比如变量未定义、类型不匹配、变量作用域问题、数组下标越界、内存泄露等问题。工具会按照自己的规则进行问题的严重等级划分,给出不同的标识和提示。
通常情况下,静态代码检查之后大家都会去将错误清零,但是有些警告不影响程序功能就忽略不去修改了。同时修改这类问题需要投入的时间比较多,增加了团队的工作量。而且对于新人来说,如果不熟悉代码框架的情况,修改静态检查问题的时候还有可能导致出现新的bug出现。有时工具还存在误报的情况等等,所以就出现了文章开头中团队的吐槽点:check清零。既然如此,为什么要进行静态代码检查呢?
代码是软件的“基因”,在代码层次上进行静态分析,相对于传统的动态功能测试、单元测试、渗透更加系统和精确。首先,程序的静态分析可以打开程序的结构,从程序的逻辑结构进行分析,这种白盒的方式能够明显降低漏报。其次,代码分析往往在软件开发或测试阶段,研究表明,开发阶段发现缺陷的成本是测试1/4,是运行阶段的1/10,而开发阶段发现出现缺陷的数量是测试阶段3倍,是运行阶段的10倍。由此,越来越多的组织采用源代码检测工具进行质量或安全检测,代码审计也成了很多工业标准(IEC61508、DO-178B/C等)和安全标准(等保2.0等)必要的检测手段。近年来,源代码静态分析工具种类众多,很多企业希望通过部署源代码检测产品来验证和解决软件开发和测试过程中的出现的代码问题。
静态代码检查也叫静态测试,是质量内建举措中的测试左移实践之一,在静态代码检查阶段发现代码的问题修复成本是很低的。
二、静态代码分析工具
2021年,鸿渐科技启动了关于SDL和开发安全的代码分析工具项目。调研了很多产品的功能及POC,根据Gartner和国内权威第三方调研机构的调研,选出了若干获得普遍认可的工具,如国外的Fortify、checkmarx、Klocwork和Coverity,国内的代码卫士、Wukong、鸿渐SAST和酷德啄木鸟。
表1:国外产品对比(含鸿渐SAST)
注:国外工具1-4为Fortify、checkmarx、Klocwork和Coverity中的某一款,排序无对应关系。
表二:国内产品对比
注:国内工具1-3为代码卫士、Wukong和酷德啄木鸟中的某一款,排序无对应关系。
三、Sonarlint静态代码分析工具介绍
作为初步静态代码分析使用,我们选择开源的sonar工具。它使用起来方便高效,便于开发阶段提前发现问题,提升产品质量。
1. 定义
sonar是一个代码质量管理的开源平台,用于管理源代码的质量,通过插件形式,可以支持包括java、C#、JavaScript等二 十余种编程语言的代码质量管理与检测。
2. 特性
对代码复杂度的一个分析
复杂度过高导致的后果
(1) 很难理解
(2) 很难维护
(3) 很容易出错
检测重复的代码
函数更改,很容易忘记一起更改。 复用代码可以提高效率
检测单元测试的覆盖率
白盒测试的一种方法
检测代码是否符合相应标准
规范化和标准化,提高代码的可读性
没有足够的或者过多的注释
如果说注释太少:阅读性过低
注释过多:开发人员将花费太多时间阅读和理解,违背了初衷
检测存在的潜在的bug
比如死代码等
检测设计和架构
检测耦合等
3. SonarQube 的官方文档
SonarQube是管理代码质量的一个开放平台,可以快速的定位代码中潜在的或者明显的错误。
官网见 https://www.sonarqube.org/
参考:
1、https://www.zhihu.com/question/28764803/answer/2120512077