Sound 和 Complete

Sound: 表示全面(例如,考虑了所有路径),误报 Complete: 表示精确,漏报

大部分静态分析都是Sound。Soundness对于优化和验证非常重要

静态分析的概念

if (inout)
  x = 1;
else
  x = 0;

// x=?

结论 x = 1, 2 or 3 是Sound的,但不Complete。再加个-1就不Sound了。

precise, expensive vs imprecise, cheap

静态分析要在确保Soundness的情况下,在精度和速度间取舍。

例子

分析所有变量的正负

步骤:

  • 抽象: Concrete Domain Abstract Domain
    • ints signs (+, -, 零, unknown(但不可能是undefined) , undefined)
  • 过近似
    • Transfer Functions
      • 对于每一个语句,抽象值的转换规则
      • 根据分析的目标和每个语句的语义定义
    • 控制流
      • Flow merging