On Verifying Resource Contracts using Code Contracts
This work addresses resource verification for software developers, but it is incremental as it builds on existing tools like Code Contracts.
The paper tackles verifying resource consumption contracts, specifically dynamic memory constraints, by extending Code Contracts' specification language with annotations and using an off-the-shelf static analyzer for verification, resulting in a proof-of-concept implementation that handles non-monotone memory usage and modular specifications.
In this paper we present an approach to check resource consumption contracts using an off-the-shelf static analyzer. We propose a set of annotations to support resource usage specifications, in particular, dynamic memory consumption constraints. Since dynamic memory may be recycled by a memory manager, the consumption of this resource is not monotone. The specification language can express both memory consumption and lifetime properties in a modular fashion. We develop a proof-of-concept implementation by extending Code Contracts' specification language. To verify the correctness of these annotations we rely on the Code Contracts static verifier and a points-to analysis. We also briefly discuss possible extensions of our approach to deal with non-linear expressions.