基于元启发式算法的智能合约测试用例生成方法及装置制造方法及图纸

技术编号:39664175 阅读:13 留言:0更新日期:2023-12-11 18:27
本发明专利技术基于元启发式算法的智能合约测试用例生成方法及装置;通过构建连接树,计算测试用例之间的相关性并进行层次聚类,形成相似测试用例种群,并在非相似种群的基础上进行后代生成;同时,本发明专利技术还针对

【技术实现步骤摘要】
基于元启发式算法的智能合约测试用例生成方法及装置


[0001]本专利技术涉及区块链
,特别涉及基于元启发式算法的智能合约测试用例生成方法及装置


技术介绍

[0002]区块链技术,以其不可篡改的分布式账本和去中心化的网络结构,确保了数据的完整性

透明性和安全性

其中,以太坊作为区块链技术的一种主要实现方式,其引入的智能合约概念,标志着我们进入了区块链
2.0
时代

智能合约作为区块链上的图灵完备程序,具有确定性

实时性和去中心化的特性,在数字支付

金融资产处理

云计算等领域有着广阔的应用前景,并被视为有可能重塑包括银行

保险

供应链,以及金融交易所在内的多个行业

[0003]然而,智能合约的开发和部署也面临着一系列的挑战

由于以太坊平台本身的不可篡改性,一旦智能合约被部署,就无法通过简单的软件升级来修复存在的问题

这种固有的不可修改性导致智能合约中的漏洞一旦存在,就会永远存在,从而导致严重后果

近年来,智能合约的安全问题已经引发了一系列的严重损失,如
The DAO
的攻击事件,
Parity
钱包的漏洞事件,因此,在智能合约部署前进行全面且深入的测试变得至关重要

[0004]针对现阶段区块链领域所面临的挑战,智能合约的扩展性与规模已经呈现出爆炸性增长的趋势,而对安全漏洞的探测难度同步提升

这种状况下,过去那种严重依赖开发者技术熟练度和基于专业人士经验的代码审查的安全模式已难以满足当前需求

因此,大量专注于智能合约漏洞的自动化检测工具涌现出来,现行的智能合约漏洞自动化检测主要采取的技术路线包括静态分析

符号执行以及模糊测试
。Tikhomirov
等开发了一款名为
Smartcheck
的静态分析工具,基于他们对已知漏洞的深度研究与归纳,能够针对
21
种安全漏洞进行有效检测

另一方面,
Liu
等则利用以太坊智能合约的
ABI
规格说明书和自定义的测试规则,针对7种主要的安全问题进行了实际测试
。Sun
等采用突变测试的方式应对智能合约中的整数溢出漏洞,他们针对整数溢出漏洞设计出了五种突变算子,并运用生成的漏洞突变体对当前存在的整数溢出漏洞测试工具进行了全面评估

此外,
Nguyen
等提出的一种模糊测试工具
sFuzz
,利用反馈自适应模糊策略,以实现最大程度的路径覆盖

[0005]在过去几年中,对于
Solidity
智能合约的测试技术虽然已经取得了显著进步,但也还存在一定的局限性

在模糊测试中,模糊器的作用仅仅局限于生成输入数据,它并不能实际构建可运行的测试用例,无法进行组合测试
(
即包含多个请求的测试用例
)
,也无法对合约的预期行为进行准确测试

而形式化验证方法,尽管其旨在通过将合约转换为形式证明语言来对合约行为进行数学上的验证,但其可扩展性较差,且需要开发者提供复杂的行为模型,存在实用性限制

目前,关于
Solidity
测试用例生成的研究仍相对较少

现有的研究原型并未专门针对
Solidity
语言进行优化,因此,代码覆盖率和分支覆盖率均不高

随着程序复杂度的提升和代码行数的增长,测试用例生成方法的覆盖目标规模显著增大

这不仅影响了算法的性能,也降低了测试效率,使得漏报率和误报率较高,检测开销大,效率低,
主要原因在于测试用例的覆盖率不足

因此,为了提高智能合约的测试效率和准确性,进一步优化智能合约测试方法是至关重要的

[0006]在当今的数字化时代,区块链技术以其独特的去中心化和不可篡改的特性,在全球范围内获得了广泛的关注和应用

在此背景下,智能合约,作为区块链技术的重要组成部分,其在各种行业的应用正持续扩大

