CN112416800B - 智能合约的测试方法、装置、设备及存储介质 - Google Patents
智能合约的测试方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112416800B CN112416800B CN202011413692.4A CN202011413692A CN112416800B CN 112416800 B CN112416800 B CN 112416800B CN 202011413692 A CN202011413692 A CN 202011413692A CN 112416800 B CN112416800 B CN 112416800B
- Authority
- CN
- China
- Prior art keywords
- test
- path
- service
- intelligent contract
- tested
- 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
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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供一种智能合约的测试方法、装置、设备及存储介质,属于智能合约技术领域。该方法包括:生成待测智能合约对应的符号执行树;采用业务模型约束集对符号执行树中的测试路径进行筛选,获取目标测试路径,其中,业务模型约束集包含根据业务数据获取的关键业务路径;根据目标测试路径,确定测试用例的相关数据;根据测试用例的相关数据对待测智能合约进行测试,获取测试结果。本申请的实施例可以提高对智能合约测试的效率,增加测试的准确性。
Description
技术领域
本申请涉及智能合约技术领域,具体而言,涉及一种智能合约的测试方法、装置、设备及存储介质。
背景技术
在软件测试领域,通常需要生成测试用例以发现代码中较为深层次的漏洞,符号执行是一种比较流行的程序分析技术,在软件测试领域主要用来帮助测试人员生成测试用例以及发现代码中更深层次的漏洞。
目前,符号执行也应用于智能合约测试领域,通过符号执行测试技术对智能合约代码进行程序分析,在分析后得到符号执行树,再对符号执行树的有解的分支记录其路径中的约束条件,最后根据路径约束生成测试用例的输入值。
但是,对于代码结构复杂的智能合约,执行树越非常庞大,简单的使用符号执行会因为路径爆炸等问题导致执行约束集不可解或不能高效地被求解,降低了执行的效率。
发明内容
本申请的目的在于提供一种智能合约的测试方法、装置、设备及存储介质,可以提高对智能合约测试的效率,增加测试的准确性。
本申请的实施例是这样实现的:
本申请实施例的一方面,提供一种智能合约的测试方法,该方法包括:
生成待测智能合约对应的符号执行树;
采用业务模型约束集对符号执行树中的测试路径进行筛选,获取目标测试路径,其中,业务模型约束集包含根据业务数据获取的关键业务路径;
根据目标测试路径,确定测试用例的相关数据;
根据测试用例的相关数据对待测智能合约进行测试,获取测试结果。
可选地,该方法还包括:
获取待执行业务对应的业务文件,其中,业务文件与智能合约逻辑匹配;
根据预设规则,提取业务文件的关键业务路径;
对关键业务路径进行符号化转化处理,得到业务模型约束集。
可选地,采用业务模型约束集对符号执行树中的测试路径进行筛选,获取目标测试路径,包括:
根据业务模型约束集选择符号执行树中满足约束条件的目标测试路径,约束条件用于指示与关键业务路径的相关性。
可选地,业务模型约束集包括:业务关键词对应的权重信息;
根据业务模型约束集选择符号执行树中满足约束条件的目标测试路径,包括:
根据业务关键词对应的权重信息,确定符号执行树中各分支路径的权重;
根据各分支路径的权重,选择满足约束条件指示的权重要求的目标测试路径。
可选地,根据测试用例的相关数据对待测智能合约进行测试,获取测试结果,包括:
根据测试用例的相关数据,触发待测智能合约对应的测试链执行,获取测试结果。
可选地,测试结果包括下述一项或多项:
测试用例的相关数据的执行通过率、测试用例的相关数据执行后符号执行树中的分支路径覆盖率、测试用例的相关数据的执行异常信息。
可选地,生成待测智能合约对应的符号执行树,包括:
通过代码解释器将待测智能合约转化为对应的符号集合;
查询获取待测智能合约中的判断节点,将判断节点作为分支节点;
根据分支节点、待测智能合约对应的符号集合,生成符号执行树。
本申请实施例的另一方面,提供一种智能合约的测试装置,该装置包括:生成模块、筛选模块、确定模块、测试模块;
生成模块,用于生成待测智能合约对应的符号执行树;
筛选模块,用于采用业务模型约束集对符号执行树中的测试路径进行筛选,获取目标测试路径,其中,业务模型约束集包含根据业务数据获取的关键业务路径;
确定模块,用于根据目标测试路径,确定测试用例的相关数据;
测试模块,用于根据测试用例的相关数据对待测智能合约进行测试,获取测试结果。
可选地,生成模块,还用于获取待执行业务对应的业务文件,其中,业务文件与智能合约逻辑匹配;根据预设规则,提取业务文件的关键业务路径;对关键业务路径进行符号化转化处理,得到业务模型约束集。
可选地,筛选模块,具体用于根据业务模型约束集选择符号执行树中满足约束条件的目标测试路径,约束条件用于指示与关键业务路径的相关性。
可选地,业务模型约束集包括:业务关键词对应的权重信息;筛选模块,具体用于根据业务关键词对应的权重信息,确定符号执行树中各分支路径的权重;根据各分支路径的权重,选择满足约束条件指示的权重要求的目标测试路径。
可选地,测试模块,具体用于根据测试用例的相关数据,触发待测智能合约对应的测试链执行,获取测试结果。
可选地,上述装置中,测试结果包括下述一项或多项:测试用例的相关数据的执行通过率、测试用例的相关数据执行后符号执行树中的分支路径覆盖率、测试用例的相关数据的执行异常信息。
可选地,生成模块,具体用于通过代码解释器将待测智能合约转化为对应的符号集合;查询获取待测智能合约中的判断节点,将判断节点作为分支节点;根据分支节点、待测智能合约对应的符号集合,生成符号执行树。
本申请实施例的另一方面,提供一种计算机设备,包括:存储器、处理器,存储器中存储有可在处理器上运行的计算机程序,处理器执行计算机程序时,实现上述智能合约的测试方法的步骤。
本申请实施例的另一方面,提供一种存储介质,存储介质上存储有计算机程序,该计算机程序被处理器执行时,实现上述智能合约的测试方法的步骤。
本申请实施例的有益效果包括:
本申请实施例提供的智能合约的测试方法、装置、设备及存储介质,可以生成待测智能合约对应的符号执行树,并采用业务模型约束集对符号执行树中的测试路径进行筛选,获取目标测试路径,通过采用业务模型约束集,可以更加准确、高效地对测试路径进行筛选以得到较为准确的目标测试路径,进而可以根据目标测试路径,确定测试用例的相关数据,并根据测试用例的相关数据对待测智能合约进行测试,获取测试结果,从而使获得的测试结果更加准确、效率更高。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的智能合约的测试方法的流程示意图;
图2为本申请实施例提供的智能合约的测试方法的另一流程示意图;
图3为本申请实施例提供的选择目标测试路径的流程示意图;
图4为本申请实施例提供的生成符号执行树的流程示意图;
图5为本申请实施例提供的智能合约测试的流程示意图;
图6为本申请实施例提供的智能合约的测试装置的结构示意图;
图7为本申请实施例提供的计算机设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在本申请的描述中,需要说明的是,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
目前,符号执行技术是对智能合约进行测试的一种主要测试手段。但是现有的符号执行测试技术仅仅是单纯地对智能合约代码进行程序分析,在分析后得到符号执行树,再对符号执行树中有解的分支记录其路径中的约束条件,最后根据路径约束生成测试用例的输入值。代码结构越是复杂,执行树越是庞大,往往因路径爆炸问题导致执行约束集不可解或不能高效地被求解。
基于目前的问题,本申请实施例中提供的智能合约的测试方法可以对业务文档进行分析,得到业务规则模型约束集,将此约束集应用在符号执行的路径求解过程中,对路径进行优化,减少路径。同时因为结合了业务场景,得到更贴合实际业务场景的测试用例,使得测试用例的有效性更高,并可以将获取的测试用例在区块链链上触发执行,验证执行结果。
需要说明的是,本申请实施例中提供的智能合约的测试方法可以应用于计算机设备上,可以是本地计算机、也可以是远端服务器,在此不作限制,下面通过具体的实施例来解释本申请的实施例中提供的智能合约的测试方法的具体实施过程。
图1为本申请实施例提供的智能合约的测试方法的流程示意图,请参照图1,该方法包括:
S110:生成待测智能合约对应的符号执行树。
需要说明的是,智能合约可以是一种以信息化方式传播、验证或执行合同的计算机协议,可以应用于区块链上,待测智能合约即为本申请实施例中需要进行测试的智能合约。
符号执行可以是一种程序分析技术,可以通过分析程序来得到让特定代码区域执行的输入。使用符号执行分析智能合约时,该智能合约会使用符号值作为输入,而非一般执行程序时使用的具体值;符号执行树即为多个符号执行所代表的符号表达式的集合,这些符号表达式中可能会出现条件选择情况,根据不同的选择,会执行不同的路径,即构成了符号执行树中的各个分支。
可选地,本实施例中将智能合约中的变量被抽象为符号,其中,程序入口处有初始的输入变量,程序代码由条件语句控制。当变量满足不同条件时就会到达不同的分支。用符号执行树的方式表示就是在根节点处由一组符号变量代表输入值,当符号变量满足不同条件时就会经过节点的判断到达不同的分支路径,即执行树的分支。智能合约代码的所有可执行路径都可以被表示为树的分支路径。
待测智能合约对应的符号执行树可以是在计算机中预设好的,也可以是根据预设的转换算法进行符号转化后得到的,在此不作限制。
S120:采用业务模型约束集对符号执行树中的测试路径进行筛选,获取目标测试路径。
其中,业务模型约束集包含根据业务数据获取的关键业务路径。
需要说明的是,业务数据可以是智能合约中执行相关业务的数据信息,进而可以根据具体执行的业务来获取关键业务路径,该关键业务路径可以对应于上述符号执行树中的一条或者多条具体的路径。
符号执行树中可以包括多条测试路径,每条测试路径可以具有不同的深度(节点越多路径越深),可以根据上述业务模型约束集对符号执行树中的多条测试路径进行筛选,然后获取得到目标测试路径,其中,目标测试路径即为满足业务模型约束集的一条或者多条路径。
S130:根据目标测试路径,确定测试用例的相关数据。
需要说明的是,获取得到上述目标测试路径之后,可以根据该目标测试路径得到该测试路径对应的输入值。
测试用例可以是具体的某一项测试任务,可以包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,可以通过文档或者编码等方式存储于计算机中。上述待测智能合约的输入值可以包括其中一个测试用例的输入值,根据上述目标测试路径可以确定测试用例,确定了测试用例后,可以获取测试用例的相关数据,例如包括上述测试目标、测试环境、测试步骤、预期结果、测试脚本等数据。
S140:根据测试用例的相关数据对待测智能合约进行测试,获取测试结果。
需要说明的是,根据上述测试用例的相关数据触发区块链执行,获取执行之后的相关数据,作为测试结果。
可选地,输入到区块链的测试用例的相关数据可以是一个测试用例对应的相关数据,也可以是一组测试用例对应的相关数据;若为一组测试用例对应的相关数据,这些数据之间可以是具有关联关系或者逻辑相关关系的数据,例如,待测智能合约实现用户购买商品功能,其中有的测试用例对应的函数是负责商品库存管理,有的测试用例对应的函数是负责支付功能,则可以将针对库存管理的这一测试用例组输入到区块链中执行测试过程。
可选地,在执行测试的过程中,可以根据实际的测试需求,获取需要测试的信息,进而对这些测试的信息进行分析,可以得到最终的测试结果,测试结果可以包含多种类型的信息的集合。
本申请实施例提供的智能合约的测试方法中,可以生成待测智能合约对应的符号执行树,并采用业务模型约束集对符号执行树中的测试路径进行筛选,获取目标测试路径,通过采用业务模型约束集,可以更加准确、高效地对测试路径进行筛选以得到较为准确的目标测试路径,进而可以根据目标测试路径,确定测试用例的相关数据,并根据测试用例的相关数据对待测智能合约进行测试,获取测试结果,从而使获得的测试结果更加准确、效率更高。
下面通过具体的实施例来解释本申请中的实施例提供的智能合约的测试方法的另一具体实施过程。
图2为本申请实施例提供的智能合约的测试方法的另一流程示意图,请参照图2,该方法还包括:
S210:获取待执行业务对应的业务文件。
其中,业务文件与智能合约逻辑匹配。业务数据的逻辑与智能合约的逻辑匹配,也即智能合约代码对应的逻辑段落,该业务数据也具备。
需要说明的是,业务文件可以是文档、文本等格式的业务信息的集合,可以包括多个前述的业务数据。待执行业务可以是预设的需要执行的业务,待执行业务对应的业务文件即为预设的多个业务数据,可以存储于计算机设备中,通过调用的方式获取该业务文件,或者,也可以通过人工输入的方式将业务文件输入至计算机设备中。
例如,在待测智能合约为针对库存管理的相关合约规定的情况下,若业务文件为“执行库存管理”的业务流程,则该业务文件为与待测智能合约逻辑匹配的业务文件。
S220:根据预设规则,提取业务文件的关键业务路径。
需要说明的是,预设规则可以是预设的关键词或者关键字等预设信息,获取到业务文件后,可以通过预设的文本分析器对业务文件进行关键业务路径的提取。
可选地,预设的文本分析器中,可以预设有一个或者多个关键词或者关键字,根据实际执行的业务类型的不同,这些关键词和关键字可以相应进行变更适配调整,根据这些关键词和关键字得到关键业务路径。
例如:若执行的业务为金融相关的业务,这些关键字和关键词可以是“资金”、“账户”、“余额”等,通过文本分析器可以找到业务文件中包括这些关键字和关键词的相关业务数据,并将得到的结果作为上述关键业务路径。
S230:对关键业务路径进行符号化转化处理,得到业务模型约束集。
需要说明的是,可以采用自然语言处理的相关应用工具,将上述得到的多个关键业务路径进行符号化转化处理,可以将转化得到的多个符号化的关键业务路径加入到业务模型约束集中。
本申请实施例提供的智能合约的测试方法中,通过获取待执行业务对应的业务文件,然后根据预设规则,提取业务文件的关键业务路径,并对关键业务路径进行符号化转化处理,得到业务模型约束集,可以使得到的业务模型约束集更好地与符号化的待测的智能合约相匹配,可以提高业务模型约束集与符号化的待测的智能合约匹配的效率,进而可以提高确定目标测试路径的效率。
下面通过具体的实施例来解释本申请的实施例中提供的获取目标测试路径的具体实施方式。
可选地,采用业务模型约束集对符号执行树中的测试路径进行筛选,获取目标测试路径,包括:
根据业务模型约束集选择符号执行树中满足约束条件的目标测试路径。
需要说明的是,约束条件可以用于指示与关键业务路径的相关性,可以根据业务模型约束集来从符号执行树中进行筛选,筛选出执行树中满足约束条件的全部目标测试路径,例如目标测试路径可以包含与业务模型约束集中的关键业务路径的相关性超过了预设的阈值的路径。
下面通过更加具体的实施例来解释本申请实施例中提供的选择目标测试路径的具体实施过程。
图3为本申请实施例提供的选择目标测试路径的流程示意图,请参照图3,上述业务模型约束集包括:业务关键词对应的权重信息。
即本实施例中通过权重的方式来进行路径筛选。相应地,上述根据业务模型约束集选择符号执行树中满足约束条件的目标测试路径,包括:
S310:根据业务关键词对应的权重信息,确定符号执行树中各分支路径的权重。
需要说明的是,业务关键词即为前述中采用文本分析器提炼关键业务路径时使用的关键词或者关键字,业务模型约束集中可以包括多个业务关键词,每个业务关键词包括该业务关键词对应的权重信息,权重信息代表着该关键词的关键程度,权重信息越大,则该业务关键词的关键程度越大;反之,则该业务关键词的关键程度越小。
可选地,每个业务关键词的权重信息,可以是默认分配的权重大小,也可以是人工输入的权重大小,可以根据实际需求进行对应的设置,在此不作限制。
需要说明的是,每个分支路径中可以包括多个业务关键词,可以采用预设的权重计算方式,例如:平均权重,可以将每个分支路径中对应的多个业务关键词的权重进行均值计算,得到每条分支路径的平均权重,将该平均权重,作为每个分支路径中的权重。上述使用平均权重的方法仅为所示的一种示例,在实际实施中,可以根据具体需求设置权重的获取方式,不限于平均值计算。
下面以平均权重为例,说明每个分支路径的权重计算方式:
可以通过百分比的方式表示每个业务关键词的权重信息,例如,a分支路径包括3个业务关键词(“资金”、“账户”、“余额”),其中,“资金”的权重为90%,“账户”的权重为85%,“余额”的权重为80%;b分支路径包括2个业务关键词(“资金”、“账户”),其中,“资金”的权重为60%,“账户”的权重为70%,按照平均权值的计算方式,可以得到a分支路径的权值为85%,b分支路径的权重为65%。
S320:根据各分支路径的权重,选择满足约束条件指示的权重要求的目标测试路径。
需要说明的是,约束条件中可以包括对分支路径的权重要求,当任意一条分支路径满足该权重要求时,则可以将该分支路径作为目标测试路径。或者也可以对各分支路径的权重进行排序,从大到小选择预设数量的路径进行保留标记。
例如:约束条件中对分支路径的权重要求为80%以上,a分支路径的权值为85%,b分支路径的权重为65%,则可以将a分支路径作为目标测试路径。
可选地,约束条件中除了对权重有要求之外,还可以设置有其他的约束条件,例如:分支路径的深度和数量。
在需要的分支路径数量有限的情况下,若通过权重筛选得到的分支路径数量较多,则可以从满足权重条件的多个分支路径中随机选择,或者选择权重相对较高的分支路径作为目标测试路径。
可以对每个分支路径的深度进行限制,例如,可以设置每个分支路径的节点不超过10个,将满足分支路径的深度的分支路径作为目标测试路径。
需要说明的是,根据各分支路径的权重,选择满足约束条件指示的权重要求的目标测试路径,可以防止因为路径爆炸而产生的影响。路径爆炸问题多数是由程序代码中的循环体、递归体或复杂的分支结构带来的,尤其是当循环体或递归体的终止条件是符号化表示的条件时,符号执行过程中的路径分析会陷入无限循环中,得到无数个可执行路径,然而这些可执行路径实际上并没有实际意义。
需要说明的是,可以采用上述方法对整个符号执行树进行“剪枝”,将不满足约束条件的路径滤除掉,只保留目标测试路径,最终保留下来的即为全部的目标测试路径。
本申请实施例提供的智能合约测试方法中,业务模型约束集中的规则为符号执行过程中的路径搜索增加约束条件,通过去除业务相关性较弱的路径,进而可以限制路径数量和路径深度,达到为符号执行树“剪枝”的目的。利用业务模型约束集进行“剪枝”,既能解决符号执行的路径爆炸问题,又能得到更贴合实际业务的执行路径。
下面通过具体的实施例来解释本申请实施例中提供的根据测试用例的相关数据对待测智能合约进行测试,获取测试结果的具体实施过程。
可选地,根据测试用例的相关数据对待测智能合约进行测试,获取测试结果,包括:
根据测试用例的相关数据,触发待测智能合约对应的测试链执行,获取测试结果。
需要说明的是,当得到测试用例的相关数据后,可以自动调用测试链的合约部署接口,将待测智能合约部署在测试链上,然后根据测试用例依次触发测试链执行,进而获取测试结果。
需要说明的是,上述测试链可以是用于测试的区块链网络,测试链与其对应的主区块链具有相同功能,但测试链网络与主区块链网络并不相通。
获取上述测试用例中的相关数据后,触发上述测试链中按照预设的执行规则进行执行,执行完毕之后,可以获取得到对应的测试结果。
可选地,上述测试用例的相关数据输入到测试链中后,可以自动触发该测试链执行测试工作,进而获取测试结果。
本申请实施例提供的智能合约测试方法中,可以通过根据测试用例的相关数据,自动触发部署有待测智能合约的测试链执行测试,提高智能合约的自动化测试程度,提高测试的工作效率。
下面通过具体的实施例来解释本申请实施例中提供的测试结果所包括的内容。
可选地,测试结果包括下述一项或多项:
测试用例的相关数据的执行通过率、测试用例的相关数据执行后符号执行树中的分支路径覆盖率、测试用例的相关数据的执行异常信息。
需要说明的是,测试用例的相关数据的执行通过率可以是测试用例中每个数据(测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本)是否执行完成,例如:测试目标是否达到,测试环境是否满足需求,输入的数据具体为多少,测试过程中是否按照测试的步骤执行,测试得到的结果是否满足预期,测试采用的脚本具体为什么类型的脚本等。除了上述相关数据外,也可以根据实际需求增加或者删除相关数据,例如:统计测试用例中执行通过和未通过的数量,给出测试通过率。
测试用例的相关数据执行后符号执行树中的分支路径覆盖率可以是目标测试路径在符号执行树整体中的占用情况,剔除掉多个目标测试路径的重合路径部分后,若多个目标测试路径占符号执行树中的比例相对较大,则分支路径覆盖率较高;反之,则分支路径覆盖率较低。
测试用例的相关数据的执行异常信息可以是每个测试用例在执行的过程中,是否出现执行错误的情况,或者因为执行过程中受到外界干扰、内部异常等情况的影响而导致执行异常的情况,可以记录这些异常情况发生的时间、位置等,例如,可以对执行失败的测试用例,记录输入集合、调用序列和运行过程中出现的异常信息。
需要说明的是,上述测试用例的相关数据的执行通过率、测试用例的相关数据执行后符号执行树中的分支路径覆盖率、测试用例的相关数据的执行异常信息,仅为示例的测试结果,在实际测试过程中,测试人员可以根据实际的测试需求选择或者设置测试结果的内容,在此不作限制。
可选地,可以通过表格的方式来展示上述测试结果,以便于测试人员在测试完毕后根据测试的结果进行对应的分析、调整以及修正等操作。
可选地,当测试用例的相关数据生成后,可以将待测智能合约部署到测试链上,然后按照测试用例的调用顺序和输入集合,对被测合约进行调用,记录每次调用的结果。当全部测试用例执行完成后,汇总全部的测试结果,计算出测试用例的通过率、失败用例的错误信息等,以测试报告的形式呈现给测试人员。
下面通过具体的实施例来解释本申请实施例中提供的生成符号执行树的具体实施过程。
图4为本申请实施例提供的生成符号执行树的流程示意图,请参照图4,生成待测智能合约对应的符号执行树,包括:
S410:通过代码解释器将待测智能合约转化为对应的符号集合。
需要说明的是,代码解释器可以是将智能合约中的代码语言转译为含义相对应的符号进行展示,可选地,在转译的过程中,代码解释器可以一行一行地将待测智能合约中的每一句或者一段代码语言进行转译,得到对应的符号,当该句或者该段转译完毕后,代码解释器可以继续对下一句或者下一段进行转译,如此反复进行待测智能合约的转化,最终可以得到符号集合,符号集合中可以包括多个符号,每个符号可以对应待测智能合约中的一句或者一段代码语言。
S420:查询获取待测智能合约中的判断节点,将判断节点作为分支节点。
需要说明的是,可以通过查询、搜索等方式获取待测智能合约中的判断节点,具体查询方式可以是在原始的智能合约中搜索判定语句对应的代码。或者,也可以根据这些判定语句转换为的符号来搜索,找到智能合约中的所有的判定语句,将这些判定语句作为待测智能合约中的判断节点,获得到所有的判断节点之后,可以将这些判断节点作为符号执行树中的分支节点。
例如,在具体建立分支节点的过程中,可以根据具体的判定语句例如“if条件语句”“or选择语句”等,每一组“if条件语句”和“or选择语句”可以作为一个分支节点,“if条件语句”后对应的代码内容以及“or选择语句”后对应的代码内容,可以分别作为一个分支节点后的两条分支,相应地,可以依次得到多个分支节点。
S430:根据分支节点、待测智能合约对应的符号集合,生成符号执行树。
需要说明的是,可以根据上述多个得到的分支节点,以及待测智能合约中对应的符号集合,生成对应的符号执行树,每条分支路径以及分支节点都可以通过符号的方式来表示,最终根据每条分支路径对应的符号以及每个分支节点的符号,可以通过图像或者文字的方式表示出符号执行树,该符号执行树即为通过待测智能合约得到的符号执行树。
下面通过具体的实施例来解释本申请实施例中提供的智能合约测试的具体实施过程。
图5为本申请实施例提供的智能合约测试的流程示意图,请参照图5,智能合约测试具体测试过程如下:
首先,可以将智能合约输入代码解释器,完成代码符号化的转化过程,构建出符号执行树。另外,将业务文件传入文本分析器,提炼出关键业务路径,并将业务路径符号化,得到业务模型约束集。利用业务模型约束集对智能合约代码的符号执行树进行路径筛选,选出符合业务模型的路径,得到测试用例相关数据。最后,按照测试用例相关数据触发测试链上的合约调用,完成智能合约的自动化测试。
具体过程如下:
S510:获取待测智能合约。
S520:将待测智能合约输入代码解释器,将待测智能合约转换为对应的符号集合。
S530:根据转换后的符号,构建符号执行树。
S540:获取业务文件。
S550:将业务文件输入文本解释器,获取符号化的业务文本。
S560:根据符号化的业务文本,构建模型约束集。
S570:根据符号化的业务文本、符号执行树,筛选测试路径。
S580:根据筛选的测试路径,确定测试路径对应的测试用例。
S590:根据测试用例触发测试链进行测试,得到测试结果。
需要说明的是,上述S510-S530的步骤过程可以与S540-S560的步骤同步执行,没有先后顺序的要求,S530和S560执行完毕后,可以执行S570-S590。
上述S510-S590具体的实施过程在前述已经通过具体的实施例进行了解释,在此不作赘述。
本申请实施例提供的智能合约的测试方法中,可以在符号执行的基础上,将业务文件的规则进行提炼,同样以符号化的形式构建出业务模型约束集,可以解决路径爆炸问题,进而提高测试用例生成效率和测试用例有效性。另外,将生成的测试用例在测试链上触发执行,也可以自动化地完成测试用例的生成、执行和测试结果分析等工作,提高智能合约的自动化程度。
下述对用以执行的本申请所提供智能合约的测试方法对应的装置、设备及存储介质等进行说明,其具体的实现过程以及技术效果参见上述,下述不再赘述。
图6为本申请实施例提供的智能合约的测试装置的结构示意图,请参照图6,该装置包括:生成模块100、筛选模块200、确定模块300、测试模块400。
生成模块100,用于生成待测智能合约对应的符号执行树;
筛选模块200,用于采用业务模型约束集对符号执行树中的测试路径进行筛选,获取目标测试路径,其中,业务模型约束集包含根据业务数据获取的关键业务路径;
确定模块300,用于根据目标测试路径,确定测试用例的相关数据;
测试模块400,用于根据测试用例的相关数据对待测智能合约进行测试,获取测试结果。
可选地,生成模块100,还用于获取待执行业务对应的业务文件,其中,业务文件与智能合约逻辑匹配;根据预设规则,提取业务文件的关键业务路径;对关键业务路径进行符号化转化处理,得到业务模型约束集。
可选地,筛选模块200,具体用于根据业务模型约束集选择符号执行树中满足约束条件的目标测试路径,约束条件用于指示与关键业务路径的相关性。
可选地,业务模型约束集包括:业务关键词对应的权重信息;筛选模块200,具体用于根据业务关键词对应的权重信息,确定符号执行树中各分支路径的权重;根据各分支路径的权重,选择满足约束条件指示的权重要求的目标测试路径。
可选地,测试模块400,具体用于根据测试用例的相关数据,触发待测智能合约对应的测试链执行,获取测试结果。
可选地,上述装置中,测试结果包括下述一项或多项:测试用例的相关数据的执行通过率、测试用例的相关数据执行后符号执行树中的分支路径覆盖率、测试用例的相关数据的执行异常信息。
可选地,生成模块100,具体用于通过代码解释器将待测智能合约转化为对应的符号集合;查询获取待测智能合约中的判断节点,将判断节点作为分支节点;根据分支节点、待测智能合约对应的符号集合,生成符号执行树。
上述装置用于执行前述实施例提供的方法,其实现原理和技术效果类似,在此不再赘述。
以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个微处理器(digital singnal processor,简称DSP),或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(CentralProcessing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,简称SOC)的形式实现。
图7为本申请实施例提供的计算机设备的结构示意图,请参照图7,计算机设备,包括:存储器500、处理器600,存储器500中存储有可在处理器600上运行的计算机程序,处理器600执行计算机程序时,实现上述智能合约的测试方法的步骤。
本申请实施例的另一方面,还提供一种存储介质,存储介质上存储有计算机程序,该计算机程序被处理器执行时,实现上述智能合约的测试方法的步骤。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本发明各个实施例方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取存储器(英文:Random Access Memory,简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (9)
1.一种智能合约的测试方法,其特征在于,所述方法包括:
生成待测智能合约对应的符号执行树;
采用业务模型约束集对所述符号执行树中的测试路径进行筛选,获取目标测试路径,其中,所述业务模型约束集包含根据业务数据获取的关键业务路径;
根据所述目标测试路径,确定测试用例的相关数据;
根据所述测试用例的相关数据对所述待测智能合约进行测试,获取测试结果;
所述业务模型约束集包括:业务关键词对应的权重信息;
根据所述业务关键词对应的权重信息,确定所述符号执行树中各分支路径的权重;
根据各分支路径的权重,选择满足约束条件指示的权重要求的所述目标测试路径;
所述业务关键词为提炼关键业务路径时使用的关键词。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取待执行业务对应的业务文件,其中,所述业务文件与所述智能合约逻辑匹配;
根据预设规则,提取所述业务文件的关键业务路径;
对所述关键业务路径进行符号化转化处理,得到所述业务模型约束集。
3.根据权利要求1或2所述的方法,其特征在于,所述采用业务模型约束集对所述符号执行树中的测试路径进行筛选,获取目标测试路径,包括:
根据所述业务模型约束集选择所述符号执行树中满足约束条件的目标测试路径,所述约束条件用于指示与所述关键业务路径的相关性。
4.根据权利要求1所述的方法,其特征在于,所述根据所述测试用例的相关数据对所述待测智能合约进行测试,获取测试结果,包括:
根据所述测试用例的相关数据,触发所述待测智能合约对应的测试链执行,获取所述测试结果。
5.根据权利要求1或4所述的方法,其特征在于,所述测试结果包括下述一项或多项:
所述测试用例的相关数据的执行通过率、所述测试用例的相关数据执行后所述符号执行树中的分支路径覆盖率、所述测试用例的相关数据的执行异常信息。
6.如权利要求1所述的方法,其特征在于,所述生成待测智能合约对应的符号执行树,包括:
通过代码解释器将所述待测智能合约转化为对应的符号集合;
查询获取所述待测智能合约中的判断节点,将所述判断节点作为分支节点;
根据所述分支节点、所述待测智能合约对应的符号集合,生成所述符号执行树。
7.一种智能合约的测试装置,其特征在于,所述装置包括:生成模块、筛选模块、确定模块、测试模块;
所述生成模块,用于生成待测智能合约对应的符号执行树;
所述筛选模块,用于采用业务模型约束集对所述符号执行树中的测试路径进行筛选,获取目标测试路径,其中,所述业务模型约束集包含根据业务数据获取的关键业务路径;
所述确定模块,用于根据所述目标测试路径,确定测试用例的相关数据;
所述测试模块,用于根据所述测试用例的相关数据对所述待测智能合约进行测试,获取测试结果;
所述业务模型约束集包括:业务关键词对应的权重信息;
所述筛选模块,还用于根据所述业务关键词对应的权重信息,确定所述符号执行树中各分支路径的权重;根据各分支路径的权重,选择满足约束条件指示的权重要求的所述目标测试路径;所述业务关键词为提炼关键业务路径时使用的关键词。
8.一种计算机设备,其特征在于,包括:存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现上述权利要求1至6任一项所述的方法的步骤。
9.一种存储介质,其特征在于,所述存储介质上存储有计算机程序,该计算机程序被处理器执行时,实现权利要求1至6中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011413692.4A CN112416800B (zh) | 2020-12-03 | 2020-12-03 | 智能合约的测试方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011413692.4A CN112416800B (zh) | 2020-12-03 | 2020-12-03 | 智能合约的测试方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112416800A CN112416800A (zh) | 2021-02-26 |
CN112416800B true CN112416800B (zh) | 2023-09-15 |
Family
ID=74774938
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011413692.4A Active CN112416800B (zh) | 2020-12-03 | 2020-12-03 | 智能合约的测试方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112416800B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112785439A (zh) * | 2021-03-19 | 2021-05-11 | 中国工商银行股份有限公司 | 测试被部署在区块链节点上的智能合约的方法及装置 |
CN116227395B (zh) * | 2022-12-26 | 2023-09-29 | 爱芯元智半导体(上海)有限公司 | 数字芯片的仿真测试方法、装置及电子设备 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8966453B1 (en) * | 2010-11-24 | 2015-02-24 | ECOLE POLYTECHNIQUE FéDéRALE DE LAUSANNE | Automatic generation of program execution that reaches a given failure point |
CN106649124A (zh) * | 2016-12-28 | 2017-05-10 | 桂林电子科技大学 | 一种基于Actor模型的并行动态符号执行方法和系统 |
CN108268371A (zh) * | 2016-12-30 | 2018-07-10 | 南京理工大学 | 面向Android应用的智能模糊测试方法 |
US10026053B1 (en) * | 2017-01-18 | 2018-07-17 | Wipro Limited | System and method for generation of integrated test scenarios |
CN109117364A (zh) * | 2018-07-03 | 2019-01-01 | 中国科学院信息工程研究所 | 一种面向目标的测试用例生成方法及系统 |
CN109800169A (zh) * | 2019-01-24 | 2019-05-24 | 拉扎斯网络科技(上海)有限公司 | 测试用例的获取方法、装置、可读存储介质和电子设备 |
JP2019139268A (ja) * | 2018-02-06 | 2019-08-22 | 富士通株式会社 | プログラム解析方法、プログラム解析装置およびプログラム解析プログラム |
CN110515857A (zh) * | 2019-09-02 | 2019-11-29 | 华东师范大学 | 一种基于动态符号执行的测试用例生成方法 |
CN111125697A (zh) * | 2019-11-14 | 2020-05-08 | 北京理工大学 | 基于缺陷摘要的智能合约缺陷可触发性检测方法及系统 |
CN111221731A (zh) * | 2020-01-03 | 2020-06-02 | 华东师范大学 | 一种快速获取到达程序指定点测试用例的方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130091495A1 (en) * | 2011-10-06 | 2013-04-11 | Nec Laboratories America, Inc. | Feedback-directed random class unit test generation using symbolic execution |
US8856751B2 (en) * | 2012-09-20 | 2014-10-07 | Fujitsu Limited | Abstract symbolic execution for scaling symbolic execution generation and automatic test generation |
CN104252408B (zh) * | 2013-06-26 | 2017-04-12 | 国际商业机器公司 | 提供测试用例的方法和装置 |
US10360523B2 (en) * | 2013-11-18 | 2019-07-23 | Nuwafin Holdings Ltd | System and method for executing business services and enhancing business performance through a business process modeling notation |
CN104063325B (zh) * | 2014-07-11 | 2016-10-26 | 电子科技大学 | 一种针对嵌入式软件的测试用例自动化生成装置及其方法 |
US20170220455A1 (en) * | 2016-01-29 | 2017-08-03 | Mentor Graphics Corporation | Test case generation using a constraint graph solver |
-
2020
- 2020-12-03 CN CN202011413692.4A patent/CN112416800B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8966453B1 (en) * | 2010-11-24 | 2015-02-24 | ECOLE POLYTECHNIQUE FéDéRALE DE LAUSANNE | Automatic generation of program execution that reaches a given failure point |
CN106649124A (zh) * | 2016-12-28 | 2017-05-10 | 桂林电子科技大学 | 一种基于Actor模型的并行动态符号执行方法和系统 |
CN108268371A (zh) * | 2016-12-30 | 2018-07-10 | 南京理工大学 | 面向Android应用的智能模糊测试方法 |
US10026053B1 (en) * | 2017-01-18 | 2018-07-17 | Wipro Limited | System and method for generation of integrated test scenarios |
JP2019139268A (ja) * | 2018-02-06 | 2019-08-22 | 富士通株式会社 | プログラム解析方法、プログラム解析装置およびプログラム解析プログラム |
CN109117364A (zh) * | 2018-07-03 | 2019-01-01 | 中国科学院信息工程研究所 | 一种面向目标的测试用例生成方法及系统 |
CN109800169A (zh) * | 2019-01-24 | 2019-05-24 | 拉扎斯网络科技(上海)有限公司 | 测试用例的获取方法、装置、可读存储介质和电子设备 |
CN110515857A (zh) * | 2019-09-02 | 2019-11-29 | 华东师范大学 | 一种基于动态符号执行的测试用例生成方法 |
CN111125697A (zh) * | 2019-11-14 | 2020-05-08 | 北京理工大学 | 基于缺陷摘要的智能合约缺陷可触发性检测方法及系统 |
CN111221731A (zh) * | 2020-01-03 | 2020-06-02 | 华东师范大学 | 一种快速获取到达程序指定点测试用例的方法 |
Non-Patent Citations (2)
Title |
---|
Demand-Driven Compositional Symbolic Execution;Saswat Anand;Procee-dings of 14th International Con-ference on Tools and Algorithms for the Construction and Analysis;全文 * |
面向热点代码的路径搜索方法研究;刘杰;王嘉捷;任栋;王清贤;;计算机工程与设计(02);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112416800A (zh) | 2021-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10552390B2 (en) | Root cause analysis of performance problems | |
Maiti et al. | Capturing, eliciting, predicting and prioritizing (CEPP) non-functional requirements metadata during the early stages of agile software development | |
CN112837069B (zh) | 基于区块链与大数据的安全支付方法及云平台系统 | |
CN106415507A (zh) | 日志分析装置、攻击检测装置、攻击检测方法以及程序 | |
CN112416800B (zh) | 智能合约的测试方法、装置、设备及存储介质 | |
CN111783415B (zh) | 模板配置方法以及装置 | |
CN114528457A (zh) | Web指纹检测方法及相关设备 | |
US10956914B2 (en) | System and method for mapping a customer journey to a category | |
CN113722719A (zh) | 针对安全拦截大数据分析的信息生成方法及人工智能系统 | |
CN107871055B (zh) | 一种数据分析方法和装置 | |
CN113255929B (zh) | 异常用户可解释原因的获取方法和装置 | |
CN111427915A (zh) | 信息处理方法及装置、存储介质、电子设备 | |
CN113360300B (zh) | 接口调用链路生成方法、装置、设备及可读存储介质 | |
CN113722711A (zh) | 基于大数据安全漏洞挖掘的数据添加方法及人工智能系统 | |
CN113778864A (zh) | 一种测试用例的生成方法和装置、电子设备和存储介质 | |
CN105677827B (zh) | 一种表单的获取方法及装置 | |
CN114675952A (zh) | 信息处理方法、装置、电子设备、介质和程序产品 | |
CN111949776B (zh) | 一种用户标签评估的方法、装置和电子设备 | |
CN113672496A (zh) | 一种基于余弦相似度的测试方法及系统 | |
CN110502483B (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN114371884A (zh) | Flink计算任务的处理方法、装置、设备和存储介质 | |
CN113850499B (zh) | 一种数据处理方法、装置、电子设备和存储介质 | |
CN113535594B (zh) | 业务场景测试用例的生成方法、装置、设备和存储介质 | |
CN117742900B (zh) | 一种服务调用图的构造方法、装置、设备及存储介质 | |
CN117933995A (zh) | 交易数据处理方法、装置、电子设备及存储介质 |
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 |