CN111797010A - 一种应用改进遗传算法的智能合约测试用例生成方法 - Google Patents
一种应用改进遗传算法的智能合约测试用例生成方法 Download PDFInfo
- Publication number
- CN111797010A CN111797010A CN202010579513.8A CN202010579513A CN111797010A CN 111797010 A CN111797010 A CN 111797010A CN 202010579513 A CN202010579513 A CN 202010579513A CN 111797010 A CN111797010 A CN 111797010A
- Authority
- CN
- China
- Prior art keywords
- population
- intelligent contract
- dup
- fitness value
- generation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/004—Artificial life, i.e. computing arrangements simulating life
- G06N3/006—Artificial life, i.e. computing arrangements simulating life based on simulated virtual individual or collective life forms, e.g. social simulations or particle swarm optimisation [PSO]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/12—Computing arrangements based on biological models using genetic models
- G06N3/126—Evolutionary algorithms, e.g. genetic algorithms or genetic programming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biophysics (AREA)
- Business, Economics & Management (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Biomedical Technology (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Computer Hardware Design (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Quality & Reliability (AREA)
- General Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Genetics & Genomics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Development Economics (AREA)
- Physiology (AREA)
- Debugging And Monitoring (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种应用改进遗传算法的智能合约测试用例生成方法,针对部署运行在以太坊上的智能合约,基于源代码获取合约的控制流图(CFG),遍历CFG,统计合约中的定义‑使用对(dup),并进一步划分出与require语句执行相关的dup;在测试用例生成环节,对于生成的每一组测试用例,带入执行插桩后的合约程序,为指导生成过程的进化,将遗传算法中种群更新的思想以及粒子群优化算法中全局最佳(G_O)和粒子最佳(I_O)的概念结合使用、并对遗传算法中父代种群的选择策略进行改进,从而提高了有效测试用例的生成效率。本发明方法切实可行,生成的测试用例实现了较高的覆盖率,且生成过程需要更少的迭代次数。
Description
技术领域
本发明涉及一种智能合约测试用例生成方法,具体是以数据流测试为基础,将遗传算法与粒子群优化算法结合使用的测试用例生成方法,属于软件测试技术领域。
背景技术
近年来,一种新的底层技术——区块链技术取得了迅猛发展,因其去中心化且不可篡改的特性,在金融、教育等多个领域受到很大的关注。以太坊做为区块链的主流平台之一,相较于以Bitcoin为代表的数字货币区块链平台,增加了智能合约的使用;且相比于更加企业化的Hyperledger平台,以太坊因简单、便捷且面向所有开发者的特点成为更多从事区块链技术研究及相关应用开发人员的首选平台。智能合约作为运行在以太坊上的通用程序,主要由一种名为Solidity语言编写,该语言衍生于JavaScript、Python、C++,且具有自己的特性。智能合约的部署和使用使区块链技术有了更广阔的使用前景。
但Solidity语言作为一门较新的语言且运行环境不同于传统软件,因此对于大多数编程经验不丰富的人员在编写过程中极易出现编程错误导致合约不安全;另一方面,由于运行平台——以太坊区块链平台的不可篡改的问题使得不能通过简单的软件升级来更新修复有问题的合约。这就使得在部署发布前对智能合约的测试变得尤为重要。目前,针对以太坊智能合约的安全测试已经有较多的研究。Tsankov等人开发了一个名为Securify的代码分析工具,基于预定义的安全模式分析智能合约字节码进而实现安全检测;Tikhomirov等人实现了一个可扩展静态分析工具Smartcheck,该工具基于他们总结归纳的21种安全漏洞进行了检测。Liu等人采用模糊测试的思想通过将智能合约转换为C++的程序实现重入漏洞的检测;Liu等人基于以太坊智能合约的ABI规格说明书和自定义的测试规则实现了对7种安全问题的测试。
但上述研究都是基于智能合约中预定义错误类型进行检测,随着智能合约的应用场景越来越多,这些研究显然不能满足全部的测试需求,如功能完备性的测试。为进一步实现对智能合约的整体测试,Zhang等人提出了一种面向Solidity语言的测试用例生成方法,首次将遗传算法用于Solidity语言智能合约的动态数据流测试。但该方法仍存在以下几点缺陷:1)若算法前期生成的测试用例导致智能合约中的require语句无法执行,会导致测试用例覆盖率低,算法需要迭代更多次,算法开销大;2)算法达到最大适应度值而终止时,仅能保证至少输出一个满足条件的测试用例,同一测试用例集中的其他测试用例的质量无法保证。因此,进一步优化智能合约的数据流测试是有必要的。
发明内容
发明目的:考虑到在智能合约的使用越来越多且合约安全性不能得到充分保障的前提下,一方面针对智能合约的检测与测试尚不完善;另一方面,现有的测试用例生成技术或倾向于对传统软件程序的测试,或没有结合智能合约程序特性进行充分优化,导致测试用例生成过程耗时较久且无法保证输出的测试用例集的整体覆盖率。本发明目的是提供一种应用改进遗传算法的智能合约测试用例生成方法,基于智能合约中变量的特性,融合遗传算法优化种群的思想以及粒子群算法中全局最佳等概念,实现对测试用例生成过程以及算法输出结果的优化,进一步提升测试用例生成效率、提高算法输出测试用例集的整体覆盖率。
技术方案:为实现上述发明目的,本发明采用如下技术方案:
一种应用改进遗传算法的智能合约测试用例生成方法,包括如下步骤:
(1)根据以太坊智能合约程序的源代码生成对应的控制流图;
(2)遍历控制流图中节点,提取出合约程序中包含的全部整型变量的信息,同时定位合约中各个require语句所在的节点位置;
(3)根据步骤(2)获得的整型变量信息遍历控制流图,统计合约中的变量的定义-使用对dup,记为N_dup;在统计得到的N_dup集合中,根据步骤(2)中的require语句定位结果进一步划分出与require语句执行相关的dup,记为R_dup;
(4)根据统计出的R_dup和N_dup对程序进行代码插桩,得到插桩后的智能合约程序;
(5)根据预定义的种群规模以及步骤(2)获取的智能合约程序中的整型变量信息初始化生成第一代种群,默认第一代种群为初始的个体最佳I_O,其中,取得最大适应度值的个体为初始全局最佳G_O;
(6)根据步骤(5)中的初始信息,采用遗传算法的选择、交叉、变异操作逐代生成新的种群,并将生成的每代新种群带入步骤(4)得到的插桩后的合约程序中执行,根据预定义的适应度函数计算适应度值更新G_O、I_O并形成新的父代种群重复遗传算法执行;
(7)当满足预先设置的终止条件时,遗传算法停止,输出G_O和I_O作为算法最终的输出结果。
在优选的实施方案中,所述步骤(1)包括如下步骤:
(11)构建智能合约中每个函数对应的子控制流图,针对与控制结构相关的关键字去识别智能合约程序中的各个控制结构,包括顺序结构、条件结构、循环结构;在子控制流图构建过程中将由require所标识的控制结构处理为条件结构;
(12)构建整体控制流图,逐个处理合约中的函数调用,对于存在调用的地方,用一对调用-返回边来表示智能合约中的函数调用和返回关系,从而构建完整的控制流图。
在优选的实施方案中,所述步骤(2)中包括如下步骤:
(21)遍历控制流图节点,基于智能合约中用于声明整型变量信息的关键字,匹配字符串,获取智能合约中的整型变量信息存储在列表Lv中,包括变量名、变量长度和变量类型;并对Lv中每个变量分别初始化两个列表Lv_u、Lv_d用来存储变量的定义节点和使用节点;
(22)遍历控制流图节点,识别智能合约中require语句并定位其所在的节点。
在优选的实施方案中,所述步骤(3)中包括如下步骤:
(31)根据控制流图,从初始节点开始执行前序遍历,若遍历节点存在对Lv中某一变量的定义,则将节点加入到对应变量的Lv_u中,若遍历节点存在对Lv中某一变量的使用,则将节点加入到对应变量的Lv_d中,并在该变量的Lv_u中找到距离当前使用节点最近的前置定义节点,组成一个N_dup;遍历控制流图的所有路径,统计N_dup的数量;
(32)根据智能合约中的require语句所在节点信息,在步骤(31)统计的N_dup集合的基础上,标记出与require语句执行相关的dup,记为R_dup,统计R_dup的数量。
在优选的实施方案中,所述步骤(4)根据步骤(3)中统计的dup信息对智能合约源代码进行插桩,具体包括两部分:在代码最初位置插入语句声明dup覆盖状态标识变量,初始化为false,并在对应dup执行后插入语句将变量赋值为true;在代码最初位置插入语句声明被覆盖dup数量的统计变量并在代码最末位置插入统计变量的输出函数,在dup覆盖状态标识变量赋值true的语句后插入语句统计变量的自增;经过上述插桩后,输出对应的智能合约代码。
在优选的实施方案中,所述步骤(5)中包括如下步骤:
(51)根据步骤(21)中获得的变量信息,基于预定义的种群规模初始化生成初代种群;
(52)默认生成的初代种群是初始的I_O;
(53)设计具体的适应度函数,函数具体描述如下:其中,fi表示当前种群中第i个个体的适应度值,m,n分别为步骤(3)中统计的N_dup和R_dup数量,pi表示当前个体覆盖的全部N_dup的数量,qi表示当前个体覆盖的全部R_dup的数量,ε表示加权参数;
(54)将生成的初代种群带入步骤(4)生成的插桩后的智能合约中执行,根据插桩代码返回种群中各个个体的dup覆盖情况,并根据步骤(53)适应度函数计算个体的适应度值,将取得最大适应度值的个体作为初代G_O,同时保存该个体辅助第二代种群的遗传操作执行。
在优选的实施方案中,所述步骤(6)中包括如下步骤:
(61)基于步骤(5)中生成的初代种群,采用遗传算法的选择、交叉、变异操作生成第二代种群,从第二代种群开始循环执行下面的操作;
(62)对于生成的每一代种群,首先将种群中个体带入智能合约执行,根据适应度函数计算个体的适应度值,然后对于当前种群中的各个个体,比较其适应度值和当前算法的I_O中对应位置个体的适应度值大小,取适应度值较大者用于更新I_O,同时比较当前种群中取得的最大适应度值和当前算法的G_O的适应度值进行比较,用适应度值较大者更新G_O;
(63)比较当前种群取得的最大适应度值和上一代种群中最大适应度值,若当前代的最大适应度值小,则用上一代取得最大适应度值的种群替换当前代适应度值最小的种群作为父代种群,执行选择、交叉、变异操作生成新种群;继续执行步骤(62)内容。
在优选的实施方案中,所述步骤(7)中根据预定义的算法终止条件判断当前算法可以终止,在算法终止执行后输出G_O、I_O。算法终止条件设置为1)当种群最大适应度值变化趋于平稳;或者2)当前G_O接近最优值且I_O的适应度值皆达到G_O的适应度值。
有益效果:本发明提供的一种应用改进遗传算法的智能合约测试用例生成方法,基于数据流测试,考虑到智能合约中require语句的执行特性以及整型变量的特点,通过适应度函数的设计及参数ε值的调整合理增加了生成的测试用例对require语句的覆盖的权重;另一方面,在测试用例生成环节将遗传算法和粒子群算法联合使用,保留上一代种群中适应度值最大的个体用于下一代父代种群的重组;并伴随遗传算法执行不断更新G_O、I_O,将其做为方法的最终输出。与现有技术相比,本发明在智能合约测试用例生成领域,提出了一个切实可行的方法,通过对适应度函数的再设计强调测试用例对智能合约中特有的由require语句引发的条件选择结构的覆盖从而加速高覆盖率测试用例的生成。并且本发明通过改进遗传算法父代种群选择策略、融合遗传算法与粒子群优化算法的方式,进一步优化了算法输出,有效地提高了测试用例生成效率并且实现了测试用例集的高覆盖率。
附图说明
图1为本发明实施例的整体步骤图;
图2为本发明实施例的方法流程图。
具体实施方式
下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
如图1所示,本发明实施例提供的一种应用改进遗传算法的智能合约测试用例生成方法,包括如下步骤:
步骤S1:待测试合约的CFG生成。根据以太坊智能合约程序的源代码生成对应的控制流图CFG;
步骤S2:基于CFG的信息提取。遍历控制流图中节点,提取出合约程序中包含的全部整型变量的信息,同时定位合约中各个require语句所在的节点位置;
步骤S3:程序中dup的收集。根据步骤S2获得的整型变量信息遍历控制流图,统计合约中的变量的定义-使用对dup,记为N_dup;在统计得到的N_dup集合中,根据步骤S2中的require语句定位结果进一步划分出与require语句执行相关的dup,记为R_dup;
步骤S4:程序插桩。根据统计出的R_dup和N_dup对程序进行代码插桩,得到插桩后的智能合约程序;
步骤S5:初始信息生成。根据预定义的种群规模以及步骤S2获取的智能合约程序中的整型变量信息初始化生成第一代种群,默认第一代种群为初始的个体最佳(I_O),其中,取得最大适应度值的个体为初始全局最佳(G_O);
步骤S6:算法执行生成测试用例。根据步骤S5中的初始信息,采用遗传算法的选择、交叉、变异操作逐代生成新的种群,并将生成的每代新种群带入步骤S4得到的插桩后的合约程序中执行,根据预定义的适应度函数计算适应度值更新G_O、I_O并形成新的父代种群重复遗传算法执行;
步骤S7:达到终止条件输出全局最佳G_O、个体最佳I_O。当满足预先设置的终止条件时,遗传算法停止,输出G_O和I_O作为算法最终的输出结果。
图2为本发明实施例的一种应用改进遗传算法的智能合约测试用例生成方法的详细步骤,具体如下:步骤S1中,根据待测试智能合约源代码要得到对应的控制流图,具体步骤为:
步骤101:针对智能合约中的每个函数体,构建其对应的子控制流图(sub-CFG)。通过匹配、分析与程序控制结构相关的关键字去识别智能合约程序中的包含的控制结构,主要有顺序结构、条件结构、循环结构三种。这些关键字除常见的if,while,for等,又有智能合约中特有的,如require。考虑到合约中require的执行逻辑类似于一个if语句,因此,在子控制流图构建过程中将由require所标识的控制结构处理为条件结构;
步骤102:在智能合约程序中,往往通过多个函数方法的联合使用来实现一个业务逻辑,因此构建完整的智能合约控制流图,必须进一步处理合约中包含的函数调用及返回关系,基于步骤101生成的子控制流图,识别合约程序中函数调用,对于存在调用的地方,用一对调用-返回边来表示对应的函数调用-返回关系。
步骤S2中,根据智能合约的控制流图提取相关信息,其具体步骤如下:
步骤201:遍历步骤102得到的控制流图节点,基于智能合约中用于声明整型变量信息的关键字(int*/uint*),通过匹配字符串的方式,获取智能合约中的整理变量信息并存储在列表Lv中,具体信息项包括变量名、变量长度、变量类型等信息;同时,对Lv中每个变量分别初始化两个列表Lv_u、Lv_d用来存储变量的定义节点和使用节点。智能合约中用于声明整型变量的关键字表示为如下形式:int*/uint*,*表示声明变量的长度,*首先可以不表示任何字符,此时关键字为int/uint,变量长度为默认条件256位,或者*可以代表8-256内任一个大小是8的倍数的数字,数值大小对应的变量位数;
步骤202:require语句作为智能合约中特有的语句,其执行特点与if语句相似又有不同,当require语句条件满足时,顺序执行后面的语句,当require语句条件不满足时,合约终止执行。为了再更短的时间内实现生成的测试用例达到较好的覆盖率,要保证生成的测试用例可以覆盖与require语句执行相关的信息。因此,在获取变量信息遍历的同时,也要识别智能合约中的require语句并定位其所在的节点位置作为后续步骤的前置信息。
步骤S3中,基于步骤S2中的获取的信息,前序遍历步骤S1中构建的控制流图统计智能合约中变量的定义-使用对dup,其具体步骤如下:
步骤301:从初始节点开始对步骤S1生成的控制流图执行前序遍历,若遍历节点存在对Lv中某一变量的定义,则将节点加入到对应变量的Lv_u中,若遍历节点存在对Lv中某一变量的使用,则将节点加入到对应变量的Lv_d中,并在该变量的Lv_u中找到距离当前使用节点最近的前置定义节点,组成一个N_dup。遍历控制流图的所有路径,将统计的N_dup数量记为m;
步骤302:根据步骤202中定位的智能合约中的require语句所在节点信息,在步骤301统计的N_dup集合的基础上,特别的统计出与require语句执行相关的dup,记为R_dup,将统计的R_dup的数量记为n。此处的“与require语句执行相关的dup”主要指以下两种:由require条件语句直接产生的dup,直接受到require语句执行影响的dup。
为实现测试用例适应度值的计算,采用程序插桩的方式返回当前执行智能合约的测试用例的覆盖情况,以便通过插入的代码返回正确的覆盖信息,步骤S4中程序插桩具体步骤如下:
步骤401:基于步骤301和步骤302中统计的dup信息对智能合约源代码进行插桩,具体包括两部分:在代码最初位置插入语句声明dup覆盖状态标识变量,初始化为false,并在对应dup执行后插入语句将变量赋值为true;在代码最初位置插入语句声明被覆盖dup数量的统计变量并在代码最末位置插入统计变量的输出函数,在dup覆盖状态标识变量赋值true的语句后插入语句统计变量的自增。经过上述插桩后,输出对应的智能合约代码。
本发明中采用遗传算法同时引入了粒子群优化算法中的全局最佳和粒子最佳的概念。步骤S5中初始信息生成,具体步骤如下:
步骤501:根据步骤201中获得的智能合约中的变量信息,基于预定义的种群规模随机初始化生成初代种群作为遗传算法的输入;在遗传算法优化过程中种群个体的编码方法采用二进制编码;
步骤502:本发明使用了个体最佳(I_O)作为算法的输出之一,默认步骤501生成的初代种群为初始I_O;
步骤503:根据数据流测试的基本原则,生成的测试用例应尽可能多的覆盖程序中每个变量的定义和该定义所到达的对该变量的使用之间的路径。因此,构造合适的适应度函数去评估测试用例进而辅助遗传算法实现新种群优化生成至关重要。考虑智能合约中require语句的频繁使用及其执行特性,本发明采用了如下的适应度函数:其中,fi表示当前种群中第i个个体的适应度值,m,n为步骤301和步骤302中的统计结果,pi表示当前个体覆盖的全部N_dup的数量,qi表示当前个体覆盖的全部R_dup的数量,ε表示加权参数;
步骤504:本发明使用了全局最佳(G_O)作为算法的另一个输出,根据步骤503中的适应度函数计算步骤501中生成的初代种群中个体的适应度值,默认步骤501中生成的初始种群中适应度值最大的个体为初始G_O。
步骤S6中,遗传算法执行生成测试用例,其具体步骤如下:
步骤601:基于步骤501中生成的初代种群,首先执行遗传算法的选择、交叉、变异操作生成第二代种群,从第二代种群开始循环执行步骤602—步骤604。本发明中选择操作采用了轮盘赌算法、交叉操作采用了均匀交叉、变异操作采用了、变异操作采用基本位变异;
步骤602:对于生成的每一代种群,将种群中的每个个体带入智能合约执行,根据步骤401中插入的代码返回个体的覆盖结果,带入步骤503中的适应度函数计算出每个个体的适应度值;然后分别比较当前种群的每个个体的适应度值和算法当前的I_O中的对等位置个体的适应度值大小,取适应度值较大者用于更新I_O;
步骤603:在步骤602中的基础上,进一步比较当前种群中取得的最大适应度值和算法当前的G_O的适应度值,取适应度值较大者用于更新G_O;
步骤604:比较当前种群取得的最大适应度值和上一代种群中最大适应度值,若当前代的最大适应度值小,则用上一代取得最大适应度值的种群替换当前代适应度值最小的种群重组父代种群;基于重组后的父代种群执行选择、交叉、变异操作生成新种群。
算法达到终止条件时输出G_O、I_O,步骤S7中的具体步骤如下:
步骤701:根据预先设定的算法执行终止条件,当条件满足时,算法执行停止,输出当前的G_O、I_O,本发明的算法执行终止条件为:1)当种群最大适应度值变化趋于平稳;或者2)当前G_O接近最优值且I_O的适应度值皆达到G_O的适应度值。
Claims (8)
1.一种应用改进遗传算法的智能合约测试用例生成方法,其特征在于,包括如下步骤:
(1)根据以太坊智能合约程序的源代码生成对应的控制流图;
(2)遍历控制流图中节点,提取出合约程序中包含的全部整型变量的信息,同时定位合约中各个require语句所在的节点位置;
(3)根据步骤(2)获得的整型变量信息遍历控制流图,统计合约中的变量的定义-使用对dup,记为N_dup;在统计得到的N_dup集合中,根据步骤(2)中的require语句定位结果进一步划分出与require语句执行相关的dup,记为R_dup;
(4)根据统计出的R_dup和N_dup对程序进行代码插桩,得到插桩后的智能合约程序;
(5)根据预定义的种群规模以及步骤(2)获取的智能合约程序中的整型变量信息初始化生成第一代种群,默认第一代种群为初始的个体最佳I_O,其中,取得最大适应度值的个体为初始全局最佳G_O;
(6)根据步骤(5)中的初始信息,采用遗传算法的选择、交叉、变异操作逐代生成新的种群,并将生成的每代新种群带入步骤(4)得到的插桩后的合约程序中执行,根据预定义的适应度函数计算适应度值更新G_O、I_O并形成新的父代种群重复遗传算法执行;
(7)当满足预先设置的终止条件时,遗传算法停止,输出G_O和I_O作为算法最终的输出结果。
2.根据权利要求1所述的应用改进遗传算法的智能合约测试用例生成方法,其特征在于,所述步骤(1)包括如下步骤:
(11)构建智能合约中每个函数对应的子控制流图,针对与控制结构相关的关键字去识别智能合约程序中的各个控制结构,包括顺序结构、条件结构、循环结构;在子控制流图构建过程中将由require所标识的控制结构处理为条件结构;
(12)构建整体控制流图,逐个处理合约中的函数调用,对于存在调用的地方,用一对调用-返回边来表示智能合约中的函数调用和返回关系,从而构建完整的控制流图。
3.根据权利要求1所述的应用改进遗传算法的智能合约测试用例生成方法,其特征在于,所述步骤(2)中包括如下步骤:
(21)遍历控制流图节点,基于智能合约中用于声明整型变量信息的关键字,匹配字符串,获取智能合约中的整型变量信息存储在列表Lv中,包括变量名、变量长度和变量类型;并对Lv中每个变量分别初始化两个列表Lv_u、Lv_d用来存储变量的定义节点和使用节点;
(22)遍历控制流图节点,识别智能合约中require语句并定位其所在的节点。
4.根据权利要求3所述的应用改进遗传算法的智能合约测试用例生成方法,其特征在于,所述步骤(3)中包括如下步骤:
(31)根据控制流图,从初始节点开始执行前序遍历,若遍历节点存在对Lv中某一变量的定义,则将节点加入到对应变量的Lv_u中,若遍历节点存在对Lv中某一变量的使用,则将节点加入到对应变量的Lv_d中,并在该变量的Lv_u中找到距离当前使用节点最近的前置定义节点,组成一个N_dup;遍历控制流图的所有路径,统计N_dup的数量;
(32)根据智能合约中的require语句所在节点信息,在步骤(31)统计的N_dup集合的基础上,标记出与require语句执行相关的dup,记为R_dup,统计R_dup的数量。
5.根据权利要求1所述的应用改进遗传算法的智能合约测试用例生成方法,其特征在于,所述步骤(4)根据步骤(3)中统计的dup信息对智能合约源代码进行插桩,具体包括两部分:在代码最初位置插入语句声明dup覆盖状态标识变量,初始化为false,并在对应dup执行后插入语句将变量赋值为true;在代码最初位置插入语句声明被覆盖dup数量的统计变量并在代码最末位置插入统计变量的输出函数,在dup覆盖状态标识变量赋值true的语句后插入语句统计变量的自增;经过上述插桩后,输出对应的智能合约代码。
6.根据权利要求1所述的应用改进遗传算法的智能合约测试用例生成方法,其特征在于,所述步骤(5)中包括如下步骤:
(51)根据步骤(21)中获得的变量信息,基于预定义的种群规模初始化生成初代种群;
(52)默认生成的初代种群是初始的I_O;
(53)设计具体的适应度函数,函数具体描述如下:其中,fi表示当前种群第i个个体的适应度值,m,n分别为步骤(3)中统计的N_dup和R_dup数量,pi表示当前个体覆盖的全部N_dup的数量,qi表示当前个体覆盖的全部R_dup的数量,ε表示加权参数;
(54)将生成的初代种群带入步骤(4)生成的插桩后的智能合约中执行,根据插桩代码返回种群中各个个体的dup覆盖情况,并根据步骤(53)适应度函数计算个体的适应度值,将取得最大适应度值的个体作为初代G_O,同时保存该个体辅助第二代种群的遗传操作执行。
7.根据权利要求1所述的应用改进遗传算法的智能合约测试用例生成方法,其特征在于,所述步骤(6)中包括如下步骤:
(61)基于步骤(5)中生成的初代种群,采用遗传算法的选择、交叉、变异操作生成第二代种群,从第二代种群开始循环执行下面的操作;
(62)对于生成的每一代种群,首先将种群中个体带入智能合约执行,根据适应度函数计算个体的适应度值,然后对于当前种群中的各个个体,比较其适应度值和当前算法的I_O中对应位置个体的适应度值大小,取适应度值较大者用于更新I_O,同时比较当前种群中取得的最大适应度值和当前算法的G_O的适应度值进行比较,用适应度值较大者更新G_O;
(63)比较当前种群取得的最大适应度值和上一代种群中最大适应度值,若当前代的最大适应度值小,则用上一代取得最大适应度值的种群替换当前代适应度值最小的种群作为父代种群,执行选择、交叉、变异操作生成新种群;继续执行步骤(62)内容。
8.根据权利要求1所述的应用改进遗传算法的智能合约测试用例生成方法,其特征在于,所述步骤(7)中根据预定义的算法终止条件判断当前算法可以终止,在算法终止执行后输出G_O、I_O;算法终止条件设置为1)当种群最大适应度值变化趋于平稳;或者2)当前G_O接近最优值且I_O的适应度值皆达到G_O的适应度值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010579513.8A CN111797010B (zh) | 2020-06-23 | 2020-06-23 | 一种应用改进遗传算法的智能合约测试用例生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010579513.8A CN111797010B (zh) | 2020-06-23 | 2020-06-23 | 一种应用改进遗传算法的智能合约测试用例生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111797010A true CN111797010A (zh) | 2020-10-20 |
CN111797010B CN111797010B (zh) | 2022-09-23 |
Family
ID=72804572
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010579513.8A Active CN111797010B (zh) | 2020-06-23 | 2020-06-23 | 一种应用改进遗传算法的智能合约测试用例生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111797010B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112767155A (zh) * | 2021-01-19 | 2021-05-07 | 华南师范大学 | 智能合约安全交易序列生成方法、装置、介质和设备 |
CN112884475A (zh) * | 2021-01-22 | 2021-06-01 | 支付宝(杭州)信息技术有限公司 | 一种智能合约资损监控系统的测试方法及系统 |
CN113255913A (zh) * | 2021-06-08 | 2021-08-13 | 上海对外经贸大学 | 一种融合区块链技术的演化方法 |
CN114611106A (zh) * | 2022-03-10 | 2022-06-10 | 昆明理工大学 | 一种基于多目标粒子群算法的程序控制流证明方法 |
CN115037648A (zh) * | 2022-06-07 | 2022-09-09 | 河海大学 | 基于数据流约简的智能合约测试用例生成方法及系统 |
WO2023103351A1 (zh) * | 2021-12-06 | 2023-06-15 | 深圳前海微众银行股份有限公司 | 一种区块链中智能合约的并行冲突域确定方法及装置 |
CN116775499A (zh) * | 2023-08-21 | 2023-09-19 | 中国电信股份有限公司 | 测试数据生成方法、装置、计算机设备和存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110096439A (zh) * | 2019-04-26 | 2019-08-06 | 河海大学 | 一种面向solidity语言的测试用例生成方法 |
-
2020
- 2020-06-23 CN CN202010579513.8A patent/CN111797010B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110096439A (zh) * | 2019-04-26 | 2019-08-06 | 河海大学 | 一种面向solidity语言的测试用例生成方法 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112767155A (zh) * | 2021-01-19 | 2021-05-07 | 华南师范大学 | 智能合约安全交易序列生成方法、装置、介质和设备 |
CN112767155B (zh) * | 2021-01-19 | 2024-02-13 | 华南师范大学 | 智能合约安全交易序列生成方法、装置、介质和设备 |
CN112884475A (zh) * | 2021-01-22 | 2021-06-01 | 支付宝(杭州)信息技术有限公司 | 一种智能合约资损监控系统的测试方法及系统 |
CN113255913A (zh) * | 2021-06-08 | 2021-08-13 | 上海对外经贸大学 | 一种融合区块链技术的演化方法 |
WO2023103351A1 (zh) * | 2021-12-06 | 2023-06-15 | 深圳前海微众银行股份有限公司 | 一种区块链中智能合约的并行冲突域确定方法及装置 |
CN114611106A (zh) * | 2022-03-10 | 2022-06-10 | 昆明理工大学 | 一种基于多目标粒子群算法的程序控制流证明方法 |
CN114611106B (zh) * | 2022-03-10 | 2024-04-09 | 昆明理工大学 | 一种基于多目标粒子群算法的程序控制流证明方法 |
CN115037648A (zh) * | 2022-06-07 | 2022-09-09 | 河海大学 | 基于数据流约简的智能合约测试用例生成方法及系统 |
CN115037648B (zh) * | 2022-06-07 | 2023-11-10 | 河海大学 | 基于数据流约简的智能合约测试用例生成方法及系统 |
CN116775499A (zh) * | 2023-08-21 | 2023-09-19 | 中国电信股份有限公司 | 测试数据生成方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111797010B (zh) | 2022-09-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111797010B (zh) | 一种应用改进遗传算法的智能合约测试用例生成方法 | |
CN112100054B (zh) | 一种面向数据管控的程序静态分析方法和系统 | |
Langdon et al. | Optimizing existing software with genetic programming | |
Harman et al. | A theoretical and empirical study of search-based testing: Local, global, and hybrid search | |
CN111460450B (zh) | 一种基于图卷积网络的源代码漏洞检测方法 | |
CN110096439B (zh) | 一种面向solidity语言的测试用例生成方法 | |
Fleck et al. | Marrying search-based optimization and model transformation technology | |
CN110609693A (zh) | 基于数据标准化的代码更新方法、装置及终端设备 | |
Petke et al. | Specialising software for different downstream applications using genetic improvement and code transplantation | |
Bergmann et al. | A benchmark evaluation of incremental pattern matching in graph transformation | |
CN112114791A (zh) | 一种基于元学习的代码自适应生成方法 | |
Gupta et al. | Using genetic algorithm for unit testing of object oriented software | |
CN116361810A (zh) | 一种基于符号执行的智能合约漏洞检测方法 | |
Lissovoi et al. | Computational complexity analysis of genetic programming | |
Carayol et al. | Winning regions of higher-order pushdown games | |
CN116841564B (zh) | 一种数据处理方法、装置、设备以及计算机可读存储介质 | |
Liou et al. | Genetic improvement of GPU code | |
CN116702157B (zh) | 一种基于神经网络的智能合约漏洞检测方法 | |
Hills | Variable feature usage patterns in PHP (T) | |
Damia et al. | Automated test data generation using a combination of firefly algorithm and asexual reproduction optimization algorithm | |
Alshraideh | A complete automation of unit testing for JavaScript programs | |
Bouktif et al. | Combining software quality predictive models: An evolutionary approach | |
CN115248780A (zh) | 接口测试用例的生成方法以及装置 | |
de Abreu et al. | Automatic test data generation for path testing using a new stochastic algorithm | |
Forstenlechner | Program synthesis with grammars and semantics in genetic programming |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |