静态代码扫描原理和常见工具

静态代码扫描价值

(1)研发过程,发现BUG越晚,修复的成本越大;
(2)缺陷引入的大部分是在编码阶段,但发现的更多是在单元测试、集成测试、功能测试阶段;
(3)统计证明,在整个软件开发生命周期中,30% 至 70% 的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。

目标:希望在编码阶段发现更多问题。(静态代码扫描、code review)

静态代码分析理论基础和主要技术

静态代码分析原理分为两种:分析源代码编译后的中间文件(如Java的字节码);分析源文件。主要分析技术如下:

  • 缺陷模式匹配
    • 事先从代码分析经验中收集足够多的共性缺陷模式,将待分析代码与已有的共性缺陷模式进行匹配,从而完成软件安全分析。优点:简单方便;缺点:需要内置足够多的缺陷模式,容易产生误报。
  • 类型推断/类型推断
    • 类型推断技术是指通过对代码中运算对象类型进行推理,从而保证代码中每条语句都针对正确的类型执行。
  • 模型检查
    • 建立于有限状态自动机的概念基础上。将每条语句产生的影响抽象为有限状态自动机的一个状态,再通过分析有限状态机达到分析代码目的。
    • 校验程序并发等时序特性。
  • 数据流分析
    • 从程序代码中收集程序语义信息,抽象成控制流图,可以通过控制流图,不必真实的运行程序,可以分析发现程序运行时的行为。

静态代码扫描工具/引擎对比

序号引擎分析对象备注
1Findbugs字节码缺陷模式匹配、数据流分析。通过字节码分析代码存在缺陷、支持数据流分析,能查找出空指针崩溃等问题。
2CheckStyleJava源文件缺陷模式匹配。扫描代码格式规范、代码风格的工具。
3Godeyes百度出品,主要针对Android代码。
4LintJava源代码Android官方提供的代码分析工具,可以扫描出API兼容性问题、布局性能等针对Android代码的潜在缺陷。
5PMDJava源代码缺陷模式匹配、数据流分析。检测代码潜在错误。

转载于:https://www.cnblogs.com/amyzhu/p/9179848.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值