一种区块链虚拟机的测试方法和系统技术方案

技术编号:28741326 阅读:16 留言:0更新日期:2021-06-06 15:54
本说明书实施例提供了一种区块链虚拟机的测试方法和系统,方法包括:获取智能合约的源代码程序文件;对源代码程序文件进行编译,得到能够被虚拟机执行的可执行代码文件;对可执行代码文件中的至少一个代码段进行修改得到测试用可执行代码文件;所述修改使得修改后的代码段的输入操作数的数量和类型与修改前的代码段的输入操作数的数量和类型一致,修改后的代码段的输出操作数的数量和类型与修改前的代码段的输出操作数的数量和类型一致;通过虚拟机执行所述测试用可执行代码文件,以对所述虚拟机进行测试。实现了在保证变异得到的测试代码能够通过虚拟机的检查的情况下,充分变异生成丰富的测试代码,以更加有效和完善地测试虚拟机。测试虚拟机。测试虚拟机。

【技术实现步骤摘要】
一种区块链虚拟机的测试方法和系统


[0001]本申请涉及计算机
,特别涉及区块链虚拟机的测试方法和系统。

技术介绍

[0002]对区块链虚拟机的测试可以采用对区块链的智能合约对应的代码进行变异(修改),得到可以在虚拟机上执行的测试代码,并用得到的测试代码在虚拟机上执行,测试区块链虚拟机执行或处理上是否有缺陷。对智能合约对应的代码进行变异时,存在变异得到的测试代码不能通过虚拟机的检查(例如语法检查、病毒检查、代码完整性检查等)的问题。不能通过虚拟机检查的测试代码也就无法在虚拟机上执行,可以称为无效的测试代码,变异产生的无效测试代码,导致不能有效和充分地测试虚拟机,降低了虚拟机测试的效果。如何在对智能合约进行代码变异时,令变异得到的测试代码可以通过虚拟机的检查,对于提升虚拟机测试的效果有着重要意义。

技术实现思路

