Automated Synthesis of Formally Verified Multi-Abstraction Function Summaries
By: Fanpeng Yang , Xu Ma , Shuling Wang and more
Potential Business Impact:
Helps computers understand old code better.
Function summaries, which characterize the behavior of code segments (typically functions) through preconditions and postconditions, are essential for understanding, reusing, and verifying software, particularly in safety-critical domains like aerospace embedded systems. However, these mission-critical legacy code serving as a valuable reused asset often lacks formal specifications. It is challenging to automatically generate function summaries for C programs, due to the existence of complex features such as loops, nested function calls, pointer aliasing, and so on. Moreover, function summaries should support multiple abstraction levels to meet diverse requirements, e.g. precise summaries capturing full functionality for formal verification and intuitive summaries for human understanding. To address these challenges, we first propose a novel framework that combines symbolic execution, large language models (LLMs), and formal verification to generate Relatively Strongest Postconditions (RSPs) and build function summaries that fully capture program behavior. Our approach leverages VST-A's symbolic execution to precisely track program execution paths and state transitions, employs LLMs to infer loop invariants based on predefined templates, and uses Frama-C to guarantee soundness of generated summaries in an iterative refinement loop. Furthermore, from generated RSPs, we automatically synthesize strongest non-redundant postconditions expressed within given domain specific language. We compare our approach with existing work through extensive experiments.
Similar Papers
Symmaries: Automatic Inference of Formal Security Summaries for Java Programs
Cryptography and Security
Helps check computer code for security flaws.
Hierarchical Repository-Level Code Summarization for Business Applications Using Local LLMs
Software Engineering
Helps programmers understand big code projects.
Beyond Postconditions: Can Large Language Models infer Formal Contracts for Automatic Software Verification?
Software Engineering
Helps computers find software bugs automatically.