一、概念
静态代码分析也称静态分析,作为一种软件验证活动,它不要求执行代码,而是通过分析源代码实现质量、可靠性和安全性目的。使用静态分析,您可以识别可能危害您应用安全的缺陷和安全漏洞。静态分析不产生测试用例编写和代码检测配置的开销,因此可以较为经济地衡量和跟踪软件质量指标。
相比较于动态测试,动态测试需要QA编写和执行大量测试用例,由于动态测试不能穷尽所有情形,单靠它还不足以确保软件安全可靠。使用静态代码分析可以弥补动态测试的缺点,具有错误检测、成本低、检验编码标准是否合规和证明不存在严重运行时错误等多个功能优点。
二、背景
当前项目全部未接入静态代码扫描工具,急需要引入静态代码扫描工具用于发现代码中的安全问题,提升代码质量,保障代码规范和线上稳定运行,在稳定运行后可用于推广到其他项目组,用于项目质量检测。本次调研主要针对算法平台的go项目,因此主要针对是否适用于go语言进行工具调研。
三、调研方式
本次静态代码扫描工具调研主要采用搜索引擎关键字搜索的方式进行,主要信息来源为infoq、csdn、简书等网站。
四、主要内容
1.SonarLint
SonarLint是一个免费的开源IDE 插件,可识别并帮助您在编写代码时解决质量和安全问题。像拼写检查器一样,SonarLint 会显示缺陷并提供实时反馈和清晰的修复指导,以便从一开始就提供整洁的代码,如下为SonarLint在java项目中的一个使用结果,只需要右键项目点击Analyze with SonarLint即可执行一次代码质量检查,生成如图2所示的检测报告,发现代码中存在的质量问题和安全问题等。
图1 SonarLint执行方式
图2 SonarLint执行结果
五、调研结论
由于我们本次调研主要针对go语言搭建的项目进行静态代码扫描,并且寻求免费稳定的静态代码扫描工具,结合上面主要工具调研结果显示,SonarLint,DeepSource和SonarQube适用于go语言,但是由于deepsource非免费工具,因此放弃考虑,进一步考虑,sonarlint主要用于本地在插件中使用,无法用于进一步自动化持续集成,因此我们决定使用sonarqube+sonarscanner作为静态代码扫描工具,其中SonarQube是sonar的Web服务端,用来发布应用和在线浏览(分析),sonar-scanner用于扫描源码, 将代码写入数据库之类的地方,便于sonarqube进行分析。