[0003]本说明书一个方面提供一种区块链虚拟机的测试方法,所述方法包括:获取智能合约的源代码程序文件;对所述源代码程序文件进行编译,得到能够被虚拟机执行的可执行代码文件;对所述可执行代码文件中的至少一个代码段进行修改得到所述测试用可执行代码文件;其中,代码段包括一行或多行代码;所述修改使得修改后的代码段的输入操作数的数量和类型与修改前的所述代码段的输入操作数的数量和类型一致,修改后的代码段的输出操作数的数量和类型与修改前的所述代码段的输出操作数的数量和类型一致;通过虚拟机执行所述测试用可执行代码文件,以对所述虚拟机进行测试。
[0004]本说明书另一个方面提供一种区块链虚拟机的测试系统,所述系统包括:源代码获取模块:用于获取智能合约的源代码程序文件;可执行代码获取模块:用于对所述源代码程序文件进行编译,得到能够被虚拟机执行的可执行代码文件;测试文件确定模块:用于对所述可执行代码文件中的至少一个代码段进行修改得到测试用可执行代码文件;其中,代码段包括一行或多行代码;所述修改使得修改后的代码段的输入操作数的数量和类型与修改前的所述代码段的输入操作数的数量和类型一致,修改后的代码段的输出操作数的数量和类型与修改前的所述代码段的输出操作数的数量和类型一致;测试模块:用于通过虚拟机执行所述测试用可执行代码文件,以对所述虚拟机进行测试。
[0005]本说明书另一个方面提供一种区块链虚拟机的测试装置,包括至少一个存储介质和至少一个处理器,所述至少一个存储介质用于存储计算机指令;所述至少一个处理器用于执行所述计算机指令以实现所述区块链虚拟机的测试方法。
[0006]本说明书另一个方面提供一种区块链虚拟机的测试方法,所述方法包括:获取智能合约的源代码程序文件;对所述源代码程序文件进行编译,得到智能合约的字节码文件;获取所述字节码文件的可理解文本;基于所述可理解文本对所述字节码文件中的至少一个代码段进行以下中的一种或多种修改得到测试用字节码文件:对所述代码段中操作数的存
储地址进行修改、对所述代码段中操作数的数值进行修改、将所述代码段中操作码变更为相同类型的其他操作码;其中,代码段包括一行或多行代码,相同类型的操作码具有相同的操作数数量与操作数类型;通过虚拟机执行所述测试用字节码文件,以对所述虚拟机进行测试。
附图说明
[0007]本说明书将以示例性实施例的方式进一步说明,这些示例性实施例将通过附图进行详细描述。这些实施例并非限制性的,在这些实施例中,相同的编号表示相同的结构,其中:
[0008]图1是根据本说明书一些实施例所示的一种区块链虚拟机的测试系统的模块图;
[0009]图2是根据本说明书一些实施例所示的一种区块链虚拟机的测试方法的示例性流程图;
[0010]图3是根据本说明书一些实施例所示的一种对代码段进行修改得到测试用可执行代码文件的示例性示意图。
具体实施方式
[0011]为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本说明书的一些示例或实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图将本说明书应用于其它类似情景。除非从语言环境中显而易见或另做说明,图中相同标号代表相同结构或操作。
[0012]应当理解,本说明书中所使用的“系统”、“装置”、“单元”和/或“模组”是用于区分不同级别的不同组件、元件、部件、部分或装配的一种方法。然而,如果其他词语可实现相同的目的,则可通过其他表达来替换所述词语。
[0013]如本说明书和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其它的步骤或元素。
[0014]本说明书中使用了流程图用来说明根据本说明书的实施例的系统所执行的操作。应当理解的是,前面或后面操作不一定按照顺序来精确地执行。相反,可以按照倒序或同时处理各个步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
[0015]本说明书的一些实施例所示的区块链虚拟机的测试系统可以应用于区块链平台(或区块链网络),对区块链平台进行测试。具体地,可以对区块链的智能合约的代码进行变异,得到可以在虚拟机上执行的测试代码,并用得到的测试代码在虚拟机上执行,测试区块链虚拟机执行或处理上是否有缺陷,进而帮助提高区块链的虚拟机的健壮性。
[0016]区块链是分布式、去中心化的数据库,区块链的数据具有不可纂改、全程留痕、可以追溯等特点,被应用于各个数据存证场景。智能合约是指是由计算机程序定义并自动执行的承诺协议。智能合约可以部署于区块链平台中的节点上,运行在虚拟机环境中。智能合
约由合约开发者编写并部署,智能合约开发者可以根据需求编写智能合约。智能合约被成功部署后,节点可以接收调用智能合约的交易,并对已部署的智能合约进行执行(调用)。虚拟机是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在一些实施例中,虚拟机可以包括但不限于以太坊虚拟机(Embedded Virtural Machine,EVM)、EOS虚拟机(Web Assembly,WASM)、比原链虚拟机(Bottos Virtural Machine,BVM)等。可以理解的是,智能合约在一定程度上代表着区块链平台的行为能力,而智能合约的执行又依赖于虚拟机,虚拟机的稳定健壮影响着区块链平台能否平稳健康运行。因此,有必要提供一种更加高效的虚拟机测试方法。
[0017]在计算机程序测试过程中,可以生成各种不同的输入,例如随机的、畸形的、非预期的输入等,通过各种不同的输入触发计算机程序的执行,以测试程序的执行或处理,发现程序中的错误。对于虚拟机而言,可以对智能合约进行各种变异,并通过虚拟机执行变异后的智能合约,以检测虚拟机能否正常支持智能合约的执行或者能否正常处理由变异后的智能合约引发的各种异本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种区块链虚拟机的测试方法,包括:获取智能合约的源代码程序文件;对所述源代码程序文件进行编译,得到能够被虚拟机执行的可执行代码文件;对所述可执行代码文件中的至少一个代码段进行修改得到测试用可执行代码文件;其中,代码段包括一行或多行代码;所述修改使得修改后的代码段的输入操作数的数量和类型与修改前的所述代码段的输入操作数的数量和类型一致,修改后的代码段的输出操作数的数量和类型与修改前的所述代码段的输出操作数的数量和类型一致;通过虚拟机执行所述测试用可执行代码文件,以对所述虚拟机进行测试。2.如权利要求1所述的方法,所述对所述可执行代码文件中的至少一个代码段进行修改得到所述测试用可执行代码文件包括:获取所述可执行代码文件的可理解文本;基于所述可理解文本对所述可执行代码文件中的至少一个代码段进行修改。3.如权利要求1所述的方法,所述修改包括以下中的一种或多种:对所述代码段中操作数的存储地址进行修改、对所述代码段中操作数的数值进行修改、将所述代码段中操作码变更为相同类型的其他操作码;其中,相同类型的操作码具有相同的操作数数量与操作数类型。4.如权利要求1所述的方法,还包括:获取所述测试用可执行代码文件在虚拟机上执行时对所述虚拟机的代码覆盖率;基于所述代码覆盖率确定所述测试用可执行代码文件是否能够被所述虚拟机有效执行;若能够被有效执行,则将所述测试用可执行代码文件保留,否则,丢弃所述测试用可执行代码文件。5.如权利要求4所述的方法,还包括:对保留的测试用可执行代码文件再次修改,以获得新的测试用可执行代码文件。6.一种区块链虚拟机的测试系统,包括:源代码获取模块:用于获取智能合约的源代码程序文件;可执行代码获取模块:用于对所述源代码程序文件进行编译,得到能够被虚拟机执行的可执行代码文件;测试文件确定模块:用于对所述可执行代码文件中的至少一个代码段进行修改得到测试用可执行代码文件;其中,代码段包括一行或多行代码;所述修改使得修改后的代码段的输入操作数的数量和类型与修改前的所述代码段的输入操作数的数量和类型一致,修改后的代码段的输...

【专利技术属性】
技术研发人员:王海军邬萌傅滢
申请(专利权)人:支付宝杭州信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1