目前主流的静态分析工具有Klocwork,Coverity, TestBad...
因为他们的出发点不同,所以各有特点,在国内的发展情况也不一样。
klocwork注重代码质量与安全漏洞,在尽可能多的发现严重缺陷与准确的发现缺陷(工具都会有误报)之间找平衡。能够发现的安卓方面的问题包括:
未经验证的片段类名,未验证的外部数据;
空对象解引用 - 在 Android 应用中;
媒体播放器在退出前未释放;
媒体录制器在退出前未释放;
Sql 连接在退出前未关闭;
Sql 对象在退出前未关闭;
使用已回收的 bitmap;
使用已释放的 camera;
使用已释放的媒体播放器;
使用已释放的媒体录制器;
...
能够发现的java语言的缺陷包括:
Struts 问题
信息泄露
冗余代码
出错处理不当
可能的运行时故障
复制缺陷
弱加密
弱封装
影响可维护性的问题
影响质量安全的编码实践
忽略返回值
性能问题
拒绝服务
数据注入
未经验证的用户输入
特定规则
相等与哈希码问题
线程与同步问题
资源泄漏
跨站点脚本攻击 (XSS)
进程与路径注入
释放后使用
...
除了上面缺陷类型,它还支持分析c/c++、java、C#语言。
Klocwork支持年付与永久授权,在民口, BAT、 华为、 中兴 ...都在使用;在军口,使用的单位更多。
Coverity也是一款比较优秀的软件,但是前面已经提过,它追求的不一样,是尽可能的减少误报。不支持永久授权。
TestBad也是一款优秀的软件,相对于前面两种软件来说,更加注重于编码规范,软件编程标准。如MISRA.