CN110633200A - 用于测试智能合约的方法和设备 - Google Patents
用于测试智能合约的方法和设备 Download PDFInfo
- Publication number
- CN110633200A CN110633200A CN201810661115.3A CN201810661115A CN110633200A CN 110633200 A CN110633200 A CN 110633200A CN 201810661115 A CN201810661115 A CN 201810661115A CN 110633200 A CN110633200 A CN 110633200A
- Authority
- CN
- China
- Prior art keywords
- functions
- intelligent contract
- blockchain
- generating
- logical model
- 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.)
- Pending
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
Abstract
本发明涉及一种用于测试智能合约的方法和设备。该方法包括:基于待测试的智能合约来生成测试用例;在智能合约中自动地插入event函数;将插入有event函数的智能合约部署在区块链或仿真区块链上;以及在区块链或仿真区块链上,多轮次地并行运行多个相同和/或相似的测试用例,并且根据所得到的日志来分析智能合约的风险,其中event函数在运行过程中将与智能合约有关的信息记录到日志中。
Description
技术领域
本发明涉及测试智能合约的方法和设备。
背景技术
随着区块链技术的快速发展,出现了越来越多的基于区块链的去中心化应用。基于区块链的去中心化应用可以理解为运行在区块链上的合约代码以及外围代码的集合。不同于传统软件架构,区块链网络具有其独有的特点:例如,调用智能合约需要通过发起交易来完成,而交易需要等待矿工挖矿,一旦区块和交易被矿工确认就无法修改;以及出于节省整个网络的运算能力的目的,智能合约提供的功能比传统编程语言少很多,等等。由此,给去中心化应用(简称DApp-Decentralized Application)的开发带来了很多困难。另外,由于区块链应用往往涉及金融领域如比特币和以太币等,一旦应用出现错误,将会导致严重后果。所以需要在传统软件质量保证的基础上,寻找更加适合区块链应用的质量保证方法。
为了解决这个问题,本专利提供了一种新的方法,来帮助开发和测试人员针对区块链应用来提升软件质量。
发明内容
在下文中给出了关于本发明的简要概述,以便提供关于本发明的某些方面的基本理解。应当理解,该概述并不是关于本发明的穷举性概述,它并非意图确定本发明的关键或重要部分,也不是意图限定本发明的范围。其目的仅仅是以简化的形式给出某些概念,以此作为后文的具体实施方式部分的铺垫。
鉴于以上提出的问题,本发明提出了一种用于测试智能合约的方法,包括:基于待测试的智能合约来生成测试用例;在所述智能合约中自动地插入event函数;将插入有event函数的智能合约部署在区块链或仿真区块链上;以及在所述区块链或所述仿真区块链上,多轮次地并行运行多个相同和/或相似的测试用例,并且根据所得到的日志来分析所述智能合约的风险,其中所述event函数在运行过程中将与所述智能合约有关的信息记录到所述日志中。
根据本发明的又一方面,还提供了一种用于测试智能合约的设备,包括:生成装置,用于基于待测试的智能合约来生成测试用例;插入装置,用于在所述智能合约中自动插入event函数;部署装置,用于将插入有event函数的智能合约部署在区块链或仿真区块链上;以及分析装置,用于在所述区块链或所述仿真区块链上,多轮次地并行运行多个相同和/或相似的测试用例,并且根据所得到的日志来分析所述智能合约的风险,其中所述event函数在运行过程中将与所述智能合约有关的信息记录到所述日志中。
根据本发明的再一方面,还提供了一种计算机可读存储介质,所述存储介质包括机器可读的程序代码,当在信息处理设备上执行所述程序代码时,所述程序代码使得所述信息处理设备执行根据本发明的上述方法。
根据本发明的再一方面,还提供了一种程序。所述程序包括机器可执行的指令,当在信息处理系统上执行所述指令时,所述指令使得所述信息处理系统执行根据本发明的上述方法。
通过以下结合附图对本发明的最佳实施例的详细说明,本发明的这些以及其他优点将更加明显。
附图说明
参照附图来阅读本发明的各实施方式,将更容易理解本发明的其它特征和优点,在此描述的附图只是为了对本发明的实施方式进行示意性说明的目的,而非全部可能的实施,并且不旨在限制本发明的范围。在附图中:
图1示出了用于说明与智能合约的并发调用有关的问题的示意图。
图2示出了根据本发明实施方式的用于测试智能合约的方法的流程图。
图3示出了在用于测试智能合约的方法中的生成步骤的详细处理的流程图。
图4示出了表示智能合约中的函数之间的逻辑关系的逻辑模型的示例的示意图。
图5示出了在两种并发调用情形下生成测试用例的示例的示意图。
图6示出了用于说明event函数的功能的示意图。
图7示出了在智能合约中插入event函数的示例的示意图。
图8示出了根据本发明实施方式的用于测试智能合约的设备的结构框图。
图9示出了在用于测试智能合约的设备中的生成装置的结构框图。
图10示出了用于实施根据本发明实施例的方法和设备的计算机的示意性框图。
具体实施方式
现参照附图对本发明的实施方式进行详细描述。应注意,以下描述仅仅是示例性的,而并不旨在限制本发明。此外,在以下描述中,将采用相同的附图标记表示不同附图中的相同或相似的部件。在以下描述的不同实施方式中的不同特征,可彼此结合,以形成本发明范围内的其他实施方式。
在区块链框架比如以太坊或者Hyperledger Fabric中,每一个函数调用都需要通过发起一笔交易的手段来进行。用户调用合约中的特定函数,需要提交一笔交易。一般来说,一笔交易可以看做是一个原子性操作。在实际情况中,为了满足用户需求,经常需要提交若干笔交易来调用若干个函数以达到特定目的。当两个或者更多用户为了处理各自的复杂需求而向区块链提交一系列交易时,由于区块链按照单笔交易来处理请求,该一系列交易将会混杂到一起并且交易的穿插顺序无法预测,任何人的交易列表都可能被其他人插入其他交易。图1示出了用户A(使用账户A)和用户B(使用账户B)同时运行DApp应用时所可能出现的交易处理顺序。
在图1所示的例子里,用户A发起了四笔交易Tx_A_1至Tx_A_4,同时用户B也发起了四笔交易Tx_B_1至Tx_B_4。连接至区块链的终端或者区块链上的节点一般都顺序提交关于单一用户的各个交易,也就是说用户可以控制自己的交易严格按照顺序执行,只需要等待前一笔交易被确认后再提交下一笔交易即可。但对于不同用户短时间内一起提交的不同交易,最终的交易顺序是不确定的。这是由目前基于区块链的分布式账本的记账模式决定的。记账模式和共识机制决定了区块链节点会把单一的交易当成和其他交易完全无关的个体,并且受网络延迟和分布式特性的影响,每个区块链阶段确认交易(也就是交易被记入账本)的时间都是不同的。这可能导致在并发调用合约函数时出现无法预料的问题,例如交易Tx_A_1正在调用智能合约中的函数F进而对函数F中的变量x进行操作,与此同时交易Tx_B_1也在调用函数F并修改F中的变量x的值,这可能导致交易Tx_A_1所操作的变量x的值发生变化,从而使得交易Tx_A_1出错,等等。因此,在将新开发的智能合约部署到区块链之前,测试智能合约的风险(例如与并发调用有关的问题)尤其重要。
下面,参考附图来详细描述对智能合约的风险进行测试的方法。
图2示出了根据本发明实施方式的用于测试智能合约的方法的流程图。如图2所示,测试方法200包括:生成步骤S210,基于待测试的智能合约来生成测试用例;插入步骤S220,在智能合约中自动地插入event函数;部署步骤S230,将插入有event函数的智能合约部署在区块链或仿真区块链上;以及分析步骤S240,在区块链或仿真区块链上以多线程处理的方式来并行运行多个相同和/或相似的测试用例,并且运行多轮次。然后,根据所得到的日志来分析智能合约的风险,其中event函数在运行过程中将与智能合约有关的信息记录到日志中。
在基于待测试的智能合约来生成测试用例的步骤S210中,可以基于该智能合约的源代码和对智能合约进行调用的前端调用脚本来生成测试用例。图3示出了基于源代码和前端调用脚本来生成测试用例的处理S210的流程图。如图3所示,生成处理S210包括第一分析步骤S211、第二分析步骤S212、获取步骤S213和生成步骤S214。
在第一分析步骤S211中,分析源代码以生成表示智能合约中的函数与变量之间和函数与函数之间的关系的图表。本领域技术人员可以利用现有的诸如静态分析函数调用方法或动态分析函数调用方法等技术来生成上述图表,具体操作不再详细描述。
在第二分析步骤S212中,分析前端调用脚本以生成表示函数执行顺序的流程图。生成该流程图的方法已为本领域技术人员所熟知,在此不再详细描述。
在获取步骤S213中,基于图表和流程图来生成表示智能合约中的函数之间的逻辑关系的逻辑模型。函数之间的逻辑关系包括:例如多个函数之间的调用、多个函数关联于同一批变量、以及函数的执行顺序等等。然而,函数的逻辑关系并不限于此,本领域技术人员可以根据实际应用来考虑其他逻辑关系,进而得到除下文所介绍的4种逻辑模型以外的其他逻辑模型。下面,参照图4中的(a)至(d)来描述4种逻辑模型的示例。
图4中的(a)是基于图表中的单个函数所生成的第一类逻辑模型。智能合约中的每一个函数本身可以被视作一个逻辑模型,记作M(F_a(i))。
图4中的(b)是基于图表中的函数与函数之间的调用关系所生成的第二类逻辑模型。若智能合约中的函数F_a(i)调用函数F_b(addr)并且函数F_b(addr)调用函数F_c(i),则基于该调用关系,可以生成逻辑模型M(F_a(i),F_b(addr),F_c(i)),其中括号内函数F_a(i),F_b(addr)和F_c(i)的排列顺序表示函数之间的调用顺序。
图4中的(c)是基于图表中的函数与变量之间的访问关系所生成的第三类逻辑模型。在图4的(c)中,函数F_a(unit i)访问变量v_1和v_2而变量v_1和v_2分别访问函数F_b(unit i)和F_c(address),即函数F_a(unit i)、F_b(unit i)和F_c(address)通过变量v_1和v_2相关联。由于支持智能合约的区块链架构的运行机制,每个函数都是独立的个体,只要是公共函数,任何有授权的用户都可以独立地调用任一函数。因此,当智能合约中的多个函数访问同一批变量时,该多个函数被调用的顺序是任意的,从而基于这种函数和变量之间的逻辑关系,可以生成多个逻辑模型,其中每个逻辑模型中所包含的函数的排列顺序互不相同,并且该排列顺序表示函数在区块链中可能的被调用顺序。由此,基于图4的(c)中的函数与变量之间的访问关系可以生成以下6个逻辑模型:M(F_a(unit i),F_b(unit i),F_c(address))、M(F_a(unit i),F_c(address),F_b(unit i))、M(F_b(unit i),F_a(unit i),F_c(address))、M(F_b(unit i),F_c(address),F_a(unit i))、M(F_c(address),F_a(uniti),F_b(unit i))和M(F_c(address),F_b(unit i),F_a(unit i))。
图4中的(d)是基于流程图中的函数执行顺序所生成的第四类逻辑模型。智能合约在区块链上部署后,只是在链上的静态代码对象,用户需要编写前端调用脚本与智能合约进行交互。通过分析前端调用脚本,抽取脚本中的函数执行顺序,可以生成相应的逻辑模型。图4中的(d)示出了一个智能合约及其对应的一个前端调用脚本的示例,通过分析该智能合约和前端调用脚本,可以生成逻辑模型M(F_a(i),F_a(i),F_b(addr))。函数F_a(i)、F_a(i)和F_b(addr)的排列顺序表示函数执行顺序。
在通过以上步骤获取到逻辑模型之后,接着,参考图3在生成步骤S214中基于该逻辑模型来生成测试用例。本文针对两类并发调用情形示例来生成测试用例,但并发调用情形并不限于以下两种,本领域技术人员可以根据实际应用来构想出其他并发调用情形。
情形1.同一账户中的多个函数访问同一批状态变量
在该情形下,通过将逻辑模型中的所有函数依照其排列顺序列出,来为每个逻辑模型生成多个相同和/或相似的测试用例,并且该多个相同和/或相似的测试用例以多线程的方式来并行执行。此处,相似的测试用例涉及函数相同但参数不同的测试用例。图5中的(a)示出了在该情形下生成测试用例的示例。如图5中的(a)所示,针对逻辑模型M(F_a(i),F_a(i),F_b(addr))生成了多个相同的测试用例,该测试用例通过依序列出函数F_a(i)、F_a(j)和F_b(addr)来得到。
情形2.多个账户访问同一批状态变量
在该情形下,通过将逻辑模型中的所有函数依照其排列顺序列出,来为每个逻辑模型生成多批次测试用例,每批次测试用例中的各个测试用例均相同和/或相似,不同批次的测试用例中的函数参数“from”的值不相同。其中,相似的测试用例涉及函数相同而参数不同的测试用例。另外,该多批次测试用例在区块链上以多线程处理的方式来并行运行。在区块链系统里,智能合约中的每一个函数的调用都是通过发起交易来实现。在每个交易中,都包含一个‘from’字段,代表了这个交易的发起人,不同用户发起的交易,‘from’字段中的内容不相同。在情形2中,通过在不同的测试用例中设置不同的‘from’字段,来模拟不同用户访问同一智能合约。
图5中的(b)示出了在情形2中生成测试用例的示例。如图5中的(b)所示,针对逻辑模型M(F_a(i),F_a(i),F_b(addr))生成了3批次的测试用例,各个批次的测试用例的“from”字段均不同,而同一批次中的测试用例均相同并且通过依序列出F_a(i)、F_a(j)和F_b(addr)来得到。
在得到测试用例之后,下面,参考图2来描述步骤220的在智能合约中自动地插入event函数的处理。区块链框架系统和传统的软件框架有一个很大的不同点,整个智能合约运行的环境是封闭的,合约在一个沙盒中运行。比如对于以太坊,智能合约的函数和变量都被储存在以太坊虚拟机中,以太坊虚拟机中运行的代码无法与外界进行交互,通过交易进行的合约函数调用是与智能合约的唯一沟通渠道,目前的区块链系统并不支持调试智能合约和实时查看智能合约状态信息的功能。然而,区块链系统为用户提供了检查智能合约在运行时的内部信息的渠道,即event(事件)函数。该event函数能够将智能合约运行中的指定信息记录到日志中,以便用户查看。例如,在改变图6的(a)中所示的函数sendCoin()的变量balance[msg.sender]的值时,在函数运行的过程中,用户不可能知道该变量的变化情况,但用户可以在代码中插入event函数(如图6中的(b)所示),以便在该函数运行的过程中从外部捕捉变量的变化情况,从而达到监视智能合约内部信息的目的。
在本文中,我们通过在智能合约中插入event函数来监视智能合约的运行状态,以发现智能合约的风险(如与并发调用相关的问题)。在本发明的实施方式中,基于逻辑模型来在智能合约中自动插入event函数,如图7所示,其示出了在智能合约中插入event函数的示例的示意图。具体地,首先在智能合约中找到与相应逻辑模型相关的所有函数和变量;然后,在函数的开头和变量调用语句前后自动地插入event函数,以提取被调用的函数名称以及变量变化前后的值等。event函数的插入位置不限于此,本领域技术人员可以根据实际应用来配置其他插入位置。
基于逻辑模型来插入event函数的过程可以与基于逻辑模型来生成测试用例的过程一起执行。
继续参考图2,接着,在步骤S230中在区块链或仿真区块链上部署智能合约。在区块链或仿真区块链上部署智能合约的方法已为本领域技术人员,在此不再详细描述。
然后,在步骤S240中,在区块链或仿真区块链上以多线程处理的方式来并行运行针对情形1或2生成的多个测试用例或多批次测试用例,并且运行多轮次。在测试用例的运行过程中,event函数将与智能合约有关的信息记录到日志中,从而用户可以对各轮次运行中得到的日志进行比较,并且检查:各个变量在各轮次运行时是否一致;以及函数调用路径在各轮次运行时是否一致,等等。一旦发现不一致,则表示智能合约存在不确定性内容(即存在风险),需要进行优化。
在以上描述中,智能合约既可以在现有的区块链(如以太坊公链)上进行测试,也可以在本地搭建的仿真区块链上进行测试。然而,在现有的区块链上测试智能合约需要消耗数字货币(如以太币),鉴于此,优选地在仿真区块链上测试智能合约。本领域技术人员可以利用例如Truffle客户端和Geth客户端等来搭建仿真区块链。具体搭建方法已为本领域技术人员所熟知,在此不再详细描述。
以上参考图1至图7描述了根据本发明实施方式的用于测试智能合约的方法。下面将参考图8至图9来详细描述根据本发明实施方式的用于测试智能合约的设备的结构。
图8是示出根据本发明实施方式的用于测试智能合约的设备的结构框图。如图8所示,根据本发明实施方式的设备800包括:生成装置810,被配置成基于待测试的智能合约来生成测试用例;插入装置820,被配置成在智能合约中自动地插入event函数;部署装置830,被配置成将插入有event函数的智能合约部署在区块链或仿真区块链上;以及分析装置840,被配置成在区块链或仿真区块链上,多轮次地并行运行多个相同和/或相似的测试用例,并且根据所得到的日志来分析智能合约的风险,其中event函数在运行过程中将与智能合约有关的信息记录到日志中。
生成装置810还被配置成基于智能合约的源代码和对智能合约进行调用的前端调用脚本来生成测试用例。具体地,生成装置810包括第一分析单元811、第二分析单元812、获取单元813和生成单元814。第一分析单元811被配置成分析源代码以生成表示智能合约中的函数与变量之间和函数与函数之间的关系的图表。第二分析单元812被配置成分析前端调用脚本以生成表示函数执行顺序的流程图。获取单元813被配置成基于图表和流程图来生成表示智能合约中的函数之间的逻辑关系的逻辑模型。生成单元814被配置成基于该逻辑模型来生成测试用例。
其中,获取单元813还被配置成:基于图表中的单个函数来生成逻辑模型;基于图表中的函数与函数之间的调用关系来生成逻辑模型;基于图表中的函数与变量之间的访问关系来生成逻辑模型;以及基于流程图中的函数执行顺序来生成逻辑模型。
其中,生成单元814还被配置成通过列出逻辑模型中的所有函数来生成测试用例。并且,生成单元814为每个逻辑模型生成多个相同和/或相似的测试用例。此外,生成单元814还为每个逻辑模型生成多批次测试用例,每批次测试用例中的各个测试用例均相同和/或相似,不同批次的测试用例中的函数参数“from”的值不相同,其中多批次测试用例在区块链或仿真区块链上以多线程处理的方式来并行运行。
继续参考图8,插入装置820还被配置成基于逻辑模型来在智能合约中插入event函数。分析装置840还被配置成通过对各次运行中所得到的日志进行比较来查找智能合约的风险。
以上参考图8至图9简要地描述了根据本发明实施方式的用于测试智能合约的设备的结构框图。关于设备800中的装置和单元的详细操作可以参考以上关于图1至图7的描述。
另外,这里尚需指出的是,上述系统中各个组成部件可以通过软件、固件、硬件或其组合的方式进行配置。配置可使用的具体手段或方式为本领域技术人员所熟知,在此不再赘述。在通过软件或固件实现的情况下,从存储介质或网络向具有专用硬件结构的计算机(例如图10所示的通用计算机1000)安装构成该软件的程序,该计算机在安装有各种程序时,能够执行各种功能等。
图10示出了可用于实施根据本发明实施例的方法和系统的计算机的示意性框图。
在图10中,中央处理单元(CPU)1001根据只读存储器(ROM)1002中存储的程序或从存储部分1008加载到随机存取存储器(RAM)1003的程序执行各种处理。在RAM 1003中,还根据需要存储当CPU 1001执行各种处理等时所需的数据。CPU 1001、ROM 1002和RAM 1003经由总线1004彼此连接。输入/输出接口1005也连接到总线1004。
下述部件连接到输入/输出接口1005:输入部分1006(包括键盘、鼠标等等)、输出部分1007(包括显示器,比如阴极射线管(CRT)、液晶显示器(LCD)等,和扬声器等)、存储部分1008(包括硬盘等)、通信部分1009(包括网络接口卡比如LAN卡、调制解调器等)。通信部分1009经由网络比如因特网执行通信处理。根据需要,驱动器1010也可连接到输入/输出接口1005。可拆卸介质1011比如磁盘、光盘、磁光盘、半导体存储器等等可以根据需要被安装在驱动器1010上,使得从中读出的计算机程序根据需要被安装到存储部分1008中。
在通过软件实现上述系列处理的情况下,从网络比如因特网或存储介质比如可拆卸介质1011安装构成软件的程序。
本领域的技术人员应当理解,这种存储介质不局限于图10所示的其中存储有程序、与设备相分离地分发以向用户提供程序的可拆卸介质1011。可拆卸介质1011的例子包含磁盘(包含软盘(注册商标))、光盘(包含光盘只读存储器(CD-ROM)和数字通用盘(DVD))、磁光盘(包含迷你盘(MD)(注册商标))和半导体存储器。或者,存储介质可以是ROM 1002、存储部分1008中包含的硬盘等等,其中存有程序,并且与包含它们的设备一起被分发给用户。
本发明还提出一种存储有机器可读取的指令代码的程序产品。所述指令代码由机器读取并执行时,可执行上述根据本发明实施方式的方法。
相应地,用于承载上述存储有机器可读取的指令代码的程序产品的存储介质也包括在本发明的范围内。所述存储介质包括但不限于软盘、光盘、磁光盘、存储卡、存储棒等等。
应当注意,本发明的方法不限于按照说明书中描述的时间顺序来执行,也可以按照其他的次序顺序地、并行地或独立地执行。因此,本说明书中描述的方法的执行顺序不对本发明的技术范围构成限制。
以上对本发明各实施方式的描述是为了更好地理解本发明,其仅仅是示例性的,而非旨在对本发明进行限制。应注意,在以上描述中,针对一种实施方式描述和/或示出的特征可以以相同或类似的方式在一个或更多个其它实施方式中使用,与其它实施方式中的特征相组合,或替代其它实施方式中的特征。本领域技术人员可以理解,在不脱离本发明的发明构思的情况下,针对以上所描述的实施方式进行的各种变化和修改,均属于本发明的范围内。
综上,在根据本发明的实施例中,本发明提供了如下技术方案。
方案1.一种用于测试智能合约的方法,包括:
基于待测试的智能合约来生成测试用例;
在所述智能合约中自动地插入event函数;
将插入有event函数的智能合约部署在区块链或仿真区块链上;以及
在所述区块链或所述仿真区块链上,多轮次地并行运行多个相同和/或相似的测试用例,并且根据所得到的日志来分析所述智能合约的风险,其中所述event函数在运行过程中将与所述智能合约有关的信息记录到所述日志中。
方案2.根据方案1所述的方法,其中,基于所述智能合约的源代码和对所述智能合约进行调用的前端调用脚本来生成所述测试用例。
方案3.根据方案2所述的方法,其中,生成所述测试用例包括:
分析所述源代码以生成表示所述智能合约中的函数与变量之间和函数与函数之间的关系的图表;
分析所述前端调用脚本以生成表示函数执行顺序的流程图;
基于所述图表和所述流程图来获取表示所述智能合约中的函数之间的逻辑关系的逻辑模型;以及
基于所述逻辑模型来生成测试用例。
方案4.根据方案3所述的方法,其中,在基于所述逻辑模型来生成测试用例时,通过列出所述逻辑模型中的所有函数来生成所述测试用例。
方案5.根据方案3或4所述的方法,其中,为每个逻辑模型生成多个相同和/或相似的测试用例,其中所述多个测试用例在所述区块链或仿真区块链上并行地运行。
方案6.根据方案3或4所述的方法,其中,为每个逻辑模型生成多批次测试用例,每批次测试用例中的各个测试用例均相同和/或相似,不同批次的测试用例中的函数参数“from”的值不相同,其中所述多批次测试用例在所述区块链或仿真区块链上并行地运行。
方案7.根据方案3或4所述的方法,其中,基于所述图表或所述流程图来生成所述逻辑模型包括:
基于所述图表中的单个函数来生成所述逻辑模型;
基于所述图表中的函数与函数之间的调用关系来生成所述逻辑模型;
基于所述图表中的函数与变量之间的访问关系来生成所述逻辑模型;以及
基于所述流程图中的函数执行顺序来生成所述逻辑模型。
方案8.根据方案3或4所述的方法,其中,基于所述逻辑模型来在所述智能合约中插入所述event函数。
方案9.根据方案1至4中任一项所述的方法,其中,通过对各轮次运行中所得到的日志进行比较来查找所述智能合约的风险。
方案10.根据方案1至4中任一项所述的方法,其中,在所述仿真区块链上部署所述智能合约并运行所述测试用例。
方案11.一种用于测试智能合约的设备,包括:
生成装置,用于基于待测试的智能合约来生成测试用例;
插入装置,用于在所述智能合约中自动插入event函数;
部署装置,用于将插入有event函数的智能合约部署在区块链或仿真区块链上;以及
分析装置,用于在所述区块链或所述仿真区块链上,多轮次地并行运行多个相同和/或相似的测试用例,并且根据所得到的日志来分析所述智能合约的风险,其中所述event函数在运行过程中将与所述智能合约有关的信息记录到所述日志中。
方案12.根据方案11所述的设备,其中,所述生成装置还被配置成基于所述智能合约的源代码和对所述智能合约进行调用的前端调用脚本来生成所述测试用例。
方案13.根据方案12所述的设备,其中,所述生成装置包括:
第一分析单元,被配置成分析所述源代码以生成表示所述智能合约中的函数与变量之间和函数与函数之间的关系的图表;
第二分析单元,被配置成分析所述前端调用脚本以生成表示函数执行顺序的流程图;
获取单元,被配置成基于所述图表和所述流程图来获取表示所述智能合约中的函数之间的逻辑关系的逻辑模型;以及
生成单元,被配置成基于所述逻辑模型来生成测试用例。
方案14.根据方案13所述的设备,其中,所述生成单元还被配置成通过列出所述逻辑模型中的所有函数来生成所述测试用例。
方案15.根据方案13或14所述的设备,其中,所述生成单元还被配置成为每个逻辑模型生成多个相同和/或相似的测试用例,其中所述多个测试用例在所述区块链或仿真区块链上并行地运行。
方案16.根据方案13或14所述的设备,其中,所述生成单元还被配置成为每个逻辑模型生成多批次测试用例,每批次测试用例中的各个测试用例均相同和/或相似,不同批次的测试用例中的函数参数“from”的值不相同,其中所述多批次测试用例在所述区块链或仿真区块链上并行地运行。
方案17.根据方案13或14所述的设备,其中,所述获取单元还被配置成:
基于所述图表中的单个函数来生成所述逻辑模型;
基于所述图表中的函数与函数之间的调用关系来生成所述逻辑模型;
基于所述图表中的函数与变量之间的访问关系来生成所述逻辑模型;以及
基于所述流程图中的函数执行顺序来生成所述逻辑模型。
方案18.根据方案13或14所述的设备,其中,所述插入装置还被配置成基于所述逻辑模型来在所述智能合约中插入所述event函数。
方案19.根据方案11至14中任一项所述的设备,其中,所述分析装置被配置成通过对各轮次运行中所得到的日志进行比较来查找所述智能合约的风险。
方案20.一种计算机可读存储介质,所述计算机可读存储介质存储有能够由处理器运行来执行以下操作的程序:
基于待测试的智能合约来生成测试用例;
在所述智能合约中自动地插入event函数;
将插入有event函数的智能合约部署在区块链或仿真区块链上;以及
在所述区块链或所述仿真区块链上,多轮次地并行运行多个相同和/或相似的测试用例,并且根据所得到的日志来分析所述智能合约的风险,其中所述event函数在运行过程中将与所述智能合约有关的信息记录到所述日志中。
Claims (10)
1.一种用于测试智能合约的方法,包括:
基于待测试的智能合约来生成测试用例;
在所述智能合约中自动地插入event函数;
将插入有event函数的智能合约部署在区块链或仿真区块链上;以及
在所述区块链或所述仿真区块链上,多轮次地并行运行多个相同和/或相似的测试用例,并且根据所得到的日志来分析所述智能合约的风险,其中所述event函数在运行过程中将与所述智能合约有关的信息记录到所述日志中。
2.根据权利要求1所述的方法,其中,基于所述智能合约的源代码和对所述智能合约进行调用的前端调用脚本来生成所述测试用例。
3.根据权利要求2所述的方法,其中,生成所述测试用例包括:
分析所述源代码以生成表示所述智能合约中的函数与变量之间和函数与函数之间的关系的图表;
分析所述前端调用脚本以生成表示函数执行顺序的流程图;
基于所述图表和所述流程图来获取表示所述智能合约中的函数之间的逻辑关系的逻辑模型;以及
基于所述逻辑模型来生成测试用例。
4.根据权利要求3所述的方法,其中,在基于所述逻辑模型来生成测试用例时,通过列出所述逻辑模型中的所有函数来生成所述测试用例。
5.根据权利要求3或4所述的方法,其中,为每个逻辑模型生成多个相同和/或相似的测试用例,其中所述多个测试用例在所述区块链或仿真区块链上并行地运行。
6.根据权利要求3或4所述的方法,其中,为每个逻辑模型生成多批次测试用例,每批次测试用例中的各个测试用例均相同和/或相似,不同批次的测试用例中的函数参数“from”的值不相同,其中所述多批次测试用例在所述区块链或仿真区块链上并行地运行。
7.根据权利要求3或4所述的方法,其中,基于所述图表或所述流程图来获取所述逻辑模型包括:
基于所述图表中的单个函数来生成所述逻辑模型;
基于所述图表中的函数与函数之间的调用关系来生成所述逻辑模型;
基于所述图表中的函数与变量之间的访问关系来生成所述逻辑模型以及
基于所述流程图中的函数执行顺序来生成所述逻辑模型。
8.根据权利要求3或4所述的方法,其中,基于所述逻辑模型来在所述智能合约中插入所述event函数。
9.根据权利要求1至4中任一项所述的方法,其中,通过对各轮次运行中所得到的日志进行比较来查找所述智能合约的风险。
10.一种用于测试智能合约的设备,包括:
生成装置,用于基于待测试的智能合约来生成测试用例;
插入装置,用于在所述智能合约中自动插入event函数;
部署装置,用于将插入有event函数的智能合约部署在区块链或仿真区块链上;以及
分析装置,用于在所述区块链或所述仿真区块链上,多轮次地并行运行多个相同和/或相似的测试用例,并且根据所得到的日志来分析所述智能合约的风险,其中所述event函数在运行过程中将与所述智能合约有关的信息记录到所述日志中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810661115.3A CN110633200A (zh) | 2018-06-25 | 2018-06-25 | 用于测试智能合约的方法和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810661115.3A CN110633200A (zh) | 2018-06-25 | 2018-06-25 | 用于测试智能合约的方法和设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110633200A true CN110633200A (zh) | 2019-12-31 |
Family
ID=68966733
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810661115.3A Pending CN110633200A (zh) | 2018-06-25 | 2018-06-25 | 用于测试智能合约的方法和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110633200A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111290958A (zh) * | 2020-02-20 | 2020-06-16 | 联动优势(北京)数字科技有限公司 | 一种调试智能合约的方法及装置 |
CN111444092A (zh) * | 2020-03-24 | 2020-07-24 | 腾讯科技(深圳)有限公司 | 智能合约的测试方法、装置、电子设备及存储介质 |
CN111444090A (zh) * | 2020-03-24 | 2020-07-24 | 腾讯科技(深圳)有限公司 | 区块链中的合约测试方法、装置、电子设备及存储介质 |
CN111524007A (zh) * | 2020-04-16 | 2020-08-11 | 广州拉卡拉信息技术有限公司 | 一种智能合约的嵌入式入侵检测方法及装置 |
CN111813635A (zh) * | 2020-08-28 | 2020-10-23 | 支付宝(杭州)信息技术有限公司 | 一种区块链智能合约的监控方法、系统及装置 |
CN112069067A (zh) * | 2020-09-03 | 2020-12-11 | 腾讯科技(深圳)有限公司 | 基于区块链的数据测试方法、装置及计算机可读存储介质 |
CN112131115A (zh) * | 2020-09-23 | 2020-12-25 | 腾讯科技(深圳)有限公司 | 一种智能合约模糊测试的方法、装置及存储介质 |
CN112199221A (zh) * | 2020-12-04 | 2021-01-08 | 杭州趣链科技有限公司 | 事件推送方法、系统、区块链平台、合约调用端及介质 |
CN112202633A (zh) * | 2020-09-24 | 2021-01-08 | 成都质数斯达克科技有限公司 | 区块链网络的测试方法、装置、电子设备及可读存储介质 |
CN112419057A (zh) * | 2020-11-16 | 2021-02-26 | 平安科技(深圳)有限公司 | 智能合约的日志生成及保存方法、装置、设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102609352A (zh) * | 2011-01-19 | 2012-07-25 | 阿里巴巴集团控股有限公司 | 一种并行测试方法及并行测试服务器 |
CN102999320A (zh) * | 2011-09-15 | 2013-03-27 | 阿里巴巴集团控股有限公司 | 测试用例自动生成方法和系统 |
US20170140408A1 (en) * | 2015-11-16 | 2017-05-18 | Bank Of America Corporation | Transparent self-managing rewards program using blockchain and smart contracts |
CN107608889A (zh) * | 2017-09-15 | 2018-01-19 | 杭州销冠网络科技有限公司 | 一种测试脚本自动生成方法及系统 |
CN108073513A (zh) * | 2017-04-21 | 2018-05-25 | 富士通株式会社 | 对基于区块链的智能合约进行测试的装置和方法 |
-
2018
- 2018-06-25 CN CN201810661115.3A patent/CN110633200A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102609352A (zh) * | 2011-01-19 | 2012-07-25 | 阿里巴巴集团控股有限公司 | 一种并行测试方法及并行测试服务器 |
CN102999320A (zh) * | 2011-09-15 | 2013-03-27 | 阿里巴巴集团控股有限公司 | 测试用例自动生成方法和系统 |
US20170140408A1 (en) * | 2015-11-16 | 2017-05-18 | Bank Of America Corporation | Transparent self-managing rewards program using blockchain and smart contracts |
CN108073513A (zh) * | 2017-04-21 | 2018-05-25 | 富士通株式会社 | 对基于区块链的智能合约进行测试的装置和方法 |
CN107608889A (zh) * | 2017-09-15 | 2018-01-19 | 杭州销冠网络科技有限公司 | 一种测试脚本自动生成方法及系统 |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111290958A (zh) * | 2020-02-20 | 2020-06-16 | 联动优势(北京)数字科技有限公司 | 一种调试智能合约的方法及装置 |
CN111290958B (zh) * | 2020-02-20 | 2023-05-30 | 联动优势科技有限公司 | 一种调试智能合约的方法及装置 |
CN111444092B (zh) * | 2020-03-24 | 2022-06-10 | 腾讯科技(深圳)有限公司 | 智能合约的测试方法、装置、电子设备及存储介质 |
CN111444092A (zh) * | 2020-03-24 | 2020-07-24 | 腾讯科技(深圳)有限公司 | 智能合约的测试方法、装置、电子设备及存储介质 |
CN111444090A (zh) * | 2020-03-24 | 2020-07-24 | 腾讯科技(深圳)有限公司 | 区块链中的合约测试方法、装置、电子设备及存储介质 |
CN111444090B (zh) * | 2020-03-24 | 2024-04-26 | 腾讯科技(深圳)有限公司 | 区块链中的合约测试方法、装置、电子设备及存储介质 |
CN111524007A (zh) * | 2020-04-16 | 2020-08-11 | 广州拉卡拉信息技术有限公司 | 一种智能合约的嵌入式入侵检测方法及装置 |
CN111813635A (zh) * | 2020-08-28 | 2020-10-23 | 支付宝(杭州)信息技术有限公司 | 一种区块链智能合约的监控方法、系统及装置 |
EP3961404A1 (en) * | 2020-08-28 | 2022-03-02 | Alipay (Hangzhou) Information Technology Co., Ltd. | Method, system, and apparatus for monitoring blockchain smart contract |
CN112069067A (zh) * | 2020-09-03 | 2020-12-11 | 腾讯科技(深圳)有限公司 | 基于区块链的数据测试方法、装置及计算机可读存储介质 |
CN112131115B (zh) * | 2020-09-23 | 2021-06-22 | 腾讯科技(深圳)有限公司 | 一种智能合约模糊测试的方法、装置及存储介质 |
CN112131115A (zh) * | 2020-09-23 | 2020-12-25 | 腾讯科技(深圳)有限公司 | 一种智能合约模糊测试的方法、装置及存储介质 |
CN112202633A (zh) * | 2020-09-24 | 2021-01-08 | 成都质数斯达克科技有限公司 | 区块链网络的测试方法、装置、电子设备及可读存储介质 |
CN112202633B (zh) * | 2020-09-24 | 2022-07-12 | 成都质数斯达克科技有限公司 | 区块链网络的测试方法、装置、电子设备及可读存储介质 |
CN112419057A (zh) * | 2020-11-16 | 2021-02-26 | 平安科技(深圳)有限公司 | 智能合约的日志生成及保存方法、装置、设备和存储介质 |
CN112199221A (zh) * | 2020-12-04 | 2021-01-08 | 杭州趣链科技有限公司 | 事件推送方法、系统、区块链平台、合约调用端及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110633200A (zh) | 用于测试智能合约的方法和设备 | |
CN109408373B (zh) | 智能合约的测试方法、计算机可读存储介质及测试终端 | |
US8904353B1 (en) | Highly reusable test frameworks and tests for web services | |
US8387016B2 (en) | Whitebox trace fuzzing | |
US20100115496A1 (en) | Filter generation for load testing managed environments | |
US10353809B2 (en) | System and method for executing integration tests in multiuser environment | |
CN110532185B (zh) | 测试方法、装置、电子设备和计算机可读存储介质 | |
CN110968437A (zh) | 一种基于Java智能合约的单个合约并行执行的方法、装置、设备及介质 | |
CN110532182B (zh) | 一种虚拟化平台的自动化测试方法及装置 | |
US8661414B2 (en) | Method and system for testing an order management system | |
Sanches et al. | J-swfit: A java software fault injection tool | |
CN109684189B (zh) | 区块链智能合约的逻辑验证方法和装置及计算机存储介质 | |
US20200327044A1 (en) | Method for constructing test scenario and information processing device | |
CN111752841A (zh) | 单测模拟方法、装置、设备与计算机可读存储介质 | |
US11663113B2 (en) | Real time fault localization using combinatorial test design techniques and test case priority selection | |
WO2022038461A1 (en) | Method and system for identifying and extracting independent services from a computer program | |
CN111782526A (zh) | 一种接口测试方法、装置、电子设备及存储介质 | |
US9075921B2 (en) | Error simulation | |
CN111400162A (zh) | 一种测试方法及测试系统 | |
US9710360B2 (en) | Optimizing error parsing in an integrated development environment | |
CN116775202A (zh) | 模糊测试方法、装置、介质、电子设备及计算机程序产品 | |
US11347533B2 (en) | Enhanced virtual machine image management system | |
Průcha | Aspect optimalization of robotic process automation | |
CN112181855A (zh) | 一种基于api的自动化测试方法、装置及计算机设备 | |
Ahmed et al. | An Adaptation Model for Android Application Testing with Refactoring |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20191231 |