论文标题
一个决策树提起域,用于分析具有数值特征的程序家族(扩展版本)
A Decision Tree Lifted Domain for Analyzing Program Families with Numerical Features (Extended Version)
论文作者
论文摘要
通过抽象解释解除(基于家庭的)静态分析能够同时分析程序家族的所有变体,而无需明确生成任何变体。基础升起的分析域的元素是元组,每个变体都保持一个特性。尽管如此,元组中的明确特性枚举,所有变体的一一逐一列出,立即产生组合爆炸。在计划家庭的情况下,这一点尤其明显,除了布尔特征外,还包含具有大域的数值特征,从而承认天文学配置空间。 进行有效提升分析的关键是正确处理该语言的特定于可变性构建体(例如,基于功能的运行时测试和#IF指令)。在这项工作中,我们介绍了提起的抽象领域的新符号表示,可以有效地分析具有数值特征的程序家庭。这使得在与不同变体对应的属性元素之间共享。新提起的域的元素是基于约束的决策树,其中决策节点用在数值特征上定义的线性约束标记,叶子节点属于现有的单程序分析域。为了说明这种表示的潜力,我们已经实施了一种实验性升起的静态分析仪,称为splnum^2analyzer,用于推断C程序的不变性。它以参数为参数,将现有的数值域(例如,间隔,八块,polyhedra)作为参数。对SV-Comp和Busybox的基准的经验评估产生了有希望的初步结果,表明我们基于决策树的方法有效,并且表现优于基于元组的方法,该方法基于抽象的解释用作基线提升分析。
Lifted (family-based) static analysis by abstract interpretation is capable of analyzing all variants of a program family simultaneously, in a single run without generating any of the variants explicitly. The elements of the underlying lifted analysis domain are tuples, which maintain one property per variant. Still, explicit property enumeration in tuples, one by one for all variants, immediately yields combinatorial explosion. This is particularly apparent in the case of program families that, apart from Boolean features, contain also numerical features with big domains, thus admitting astronomic configuration spaces. The key for an efficient lifted analysis is proper handling of variability-specific constructs of the language (e.g., feature-based runtime tests and #if directives). In this work, we introduce a new symbolic representation of the lifted abstract domain that can efficiently analyze program families with numerical features. This makes sharing between property elements corresponding to different variants explicitly possible. The elements of the new lifted domain are constraint-based decision trees, where decision nodes are labeled with linear constraints defined over numerical features and the leaf nodes belong to an existing single-program analysis domain. To illustrate the potential of this representation, we have implemented an experimental lifted static analyzer, called SPLNUM^2Analyzer, for inferring invariants of C programs. It uses existing numerical domains (e.g., intervals, octagons, polyhedra) from the APRON library as parameters. An empirical evaluation on benchmarks from SV-COMP and BusyBox yields promising preliminary results indicating that our decision trees-based approach is effective and outperforms the tuple-based approach, which is used as a baseline lifted analysis based on abstract interpretation.