TL;DR
This paper provides a formal definition of loop unrolling, proves its properties using Isabelle, and demonstrates its effectiveness in improving bug detection in automated testing.
Contribution
It introduces a precise formal definition of loop unrolling for testing, supported by mechanically verified properties, and evaluates its impact on bug detection.
Findings
Unrolling loops more than once detects more bugs.
Formal properties of unrolling are mechanically verified.
Applying unrolling improves testing coverage and bug detection.
Abstract
Testing processes usually aim at high coverage, but loops severely limit coverage ambitions since the number of iterations is generally not predictable. Most testing teams address this issue by adopting the extreme solution of limiting themselves to branch coverage, which only considers loop executions that iterate the body either once or not at all. This approach misses any bug that only arises after two or more iterations. To achieve more meaningful coverage, testing strategies may unroll loops, in the sense of using executions that iterate loops up to n times for some n greater than one, chosen pragmatically in consideration of the available computational power. While loop unrolling is a standard part of compiler optimization techniques, its use in testing is far less common. Part of the reason is that the concept, while seemingly intuitive, lacks a generally accepted and precise…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Code & Models
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
