一句话:提出基于神经机器翻译的 Atlas 方法,自动为测试方法生成有意义的断言语句。
软件测试耗时且自动生成测试方法中的断言质量常受质疑。本文提出 Atlas(AuTomatic Learning of Assert Statements),一种基于神经机器翻译的方法:给定测试方法和被测焦点方法,预测用于评估焦点方法正确性的有意义断言语句。作者从 GitHub 项目收集数千个测试方法进行训练与评估,在仅考虑 top-1 预测断言时,31% 的案例能精确匹配开发者手写断言;考虑 top-5 时精确匹配率达到 50%。结果表明,该方法可作为自动测试用例生成技术的补充,也可为开发者在编写测试代码时提供断言补全支持。
Software testing is an essential part of the software lifecycle and requires a substantial amount of time and effort. It has been estimated that software developers spend close to 50% of their time on testing the code they write. For these reasons, a long standing goal within the research community is to (partially) automate software testing. While several techniques and tools have been proposed to automatically generate test methods, recent work has criticized the quality and usefulness of the assert statements they generate. Therefore, we employ a Neural Machine Translation (NMT) based approach called Atlas (AuTomatic Learning of Assert Statements) to automatically generate meaningful assert statements for test methods. Given a test method and a focal method (i.e., the main method under test), Atlas can predict a meaningful assert statement to assess the correctness of the focal method. We applied Atlas to thousands of test methods from GitHub projects and it was able to predict the exact assert statement manually written by developers in 31% of the cases when only considering the top-1 predicted assert. When considering the top-5 predicted assert statements, Atlas is able to predict exact matches in 50% of the cases. These promising results hint to the potential usefulness of our approach as (i) a complement to automatic test case generation techniques, and (ii) a code completion support for developers, who can benefit from the recommended assert statements while writing test code.
@inproceedings{paperbot5600,
title = {On learning meaningful assert statements for unit test cases},
author = {Cody Watson and Michele Tufano and Kevin Moran and Gabriele Bavota and Denys Poshyvanyk},
booktitle = {ICSE},
year = {2020},
doi = {10.1145/3377811.3380429}
}