静态代码分析介绍
作为测试人员大家一定好奇研发的静态代码分析测试是如何开展的?也一定会认为代码扫描一是高大上的工作,非吾等tester可以胜任!在这里,我就带大家搞定静态代码分析!我们先来看看静态代码分析的概念:静态代码分析是指在不实际执行程序的情况下,对代码语义和行为进行分析,由此找出程序中由于错误的编码导致异常的程序语义或未定义的行为。通俗的说,静态代码分析就是在代码编写的同时就能找出代码的编码错误。你不需要等待所有代码编写完毕,也不需要构建运行环境,编写测试用例。它能在软件开发流程早期就发现代码中的各种问题,从而提高开发效率和软件质量。在实际工作中,开发人员通常都使用工具完成静态代码分析工作,主流的工具包括:CheckStyle、PMD、findbugs,spotbugs等等。大家可以简单的理解,这些工具就像是我们平时使用的杀毒软件,杀毒软件的原理是预先定义好一些病毒库,然后一旦发现这些病毒就会进行查杀,最后定期更新病毒库即可。静态代码分析工具也是这个原理,预先定义好一些常见的代码编写规则,检查代码时,不符合这些规则就会报错,最后定期更新代码检测规则库即可!
接下来我将借助工具spotbugs来带大家了解静态代码分析!
SpotBugs介绍
SpotBugs是Findbugs的继任者(Findbugs已经不再维护),用于对Java代码进行静态分析,查找相关的漏洞,SpotBugs比Findbugs拥有更多的校验规则。静态分析会检查Java字节码(.class文件)是否存在错误模式(错误模式是一种经常容易出错的代码表达式/习惯用法,其中主要包括:错误使用编程语言的某些特性、误用的API方法、在维护期间修改代码时误解变量、错别字,使用错误的运算符)注: SpotBugs 需要当前的JDK环境为 1.8以上,但可以对1.0~1.9的代码来进行检查。SpotBugs是对.class文件进行扫描的,所以工程必须成功完成编译并生成.class文件。可以通过如下方式使用Spotbugs:
• Ant
• Maven
• Gradle
• Eclipse
SpotBugs是可扩展的,可以通过插件添加新的检测器。流行的SpotBugs插件包括:find-sec-bugs(针对代码安全)。
SpotBugs可检测的代码问题如下:
practice 常见代码错误,违反推荐和基本编码规范。包括哈希代码和等号问题、可克隆的习惯用法、丢弃的异常、可序列化的问题和finalize的误用等。
Correctness可能的错误-一个明显的编码错误,导致代码可能不是开发人员想要的。
Experimental实验性和未经充分审查的错误模式
Internationalization与国际化和语言环境有关的代码缺陷
Malicious code vulnerability 易受不可信代码攻击的代码
Multithreaded correctness 与线程、锁和Volatile有关的代码缺陷
Bogus random noise 伪随机噪声:用于数据挖掘实验中的控制,而不是用于发现软件中的实际错误
Performance不一定不正确但可能效率低下的代码
Security使用不受信任的输入,可能会造成可远程利用的安全漏洞。
Dodgy code 混乱、异常或以导致错误的方式编写的代码。
Eclipse中安装配置SpotBugs
在Eclipse的应用市场中搜索SpotBugs,默认安装插件,然后重启Eclipse即可。
设置需要检查代码的问题,如下图所示:
设置需要校验代码的具体bug规则,如下图:
上图中里Detector id 列中的每一项内容都对应了一个具体的bug校验规则,详情可以参考官网:https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html
扫描项目
操作如下图:
查看扫描出来的结果
打开bug explorer视图
可以查看扫描出的代码问题
点击代码前小虫的图标可以查看代码安全性问题描述、解决方案及对应的WASC\OWASP\CWE引文,这样开发同学就可以修改代码问题了。
总结
SpotBugs能够对代码进行静态分析,查找相关的漏洞的本质是根据定义好的bug规则进行代码扫描。而这些规则众多,想要开发人员百分百完全修复静态代码问题难度极大!我的建议是可以逐步开展,比如先搞定Bad practice类问题、再搞定security类问题,以此类推。另外不要指望SpotBugs会消除程序中的所有错误,但他一定会减少在生产中发现的错误数量。原创不易,如果文章帮到了你,欢迎转发,让更多的朋友受益!
网友评论