Page 19 - 《软件学报》2026年第7期
P. 19
2704 软件学报 2026 年第 37 卷第 7 期
代码片段将被插入至该节点之前, 如图 6 中标记为 12 的节点所示. 随后, LumiX 对插入点之前的节点进行分析, 提
取其中可被复用的程序元素信息. 通过分析发现, 在插入点之前存在两个变量定义节点, 即节点 2、3 与节点 5、6
(如图 6 中绿色标记节点所示). 在节点 2 中定义了一个类型为 Object 类型的变量 o, 在节点 3 中对其进行了初始化 (对
应图 1 种子程序中的第 3 行); 同样, 节点 5 定义了一个类型为 int 类型的变量 i, 在节点 6 中对其进行了初始化, 并
赋值为 1 (对应图 1 种子程序中的第 4 行). 识别出来的变量定义将被 LumiX 保存至可复用程序元素池中, 用于为
新生成的代码片段提供上下文信息. 需要注意的是, LumiX 提取的可复用程序元素不仅包括局部变量的定义, 还包
括在种子程序中定义的全局变量以及成员函数, 如算法 1 中的第 4 行所示. 这些信息都将作为新生成代码片段可
利用的程序元素保存至可复用程序元素池中.
1 main Body
2 VarDel Stmt 4 For Stmt 插入点
3 o = new Obj 5 VarDel Stmt 7 ... 8 Expr Stmt 10 If Stmt
6 int i = 1 9 o = new Obj 11 DEBUG 12 code body
图 6 可复用程序元素识别示例
3.2.2 新特性代码片段生成
在获取到指定插入点的上下文之后, LumiX 便会从新特性使用描述池中随机选择一个新特性使用描述作为待
实例化的新特性. LumiX 将随机选择的新特性使用描述与提取的上下文信息结合, 构造相应的代码生成提示词, 引
导大模型生成能够覆盖新特性的代码片段. 已有研究表明 [38] , 模型在处理简洁明确任务时生成效果更好, 而在面
对长文本或结构复杂任务时, 其准确性和语义一致性显著下降, 生成代码越长, 正确性和有效性越低 [38] . 因此, LumiX
选择生成能够覆盖新特性的代码片段, 而非完整的测试程序. 此外, 本文在第 4.3.4 节对此做了进一步的实验验证,
证明了生成代码片段的合理性及有效性.
新生成代码片段不仅需要体现新特性的用法, 还需要遵循语法和语义正确性要求, 确保可编译性与可执行性.
为了提升生成代码片段的准确性和有效性, LumiX 设计了一套针对代码生成的高质量提示词, 以最大程度保障生
成质量. 与新特性使用描述总结提示词的设计过程类似, LumiX 在代码生成提示词中明确赋予了其角色信息 (专
家身份)、具体的任务 (生成能够覆盖新特性的代码片段) 以及可复用的程序元素信息 (提升与种子程序的融合).
需要注意的是, 为了提升生成代码片段的有效性, 即生成的代码片段符合 Java 的语法、语义规范, LumiX 在代码
生成提示词中添加了大量的约束条件. 约束条件主要包含两部分内容, 分别是: 禁止生成约束 (prohibited generation
constraint) 以及必须满足约束 (must satisfy constraint). 禁止生成约束用于限制生成包含导致执行结果不一致逻辑
的代码片段, 例如, 禁止生成包含随机赋值语句的代码片段; 必须满足约束则用于保障生成代码片段的有效性, 例
如, 代码片段中使用的变量必须在种子程序上下文信息中被定义或在新生成的代码片段中被定义. 通过约束条件
的设计, 能够提升生成代码片段的有效性, 进而提升生成测试程序的有效性.
图 7 展示了 LumiX 生成代码片段的提示词示例. 在该示例中, LumiX 首先将大模型设定为精通程序合成、
对 JVM 以及 JDK 有深入了解的专家角色, 从而确保大模型能够从专业的角度出发, 准确地生成能够覆盖新特性
的代码片段. 其次, LumiX 在提示词中明确指定了生成的具体任务, 即生成能够覆盖语言新特性使用描述 (“FEATURE”)
的代码片段, 同时生成的代码片段必须满足约束条件 (“CONSTRAINTS”) 来保障语法和语义正确. 在生成的过程
中, 可以通过复用种子程序中的元素信息 (“REUSEABLE PROGRAM ELEMENTS”) 来提升生成代码片段与种子
程序的交互. 需要注意的是, LumiX 构造的提示词中仅包含可复用的程序元素, 而非整个种子程序. 其主要原因在
于: 一方面, 如第 3.2.1 节所述, 复杂的提示词会导致大模型幻觉的累积, 影响生成代码片段的有效性; 另一方面, 复
杂的提示词还会导致大模型推理成本过高, 从而影响生成代码片段的效率. 最后, LumiX 通过设定生成代码片段的

