CN110046089B - 一种基于路径覆盖充分性准则的智能合约测试方法 - Google Patents
一种基于路径覆盖充分性准则的智能合约测试方法 Download PDFInfo
- Publication number
- CN110046089B CN110046089B CN201910154575.1A CN201910154575A CN110046089B CN 110046089 B CN110046089 B CN 110046089B CN 201910154575 A CN201910154575 A CN 201910154575A CN 110046089 B CN110046089 B CN 110046089B
- Authority
- CN
- China
- Prior art keywords
- block
- node
- test case
- path
- control flow
- 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.)
- Active
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
- 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)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- Physics & Mathematics (AREA)
- Accounting & Taxation (AREA)
- General Engineering & Computer Science (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Finance (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于路径覆盖充分性准则的智能合约测试方法,包括以下步骤:步骤1,输入智能合约的字节码和智能合约的ABI;步骤2,根据字节码生成控制流程图;步骤3,使用EPP算法分析控制流程图,找出需要插桩的块,进行插桩;步骤4,在truffle上部署插桩之后的智能合约;步骤5,根据路径覆盖测试充分性准则生成符合要求的测试用例集合。本发明相比其他技术针对源码的分析,对智能合约的字节码进行分析,更有效率。本发明为智能合约自动生成测试用例,并且利用路径覆盖的充分性准则判断是否生成了充分的测试用例集,尽可能充分的暴露出智能合约代码中可能存在的错误,提升了漏洞检出效果,减少了人工成本。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于路径覆盖充分性准则的智能合约测试方法。
背景技术
智能合约是在区块链共识协议之上运行的程序,目的是让人们在最小化信任的同时达成协议。智能合约具有一旦部署,合约内容公开、透明、不可篡改、自动执行等特点。但是正是由于智能合约的不可篡改性,如果智能合约在部署之前如果没有及时发现漏洞或逻辑错误,就可能会出错或者被坏人恶意利用,造成人们的财产损失,例如:The DAO合约的漏洞造成了6000万美元的损失。为了避免部署的智能合约有错误或漏洞,保障人们的财产安全,智能合约的测试是十分重要的。
现有的智能合约测试工具都是针对特定已知漏洞的模式设计检测方法,缺点是只能检测有限个数的已知漏洞,oyente只能检测出4种特定的漏洞,contractFuzzer只能检出7种特定的漏洞。然而程序员编写的智能合约之中可能存在这些漏洞以外的其他漏洞或者错误。对于没有一个特定模式的逻辑错误,这些工具无法检测出来。软件测试活动应该尽可能多的暴露程序中可能存在的问题,因此需要生成尽可能充分的测试用例,以判断程序是否安全可靠满足需求。
发明内容
有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是提供一种基于路径覆盖充分性准则的智能合约测试方法,旨在生成尽可能充分的测试用例以期尽可能充分的暴露出智能合约代码中可能存在的错误。
为实现上述目的,本发明提供了一种基于路径覆盖充分性准则的智能合约测试方法,包括以下步骤:
步骤1,输入智能合约的字节码和智能合约的ABI;
步骤2,根据字节码生成控制流程图;
步骤3,使用EPP算法分析控制流程图,找出需要插桩的块,进行插桩;
步骤4,在truffle上部署插桩之后的智能合约;
步骤5,根据路径覆盖测试充分性准则生成符合要求的测试用例集合。
进一步地,所述步骤2根据字节码生成控制流程具体为:
块编号初始化:块编号v初始化为0;
读取语句:读取语句,一次读取一条指令;
判断是否读取完:判断是否读取完毕,读取完毕则块节点已经记录完成,继续构造边;
没有读取完再判断是否JUMP指令:JUMP命令是直接跳转,若是,块编号+1,记录要跳转的块的代码编号;否则判断是否是块的第一句,若是则记录该块第一句的代码编号作为这个块的标识;
若不是JUMP指令再判断是否JUMPI指令:JUMPI命令是有条件的跳转,如果条件不满足,程序会顺序执行到下一个块,块编号+1之后,对上一个块编号对应的块的节点需要添加一条指向当前块编号对应块的节点的边;
再判断是否STOP、RETURN、REVERT等结束指令:若是,程序执行到这一块就结束了,此块为叶子节点,块编号+1;
判断是否是块的第一句:若是,则记录这个块编号的PC;
字节码读取完毕之后,控制流图的所有节点都已经构造完毕,图的每个节点就是一个块,每一个块有一个块编号以及一个代码编号作为该块的标识,根据之前对每个块编号记录的跳转块的代码编号,构造一条该块编号对应块到跳转代码编号对应块的跳转边,构造完所有跳转边之后,生成整个控制流程图。
进一步地,所述步骤3使用EPP算法分析控制流程图,找出需要插桩的块,进行插桩,具体为:
步骤31、对控制流程图进行拓扑排序,得到图节点的拓扑序列,具体为:
找到图中入度为0的节点,将该节点添加到序列之中,然后从图中去掉该点及其所有的边,再找图中入度为0的节点,重复去掉该点及其边的操作直到去掉了图中所有的点,得到的序列为拓扑序列;
步骤32、使用EPP算法分析控制流程图,找出需要插桩的块,具体为:
按照反拓扑顺序,一个个判断节点,如果是叶子节点,将该节点的权重W(v)赋值为1;若不是叶子节点,先将该节点的权重赋值为0,然后查看该节点所有的边,对该节点v的每一条边e:v→w,设置边的权重W(e)为目前节点的权重W(v),然后更新当前节点的权重W(v)=W(v)+W(w);算法执行之后,每个节点和边都有了一个权重,入口节点的权重即为程序所有路径的个数,根据每条路径所经过的边的权重之和来区分开不同的路径;
步骤33、对需要插桩的块进行插桩,具体为:
在三个地方需要插桩,第一个是在程序入口插桩,定义一个变量F作为路径标志,初始化为0;第二个是叶子节点,即程序执行到这个节点就结束了,此时要输出路径标志F,告诉人们程序执行了哪条路径;第三个是控制流程图之中权重非零的边e:v→w,需要在块v添加对F的值进行更改的语句。
进一步地,所述步骤5根据路径覆盖测试充分性准则生成符合要求的测试用例集合,具体为:
输入路径个数、智能合约ABI以及用于控制测试用例生成次数的M;
记录测试用例生成次数的N初始化为0,N用于防止一直都无法覆盖所有路径无法结束程序;
根据路径个数生成一个数组,初始全为0;
根据ABI提取智能合约中的各个函数及其参数个数,以及参数类型;
对每个函数,根据其参数类型,随机生成输入;
生成5份测试用例;
在truffle上运行测试用例;
根据每一份测试用例的运行结果,即输出的路径编号,更新路径覆盖数组;
挑选测试用例加入测试用例集:挑选使得路径覆盖数组变化最大的的测试用例加入测试用例集合中;
判断是否所有路径都被覆盖了,若是,结束,若不是,记录测试用例生成次数的变量N自增,若N大于M,结束;否则再次生成5份测试用例运行继续进行测试,直到所有路径都被覆盖或者生成的次数大于M。
本发明的有益效果是:
本发明相比其他技术针对源码的分析,对智能合约的字节码进行分析,更有效率。本发明为智能合约自动生成测试用例,并且利用路径覆盖的充分性准则判断是否生成了充分的测试用例集,尽可能充分的暴露出智能合约代码中可能存在的错误,提升了漏洞检出效果,减少了人工成本。
以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。
附图说明
图1是本发明的总体流程图。
图2是本发明的根据字节码生成智能合约控制流程图的过程图。
图3是本发明的根据EPP算法进行插桩流程图。
图4是本发明基于路径覆盖测试充分性准则的测试用例生成流程图。
图5是本发明基于路径覆盖充分性标准的智能合约测试框架图。
具体实施方式
如图1所示,本发明的一种基于路径覆盖充分性准则的智能合约测试方法,包括以下步骤:
第一步,输入需要智能合约的字节码和智能合约的ABI。
第二步,根据字节码生成控制流程图。
第三步,使用EPP算法分析控制流程图,找出需要插桩的块,进行插桩。
第四步,在truffle上部署插桩之后的智能合约。
第五步,根据路径覆盖测试充分性准则生成符合要求的测试用例集合。
以上每一个步骤的具体描述如下:
第一步,输入智能合约的字节码,智能合约的字节码可以通过sol-bin-runtimefilePath获得。
第二步,根据字节码生成控制流程图。如图2所示,这一步的流程图如下:
块编号初始化:块编号v初始化为0。
读取语句:读取语句,一次读取一条指令。
是否读取完:判断是否读取完毕。读取完毕则块节点已经记录完成,继续构造边。
是否JUMP指令:JUMP命令是直接跳转,若是,块编号+1,记录要跳转的块的代码编号。否则判断是否是块的第一句,若是则记录该块第一句的代码编号作为这个块的标识。
是否JUMPI指令:JUMPI命令是有条件的跳转,如果条件不满足,程序会顺序执行到下一个块。因此,块编号+1之后,对上一个块编号对应的块的节点需要添加一条指向当前块编号对应块的节点的边。
是否STOP、RETURN、REVERT等结束指令:若是,说明程序执行到这一块就结束了,此块为叶子节点,块编号+1。
是否是块的第一句:若是,则记录这个块编号的PC。
字节码读取完毕之后,控制流图的所有节点都已经构造完毕,图的每个节点就是一个块,每一个块有一个块编号以及一个代码编号(每个块第一句代码的编号)作为该块的标识,根据之前对每个块编号记录的跳转块的代码编号,可以构造一条该块编号对应块到跳转代码编号对应块的跳转边。构造完所有跳转边之后,整个控制流程图就生成完毕了。
第三步,使用EPP算法插桩。这一步其实可以分成三步,首先,对控制流程图进行拓扑排序,得到图节点的拓扑序列,然后使用EPP算法分析控制流程图,找出需要插桩的块,最后对需要插桩的块进行插桩。流程图如图3所示:
输入控制流程图,使用拓扑排序算法进行排序。
拓扑排序算法过程如下:找到图中入度为0的节点,将该节点添加到序列之中,然后从图中去掉该点及其所有的边,再找图中入度为0的节点,重复去掉该点及其边的操作直到去掉了图中所有的点。得到的序列为拓扑序列。
EPP算法:该算法按照反拓扑顺序,一个个判断节点,如果是叶子节点,将该节点的权重W(v)赋值为1。若不是叶子节点,先将该节点的权重赋值为0,然后查看该节点所有的边,对该节点v的每一条边e:v→w,设置边的权重W(e)为目前节点的权重W(v),然后更新当前节点的权重W(v)=W(v)+W(w)。算法执行之后,每个节点和边都有了一个权重。入口节点的权重即为程序所有路径的个数,而每条路径上的边的和是不一样,因此可以根据每条路径所经过的边的权重之和来区分开不同的路径。
插桩:有三个地方需要插桩,第一个是在程序入口插桩,定义一个变量F作为路径标志,初始化为0。第二个是叶子节点,即程序执行到这个节点就结束了,此时要输出路径标志F,告诉人们程序执行了哪条路径。第三个是控制流程图之中权重非零的边e:v→w,需要在块v添加对F的值进行更改的语句。
第五步,根据路径覆盖测试充分性准则生成符合要求的测试用例集合,流程图如图4所示:
输入路径个数、智能合约ABI以及M(M用于控制测试用例生成次数)。
记录测试用例生成次数的N初始化为0。N用于防止一直都无法覆盖所有路径无法结束程序。
根据路径个数生成一个数组,初始全为0。
根据ABI提取智能合约中的各个函数及其参数个数,以及参数类型。
对每个函数,根据其参数类型,随机生成输入。
总共生成5份测试用例。
运行测试用例:在truffle上运行测试用例。
根据每一份测试用例的运行结果,即输出的路径编号,更新路径覆盖数组(被覆盖的路径编号为数组下标的元素赋值为1)。
挑选测试用例加入测试用例集:挑选使得路径覆盖数组变化最大的的测试用例加入测试用例集合中。
判断是否所有路径都被覆盖了。若是,结束,若不是,记录测试用例生成次数的变量N自增,若N大于M,结束;否则再次生成5份测试用例运行继续进行测试,直到所有路径都被覆盖或者生成的次数过多(大于M)。
本发明的总体测试框架如图5所示:
输入智能合约的字节码之后,分析字节码生成智能合约的控制流程图,然后使用EPP算法对图节点和边赋值,分析出需要插桩的节点进行插桩,得到插桩后的合约。
输入智能合约的ABI,使用测试用例随机生成器随机生成测试用例。
使用truffle框架部署插桩后的合约,运行测试用例,得到执行结果。
根据执行结果,挑选覆盖了新的路径的测试用例加入测试用例集。根据路径覆盖测试充分性准则判断测试用例是否充分,若不满足充分性标准则继续生成测试用例运行测试,若满足了路径覆盖测试充分性标准,则得到了足够充分的测试用例集。
本发明的相关计算机术语解释如下:
智能合约:智能合约是在区块链共识协议之上运行的程序,目的是让人们在最小化信任的同时达成协议。
测试充分性准则:用来判断测试用例集是否充分的准则。
智能合约ABI:ABI 全称是 Application Binary Interface,即应用程序二进制接口,是以太坊的调用合约时的接口说明。
EPP算法:输入一张控制流程图,使用EPP算法对图中的节点和边进行赋值,赋值完毕之后,每条路径上的边的赋值加起来可以得到路径的赋值,每条路径的赋值都会是不一样的,因此可以区分出不同的路径。根据入口节点的赋值则可以得知图中一共有多少条不同的路径。
路径覆盖测试充分准则:测试用例集合覆盖程序中所有可能的执行路径。
测试用例:为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。
Truffle:针对基于以太坊的Solidity语言的一套开发框架。可以开发、部署、测试智能合约。只要我们写好了测试代码,使用Truffle框架,只需要在控制台运行一条命令就可以运行测试代码对智能合约进行测试。
插桩:在被测程序代码中插入一些代码以便测试人员获取测试信息。在实现覆盖测试的过程中,往往需要知道某些信息,如:程序中可执行语句被执行(即被覆盖)的情况,程序执行的路径,变量的引用、定义等。要想获取这类信息,需要跟踪被测程序的执行过程,或者是由计算机在被测程序执行的过程中自动记录。前者需要人工进行,效率低下且枯燥乏味;后者则需要在被测程序中插入完成相应工作的代码,即代码插桩技术。
控制流程图(Control Flow Graph,CFG):描述了一个程序在执行过程中会遍历到的所有路径。用图的形式表示一个过程内所有基本块执行的可能流向。控制流程图从程序入口块开始,流向各个基本块,最后流向出口块。
块:程序中的一组语句,在程序的一次执行中,这组语句要么全都执行,要么全都不执行。
叶子节点:没有指向其他节点的边的节点。
拓扑排序:拓扑排序是为了将一个有向无环图中的节点排序,得到一个节点序列(线性序列),这个序列满足这样的条件:图G中任意一对顶点u和v,若边(u,v)∈E(G)(E(G)为图G的边的集合),则u在线性序列中出现在v之前。也可以理解为对于序列中每个节点,图中不存在从它指向排在其前面的节点的边。
PC(Programmer Counter,程序计数器):用于给程序语句编号。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思做出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。
Claims (2)
1.一种基于路径覆盖充分性准则的智能合约测试方法,其特征在于,包括以下步骤:
步骤1,输入智能合约的字节码和智能合约的ABI;
步骤2,根据字节码生成控制流程图;
步骤3,使用EPP算法分析控制流程图,找出需要插桩的块,进行插桩;
步骤4,在truffle上部署插桩之后的智能合约;
步骤5,根据路径覆盖测试充分性准则生成符合要求的测试用例集合;
其中,步骤2根据字节码生成控制流程图 具体为:
块编号初始化:块编号v初始化为0;
读取语句:读取语句,一次读取一条指令;
判断是否读取完:判断是否读取完毕,读取完毕则块节点已经记录完成,继续构造边;
没有读取完再判断是否JUMP指令:JUMP命令是直接跳转,若是,块编号+1,记录要跳转的块的代码编号;否则判断是否是块的第一句,若是则记录该块第一句的代码编号作为这个块的标识;
若不是JUMP指令再判断是否JUMPI指令:JUMPI命令是有条件的跳转,如果条件不满足,程序会顺序执行到下一个块,块编号+1之后,对上一个块编号对应的块的节点需要添加一条指向当前块编号对应块的节点的边;
再判断是否STOP、RETURN、REVERT结束指令:若是,程序执行到这一块就结束了,此块为叶子节点,块编号+1;
判断是否是块的第一句:若是,则记录这个块编号的PC;
字节码读取完毕之后,控制流程 图的所有节点都已经构造完毕,图的每个节点就是一个块,每一个块有一个块编号以及一个代码编号作为该块的标识,根据之前对每个块编号记录的跳转块的代码编号,构造一条该块编号对应块到跳转代码编号对应块的跳转边,构造完所有跳转边之后,生成整个控制流程图;
步骤5根据路径覆盖测试充分性准则生成符合要求的测试用例集合,具体为:
输入路径个数、智能合约ABI以及用于控制测试用例生成次数的M;
记录测试用例生成次数的N初始化为0,N用于防止一直都无法覆盖所有路径无法结束程序;
根据路径个数生成一个数组,初始全为0;
根据ABI提取智能合约中的各个函数及其参数个数,以及参数类型;
对每个函数,根据其参数类型,随机生成输入;
生成5份测试用例;
在truffle上运行测试用例;
根据每一份测试用例的运行结果,即输出的路径编号,更新路径覆盖数组;
挑选测试用例加入测试用例集:挑选使得路径覆盖数组变化最大的测试用例加入测试用例集合中;
判断是否所有路径都被覆盖了,若是,结束,若不是,记录测试用例生成次数的变量N自增,若N大于M,结束;否则再次生成5份测试用例运行继续进行测试,直到所有路径都被覆盖或者生成的次数大于M。
2.如权利要求1所述的一种基于路径覆盖充分性准则的智能合约测试方法,其特征在于,所述步骤3使用EPP算法分析控制流程图,找出需要插桩的块,进行插桩,具体为:
步骤31、对控制流程图进行拓扑排序,得到图节点的拓扑序列,具体为:
找到图中入度为0的节点,将该节点添加到序列之中,然后从图中去掉该点及其所有的边,再找图中入度为0的节点,重复去掉该点及其边的操作直到去掉了图中所有的点,得到的序列为拓扑序列;
步骤32、使用EPP算法分析控制流程图,找出需要插桩的块,具体为:
按照反拓扑顺序,一个个判断节点,如果是叶子节点,将该节点的权重W(v)赋值为1;若不是叶子节点,先将该节点的权重赋值为0,然后查看该节点所有的边,对该节点v的每一条边e:v→w,设置边的权重W(e)为目前节点的权重W(v),然后更新当前节点的权重W(v)=W(v)+W(w);算法执行之后,每个节点和边都有了一个权重,入口节点的权重即为程序所有路径的个数,根据每条路径所经过的边的权重之和来区分开不同的路径;
步骤33、对需要插桩的块进行插桩,具体为:
在三个地方需要插桩,第一个是在程序入口插桩,定义一个变量F作为路径标志,初始化为0;第二个是叶子节点,即程序执行到这个节点就结束了,此时要输出路径标志F,告诉人们程序执行了哪条路径;第三个是控制流程图之中权重非零的边e:v→w,需要在块v添加对F的值进行更改的语句。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910154575.1A CN110046089B (zh) | 2019-03-01 | 2019-03-01 | 一种基于路径覆盖充分性准则的智能合约测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910154575.1A CN110046089B (zh) | 2019-03-01 | 2019-03-01 | 一种基于路径覆盖充分性准则的智能合约测试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110046089A CN110046089A (zh) | 2019-07-23 |
CN110046089B true CN110046089B (zh) | 2022-05-17 |
Family
ID=67274389
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910154575.1A Active CN110046089B (zh) | 2019-03-01 | 2019-03-01 | 一种基于路径覆盖充分性准则的智能合约测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110046089B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825650B (zh) * | 2019-11-29 | 2023-04-11 | 北京网聘咨询有限公司 | 单元测试覆盖精度检测方法及装置 |
CN111061635B (zh) * | 2019-12-11 | 2023-03-24 | 上海笃策信息科技有限公司 | 一种基于运行时路径特征与测试场景聚类的测试样例约减方法 |
CN111523784A (zh) * | 2020-04-16 | 2020-08-11 | 广州拉卡拉信息技术有限公司 | 自动执行路径的监控方法及装置 |
CN111680290B (zh) * | 2020-06-02 | 2023-04-11 | 浙江大学 | 一种基于以太坊虚拟机的代码插桩框架系统 |
CN111897742B (zh) * | 2020-09-30 | 2021-01-15 | 支付宝(杭州)信息技术有限公司 | 生成智能合约测试案例的方法和装置 |
CN112416761B (zh) * | 2020-11-11 | 2023-07-07 | 北京京航计算通讯研究所 | 一种基于广度优先搜索的测试用例生成方法及装置 |
CN112380120B (zh) * | 2020-11-13 | 2022-06-10 | 华南理工大学 | 单元测试代码结构自动解析与路径分析方法 |
CN112819621B (zh) * | 2021-01-22 | 2021-09-24 | 支付宝(杭州)信息技术有限公司 | 一种智能合约资损测试方法及系统 |
CN114385185B (zh) * | 2021-12-24 | 2024-09-06 | 深圳前海微众银行股份有限公司 | 一种智能合约的控制流图生成方法及装置 |
CN115037648B (zh) * | 2022-06-07 | 2023-11-10 | 河海大学 | 基于数据流约简的智能合约测试用例生成方法及系统 |
CN116501604B (zh) * | 2023-03-07 | 2023-10-10 | 开元华创科技(集团)有限公司 | 基于java语言代码质量模糊测试系统及方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102736979A (zh) * | 2012-06-29 | 2012-10-17 | 南京大学 | 一种基于符号执行的带反馈测试用例生成方法 |
CN108416219A (zh) * | 2018-03-18 | 2018-08-17 | 西安电子科技大学 | 一种Android二进制文件漏洞检测方法及系统 |
EP3388994A1 (de) * | 2017-04-12 | 2018-10-17 | Siemens Aktiengesellschaft | Verfahren und vorrichtung zum rechnergestützten testen einer blockkette |
-
2019
- 2019-03-01 CN CN201910154575.1A patent/CN110046089B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102736979A (zh) * | 2012-06-29 | 2012-10-17 | 南京大学 | 一种基于符号执行的带反馈测试用例生成方法 |
EP3388994A1 (de) * | 2017-04-12 | 2018-10-17 | Siemens Aktiengesellschaft | Verfahren und vorrichtung zum rechnergestützten testen einer blockkette |
CN108416219A (zh) * | 2018-03-18 | 2018-08-17 | 西安电子科技大学 | 一种Android二进制文件漏洞检测方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110046089A (zh) | 2019-07-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110046089B (zh) | 一种基于路径覆盖充分性准则的智能合约测试方法 | |
US8020153B2 (en) | Source code checker, source code checking method, program for causing execution of the method, and storage medium for storing the program | |
US9535823B2 (en) | Method and apparatus for detecting software bugs | |
CN105678169B (zh) | 一种二进制程序漏洞挖掘方法和系统 | |
US10296447B2 (en) | Automated software program repair | |
CN109101815B (zh) | 一种恶意软件检测方法及相关设备 | |
US20110126288A1 (en) | Method for software vulnerability flow analysis, generation of vulnerability-covering code, and multi-generation of functionally-equivalent code | |
CN110287693B (zh) | 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法 | |
KR101640479B1 (ko) | 소스코드기반 소프트웨어 취약점 공격행위 분석시스템 | |
JP6142705B2 (ja) | オブジェクト指向言語のための記号テストドライバの反復生成 | |
CN111832026B (zh) | 一种漏洞利用定位方法、系统、装置及介质 | |
CN116361810A (zh) | 一种基于符号执行的智能合约漏洞检测方法 | |
CN106055479A (zh) | 一种基于强制执行的Android应用软件测试方法 | |
Wetzlmaier et al. | Hybrid monkey testing: enhancing automated GUI tests with random test generation | |
Santelices et al. | DUA-Forensics: a fine-grained dependence analysis and instrumentation framework based on Soot | |
CN108572892B (zh) | 一种基于PowerPC多核处理器的离线测试方法和装置 | |
CN116069635A (zh) | Soc系统的测试方法、装置、计算机设备及存储介质 | |
Paydar et al. | An experimental study on flakiness and fragility of randoop regression test suites | |
Saumya et al. | Xstressor: Automatic generation of large-scale worst-case test inputs by inferring path conditions | |
KR100777103B1 (ko) | 테스트 드라이버 생성 장치 및 방법 | |
Banerjee | Advances in model-based testing of GUI-based software | |
Alsmadi et al. | GUI path oriented test generation algorithms | |
Pan et al. | Slicing component-based systems | |
CN114816438B (zh) | 软件异构化开发环境构建方法及装置 | |
Abdalla et al. | Test case prioritization for mobile apps |
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 |