2025, 36(6):0-0. DOI: 10.13328/j.cnki.jos.007323
摘要:模糊测试是一种自动化的软件测试方法,通过向目标软件系统输入大量自动生成的测试数据,以发现系统潜在的安全漏洞、软件缺陷或异常行为.然而,传统模糊测试技术受限于自动化程度低、测试效率低、代码覆盖率低等因素,无法应对现代的大型软件系统.近年来,大语言模型的迅猛发展不仅为自然语言处理领域带来重大突破,也为模糊测试领域带来了新的自动化方案.因此,为了更好地提升模糊测试技术的效果,现有的工作提出了多种结合大语言模型的模糊测试方法,涵盖了测试输入生成、缺陷检测、后模糊处理等模块.但是现有工作缺乏对基于大语言模型的模糊测试技术的系统性调研和梳理讨论,为了填补上述综述方面的空白,本文对现有的基于大语言模型的模糊测试技术的研究发展现状进行了全面的分析和总结.主要内容包括:(1)概述了模糊测试的整体流程和模糊测试研究中常用的大语言模型相关技术;(2)讨论了大模型时代之前的基于深度学习的模糊测试方法的局限性;(3)分析了大语言模型在模糊测试方法中不同环节的应用方式;(4)探讨了大语言模型技术在模糊测试中的主要挑战和今后可能的发展方向.
2025, 36(6):0-0. DOI: 10.13328/j.cnki.jos.007324
摘要:大型语言模型的快速发展极大地影响了软件工程领域. 这些模型利用大量开源仓库代码进行预训练, 能够高效完成诸如代码生成和代码补全等任务. 然而, 开源软件仓库中存在大量受开源许可证约束的代码, 这给大模型带来了潜在的开源许可证违规风险. 本文聚焦于大模型生成代码与开源仓库的许可证违规风险, 基于代码克隆技术开发了一个支持大模型生成代码溯源与版权违规问题的检测框架. 针对9个主流代码大模型生成的135,000个Python代码, 利用该框架在开源社区中溯源并检测开源许可证兼容性. 通过实践调查三个研究问题:“大模型生成的代码多大程度克隆于开源软件仓库?”、“大模型生成的代码是否存在开源许可证违规风险?”、“真实开源软件中包含的大模型生成代码是否存在开源许可证违规风险?”, 探究大模型代码生成对开源软件生态的影响. 实验结果发现在使用功能描述和方法签名所生成的43,130和65,900个大于6行的Python代码中, 分别溯源到了68.5%和60.9%的代码存在克隆的开源代码片段. 其中CodeParrot和CodeGen系列模型的克隆比例最高, GPT-3.5-Turbo最低. 其次, 92.7%的通过功能描述生成的代码中没有开源许可证声明. 通过与溯源代码许可证进行对比, 81.8%的代码存在开源许可证违规风险. 此外, 在收集到的229个GitHub平台开发者使用大模型生成的代码中, 有136个代码溯源了到开源代码片段, 其中38个为Type1和Type2克隆类型, 有30个存在开源许可证违规风险. 我们以问题报告的形式提交给了开发者, 到目前为止, 得到了八位开发者的反馈.
2025, 36(6):0-0. DOI: 10.13328/j.cnki.jos.007325
摘要:代码优化任务作为自动化代码审查的关键环节,有助于提高开发效率和代码质量.随着大语言模型在软件工程领域中展现出远胜于传统小规模预训练模型的性能,本研究旨在探讨两类模型在自动代码优化任务的表现,以评估大语言模型的综合优势.通过使用传统代码质量评估指标(e.g., BLEU, CodeBLEU, Edit Progress)对四种主流大语言模型和四种代表性小规模预训练模型在代码优化任务的表现进行评估,发现大语言模型在审查前代码优化子任务的优化质量劣于小规模预训练模型.由于现有代码质量评估指标难以解释上述现象,本研究提出基于Unidiff的代码优化评估指标,量化优化过程中的变更操作,以解释劣势原因并揭示模型执行变更操作的倾向性:(1)审查前代码优化任务难度较大,模型执行正确变更操作的准确度极低,且大语言模型比小规模预训练模型表现更为“激进”,即倾向于执行更多的代码变更操作,导致其表现不佳;(2)相比小规模预训练模型,大语言模型在代码优化任务倾向于执行更多插入(ADD)和修改(MODIFY)变更操作且ADD变更操作平均插入的代码行数较多,进一步证明其“激进”性.为缓解大语言模型在审查前优化任务中的劣势,本研究基于大语言模型和集成学习提出LLM-Voter方法,包含Inference-based(基于模型推理)和Confidence-based(基于置信度选择)两种子方案,旨在集成不同基模型的优势以提升代码优化质量.在此基础上,进一步引入优化判定机制,以增强模型的决策稳定性与可靠性.实验证明:基于置信度选择的LLM-Voter方法能够在大幅提高EM (Exact Match)值的同时获得优于所有基模型的优化质量,从而有效缓解大语言模型的劣势.
2025, 36(6):0-0. DOI: 10.13328/j.cnki.jos.007326
摘要:基于拉取请求(Pull Requests, PRs)的软件开发机制是开源软件中的重要实践.合适的代码评审人能够通过代码审查帮助贡献者及时发现PR中的潜在错误,为持续开发和集成过程提供质量保障.然而,代码变更内容的复杂性以及评审行为固有的多样性增加了评审人推荐的难度.现有方法主要聚焦于从PR中挖掘变更代码的语义信息,或基于审查历史构建评审人画像,并通过多种静态策略组合进行推荐.这些研究受限于模型训练语料的丰富性以及交互类型的复杂性,导致推荐性能不佳.鉴于此,本文提出一种基于智能体间相互协作的代码评审人推荐方法.该方法利用先进的大语言模型,精确捕捉PR和评审人丰富的文本语义信息.此外,AI智能体强大的规划、协作和决策能力使其能够集成不同交互类型的信息,具有高度的灵活性和适应性.基于真实数据集进行实验分析,与基线评审人推荐方法相比,本文方法性能提升了4.45%至26.04%.此外,案例研究证明,本文所提方法在可解释性方面表现突出,进一步验证了其在实际应用中的有效性和可靠性.
2025, 36(6):0-0. DOI: 10.13328/j.cnki.jos.007327
摘要:资源泄露是由于有限的系统资源未能及时正确关闭所导致的缺陷,广泛存在于各种语言程序中,且具有一定的隐蔽性.传统的缺陷检测方法通常基于规则和启发式搜索预测软件中的资源泄露.近年来,基于深度学习的缺陷检测方法通过不同的代码表征形式并使用循环神经网络、图神经网络等技术捕获代码中的语义信息.最近的研究显示,语言模型在代码理解和生成等任务中表现出色.然而语言模型针对资源泄露检测这一特定任务上的优势和局限性尚未得到充分评估.研究了基于传统模型、小模型和大模型的检测方法在资源泄露检测任务中的有效性,并探究了小样本学习、微调以及静态分析与大模型结合的多种改进方式.具体而言,以JLeaks和DroidLeaks数据集为实验对象,从资源泄露根本原因、资源种类、代码复杂度等多个维度分析了不同模型的表现.实验结果表明,微调技术能够显著提升大模型在资源泄露检测领域的检测效果.然而,大部分模型在识别第三方库引发的资源泄露上仍需改进.此外,代码复杂度对基于传统模型的检测方法的影响更大.
李晓鹏,闫明,樊兴宇,唐振韬,开昰雄,郝建业,袁明轩,陈俊洁
2025, 36(6):0-0. DOI: 10.13328/j.cnki.jos.007328
摘要:在当今智能化的时代背景下,芯片作为智能电子设备的核心组件,在人工智能、物联网、5G通信等诸多领域发挥着关键作用,保障芯片的正确性、安全性和可靠性至关重要.在芯片的开发流程中,开发人员首先需要利用硬件描述语言,将芯片设计实现成软件形式(即芯片设计程序),然后再进行物理设计并最终流片(即生产制造).作为芯片设计制造的基础,芯片设计程序的质量直接影响了芯片的质量.因此,针对芯片设计程序的测试具有重要研究意义.早期的芯片设计程序测试方法主要依赖开发人员人工设计测试用例来测试芯片设计程序,往往需要大量的人工成本和时间代价.随着芯片设计程序复杂度的日益增长,诸多基于仿真的自动化芯片设计程序测试方法被提出,提升了芯片设计程序测试效率及有效性.近年来,越来越多的研究者致力于将机器学习、深度学习和大语言模型(LLM)等智能化方法应用于芯片设计程序测试领域.本文调研了88篇智能化芯片设计程序测试相关的学术论文,从测试输入生成、测试预言构造及测试执行优化三个角度对智能化芯片设计程序测试已有成果进行整理归纳,重点梳理芯片设计程序测试方法从机器学习阶段、深度学习阶段到大语言模型阶段的演化,探讨不同阶段方法在提高测试效率和覆盖率、降低测试成本等方面的潜力.同时,介绍芯片设计程序测试领域的研究数据集和工具,并展望了未来的发展方向和挑战.
2025, 36(6):0-0. DOI: 10.13328/j.cnki.jos.007329
摘要:长方法及其他类型的代码坏味阻碍了软件应用程序达到最佳的可读性、可重用性和可维护性。因此,人们对长方法的自动检测和分解进行了广泛的研究。虽然这些方法极大地促进了分解,但其解决方案往往与最优方案存在很大差异。为此,我们调研公开真实长方法数据集中的可自动化部分,探讨了长方法的分解情况,并基于调研结果,在本文中提出了一种基于大语言模型的新方法(称为 Lsplitter),用于自动分解长方法。对于给定的长方法,Lsplitter会根据启发式规则和大语言模型将该方法分解为一系列短方法。然而,大语言模型经常会拆分出相似的方法,针对大语言模型的分解结果,Lsplitter利用基于位置的算法,将物理上连续且高度相似的方法合并成一个较长的方法。最后对这些候选结果进行排序。我们对真实Java项目中的2849个长方法进行了实验。实验结果表明,相较传统结合模块化矩阵的方法,Lsplitter的命中率提升了142%,相较纯基于大语言模型的方法,命中率提升了7.6%。
2025, 36(6):0-0. DOI: 10.13328/j.cnki.jos.007330
摘要:Datalog是一种声明式逻辑编程语言,在不同领域得到了广泛应用.近年来,学术界和工业界对Datalog的兴趣高涨,设计并开发了多种Datalog引擎和相应方言.然而,多方言带来的一个问题是以一种Datalog方言实现的代码一般而言不能在另一种方言的引擎上执行.因此,当采用新Datalog引擎时,需要将现有Datalog代码翻译到新方言上.目前的Datalog代码翻译技术可分为人工重写代码和人工设计翻译规则两类,存在耗时长、大量重复劳动、缺乏灵活性和可拓展性等问题.本文提出了一种大语言模型(LLM)赋能的Datalog代码翻译技术,利用LLM强大的代码理解和生成能力,通过分治翻译策略、基于少样本提示和思维链提示的提示工程、基于检查-反馈-修复的迭代纠错机制,可以在不同Datalog方言之间实现高精度代码翻译,减轻开发人员重复开发翻译规则的工作量.基于此代码翻译技术,设计并实现了一种通用的基于Datalog的声明式增量程序分析框架.在不同Datalog方言对上评估了所提出的LLM赋能的Datalog代码翻译技术的性能,评估结果验证了所提代码翻译技术的有效性.我们也在对通用声明式增量程序分析框架进行了实验评估,验证了基于所提代码翻译技术的增量程序分析的加速效果.