CN111831532A - 构建测试场景的方法以及信息处理设备 - Google Patents

构建测试场景的方法以及信息处理设备 Download PDF

Info

Publication number
CN111831532A
CN111831532A CN201910299220.1A CN201910299220A CN111831532A CN 111831532 A CN111831532 A CN 111831532A CN 201910299220 A CN201910299220 A CN 201910299220A CN 111831532 A CN111831532 A CN 111831532A
Authority
CN
China
Prior art keywords
function
risk
type
nodes
application
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
Application number
CN201910299220.1A
Other languages
English (en)
Inventor
皮冰锋
张沈斌
周恩策
华松
孙昊立
孙俊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to CN201910299220.1A priority Critical patent/CN111831532A/zh
Priority to JP2020065884A priority patent/JP2020177658A/ja
Priority to US16/845,660 priority patent/US20200327044A1/en
Publication of CN111831532A publication Critical patent/CN111831532A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test 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是用于说明应用图1所示的方法为应用构建测试场景的一个示例的说明图。
图3是示出了四种测试场景类型的示意图。
图4示出了区块链中的超级账本架构(Hyperledger Fabric)的示意性结构。
图5示出了函数包含读取自身所写变量的操作可能带来的风险的示例。
图6示出了函数包含先读后写的操作可能带来的风险的示例。
图7示出了函数只包含写入操作可能带来的风险的示例。
图8是示意性地示出根据本公开实施例的信息处理装置的示例结构的示意性框图。
图9是示出了可用来实现根据本公开实施例的构建测试场景的方法、信息处理装置、以及信息处理设备的一种可能的硬件配置的结构简图。
具体实施方式
在下文中将结合附图对本发明的示范性实施例进行描述。为了清楚和简明起见,在说明书中并未描述实际实施方式的所有特征。然而,应该了解,在开发任何这种实际实施例的过程中必须做出很多特定于实施方式的决定,以便实现开发人员的具体目标,例如,符合与系统及业务相关的那些限制条件,并且这些限制条件可能会随着实施方式的不同而有所改变。此外,还应该了解,虽然开发工作有可能是非常复杂和费时的,但对得益于本公开内容的本领域技术人员来说,这种开发工作仅仅是例行的任务。
在此,还需要说明的一点是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的装置结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
根据本公开的一个方面,提供了一种构建测试场景的方法。图1是示意性地示出根据本公开实施例的构建测试场景的方法100的示例流程的流程图。
本实施例的构建测试场景的方法100可以为通过多个分布式节点以异步方式执行的应用构建测试场景。如图1所示,方法100可以包括:步骤S101,构建应用中所包括的函数的调用关系图;步骤S103,根据调用关系图中的每个函数的代码结构,为该函数确定可能导致运行错误的多个风险类型中的一个或更多个风险类型;步骤S105,遍历调用关系图以获得所有可能函数路径,并基于每条函数路径中的函数的风险类型确定该函数路径的风险类型;以及步骤S107,根据每条函数路径的风险类型,确定该函数路径的测试场景的类型。
以下将参照图2简单描述方法100中的各个步骤中的示例处理。图2示出了应用图1所示的方法100为应用构建测试场景的一个示例。如图2所示,针对目标应用200,通过步骤S101,例如经由语义分析、语法解析等,获得目标应用200中所包括的两个应用(Chaincode1和Chaincode2)中的函数的调用关系图201。作为示例,目标应用200可以是以GO语言编写的区块链中的智能合约,并且在步骤S101中,可以通过GO语言解析器等将智能合约解析成抽象语法(AST)树,再通过AST解析器从该AST树中抽取函数f1~f7及这些函数之间的调用关系,从而获得调用关系图201。
接下来,通过步骤S103,根据调用关系图201中的每个函数的代码结构,为该函数确定可能导致运行错误的多个风险类型R1~R7中的一个或更多个风险类型,从而获得标记好风险类型的调用关系图203。在本示例中,如调用关系图203中所示,函数f1、f2不存在可能导致运行错误的风险,而函数f3~f7各自与多个风险类型R1~R7中的一个或多个风险类型相关联。这里,作为示例的多个风险类型R1~R7可以是预先定义的,并且例如可以取决于相应函数的代码语言、对其他函数的调用关系等确定每个函数的风险类型,稍后将会结合具体示例描述这些风险类型及其与函数之间对应关系。
在如上所述标记好每个函数的风险类型之后,通过步骤S105,可以借由深度优先遍历或广度优先遍历等方式,遍历调用关系图203中的所有可能函数路径。以广度优先遍历为例,可以从调用关系图203中获得如下函数路径:{f1;f1→f2;f1→f3;f1→f2→f4;f1→f2→f5;f1→f2→f5→f7;f1→f2→f5→f6}。接着,对于上述函数路径,可以基于每条函数路径中的函数的风险类型,确定该函数路径的风险类型,即该函数路径中的各个函数的风险类型的集合,从而获得如图表205所示的各条函数路径的风险类型。注意,在从调用关系图203遍历得到的所有函数路径中,函数路径{f1;f1→f2}不包含任何风险函数,因此,图表205中并未包括这些函数路径。
接着,在步骤S107中,可以根据图表205所示的每条函数路径的风险类型,确定相应的函数路径的测试场景的类型A~D,即获得如表格207所示的函数路径与测试场景的类型之间的对应关系。这里,作为示例的测试场景类型A~D可以是预先定义的,并且是针对要测试的应用的代码结构以及执行方式等各种因素适当地设置的,以便可以检测出应用中的各条函数路径的各种风险类型。
在一个优选实施例中,测试场景的类型可以包括:在一个节点上模拟一次应用的执行(类型A)、在一个节点上模拟多个用户并发操作应用的执行(类型B)、在多个节点上模拟一次应用的同时执行(类型C)、以及在多个节点上模拟多个用户并发操作应用的执行(类型D)。
本优选实施例的上述四种风险类型的设置尤其有利于为通过多个分布式节点以异步方式执行的应用构建测试场景。
在传统的通过一个中心权威机构执行的应用中,可以仅针对该中心结构(中心节点)对于单个用户操作进行单元测试来检测代码准确性。然而,在通过多个分布式节点以异步方式执行的应用中,由于应用在各个节点的执行与最终结果的确认或写入之间可能存在中间步骤,因此,仅仅针对单个节点、单个用户操作执行单元测试无法保证对应用中的可能存在的所有风险进行测试。
相应地,在本优选实施例中,构建了四种测试场景类型A~D,其中,设置了不同的节点数量(单个节点;多个节点)以及并发用户操作数量(仅一个用户操作,其也可称为执行一次应用;多个用户并发操作),使得可以针对每条函数路径的不同风险类型适当地设置可以检测出相应风险的测试场景。图3示出了四种测试场景类型A~D的示意图,其中,横轴示出了测试场景所需要的节点数量,纵轴示出了测试场景所需要的并发用户操作数量。
利用如上所述的本实施例的构建测试场景的方法,可以根据应用的每条函数路径中的函数的风险类型确定该函数路径的测试场景的类型,从而为整个应用(即,应用的函数的调用关系图中的所有可能函数路径)确定适当的测试场景,使得能够针对应用可能面临的所有风险完成有效的测试。
作为示例,以上参照图1至图3描述的本实施例的构建测试场景的方法所针对的应用可以是区块链中的智能合约,并且用于以异步方式执行该应用的多个分布式节点可以是区块链中的多个背书节点。举例而言,该区块链可以包括超级账本架构。
为便于描述,以下将结合智能合约的示例描述本公开实施例的优选实施例的细节。在本公开内容的基础上,本领域技术人员可以理解,本公开实施例可以适当地应用于除区块链的智能合约以外的、各种通过多个分布式节点以异步方式执行的应用,在此不再赘述。
这里,首先参照图4简要说明本实施例中作为通过多个分布式节点以异步方式执行的应用的示例的、区块链中的超级账本架构。
如图4所示,基于超级账本的应用在多个分布式节点上并行地异步执行,执行结果存储在作为分布式数据库的区块链(超级账本)中。超级账本架构中最重要的三个部分是背书节点(endorsing node)、排序节点(或排序服务,ordering service)和提交节点(committing node)。智能合约(也可称为链上代码,chaincode)位于多个背书节点上。用户可以通过APP应用触发SDK(软件开发工具包)的调用,进而触发智能合约在背书节点上的执行。背书节点将执行的结果打包为读/写集合(在相关领域中,执行一次智能合约并获得相应的待确认的执行结果即读/写集合可以被称为“交易”,下文中将在本领域技术人员不会发生混淆的情况下使用该术语),并且在验证交易信息的合法性并对交易信息签名后,将其返回给客户端。
接下来,客户端在收到背书节点的验证回复后,确认验证成功。验证成功之后,客户端可以将签名的交易信息发送给排序节点。排序节点基于一定的共识对交易信息进行排序,并将排序好的交易信息打包成区块发送到提交节点。对于接收到的交易信息,提交节点取决于具体的背书策略而判断应用执行的结果是否正确,并对经确认的交易信息进行签名。无论应用执行的结果是否正确,相应的排序并打包好的交易信息区块都会被提交节点写入区块链中,使得多个节点上的账本状态可以同步。在从提交节点获得确认打包好的区块已写入账本的确认之后,用户的操作最终完成。
如上所述,在作为以去中心化方式异步执行的应用的示例的超级账本架构中,在背书节点执行智能合约与提交节点将智能合约的执行结果最终写入超级账本这两个步骤之间存在若干中间步骤,即,这两个步骤是异步执行的。因此,在构建测试场景时,可以考虑以上参照图3所述的四种类型,以便充分地检测分布式节点异步执行应用时所面临的各种风险。
以下将结合图4的超级账本架构,在参照图1至图3描述的实施例的基础上,描述各个优选实施例中的风险类型以及这些风险类型与测试场景类型之间的对应关系的示例。具体地,将描述发明人发现的、在诸如超级账本架构的区块链应用中可能存在的多个风险类型R1~R7,并将描述与这些风险类型对应的、适当确定的测试场景类型A~D。
R1:调用另一智能合约的函数的风险
在一个示例中,当在例如图1的步骤S101中构建应用中所包括的函数的调用关系图时,可以构建整个区块链的智能合约中所包括的函数的调用关系图。参照图2的示例,针对两个智能合约Chaincode1和Chaincode2构建了一个整体的调用关系图201。在这样的情况下,存在一个智能合约中的函数调用另一智能合约的函数的可能(诸如利用GO语言中的代码APIstub.invokeChaincode()),这导致一个智能合约的函数可能修改另一智能合约的数据库(例如超级账本)的状态。因此,如果函数包括这种调用将会是不安全的,发明人在此将函数调用另一智能合约的函数的风险定义为风险类型R1。
相应地,当在例如图1的步骤S103中根据函数的代码结构为调用关系图201中的函数确定风险类型时,备选的多个风险类型可以包括函数调用另一智能合约的函数的风险(风险类型R1)。
发明人发现,针对风险类型R1,在单个背书节点上执行一次智能合约(单个交易)就可以检测出错误。因此,在一个优选实施例中,针对函数调用另一智能合约的函数的风险类型R1确定的测试场景的类型可以包括在一个背书节点上模拟一次智能合约的执行,即如图3所示的类型A。
R2:函数读取自身所写变量的风险
图5示出了函数中的部分代码包含读取自身所写变量的操作可能带来的风险的示例。如图5所示,由于诸如超级账本的区块链中智能合约的写入操作的执行(例如经由图4中的背书节点进行)与执行结果写入数据库(状态数据库)(例如经由图4中的提交节点进行)之间的异步性,通过对变量K1进行写入值V1的操作(诸如利用GO语言中的代码APIstub.PutState(K,V)),值V1并不能立刻更新到区块链的分布式数据库(诸如超级账本)中,变量K1仍保持值V0。因此,新写入的值V1不能立刻被用于同一次应用执行(例如区块链中的同一个交易)中的读取操作中(诸如利用GO语言中的代码APIstub.GetState(K))。如果使用该变量的值,则接下来的业务逻辑都会出错。因此,如果函数包括这种操作将会是不安全的,发明人在此将函数包含读取自身所写变量的操作的风险定义为风险类型R2。
相应地,当在例如图1的步骤S103中根据函数的代码结构为调用关系图201中的函数确定风险类型时,备选的多个风险类型可以包括函数读取自身所写变量操作可能带来的风险(风险类型R2)。
发明人发现,对于上述风险类型R2,与风险类型R1类似地,在单个背书节点上执行一次应用或智能合约(单个交易)就可以检测出错误。因此,在一个优选实施例中,针对函数读取自身所写变量的风险类型R2确定的测试场景的类型可以包括在一个背书节点上模拟一次智能合约的执行,即如图3所示的类型A。
R3:函数包含以批处理方式更新通过查询获得的多个变量值的操作的风险
发明人发现,在诸如超级账本的区块链应用中,如果一个函数在范围查询(诸如利用GO语言中的代码APIstub.GetQueryResult())操作之后,跟随有一个对通过范围查询获得的多个变量值进行更新的操作,则存在更新结果与相应变量的最新值不符的可能性:鉴于智能合约的异步执行特性,在更新这些查询过的变量的值的过程中,它们的值可能已经被其他用户操作发起的其他交易修改过了。因此,如果函数包括这种操作将会是不安全的,发明人在此将函数包含以批处理方式更新通过查询获得的多个变量值的操作的风险定义为风险类型R3。
相应地,当在例如图1的步骤S103中根据函数的代码结构为调用关系图201中的函数确定风险类型时,备选的多个风险类型可以包括函数包含以批处理方式更新通过查询获得的多个变量值的操作的风险(风险类型R3)。
对于函数包含上述操作的风险类型R3,需要关注该函数在并发交易情况下的表现。相应地,在一个优选实施例中,针对该风险类型R3确定的测试场景的类型可以包括在一个节点上模拟多个用户并发操作应用的执行,即如图3所示的类型B。
R4:函数包含生成不确定结果的操作的风险
作为示例,生成不确定结果的操作可以包括随机数生成、节点的临时值、键值对结构的遍历(如Hashmap、Hashtable)等操作。如果应用或智能合约的函数包含诸如上述的任何一种生成不确定结果的操作,这些函数在多个不同的背书节点上执行可能会得到不同的结果,从而导致多个节点之间的执行结果的不一致。因此,如果函数包括这种操作将会是不安全的,发明人在此将函数包含生成不确定结果的操作的风险定义为风险类型R4。
相应地,当在例如图1的步骤S103中根据函数的代码结构为调用关系图201中的函数确定风险类型时,备选的多个风险类型可以包括函数包含生成不确定结果的操作的风险(风险类型R4)。
针对涉及风险类型R4的函数,需要关注该函数在多个节点上执行的情况下的表现。因此,在一个优选实施例中,针对该风险类型R4确定的测试场景的类型可以包括在多个节点上模拟一次应用的同时执行,即如图3所示的类型C。
R5:函数包含调用外部资源的操作的风险
作为示例,调用外部资源的操作可以包括例如Web服务调用(http://xxx)、外部库调用、系统命令行调用等。如果应用或智能合约的函数包含诸如上述的任何一种调用外部资源的操作,则该函数在多个不同的节点上执行也可能会得到不同的结果。因此,如果函数包括这种操作将会是不安全的,发明人在此将函数包含调用外部资源的操作的风险定义为风险类型R5。
相应地,当在例如图1的步骤S103中根据函数的代码结构为调用关系图201中的函数确定风险类型时,备选的多个风险类型可以包括函数包含调用外部资源的操作的风险(风险类型R5)。
针对涉及风险类型R5的函数,需要关注该函数在多个节点上执行的情况下的表现。因此,在一个优选实施例中,针对上述风险类型R5确定的测试场景的类型可以包括在多个节点上模拟一次应用的同时执行,即如图3所示的类型C。
此外,可选地,在诸如图4所示的超级账本的、涉及区块链的智能合约的应用示例中,在多个节点上模拟一次应用的同时执行的测试场景中(例如针对上述风险类型R4和R5而确定的、如图3所示的测试场景类型C中),可以对各个背书节点的背书策略进行限定。更具体地,多个背书节点可以先以第一背书策略同时执行一次智能合约,然后以第二背书策略同时执行一次智能合约。
作为示例,第一背书策略和第二背书策略可以是下述背书策略中的任意两项:“与”(AND),即,需要确认多个背书节点上的执行结果一致并且这些背书节点均进行了签名背书,提交节点才最终确认交易并对交易签名;“或”(OR),即,只需确认多个背书节点中任一个背书节点的签名背书,提交节点就可以确认交易并对交易签名;“N中之M”(“M of N”,M、N均为自然数且M<N),即,需要确认N个背书节点中任意M个背书节点的执行结果一致并且这M个背书节点均进行了签名背书,提交节点才最终确认交易并对交易签名。期望的是,无论在哪种背书策略下,通过多个背书节点执行智能合约都能获得相同的结果。
R6~R7:函数包含对分布式数据库进行写入操作的风险
作为示例,函数包含对分布式数据库进行写入操作的情况可以是函数包含先读后写的操作。图6示出了该情况下发生的错误的示例。参考图6,两个用户同时(或近似同时)执行应用、例如在超级账本的情况下同时分别提交了交易TX1和TX2,这两个交易操作相同的变量K。在交易TX2的读写操作间隙之间,交易TX1已经更新了变量K的值为V1。这样,发生了读写冲突,交易TX2的更新或写入操作就会失败。因此,如果函数包括这种操作将会是不安全的,发明人在此将这种函数包含先读后写操作的风险定义为风险类型R6。
此外,函数包含对分布式数据库进行写入操作的情况还可以是函数只包含写入操作。图7示出了该情况下发生的错误的示例。两个用户同时(或近似同时)执行应用、例如在超级账本的情况下同时(或近似同时)提交交易TX1和TX2,这两个交易操作相同的变量K,导致分布式数据库的状态没法保证:虽然提交时间为T0的交易TX1在提交时间为(T0+t)的交易TX2之前提交,但由于两个交易需要在分布式的节点上进行背书及排序之后才会写入分布式数据库,所以无法保证交易结果最终写入作为分布式数据库的超级账本的时间的先后,可能会导致交易TX1在交易TX2之后才写入到超级账本中。这样,变量K的值最终由交易TX1而非预料中的交易TX2来决定。因此,如果函数包括这种操作将会是不安全的,发明人在此将这种函数只包含写入操作的风险定义为风险类型R7。
相应地,当在例如图1的步骤S103中根据函数的代码结构为调用关系图201中的函数确定风险类型时,备选的多个风险类型可以包括函数包含对分布式数据库进行写入操作的风险(风险类型R6、R7)。
发明人发现,针对涉及上述R6、R7两种风险类型的函数,最好能测试它们在多交易并发情况下在多背书节点上执行结果的一致性。因此,在一个优选实施例中,针对函数包含对分布式数据库进行写入操作的风险类型R6、R7,可以确定在多个节点上模拟多个用户并发操作应用的执行的测试场景,即如图3所示的类型D,使得可以识别出上述函数中可能存在的读写冲突或写入冲突的风险。
可选地,在诸如图4所示的超级账本的、涉及区块链的智能合约的应用示例中,对于在多个节点上模拟多个用户并发操作应用的执行的测试场景(例如针对上述风险类型R6和R7确定的、如图3所示的测试场景类型D),可以使得多个节点具有不同的网络延迟。
作为示例,在用于执行智能合约的多个背书节点中,可以使一部分背书节点没有网络延迟,一部分背书节点有5毫秒的延迟,而其余背书节点有10毫秒的延迟。这样,可以测试背书节点在不同的网络延迟下的表现,并且希望无论网络延迟怎样,都获得一致的结果。
以上描述了可以应用于诸如超级账本的、通过多个分布式节点异步执行的应用的各种示例风险类型R1~R7、以及关于如何设置与这些风险类型对应的测试场景类型A~D的优选实施例。在结合这些示例及优选实施例的情况下,返回参照图2所示的示例。
例如,如图2的图表205的第一行所示,针对函数路径f1→f3确定了风险类型(R4,R5)。如上所述,风险类型R4和R5均需要在多个节点上模拟一次应用的同时执行,即图3所示的测试场景类型C。因此,如图2的表格207所示,确定了函数路径的f1→f3的测试场景类型为类型C。依此类推,基于每条函数路径的风险类型,确定如图2的表格207所示的相应测试场景类型,在此不再展开描述。
以上参照图1至图7描述了根据本公开实施的构建测试场景的方法的示例流程。如以上所描述的,本实施例的构建测试方法可以针对通过多个分布式节点异步执行的应用,构建适当的测试场景,以便有效识别应用中可能存在的风险。特别地,针对诸如超级账本的区块链中的智能合约的应用示例,本公开的各个优选实施例的方法可以有效地识别应用中可能存在的风险类型,并且适当地确定与每个风险类型相对应的测试场景的类型,从而在测试的效率和准确性之间取得良好的平衡。
根据根本公开的另一方面,提供了一种信息处理装置。图8是示意性地示出根据本公开实施例的信息处理装置的一个示例结构的示意性框图。
信息处理装置800可以为通过多个分布式节点以异步方式执行的应用构建测试场景。如图8所示,信息处理装置800可以包括:调用关系图构建单元801,用于构建应用中所包括的函数的调用关系图;函数风险类型确定单元802,用于根据调用关系图中的每个函数的代码结构,为该函数确定可能导致运行错误的多个风险类型中的一个或更多个风险类型;路径风险类型确定单元803,用于遍历调用关系图以获得所有可能函数路径,并基于每条函数路径中的函数的风险类型确定该函数路径的风险类型;以及测试场景类型确定单元804,用于根据每条函数路径的风险类型,确定该函数路径的测试场景的类型。
上述信息处理装置及其各个单元例如可以进行以上参照图1至图7描述的构建测试场景的方法及其各个步骤的操作和/或处理并实现类似的效果,在此不再进行重复说明。
以上参照图8描述了根据本公开的信息处理装置。
根据根本公开的又一方面,提供了一种信息处理设备。该信息处理设备可以实现根据本公开实施例的构建测试场景的方法,其可以包括处理器,该处理器被配置为:构建应用中所包括的函数的调用关系图,其中,该应用是通过多个分布式节点以异步方式执行的;根据调用关系图中的每个函数的代码结构,为该函数确定可能导致运行错误的多个风险类型中的一个或更多个风险类型;遍历调用关系图以获得所有可能函数路径,并基于每条函数路径中的函数的风险类型确定该函数路径的风险类型;以及根据每条函数路径的风险类型,确定该函数路径的测试场景的类型。
信息处理设备的处理器例如可以被配置为进行以上参照图1至图7描述的构建测试场景的方法及其各个步骤的操作和/或处理、以及以上参照图8描述的信息处理装置及其各个单元的功能,并且可以实现类似的效果,在此不再进行重复说明。
举例而言,测试场景的类型可以包括:在一个节点上模拟一次应用的执行、在一个节点上模拟多个用户并发操作应用的执行、在多个节点上模拟一次应用的同时执行、以及在多个节点上模拟多个用户并发操作应用的执行。
在一个示例中,应用可以为区块链中的智能合约,并且多个分布式节点可以为区块链中的多个背书节点。
在一个优选实施例中,多个风险类型可以包括函数包含生成不确定结果或调用外部资源的操作的风险,并且针对该风险确定的测试场景的类型可以包括在多个节点上模拟一次应用的同时执行。
可选地,在多个节点上模拟一次应用的同时执行的测试场景中,多个背书节点可以先以第一背书策略同时执行一次智能合约,然后以第二背书策略同时执行一次智能合约。
在一个优选实施例中,构建调用关系图可以包括构建整个区块链的智能合约中所包括的函数的调用关系图,并且多个风险类型可以包括函数读取自身所写变量或调用另一智能合约的函数的风险,针对该风险确定的测试场景的类型可以包括在一个背书节点上模拟一次智能合约的执行。
在一个优选实施例中,多个风险类型可以包括函数包含对分布式数据库进行写入操作的风险,并且针对该风险确定的测试场景的类型可以包括在多个节点上模拟多个用户并发操作应用的执行。
可选地,在多个节点上模拟多个用户并发操作应用的执行的测试场景中,多个节点可以具有不同的网络延迟。
在一个优选实施例中,多个风险类型可以包括函数包含以批处理方式更新通过查询获得的多个变量值的操作的风险,并且针对该风险确定的测试场景的类型可以包括在一个节点上模拟多个用户并发操作应用的执行。
图9是示出了可用来实现根据本公开实施例的构建测试场景的方法、信息处理装置、以及信息处理设备的一种可能的硬件配置900的结构简图。
在图9中,中央处理单元(CPU)901根据只读存储器(ROM)902中存储的程序或从存储部分908加载到随机存取存储器(RAM)903的程序执行各种处理。在RAM 903中,还根据需要存储当CPU 901执行各种处理等等时所需的数据。CPU 901、ROM 902和RAM 903经由总线904彼此连接。输入/输出接口905也连接到总线904。
下述部件也连接到输入/输出接口905:输入部分906(包括键盘、鼠标等等)、输出部分907(包括显示器,例如阴极射线管(CRT)、液晶显示器(LCD)等,和扬声器等)、存储部分908(包括硬盘等)、通信部分909(包括网络接口卡例如LAN卡、调制解调器等)。通信部分909经由网络例如因特网执行通信处理。根据需要,驱动器910也可连接到输入/输出接口905。可拆卸介质911例如磁盘、光盘、磁光盘、半导体存储器等等可以根据需要被安装在驱动器910上,使得从中读出的计算机程序可根据需要被安装到存储部分908中。
此外,本公开还提出了一种存储有机器可读取的指令代码的程序产品。上述指令代码由机器读取并执行时,可执行上述根据本公开实施例的构建测试场景的方法。相应地,用于承载这种程序产品的例如磁盘、光盘、磁光盘、半导体存储器等的各种存储介质也包括在本公开的公开中。
即,本公开还提出了一种存储介质,其存储有机器可读取的指令代码,所述指令代码在由机器读取并执行时,能够使得机器执行上述根据本公开实施例的构建测试场景的方法。所述指令代码包括指令代码部分,用于进行下述操作:构建应用中所包括的函数的调用关系图;根据调用关系图中的每个函数的代码结构,为该函数确定可能导致运行错误的多个风险类型中的一个或更多个风险类型;遍历调用关系图以获得所有可能函数路径,并基于每条函数路径中的函数的风险类型确定该函数路径的风险类型;以及根据每条函数路径的风险类型,确定该函数路径的测试场景的类型。
上述存储介质例如可以包括但不限于磁盘、光盘、磁光盘、半导体存储器等。
在上面对本公开具体实施例的描述中,针对一种实施方式描述和/或示出的特征可以以相同或类似的方式在一个或更多个其它实施方式中使用,与其它实施方式中的特征相组合,或替代其它实施方式中的特征。
此外,本公开的各实施例的方法不限于按照说明书中描述的或者附图中示出的时间顺序来执行,也可以按照其他的时间顺序、并行地或独立地执行。因此,本说明书中描述的方法的执行顺序不对本公开的技术范围构成限制。
此外,显然,根据本公开的上述方法的各个操作过程也可以以存储在各种机器可读的存储介质中的计算机可执行程序的方式实现。
而且,本公开的目的也可以通过下述方式实现:将存储有上述可执行程序代码的存储介质直接或者间接地提供给系统或设备,并且该系统或设备中的计算机或者中央处理单元(CPU)读出并执行上述程序代码。
此时,只要该系统或者设备具有执行程序的功能,则本公开的实施方式不局限于程序,并且该程序也可以是任意的形式,例如,目标程序、解释器执行的程序或者提供给操作系统的脚本程序等。
上述这些机器可读存储介质包括但不限于:各种存储器和存储单元,半导体设备,磁盘单元例如光、磁和磁光盘,以及其它适于存储信息的介质等。
另外,客户信息处理终端通过连接到因特网上的相应网站,并且将依据本公开的计算机程序代码下载和安装到信息处理终端中然后执行该程序,也可以实现本公开的各实施例。
综上,根据本公开实施例,本公开提供了如下方案,但不限于此:
方案1.一种为通过多个分布式节点以异步方式执行的应用构建测试场景的方法,包括:
构建应用中所包括的函数的调用关系图;
根据调用关系图中的每个函数的代码结构,为该函数确定可能导致运行错误的多个风险类型中的一个或更多个风险类型;
遍历调用关系图以获得所有可能函数路径,并基于每条函数路径中的函数的风险类型确定该函数路径的风险类型;以及
根据每条函数路径的风险类型,确定该函数路径的测试场景的类型。
方案2.如方案1所述的方法,其中,
测试场景的类型包括:在一个节点上模拟一次应用的执行、在一个节点上模拟多个用户并发操作应用的执行、在多个节点上模拟一次应用的同时执行、以及在多个节点上模拟多个用户并发操作应用的执行。
方案3.如方案2所述的方法,其中,
所述应用为区块链中的智能合约,并且所述多个分布式节点为区块链中的多个背书节点。
方案4.如方案2或3所述的方法,其中,
所述多个风险类型包括函数包含生成不确定结果或调用外部资源的操作的风险,并且针对该风险确定的测试场景的类型包括在多个节点上模拟一次应用的同时执行。
方案5.如方案3所述的方法,其中,
在多个节点上模拟一次应用的同时执行的测试场景中,多个背书节点先以第一背书策略同时执行一次智能合约,然后以第二背书策略同时执行一次智能合约。
方案6.如方案3所述的方法,其中,
构建调用关系图包括构建整个区块链的智能合约中所包括的函数的调用关系图,
所述多个风险类型包括函数读取自身所写变量或调用另一智能合约的函数的风险,并且针对该风险确定的测试场景的类型包括在一个背书节点上模拟一次智能合约的执行。
方案7.如方案2或3所述的方法,其中,
所述多个风险类型包括函数包含对分布式数据库进行写入操作的风险,并且针对该风险确定的测试场景的类型包括在多个节点上模拟多个用户并发操作应用的执行。
方案8.如方案7所述的方法,其中,
在多个节点上模拟多个用户并发操作应用的执行的测试场景中,多个节点具有不同的网络延迟。
方案9.如方案2或3所述的方法,其中,
所述多个风险类型包括函数包含以批处理方式更新通过查询获得的多个变量值的操作的风险,并且针对该风险确定的测试场景的类型包括在一个节点上模拟多个用户并发操作应用的执行。
方案10.一种信息处理设备,包括:
处理器,被配置为:
构建应用中所包括的函数的调用关系图,其中,该应用是通过多个分布式节点以异步方式执行的;
根据调用关系图中的每个函数的代码结构,为该函数确定可能导致运行错误的多个风险类型中的一个或更多个风险类型;
遍历调用关系图以获得所有可能函数路径,并基于每条函数路径中的函数的风险类型确定该函数路径的风险类型;以及
根据每条函数路径的风险类型,确定该函数路径的测试场景的类型。
方案11.如方案10所述的信息处理设备,其中,
测试场景的类型包括:在一个节点上模拟一次应用的执行、在一个节点上模拟多个用户并发操作应用的执行、在多个节点上模拟一次应用的同时执行、以及在多个节点上模拟多个用户并发操作应用的执行。
方案12.如方案11所述的信息处理设备,其中,
所述应用为区块链中的智能合约,并且所述多个分布式节点为区块链中的多个背书节点。
方案13.如方案11或12所述的信息处理设备,其中,
所述多个风险类型包括函数包含生成不确定结果或调用外部资源的操作的风险,并且针对该风险确定的测试场景的类型包括在多个节点上模拟一次应用的同时执行。
方案14.如方案12所述的信息处理设备,其中,
在多个节点上模拟一次应用的同时执行的测试场景中,多个背书节点先以第一背书策略同时执行一次智能合约,然后以第二背书策略同时执行一次智能合约。
方案15.如方案12所述的信息处理设备,其中,
构建调用关系图包括构建整个区块链的智能合约中所包括的函数的调用关系图,
所述多个风险类型包括函数读取自身所写变量或调用另一智能合约的函数的风险,并且针对该风险确定的测试场景的类型包括在一个背书节点上模拟一次智能合约的执行。
方案16.如方案11或12所述的信息处理设备,其中,
所述多个风险类型包括函数包含对分布式数据库进行写入操作的风险,并且针对该风险确定的测试场景的类型包括在多个节点上模拟多个用户并发操作应用的执行。
方案17.如方案16所述的信息处理设备,其中,
在多个节点上模拟多个用户并发操作应用的执行的测试场景中,多个节点具有不同的网络延迟。
方案18.如方案11或12所述的信息处理设备,其中,
所述多个风险类型包括函数包含以批处理方式更新通过查询获得的多个变量值的操作的风险,并且针对该风险确定的测试场景的类型包括在一个节点上模拟多个用户并发操作应用的执行。
方案19.一种存储介质,其存储有机器可读取的指令代码,所述指令代码在由机器读取并执行时,能够使得机器执行一种为通过多个分布式节点以异步方式执行的应用构建测试场景的方法,所述方法包括:
构建应用中所包括的函数的调用关系图;
根据调用关系图中的每个函数的代码结构,为该函数确定可能导致运行错误的多个风险类型中的一个或更多个风险类型;
遍历调用关系图以获得所有可能函数路径,并基于每条函数路径中的函数的风险类型确定该函数路径的风险类型;以及
根据每条函数路径的风险类型,确定该函数路径的测试场景的类型。
最后,还需要说明的是,在本公开中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备可能不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
尽管上面已经通过本公开的具体实施例的描述对本公开进行了披露,但是,应该理解,本领域技术人员可在所附权利要求的精神和范围内设计对本公开的各种修改、改进或者等同物。这些修改、改进或者等同物也应当被认为包括在本公开所要求保护的范围内。

Claims (10)

1.一种为通过多个分布式节点以异步方式执行的应用构建测试场景的方法,包括:
构建应用中所包括的函数的调用关系图;
根据调用关系图中的每个函数的代码结构,为该函数确定可能导致运行错误的多个风险类型中的一个或更多个风险类型;
遍历调用关系图以获得所有可能函数路径,并基于每条函数路径中的函数的风险类型确定该函数路径的风险类型;以及
根据每条函数路径的风险类型,确定该函数路径的测试场景的类型。
2.如权利要求1所述的方法,其中,
测试场景的类型包括:在一个节点上模拟一次应用的执行、在一个节点上模拟多个用户并发操作应用的执行、在多个节点上模拟一次应用的同时执行、以及在多个节点上模拟多个用户并发操作应用的执行。
3.如权利要求2所述的方法,其中,
所述应用为区块链中的智能合约,并且所述多个分布式节点为区块链中的多个背书节点。
4.如权利要求2或3所述的方法,其中,
所述多个风险类型包括函数包含生成不确定结果或调用外部资源的操作的风险,并且针对该风险确定的测试场景的类型包括在多个节点上模拟一次应用的同时执行。
5.如权利要求3所述的方法,其中,
在多个节点上模拟一次应用的同时执行的测试场景中,多个背书节点先以第一背书策略同时执行一次智能合约,然后以第二背书策略同时执行一次智能合约。
6.如权利要求3所述的方法,其中,
构建调用关系图包括构建整个区块链的智能合约中所包括的函数的调用关系图,
所述多个风险类型包括函数读取自身所写变量或调用另一智能合约的函数的风险,并且针对该风险确定的测试场景的类型包括在一个背书节点上模拟一次智能合约的执行。
7.如权利要求2或3所述的方法,其中,
所述多个风险类型包括函数包含对分布式数据库进行写入操作的风险,并且针对该风险确定的测试场景的类型包括在多个节点上模拟多个用户并发操作应用的执行。
8.如权利要求7所述的方法,其中,
在多个节点上模拟多个用户并发操作应用的执行的测试场景中,多个节点具有不同的网络延迟。
9.如权利要求2或3所述的方法,其中,
所述多个风险类型包括函数包含以批处理方式更新通过查询获得的多个变量值的操作的风险,并且针对该风险确定的测试场景的类型包括在一个节点上模拟多个用户并发操作应用的执行。
10.一种信息处理设备,包括:
处理器,被配置为:
构建应用中所包括的函数的调用关系图,其中,该应用是通过多个分布式节点以异步方式执行的;
根据调用关系图中的每个函数的代码结构,为该函数确定可能导致运行错误的多个风险类型中的一个或更多个风险类型;
遍历调用关系图以获得所有可能函数路径,并基于每条函数路径中的函数的风险类型确定该函数路径的风险类型;以及
根据每条函数路径的风险类型,确定该函数路径的测试场景的类型。
CN201910299220.1A 2019-04-15 2019-04-15 构建测试场景的方法以及信息处理设备 Pending CN111831532A (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201910299220.1A CN111831532A (zh) 2019-04-15 2019-04-15 构建测试场景的方法以及信息处理设备
JP2020065884A JP2020177658A (ja) 2019-04-15 2020-04-01 テストシナリオ構築方法及び情報処理装置
US16/845,660 US20200327044A1 (en) 2019-04-15 2020-04-10 Method for constructing test scenario and information processing device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910299220.1A CN111831532A (zh) 2019-04-15 2019-04-15 构建测试场景的方法以及信息处理设备

Publications (1)

Publication Number Publication Date
CN111831532A true CN111831532A (zh) 2020-10-27

Family

ID=72747406

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910299220.1A Pending CN111831532A (zh) 2019-04-15 2019-04-15 构建测试场景的方法以及信息处理设备

Country Status (3)

Country Link
US (1) US20200327044A1 (zh)
JP (1) JP2020177658A (zh)
CN (1) CN111831532A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114707296A (zh) * 2022-02-24 2022-07-05 中国标准化研究院 一种测试场景生成方法、装置、电子设备及可读存储介质

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11561886B2 (en) * 2019-09-19 2023-01-24 Sap Se Open data protocol performance test automation intelligence (OPT-AI)
CN110688428B (zh) * 2019-09-24 2021-01-26 北京海益同展信息科技有限公司 用于发布智能合约的方法和装置

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101847122A (zh) * 2010-06-01 2010-09-29 北京邮电大学 应用异常控制流集的软件测试方法及系统
CN101894064A (zh) * 2009-05-21 2010-11-24 北京邮电大学 应用跨函数分析的软件测试方法
CN102521117A (zh) * 2011-10-27 2012-06-27 北京航空航天大学 一种Java异常传播的静态结构抽取方法
US20160350207A1 (en) * 2015-05-28 2016-12-01 International Business Machines Corporation Generation of test scenarios based on risk analysis
CN107590073A (zh) * 2017-08-30 2018-01-16 华南理工大学 基于路径覆盖软件测试的测试用例自动生成方法
CN108874663A (zh) * 2018-05-24 2018-11-23 南京大学 黑盒故障注入方法和系统及介质设备
CN108959056A (zh) * 2017-05-17 2018-12-07 富士通株式会社 测试用例生成方法和测试用例生成装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101894064A (zh) * 2009-05-21 2010-11-24 北京邮电大学 应用跨函数分析的软件测试方法
CN101847122A (zh) * 2010-06-01 2010-09-29 北京邮电大学 应用异常控制流集的软件测试方法及系统
CN102521117A (zh) * 2011-10-27 2012-06-27 北京航空航天大学 一种Java异常传播的静态结构抽取方法
US20160350207A1 (en) * 2015-05-28 2016-12-01 International Business Machines Corporation Generation of test scenarios based on risk analysis
CN108959056A (zh) * 2017-05-17 2018-12-07 富士通株式会社 测试用例生成方法和测试用例生成装置
CN107590073A (zh) * 2017-08-30 2018-01-16 华南理工大学 基于路径覆盖软件测试的测试用例自动生成方法
CN108874663A (zh) * 2018-05-24 2018-11-23 南京大学 黑盒故障注入方法和系统及介质设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
MENGLIN FU1 等: "A Critical-Path-Coverage-Based Vulnerability Detection Method for Smart Contracts", X-MOL学术期刊, pages 1 - 15 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114707296A (zh) * 2022-02-24 2022-07-05 中国标准化研究院 一种测试场景生成方法、装置、电子设备及可读存储介质
CN114707296B (zh) * 2022-02-24 2024-03-08 中国标准化研究院 一种测试场景生成方法、装置、电子设备及可读存储介质

Also Published As

Publication number Publication date
JP2020177658A (ja) 2020-10-29
US20200327044A1 (en) 2020-10-15

Similar Documents

Publication Publication Date Title
Yamashita et al. Potential risks of hyperledger fabric smart contracts
Hildenbrandt et al. Kevm: A complete semantics of the ethereum virtual machine
CN109408373B (zh) 智能合约的测试方法、计算机可读存储介质及测试终端
US10489274B2 (en) Using emulation to disassociate verification from stimulus in functional test
US20170235661A1 (en) Integration of Software Systems via Incremental Verification
KR20200021993A (ko) 블록체인 컴파일러
US20090019420A1 (en) Software development
Liao et al. Toward a service platform for developing smart contracts on blockchain in bdd and tdd styles
CN110633200A (zh) 用于测试智能合约的方法和设备
US20200327044A1 (en) Method for constructing test scenario and information processing device
WO2012052215A1 (en) Software development
US20140047276A1 (en) Model-based testing of a graphical user interface
Shishkin Debugging smart contract’s business logic using symbolic model checking
CN109684189B (zh) 区块链智能合约的逻辑验证方法和装置及计算机存储介质
Sankar et al. Specifying and testing software components using ADL
Jiang et al. Assuring the model evolution of protocol software specifications by regression testing process improvement
Mayan et al. Optimized test data generation over suspicious implementation of oracle problem
US11755458B2 (en) Automatic software behavior identification using execution record
CN113778878A (zh) 接口测试方法、装置、电子设备及存储介质
US10606569B2 (en) Declarative configuration elements
Rahman et al. A Framework for Modelling Blockchain based Supply Chain Management System to ensure soundness of Smart Contract Workflow.
CN115170312A (zh) 区块链上资产状态信息变更方法及装置
Souri Formal specification and verification of a data replication approach in distributed systems
Katkalov et al. Model-driven testing of security protocols with secureMDD
Katkalov et al. Modeling test cases for security protocols with SecureMDD

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

Application publication date: 20201027

WD01 Invention patent application deemed withdrawn after publication