一句话:分析响应式应用中响应性缺陷的修复实践,提出基于模式的阻塞调用缺陷主动修复,并验证性能证据可提高补丁接受率。
响应式编程以事件驱动、非阻塞的方式提升系统响应性,但其异步、非阻塞的编码风格对开发者构成学习门槛。本文分析响应式应用中报告的问题及其修复情况,发现开发者相比其他缺陷类型更常不修复或忽略响应性缺陷,其中阻塞调用缺陷尤为突出——这类缺陷会阻塞程序等待 I/O 等操作完成,浪费 CPU 与内存资源。为改进调试实践,作者提出一种基于模式的主动式程序修复技术,生成 30 个补丁并提交给开发者。作者进一步假设,响应性缺陷补丁接受率低是因为其正确性难以像功能缺陷那样通过测试用例评估。为验证该假设,将补丁分为带性能改进证据与不带证据两组,结果表明附带性能改进证据的补丁更可能被开发者接受。
Reactive programming reacts to data items as they occur, rather than waiting for them to complete. This programming paradigm is widely used in asynchronous and event-driven scenarios, such as web applications, microservices, real-time data processing, IoT, interactive UIs, and big data. When done right, it can offer greater responsiveness without extra resource usage. However, this also requires a thorough understanding of asynchronous and non-blocking coding, posing a learning curve for developers new to this style of programming. In this work, we analyze issues reported in reactive applications and explore their corresponding fixes. Our investigation results reveal that (1) developers often do not fix or ignore reactiveness bugs as compared to other bug types, and (2) this tendency is most pronounced for blocking-call bugs -- bugs that block the execution of the program to wait for the operations (typically I/O operations) to finish, wasting CPU and memory resources. To improve the debugging practice of such blocking bugs, we develop a pattern-based proactive program repair technique and obtain 30 patches, which we submit to the developers. In addition, we hypothesize that the low patch acceptance rate for reactiveness bugs is due to the difficulty of assessing the patches. This is in contrast to functionality bugs, where the correctness of the patches can be assessed by running test cases. To assess our hypothesis, we split our patches into two groups: one with performance improvement evidence and the other without. It turns out that the patches are more likely to be accepted when submitted with performance improvement evidence.
DOI 原文 ·
@inproceedings{paperbot8490,
title = {Preserving Reactiveness: Understanding and Improving the Debugging Practice of Blocking-Call Bugs},
author = {Arooba Shahoor and Jooyong Yi and Dongsun Kim},
booktitle = {ISSTA},
year = {2024},
doi = {10.1145/3650212.3680319}
}