[发明专利]软件源代码缺陷检测方法、系统、电子设备及储存介质有效
申请号: | 202110958006.X | 申请日: | 2021-08-20 |
公开(公告)号: | CN113641586B | 公开(公告)日: | 2022-04-15 |
发明(设计)人: | 张世琨;叶蔚;邓枭;高庆;张君福 | 申请(专利权)人: | 北京北大软件工程股份有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06N3/04;G06N3/08;G06K9/62;G06V10/764 |
代理公司: | 北京华创智道知识产权代理事务所(普通合伙) 11888 | 代理人: | 彭随丽 |
地址: | 100082 北京市海淀区北四*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 软件 源代码 缺陷 检测 方法 系统 电子设备 储存 介质 | ||
发明实施例涉及软件测试领域,公开了一种软件源代码缺陷检测方法、系统、电子设备及计算机可读存储介质,其中方法包括步骤:构建源代码缺陷数据集,基于开源项目缺陷信息构建用于训练的大规模数据集,包括对开源项目存在的缺陷条目进行自动对齐与抽取以及对所述开源项目源代码缺陷进行上下文增广;构建基于代码切片的深度学习源代码缺陷检测模型,包括使用多模态的语义表示对代码片段进行表示与分类;对基于人工智能的源代码缺陷检测结果集成显示;开发者可以使用本发明所述的方法自动构建来源于真实项目的缺陷数据集并借助模型进行自动判断,而不必花费大量的时间与精力人工遍历代码。
技术领域
本发明涉及软件测试领域,尤其是一种面向大规模工程基于多模态代码表示的软件源代码缺陷检测方法、系统、电子设备及存储介质。
背景技术
在源代码缺陷检测是软件开发过程中至关重要的一环,但人工审查代码需要专业知识并消耗巨大的人力成本。如何有效快速识别代码缺陷已经成为重中之重。人工智能方法在该任务上已展现出很大潜力,利用深度神经网络的特征挖掘与表示能力,不仅可以为缺陷检测提供一种有效的技术路径,而且还可能对于解释缺陷机理提供一种新的思路,极大提高人工审查的效率。尽管基于人工智能的源代码缺陷检测具有良好的研究前景和巨大的应用价值,但是依然面临巨大的挑战,在代码缺陷数据集、缺陷预测分类模型等方面的研究都有众多技术难点亟待解决。
基于深度学习的源代码缺陷检测不同于传统的检测流程,其需要大量的缺陷代码数据作为支撑。如何基于开源项目信息生成用于训练模型的代码缺陷数据集,是该研究需要解决的一个难点,也将决定用于缺陷检测的深度学习模型能力。这一困难进一步包含两个部分:构造来源于真实工程、数据规模大、缺陷具体位置明确、缺陷类型与CVE-ID对应准确且包含完整缺陷发生过程的代码缺陷数据集具有很大的挑战性,需要设计精准的代码,缺陷对齐算法;基于切片代码路径进一步扩展出粒度适中且语义丰富的代码切片是一个需要大量探索的过程,这将是缺陷检测深度学习模型成功的关键。
缺陷检测的深度学习分类模型需要对代码语义进行精准地表示,深度神经网络一方面需要挖掘传统基于逻辑和规则的检测方法没有覆盖的隐式特征,另一方面也需要部分表达出这部分逻辑与规则的语义。因此,如何设计神经网络结构是一项挑战。需要综合考虑序列、树和图等多种形态的代码表示,探索卷积神经网络、循环神经网络、树形神经网络、图神经网络和注意力机制的多种组合,这部分工作需要创造性的设计,也需要大量的经验性尝试和对神经网络的深度理解。
发明内容
本发明的目的在于提供一种基于深度学习的缺陷检测方法,基于深度学习模型判断源代码切片是否有缺陷。
为实现上述目的,本发明提供一种软件源代码缺陷检测方法,包括:
步骤一:构建源代码缺陷数据集,基于开源项目的缺陷信息构建用于深度学习模型训练的数据集,包括对所述开源项目存在的缺陷条目进行自动对齐的与抽取;
步骤二:构建基于代码切片的深度学习源代码缺陷检测模型,包括使用多模态的语义表示对代码片段进行表示与分类;
步骤三:将源代码缺陷检测结果汇总并显示。
根据本发明的一个方面,根据所述源代码缺陷数据集,检索目标开源项目关键词,得到所述开源项目对应缺陷代码出处与其缺陷类型的匹配,定位所述缺陷代码具体位置行,对所述缺陷代码进行切片操作,以所述具体位置行为起点,通过控制流图回溯缺陷路径,得到真实缺陷对应的代码切片,缺陷对,修改所述缺陷代码,对修正后的代码使用所述切片操作并标注是否更改正确,得到真实缺陷源代码数据集。
根据本发明的一个方面,对所述缺陷代码路径进行切片,根据切片中的缺陷发生位置和传播路径,将所述缺陷代码路径扩展为包含更丰富上下文的代码切片,所述代码切片包含多种模态的信息;解析所述代码切片各种元素的结构关系,生成代码知识图谱,用Trans系列方法对知识图谱的节点进行表示学习,得到代码元素的结构语义。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京北大软件工程股份有限公司,未经北京北大软件工程股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110958006.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:切塔方法
- 下一篇:一种基于线上业务安全的安全验证系统