https://arxiv.org/pdf/2402.16906
这篇文章是在通义实验室的codebase里找到的,感觉是我比较关心的LLM相关的研究,主要想看下现在对代码测试的自动化程度,以及使用的方法以及一些观点视角,看了给定的实例是类似力扣上的那种代码,就是一些基本的列表中的值或者字符串的检测哪种,主要是它研究的是运行时的报错信息(我遇到的经常只是参照,跟实际的值有一点偏移,无论是行数上的还是具体的变量的数值上的),突出block-level的测试,这里对block有他自己的定义,指令前后怎么执行,这块我对instruction的理解还不是很到位,总的感觉是类似interpreter把每个执行语句的实际意义都顺序列出来了,包括循环的部分,对于无论block-level还是line-level都有阈值限定,超出5或25,就采样前后的上下文xx条信息以满足阈值就行,并以此加入调试信息,这里具体指什么我也没明白,应该就是一些类似断点和打印的信息,还有什么程序执行的多个数据流图,都是他们的研究范围,主要就是通过采样来提升效率,通过分块或者分行来缩小要检查的最小单元,保证每个block正确,如果错误需要加入什么条件,因为我调试每次给同学看,他们都说我断点打得太多,那还是说明我加入的调试信息太多,而这篇文章就比较有针对性地选择,关键还是在于单元测试这类关于问题规模的限制;
还有一个我容易忽略的部分:对任务的描述,或者什么代码意图,这块是它要对齐的目标,但是写的时候可能这块不是那么容易明确的;
还有一个重复命名的问题,原则是如果你不用就别定义,如果已经有了,就不多定义,需要对已有的变量?中间值?有一个细致的理解;