To put static program analysis at the fingertips of the software developer, we propose a framework for interactive abstract interpretation. While providing sound analysis results, abstract interpretation in general can be quite costly. To achieve quick response times, we incrementalize the analysis infrastructure, including postprocessing, without necessitating any modifications to the analysis specifications themselves. We rely on the local generic fixpoint engine TD, which dynamically tracks dependencies, while exploring the unknowns contributing to answering an initial query. Lazy invalidation is employed for analysis results affected by program change. Dedicated improvements support the incremental analysis of concurrency deficiencies such as data-races. The framework has been implemented for multithreaded C within the static analyzer Goblint, using MagpieBridge to relay findings to IDEs. We evaluate our implementation w.r.t. the yard sticks of response time and consistency: formerly proven invariants should be retained - when they are not affected by the change. The results indicate that with our approach, a reanalysis after small changes only takes a fraction of from-scratch analysis time, while most of the precision is retained. We also provide examples of program development highlighting the usability of the overall approach.
翻译:为了将静态程序分析置于软件开发者的指尖上,我们建议了一个互动抽象解释的框架。在提供正确的分析结果的同时,抽象解释一般成本相当高。为了实现快速响应时间,我们在不需要对分析规格本身作任何修改的情况下,逐步增加分析基础设施,包括后处理。我们依靠本地通用固定点引擎TD,该引擎动态地跟踪依赖性,同时探索有助于回答初始询问的未知因素。对受程序变化影响的分析结果则使用静态分析器Gobliint采用静态分析器中多读C的框架。我们用MagpieBridge将结果转发给IDES。我们评估了我们的反应时间和一致性的院落:在不受到变化影响的情况下,先前证明的变量应该保留下来。结果显示,用我们的方法,在小变化后进行再分析,只从数据光谱分析的时间中抽出一部分,而大部分精确度则保留下来。我们还提供了程序开发的总体可行性的例子。