静态代码检查就是静态测试的一种,因此我们先说说静态测试和动态测试都是什么,然后我们再来聊一聊静态代码检查。
静态测试是指不运行被测程序本身,通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。而动态测试是通过运行被测程序来检查运行结果与预期结果的差异,并分析运行效率和健壮性等指标。
静态测试被测对象是各种与软件相关的有必要进行测试的产物,是对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。静态测试可以手工进行,充分发挥人的思维的优势,并且不需要特别的条件,容易展开,但是静态测试对测试人员的要求较高,至少测试人员需要具有编程经验。
静态测试主要包括各阶段的评审、代码检查、程序分析、软件质量度量等,用于对被测程序进行特性分析。其中评审通常有人来执行;代码检查程序分析、软件质量度量等即可人工完成,也可用工具来完成,但工具的作用和效果相对更大更好一些。
从上面我们可以了解到代码检查是静态测试中的关键一步,那么代码检查到底是个什么工作内容吗?
代码检查包括代码走查、桌面检查、代码审查等,主要检查代码和设计的一致性,代码对标准的遵循、可读性,代码的逻辑表达的正确性,代码结构的合理性等方面;可以发现违背程序编写标准的问题,程序中不安全、不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。
从代码检查的定义中我们可以看出代码检查不需要自动任何服务就可以通过代码扫描完成,全部过程都是按照预定义好的规则完成的,只要针对不同的编程语言设计好不同的规则就可以对其进行代码扫描,完成代码检查任务了。如果能将其放到一个工具中完成,那么人工可以完全不参与,是一个完全自动化的流程。这也就导致了通过代码扫描完成的代码检查工作只是一个代码预定规则的检查,并不能保障其编写逻辑符合预期设计,同时如果预定规则不合理那么代码扫描的结果的偏差就会很大。
从上面的内容可以看出,代码扫描虽然尤其优越性也有其弊端,但是如果有很好的开放性的工具完成,通过修订并选取合适的规则是可以达到质量保障的预期的。在代码扫描的工具上选择并不多,如果站在平台化、服务化的角度,并且兼顾CI流水线的需求,首当其冲的就是SonarQube。
Sonar是一个用于代码质量管理的开源平台。通过插件机制,Sonar 可以集成不同的IDE、CI系统、测试工具中,比如pmd-cpd、checkstyle、findbugs、Jenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。目前Sonar的规则覆盖了绝大部分的主流的编程语言,这位测试左移提供了有效的方法。
我们都知道测试越早开始,修复问题的成本越低,那么如果我们能将代码扫描引入到RD的IDE中,这无疑是测试左移的一个很好的实践落地。同时,在RD开发代码的过程中就提供了不断地扫描,不断地反馈的方式和手段。通过测试左移可以有效的提升质量效能,从而可以影响工程效能的提升。
通过将Sonar引入到开发的IDE中,我们从最早的检测手段上就提供了持续反馈,从而逐渐的在后续各个执行环节都有持续反馈,这样就可以建立一个不断地反馈、不断地优化制品过程的一个良性的循环。那么如何将Sonar引入到Intelij IDEA(以下简称IDEA)中呢?
首先打开Inteij IDEA的setting菜单,进入插件管理:
进入marketplace,在插件搜索框中输入sonar后,选择sonarlint插件安装:
重启IDE后,你就有了接入sonar的最原始手段了
那么下面我们进入配置一下你自己的私有sonar就可使用你的规则检测你的代码了,再次进入Setting,点击other Settings下的SonarLint General settings:
在 sonarqube /soanrcloud connections里面添加私有化的sonar服务:
配置本地sonar后,点击下一步:
然后选择对应的登录认证方式(token或者用户名密码),输入后点击下一步后点击完成:
再次进入setting下的other settings,选择SonarLint project settings:
然后作如下设置,在project中后的search in list中选择一个你自己的项目后点击OK。
进入IDEA的项目页面,在下面可以看到sonarlint的窗口:
打开一个代码,点击sonarlint视图中的run按钮,就可以进行扫描了: