一句话:提出按需摘要,首个在任意抽象域中保证从零一致性的增量组合式静态分析算法。
交互式静态分析需在代码修改后快速更新结果,但现有技术支持任意抽象域的交互式分析往往缺乏组合性,难以复用未修改代码的分析结果,或无法保证编辑后与从零分析一致。本文提出 demanded summarization(按需摘要),一种面向任意抽象域的增量组合式分析算法。它采用按需分析思想,在过程调用处按需计算过程摘要,并用动态更新的摘要依赖图在编辑后精确失效受影响结果;算法支持递归,并保证从零一致性。作者形式化该技术,证明其可靠性、终止性与从零一致性,并在合成及真实世界程序编辑上评估原型实现,表明相较非按需组合分析有显著性能潜力。
We consider the problem of making expressive, interactive static analyzers compositional . Such a technique could help bring the power of server-based static analyses to integrated development environments (IDEs), updating their results live as the code is modified. Compositionality is key for this scenario, as it enables reuse of already-computed analysis results for unmodified code. Previous techniques for interactive static analysis either lack compositionality, cannot express arbitrary abstract domains, or are not from-scratch consistent. We present demanded summarization, the first algorithm for incremental compositional analysis in arbitrary abstract domains that guarantees from-scratch consistency. Our approach analyzes individual procedures using a recent technique for demanded analysis, computing summaries on demand for procedure calls. A dynamically updated summary dependency graph enables precise result invalidation after program edits, and the algorithm is carefully designed to guarantee from-scratch-consistent results after edits, even in the presence of recursion and in arbitrary abstract domains. We formalize our technique and prove soundness, termination, and from-scratch consistency. An experimental evaluation of a prototype implementation on synthetic and real-world program edits provides evidence for the feasibility of this theoretical framework, showing potential for major performance benefits over non-demanded compositional analyses.
@article{paperbot2677,
title = {Interactive Abstract Interpretation with Demanded Summarization},
author = {Benno Stein and Bor-Yuh Evan Chang and Manu Sridharan},
journal = {ACM Transactions on Programming Languages and Systems},
volume = {46},
number = {1},
year = {2024},
doi = {10.1145/3648441}
}