PofoliaPofolia ile paylaşıldı

Proceedings of the ACM on Programming Languages· 2026Q1

Çalışma Zamanı Soyut Yorumlama Yoluyla Rastgele Test Etme

Random Testing via Runtime Abstract Interpretation

Zain K Aamer, Benjamin C. Pierce

Kısa özet

Çalışma zamanı soyut yorumlamayı kullanan yeni bir araç olan Lucas, karmaşık depolama ayırıcılarındaki hataları başarıyla bulan rastgele test girdileri üreterek C programlarını test eder.

Yapay zekâ ile başlık ve abstract'tan üretildi; tam metin okunmaz.

Ana noktalar

  • Lucas, ayrım mantığı spesifikasyonlarından rastgele girdi üreteçleri sentezleyerek C programlarının test edilmesini otomatikleştirir.
  • Soyut alan öğelerini iyileştirmek için çalışma zamanı soyut yorumlamasını kullanır ve hafif bir kısıtlama çözücü görevi görür.
  • Üç iyileştirme stratejisi sunulmuştur: spekülatif, düzeltici ve kaskatlı yayılma.
  • Lucas, mevcut Bennet tarzı araçların kaçırdığı dört serbest liste ayırıcısında ve iki konuma bağlı veri yapısında başarıyla hata bulmuştur.

Yapay zekâ ile başlık ve abstract'tan üretildi; tam metin okunmaz.

Özet (abstract)

Property-based testing of C programs can be automated by synthesizing random input generators from separation-logic specifications. Existing work in this space, such as the Bennet testing tool, uses randomized backtracking search, generating random values and checking them against constraints, backtracking on failure. Although this approach performs well on simple recursive heap structures, it struggles as constraints grow more complex, particularly when they involve pointer arithmetic—as, for example, in the many forms of specialized storage allocators that arise in low-level systems software. Existing work uses targeted optimizations and heuristics to satisfy specific classes of constraints, but this requires continual expansion as new special cases arise, resulting in complex tools. We reframe generation as the iterative refinement of abstract domain elements, where sampling a concrete value is the final refinement. By applying abstract interpretation at runtime to obtain an abstract element, we obtain a lightweight form of constraint solving and propagation that enables randomized testing of programs with complex preconditions. We identify three strategies for applying abstract interpretation: (1) speculative refinement, refining abstract elements before sampling based on immediately following constraints, (2) corrective refinement, calculating “desired” abstract elements from information gleaned from failed constraints, and (3) cascading propagation, propagating information from failures to components of compound expressions. We formalize these ideas in a generator DSL whose monadic semantics are parametric over abstract domains. We implement this DSL in a new tool called Lucas and evaluate it on sixteen workloads: the six original case studies from the Bennet paper, six position-independent data structures, and four free-list allocators. Comparing configurations with and without refinement, we find that refinement finds bugs in all four allocators and in two of the position-independent data structures that Bennet-style random backtracking fails to find.

Yazarların özeti; kaynağından alınmıştır. Proceedings of the ACM on Programming Languages, 2026 · DOI ↗

ÇıkarımlarPremium
Makaleye SorÜcretsiz hesapla

Ücretsiz hesapla devam et

Makaleye Sor ile bu makaleye günde 3 soru ücretsiz; makaleyi kaydet, kaynakçasını al, ilgi alanına göre her gün yeni özetler. Çıkarımlar Premium.

Web'de ücretsiz devam et

Google ya da Apple hesabınla giriş; kart istemez. Bu makaleye geri dönersin.

Telefonda:

Alan: Yazılım

SoftwareComputer Science