同时,智能合约的不可篡改特性,导致一旦智能合约部署,就无法通过简单的软件升级来修复存在的问题,因此保证智能合约的正确性和安全性是至关重要的

然而,现行的形式化验证方法,虽然以数学原理为基础来验证合约行为,但其在可扩展性上存在局限,且需要开发者提供复杂的行为模型,这在实际应用中形成了显著的限制

此外,当前的测试用例生成技术并未对
Solidity
语言进行特定优化,因此在代码覆盖率和分支覆盖率上的表现并不理想

[0007]已有的与本专利技术最相近似的技术方案:一种应用改进遗传算法的智能合约测试用例生成方法:该方法针对部署运行在以太坊上的智能合约,基于源代码获取合约的控制流图
(CFG)
,遍历
CFG
,统计合约中的定义

使用对
(dup)
,并进一步划分出与
require
语句执行相关的
dup
;在测试用例生成环节,对于生成的每一组测试用例,带入执行插桩后的合约程序,为指导生成过程的进化,将遗传算法中种群更新的思想以及粒子群优化算法中全局最佳
(G_O)
和粒子最佳
(I_O)
的概念结合使用

并对遗传算法中父代种群的选择策略进行改进,从而提高了有效测试用例的生成效率

[0008]现有技术的不足:
[0009]1.
模糊测试的局限性:现有的模糊测试技术主要在于生成输入数据,它无法构建可运行的测试用例,也不能进行组合测试,这限制了其在复杂场景下的测试能力

同时,模糊测试无法准确地测试合约的预期行为

[0010]2.
形式验证方法的缺陷:尽管形式验证方法可以从数学上验证合约的行为,但其可扩展性较差,并且需要开发者提供复杂的行为模型,这在实际应用中可能导致其效率低下,使用成本高

[0011]3.
缺乏针对
Solidity
语言优化的优化:现有的测试用例生成技术大多没有针对
Solidity
语言进行优化,没有充分考虑其自身语言特性,导致测试效果不佳

[0012]4.
代码和分支覆盖率不足:现有的智能合约测试方法常常无法达到高代码覆盖率和分支覆盖率,这可能导致一些重要的错误被遗漏,影响合约的安本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
基于元启发式算法的智能合约测试用例生成方法,其特征在于,具体包括如下步骤:
S1、
对智能合约的源代码进行分析,构建控制流图;
S2、
根据智能合约随机生成若干个初始测试用例,建立初始化种群,进入步骤
S3
;所述种群中每个个体表示一个测试用例;
S3、
计算每两个测试用例之间的相关性;根据计算结果和控制流图,构建树状聚类图,从树状聚类图中划分出不同的聚类,每个聚类代表一组密切相关的测试用例;
S4、
在不同的聚类中分别随机选择父代个体,通过交叉操作和变异操作,生成若干个子代个体;
S5、
对父代个体和子代个体进行测试,根据测试结果找出未被用例覆盖的分支,并进行归一化分支距离的计算;
S6、
根据归一化分支距离,对父代和子代进行排序,根据排序结果选择下一代种群;检查是否满足终止条件,若满足,结束进程;反之,返回步骤
S3。2.
如权利要求1所述的基于元启发式算法的智能合约测试用例生成方法,其特征在于,步骤
S1
具体包括如下子步骤:
S11、
对智能合约的源代码进行分析,识别源代码中的所有基本块;
S12、
创建若干个节点,所述节点分别关联一个基本块;创建若干个代表控制流的可能方向的边,所述边位于两个节点之间,构建初始控制流图;
S13、
在初始控制流图进行完善操作生成最终控制流图;所述完善操作包括添加一个开始节点和一个结束节点

对循环和条件语句进行特别标注

针对
Solidity
中合约的创建和销毁

异常处理情况增加特殊边
。3.
如权利要求1所述的基于元启发式算法的智能合约测试用例生成方法,其特征在于:步骤
S2
中通过解析智能合约的可调用方法及构造函数,生成相应的初始测试用例
。4.
如权利要求1所述的基于元启发式算法的智能合约测试用例生成方法,其特征在于,步骤
S3
具体包括如下子步骤:
S31、
根据每两个测试用例的函数调用相似度

状态变量访问相似度,计算每两个测试用例的相关性;

【专利技术属性】
技术研发人员:李腾石建陈厅张峰蒋辉军宋书玮韩朝阳王东
申请(专利权)人:杭州后量子密码科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1