基于循环的切片和输入驱动的具体化:终止和非终止分析的实证研究
Loop-Based Slicing and Input-Driven Concretization: An Empirical Study of Termination and Non-Termination Analysis
浏览论文内容
中文总结 AI 辅助
研究针对实际C程序中终止和非终止验证难的问题,实现FocusTNT工具,用基于循环的切片和输入驱动具体化进行预处理,在多个程序上评估六种分析器,发现预处理效果因多种因素而异,为开发者提供实用指导。
中文摘要 AI 辅助
终止和非终止是基本的正确性属性,但在实际的C程序中验证它们仍然很困难,因为循环交互和非确定性输入对现有分析器构成挑战。本文对用于(非)终止分析的轻量级、独立于工具的源级预处理进行了实证研究。我们实现了FocusTNT,一个C前端,它应用基于循环的切片来隔离循环级义务,并使用输入驱动的具体化将非确定性输入专门化为选定的输入场景变体。我们在117个源自实际非终止错误及其修复的C/C++程序上,对六种分析器评估了切片、具体化及其组合。研究考察了对分析器正确性、与原程序分析的互补性、循环级诊断、特征敏感性、运行时行为、语义范围和集成潜力的影响。结果表明,预处理并非一律有益:其影响取决于分析器、任务和程序特征。切片提供保守的结构隔离和定位,而具体化可以提高选定场景的可检测性,但会缩小语义范围并可能增加分析工作量。它们的组合并非始终具有累加性。总体而言,结果支持将预处理作为原程序分析的补充进行自适应使用,并为解释验证结果的应用开发者和提高分析器鲁棒性的工具开发者提供了实际指导。
英文摘要
Termination and non-termination are fundamental correctness properties, but verifying them in real-world C programs remains difficult because loop interactions and nondeterministic inputs challenge existing analyzers. This paper presents an empirical study of lightweight, tool-independent source-level preprocessing for (non-)termination analysis. We implement FocusTNT, a C front end that applies loop-based slicing to isolate loop-level obligations and input-driven concretization to specialize nondeterministic inputs into selected input-scenario variants. We evaluate slicing, concretization, and their combination across six analyzers on 117 C/C++ programs derived from real-world non-termination bugs and their fixes. The study examines effects on analyzer correctness, complementarity with original-program analysis, loop-level diagnostics, feature sensitivity, runtime behavior, semantic scope, and integration potential. Results show that preprocessing is not uniformly beneficial: its impact depends on the analyzer, task, and program features. Slicing provides conservative structural isolation and localization, whereas concretization can improve detectability for selected scenarios but narrows semantic scope and may increase analysis effort. Their combination is not consistently additive. Overall, the results support adaptive use of preprocessing as a complement to original-program analysis and provide practical guidance to application developers interpreting verification outcomes and tool developers improving analyzer robustness.