Agent guided thread scheduling finds more concurrency bugs faster
REINS: Agent-guided Thread Scheduling for Concurrency Bug Detection and Reproduction
Software Engineering
Summary
Concurrency bugs happen when different parts of a program run together in unusual ways, making them tricky to spot and fix. The authors present REINS, a method that uses smart reasoning about how programs work together to guide testing and find these bugs more efficiently. It watches the program as it runs, makes guesses about where bugs might be, and focuses testing on those spots. This approach found more bugs faster on benchmark tests and even discovered new bugs in real software projects.
What this means in practice
- •For software testing teams: Detect concurrency bugs more efficiently by guiding thread scheduling based on program behavior and bug patterns within limited testing time.
- •For software debugging teams: Reproduce hard-to-find concurrency bugs by refining test constraints through runtime feedback to confirm or refute bug hypotheses.
Authors
Yu Zhang, Corina S. Pasareanu, Guowei Yang
Abstract
Concurrency bugs manifest only under specific thread interleavings, making them hard to detect and reproduce. Existing controlled concurrency testing techniques take over thread scheduling to explore the interleaving space. As the space grows rapidly with program scale, finding interleavings that can trigger bugs within a limited budget remains challenging. The program's concurrency semantics can reveal which variable accesses and synchronization operations under specific interleavings lead to unexpected program behavior, and thus help focus the exploration on bug-relevant interleavings. However, prior techniques have not fully exploited such semantic information. In this paper, we present REINS, an agentic approach for detecting and reproducing concurrency bugs. At its core, REINS guides thread scheduling with the agent's reasoning about the concurrency semantics and known concurrency bug patterns. REINS starts with runtime observations and combines them with static information to reason about the program's concurrency behavior and formulate hypotheses about potential bugs. A hypothesis translates into a set of constraints on event orders and variable states, guiding a controlled scheduler toward interleavings likely to trigger the bug. REINS draws conclusions from the execution results and keeps refining the constraints until the bug is triggered or the hypothesis is refuted. Compared with existing techniques on three public benchmarks, REINS detects more bugs within the same time budget. Furthermore, REINS found six previously unknown concurrency bugs in real-world projects, three of which have been confirmed by the developers.