We use cookies to improve your experience with our site.

SAGA: 摘要引导的断言语句生成

SAGA: Summarization-Guided Assert Statement Generation

  • 摘要:
    研究背景 软件测试是软件开发生命周期中不可或缺的一部分,对于提高软件的可靠性起着至关重要的作用。有效的单元测试可以在软件开发的早期阶段发现潜在的软件缺陷,从而避免发布有缺陷的软件。然而,在实践中,编写高质量的单元测试用例是一项耗时且容易出错的任务。因此,研究人员开发了自动单元测试用例生成工具,以减少手动工作量并提高测试活动的效率。尽管这些工具代表了自动化测试用例生成的重要进展,但最新的研究工作已经强调了该类工具在工业场景下的局限性。一个主要的挑战是生成有意义的断言语句。
    目的 近年来,研究人员开始利用深度学习模型来增强断言语句自动生成的有效性。然而,生成准确且有意义的断言语句仍然是一项具有挑战性的任务,需要对被测函数的预期功能有深入的了解。现有模型的局限在于缺乏相关的上下文信息(例如被测函数的摘要)。在对开发人员编写的函数摘要进行详细分析后,我们发现一些与意图相关的断言语句参数可以在摘要中找到,而不是源代码中。此外,开发人员编写的摘要还能够包含有关预期程序行为的关键信息。因此,我们认为有效的断言语句自动生成方法不应仅依赖于被测函数的源代码来预测断言类型和逻辑性质,包括函数摘要在内上下文信息也可以用于辅助生成正确的断言语句。为此,我们提出了一种摘要引导的断言语句生成模型SAGA来解决现有基于深度学习的方法的局限性。
    方法 本文提出的SAGA模型接受两种模态的输入,包括由程序语言编写的源代码(如被测函数的函数体)以及由自然语言编写的函数摘要。为了学习程序语言和自然语言的通用表示,我们首先利用预训练语言模型CodeT5对SAGA进行初始化,通过使用在大规模语料库上预训练的学习参数,SAGA能够学习到许多可以直接应用于断言语句生成任务的通用模式。此外,我们使用特殊的标记来区分不同的输入模态,这种方法可以为SAGA提供更多关于不同输入模态的信息,从更好地学习它们之间的关系。然后,我们对预训练语言模型在断言生成任务上进行微调。微调技术可以优化预训练参数,使它们更适用于下游任务。具体而言,我们将断言语句生成任务表示为“文本到文本”的形式,其中输入是测试函数前缀、被测函数和被测函数摘要,输出是测试函数中所对应的断言语句。
    结果 我们将SAGA和五个最先进的基准方法在两个公开的真实世界数据集上进行对比实验,实验结果表明SAGA在断言语句生成结果的准确度上能够比已有模型提升6%~44%,并通过统计检验证明了结果具有显著性。同时,我们通过实证研究发现,通过学习自然语言和程序语言的语义表示,SAGA可以捕捉摘要内容和源代码实现之间关系的明确信息,从而帮助生成有意义的断言语句。
    结论 本文提出了一种基于摘要引导的深度学习方法SAGA用于断言语句生成。为了准确反映开发人员的编程意图,我们利用被测函数的摘要作为补充信息以自动生成有意义的断言语句。实验结果表明,开发人员编写的摘要可以为断言语句生成提供明确的指导信息,从而提高模型性能。同时,我们认为基于深度学习的技术可以在实践中有效地帮助开发人员编写单元测试用例。具体来说,可以将我们所提出的SAGA模型集成为IDE插件,使其作为代码补全工具在开发人员手动编写单元测试用例时自动建议断言语句。

     

    Abstract: Generating meaningful assert statements is one of the key challenges in automated test case generation, which requires understanding the intended functionality of the tested code. Recently, deep learning based models have shown promise in improving the performance of assert statement generation. However, the existing models only rely on the test prefixes along with their corresponding focal methods, yet ignore the developer-written summarization. Based on our observations, the summarization contents usually express the intended program behavior or contain parameters that will appear directly in the assert statement. Such information will help existing models address their current inability to accurately predict assert statements. This paper presents a summarization-guided approach for automatically generating assert statements. To derive generic representations for natural language (i.e., summarization) and programming language (i.e., test prefixes and focal methods), we leverage a pre-trained language model as the reference architecture and fine-tune it on the task of assert statement generation. To the best of our knowledge, the proposed approach makes the first attempt to leverage the summarization of focal methods as the guidance for making the generated assert statements more accurate. We demonstrate the effectiveness of our approach on two real-world datasets compared with state-of-the-art models.

     

/

返回文章
返回