[发明专利]一种应用改进遗传算法的智能合约测试用例生成方法有效
申请号: | 202010579513.8 | 申请日: | 2020-06-23 |
公开(公告)号: | CN111797010B | 公开(公告)日: | 2022-09-23 |
发明(设计)人: | 张鹏程;于佳男 | 申请(专利权)人: | 河海大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06N3/00;G06N3/12;G06Q40/04 |
代理公司: | 南京苏高专利商标事务所(普通合伙) 32204 | 代理人: | 孟红梅 |
地址: | 210024 *** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 应用 改进 遗传 算法 智能 合约 测试 生成 方法 | ||
本发明公开了一种应用改进遗传算法的智能合约测试用例生成方法,针对部署运行在以太坊上的智能合约,基于源代码获取合约的控制流图(CFG),遍历CFG,统计合约中的定义‑使用对(dup),并进一步划分出与require语句执行相关的dup;在测试用例生成环节,对于生成的每一组测试用例,带入执行插桩后的合约程序,为指导生成过程的进化,将遗传算法中种群更新的思想以及粒子群优化算法中全局最佳(G_O)和粒子最佳(I_O)的概念结合使用、并对遗传算法中父代种群的选择策略进行改进,从而提高了有效测试用例的生成效率。本发明方法切实可行,生成的测试用例实现了较高的覆盖率,且生成过程需要更少的迭代次数。
技术领域
本发明涉及一种智能合约测试用例生成方法,具体是以数据流测试为基础,将遗传算法与粒子群优化算法结合使用的测试用例生成方法,属于软件测试技术领域。
背景技术
近年来,一种新的底层技术——区块链技术取得了迅猛发展,因其去中心化且不可篡改的特性,在金融、教育等多个领域受到很大的关注。以太坊做为区块链的主流平台之一,相较于以Bitcoin为代表的数字货币区块链平台,增加了智能合约的使用;且相比于更加企业化的Hyperledger平台,以太坊因简单、便捷且面向所有开发者的特点成为更多从事区块链技术研究及相关应用开发人员的首选平台。智能合约作为运行在以太坊上的通用程序,主要由一种名为Solidity语言编写,该语言衍生于JavaScript、Python、C++,且具有自己的特性。智能合约的部署和使用使区块链技术有了更广阔的使用前景。
但Solidity语言作为一门较新的语言且运行环境不同于传统软件,因此对于大多数编程经验不丰富的人员在编写过程中极易出现编程错误导致合约不安全;另一方面,由于运行平台——以太坊区块链平台的不可篡改的问题使得不能通过简单的软件升级来更新修复有问题的合约。这就使得在部署发布前对智能合约的测试变得尤为重要。目前,针对以太坊智能合约的安全测试已经有较多的研究。Tsankov等人开发了一个名为Securify的代码分析工具,基于预定义的安全模式分析智能合约字节码进而实现安全检测;Tikhomirov等人实现了一个可扩展静态分析工具Smartcheck,该工具基于他们总结归纳的21种安全漏洞进行了检测。Liu等人采用模糊测试的思想通过将智能合约转换为C++的程序实现重入漏洞的检测;Liu等人基于以太坊智能合约的ABI规格说明书和自定义的测试规则实现了对7种安全问题的测试。
但上述研究都是基于智能合约中预定义错误类型进行检测,随着智能合约的应用场景越来越多,这些研究显然不能满足全部的测试需求,如功能完备性的测试。为进一步实现对智能合约的整体测试,Zhang等人提出了一种面向Solidity语言的测试用例生成方法,首次将遗传算法用于Solidity语言智能合约的动态数据流测试。但该方法仍存在以下几点缺陷:1)若算法前期生成的测试用例导致智能合约中的require语句无法执行,会导致测试用例覆盖率低,算法需要迭代更多次,算法开销大;2)算法达到最大适应度值而终止时,仅能保证至少输出一个满足条件的测试用例,同一测试用例集中的其他测试用例的质量无法保证。因此,进一步优化智能合约的数据流测试是有必要的。
发明内容
发明目的:考虑到在智能合约的使用越来越多且合约安全性不能得到充分保障的前提下,一方面针对智能合约的检测与测试尚不完善;另一方面,现有的测试用例生成技术或倾向于对传统软件程序的测试,或没有结合智能合约程序特性进行充分优化,导致测试用例生成过程耗时较久且无法保证输出的测试用例集的整体覆盖率。本发明目的是提供一种应用改进遗传算法的智能合约测试用例生成方法,基于智能合约中变量的特性,融合遗传算法优化种群的思想以及粒子群算法中全局最佳等概念,实现对测试用例生成过程以及算法输出结果的优化,进一步提升测试用例生成效率、提高算法输出测试用例集的整体覆盖率。
技术方案:为实现上述发明目的,本发明采用如下技术方案:
一种应用改进遗传算法的智能合约测试用例生成方法,包括如下步骤:
(1)根据以太坊智能合约程序的源代码生成对应的控制流图;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于河海大学,未经河海大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010579513.8/2.html,转载请声明来源钻瓜专利网。