ARDiff: Scaling Program Equivalence Checking via Iterative Abstraction and Refinement of Common Code
Equivalence checking techniques help establish whether two versions of a program exhibit the same behavior. The majority of popular techniques for formally proving/refuting equivalence relies on symbolic execution – a static analysis approach that reasons about program behaviors in terms of symbolic input variables. Yet, symbolic execution is difficult to scale in practice due to complex programming constructs, such as loops and non-linear arithmetic.
This paper proposes an approach, named ARDiff, for improving the scalability of symbolic-execution-based equivalence checking techniques when comparing syntactically-similar versions of a program, e.g., for verifying the correctness of code upgrades and refactoring. Our approach relies on a set of novel heuristics to determine which parts of the versions’ common code can be effectively pruned during the analysis, reducing the analysis complexity without sacrificing its effectiveness. Furthermore, we devise a new equivalence checking benchmark, extending existing benchmarks with a set of real-life methods containing complex math functions and loops. We evaluate the effectiveness and efficiency of ARDiff on this benchmark and show that it outperforms existing method-level equivalence checking techniques by solving 86% of all equivalent and 55% of non-equivalent cases, compared with 47% to 69% for equivalent and 38% to 52% for non-equivalent cases in related work.
Fri 13 NovDisplayed time zone: (UTC) Coordinated Universal Time change
01:00 - 01:30
|ARDiff: Scaling Program Equivalence Checking via Iterative Abstraction and Refinement of Common Code|
Sahar Badihi University of British Columbia, Canada, Faridah Akinotcho University of British Columbia, Canada, Yi Li Nanyang Technological University, Singapore, Julia Rubin University of British Columbia, CanadaDOI Pre-print
|Java Ranger: Statically Summarizing Regions for Efficient Symbolic Execution of Java|
Vaibhav Sharma University of Minnesota, USA, Soha Hussein University of Minnesota, USA / Ain Shams University, Egypt, Michael Whalen University of Minnesota, USA, Stephen McCamant University of Minnesota, USA, Willem Visser Stellenbosch University, South AfricaDOI
|PCA: Memory Leak Detection using Partial Call-Path Analysis|
Wen Li , Haipeng Cai Washington State University, USA, Yulei Sui University of Technology Sydney, David Manz Pacific Northwest National Laboratory, USADOI
|SWAN: A Static Analysis Framework for Swift|
Daniil Tiganov University of Alberta, Canada, Jeff Cho University of Alberta, Karim Ali University of Alberta, Julian Dolby IBM Research, USADOI
|UBITect: A Precise and Scalable Method to Detect Use-before-Initialization Bugs in Linux Kernel|
Yizhuo Zhai University of California at Riverside, USA, Yu Hao University of California at Riverside, USA, Hang Zhang University of California at Riverside, USA, Daimeng Wang University of California at Riverside, USA, Chengyu Song University of California at Riverside, USA, Zhiyun Qian University of California at Riverside, USA, Mohsen Lesani University of California at Riverside, USA, Srikanth V. Krishnamurthy University of California at Riverside, USA, Paul Yu U.S. Army Research Laboratory, USADOI
|Conversations on Static Analysis|