Unit Test Generation: What to do next?
date
Mar 25, 2024
slug
utg-next
status
Published
tags
SE-Paper Reading
summary
type
Post
Why do current unit test generation tools do well (in some cases)?
目前,基于搜索的方法和基于大语言模型的方法是两类主流的方法,对于基于搜索的方法,它有效的根本原因是,当搜索能够有效地进行时,搜索过程总体上是朝着设定的目标前进的(在单元测试生成这个背景下就是覆盖率);而基于大语言模型的方法有效的原因是大语言模型对自然语言和代码的语义都有一定的理解能力,它能够以预期的方式来调用软件单元,生成(在某些场景下)合理的测试用例。
Why do current unit test generation tools fail (in some cases)?
基于搜索的方法和基于大语言模型的方法在某些场景下也并不总是有效。
正如前一小节所说,对于基于搜索的方法,如果搜索的过程停滞或者混乱地摆动,就无法产生有效的测试用例,在测试用例生成这个场景下,会遇到覆盖率提升停滞的现象。这一现象往往发生于当变异操作在几乎任何方向,都无法带来适应度变好的情况下,举例来说,在需要生成以某种特定顺序构造的复杂对象时,或者需要生成符合某种特定语义含义的字面量值时(特定的语义含义往往需要特定的格式)。
对于基于大语言模型的方法,对于规模稍大的软件单元,如何把他们相关的信息全部呈现给大语言模型是一个挑战,当呈现的信息不足时就可能产生错误的测试用例,另外大语言模型的窗口长度也是一个限制。此外,由于大语言模型的黑盒性质,如果当前生成的测试用例效果不符合我们的预期,我们难以通过对大语言模型发出指令的方式使它按我们的要求进行一些比较精细的调整。
How to improve?
一些或许不成熟的想法:
由于基于搜索的方法相对来说比较能够让我们做一些精细的调整来提升,因此将基于搜索的方法作为主干,用大语言模型来提升其不足之处是一个比较合适的思路。
由于调用大语言模型比较慢,考虑到效率的因素,比较适合接入值初始化,后处理,以及在搜索停滞的时候尝试一些恢复措施这几类调用频率比较低的场景。