一句话:提出开源跨平台库 Nekara,将系统化并发测试的探索算法工程化封装,便于构建定制测试方案。
并发系统测试长期依赖压力测试,但压力测试效率低,且难以清晰覆盖交错空间。系统化测试通过接管并发动作调度并对交错空间进行算法搜索,有望更可靠地发现缺陷;然而已有研究工具的工程实现常局限于小领域,难以维护和扩展。本文以经验论文形式,将先前工作中探索算法的进展与工具工程分离,设计并实现了开源跨平台库 Nekara,用于便捷构建自定义系统化测试方案。评估表明,Nekara 能有效封装最先进的探索算法,并在先前基准上取得效果;同时可应用于多种场景,包括现有开源系统以及 Microsoft Azure 生产分布式服务。Nekara 易用,改进了测试并发现多个新缺陷。
Testing concurrent systems remains an uncomfortable problem for developers. The common industrial practice is to stress-test a system against large workloads, with the hope of triggering enough corner-case interleavings that reveal bugs. However, stress testing is often inefficient and its ability to get coverage of interleavings is unclear. In reaction, the research community has proposed the idea of systematic testing, where a tool takes over the scheduling of concurrent actions so that it can perform an algorithmic search over the space of interleavings.We present an experience paper on the application of systematic testing to several case studies. We separate the algorithmic advancements in prior work (on searching the large space of interleavings) from the engineering of their tools. The latter was unsatisfactory; often the tools were limited to a small domain, hard to maintain, and hard to extend to other domains. We designed Nekara, an open-source cross-platform library for easily building custom systematic testing solutions.We show that (1) Nekara can effectively encapsulate state-of-the-art exploration algorithms by evaluating on prior bench-marks, and (2) Nekara can be applied to a wide variety of scenarios, including existing open-source systems as well as production distributed services of Microsoft Azure. Nekara was easy to use, improved testing, and found multiple new bugs.
DOI 原文 ·
@inproceedings{paperbot6607,
title = {Nekara: Generalized Concurrency Testing},
author = {Udit Agarwal and Pantazis Deligiannis and Cheng Huang and Kumseok Jung and Akash Lal and Immad Naseer and Matthew Parkinson and Arun Thangamani and Jyothi Vedurada and Yunpeng Xiao},
booktitle = {ASE},
year = {2021},
doi = {10.1109/ase51524.2021.9678838}
}