CN116401165A - 一种测试方法、装置、设备、存储介质及产品 - Google Patents

一种测试方法、装置、设备、存储介质及产品 Download PDF

Info

Publication number
CN116401165A
CN116401165A CN202310371041.0A CN202310371041A CN116401165A CN 116401165 A CN116401165 A CN 116401165A CN 202310371041 A CN202310371041 A CN 202310371041A CN 116401165 A CN116401165 A CN 116401165A
Authority
CN
China
Prior art keywords
directed
type
node
directed edge
historical
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
CN202310371041.0A
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.)
Nanjing University
Shenzhen Tencent Computer Systems Co Ltd
Original Assignee
Nanjing University
Shenzhen Tencent Computer Systems Co 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 Nanjing University, Shenzhen Tencent Computer Systems Co Ltd filed Critical Nanjing University
Priority to CN202310371041.0A priority Critical patent/CN116401165A/zh
Publication of CN116401165A publication Critical patent/CN116401165A/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/3688Test management for test execution, e.g. scheduling of test suites
    • 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/3692Test management for test results analysis
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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为本申请实施例提供的一种有向图简化方式示意图;
图8为本申请实施例提供的另一种有向图简化方式示意图;
图9为本申请实施例提供的一种剪枝流程图;
图10为本申请实施例提供的一种目标环的示意图;
图11为本申请实施例提供的另一种目标环的示意图;
图12为本申请实施例提供的一种反例图的示意图;
图13为本申请实施例提供的另一种反例图的示意图;
图14为本申请实施例提供的一种测试装置的结构示意图;
图15为本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请涉及确定待测试数据库是否达到了快照隔离级别,下面对本申请涉及的相关术语进行简单介绍。
快照隔离(Snapshot Isolation,SI)是一种常用的弱于可串行化(Serializability,SER)的事务隔离级别。与SER相比,SI的实现性能通常更高,同时也能避免例如“部分读”(fractured reads)、“因果悖逆”、“更新丢失”等数据异常。
SER是数据库事务访问隔离级别的一种标准,它要求所有的事务的执行与串行执行的效果相匹配。
会话(Session)是通信双方从开始通信到通信结束期间的一个上下文(Context)。
事务(Transaction)可以理解为一组数据库操作序列,这组数据库操作序列中的操作要么全部执行,要么全部不执行。事务把数据库从一种一致性状态转换成另一种一致性状态。
本申请实施例提供了一种测试方案,来确定待测试数据库是否达到了快照隔离级别。图1为本申请实施例提供的一种测试场景图,如图1所示,本申请提供的测试方案可由计算机设备101执行,此处的计算机设备101具体可以是终端设备或者服务器。其中,终端设备可以包括但不限于:智能手机(如Android手机、IOS手机等)、平板电脑、便携式个人计算机、移动互联网设备(Mobile Internet Devices,简称MID)、车载终端、智能家电、无人飞行器、可穿戴设备等,本申请实施例对此不做限定。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(ContentDelivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器,本申请实施例对此不做限定。
需要说明的是,图1中计算机设备的数量仅用于举例,并不构成本申请的实际限定;例如,图1中还可以包括计算机设备102;例如,计算机设备102用于向计算机设备101提供待测试数据库的历史执行数据。计算机设备101和计算机设备102可以通过有线或无线的方式进行连接,本申请对此不作限制。
在具体实现中,该测试方案的大致原理如下:
(1)计算机设备101获取基于待测试数据库的历史执行数据生成的有向图;其中,历史执行数据包含至少两个历史事务和至少一个执行记录,每个执行记录用于记录两个历史事务之间的事务执行关系,执行记录可以包括会话记录和读写记录。一个历史事务对应有向图中的一个节点,一个执行记录对应有向图中的一条第一类型有向边;也就是说,有向图中的第一类型有向边是基于会话记录,或读写记录生成的。
在一种实施方式中,计算机设备101获取待测试数据库的历史执行数据,生成各个历史事务对应的节点,并基于各个执行记录生成各个节点间的第一类型有向边,得到待测试数据库的历史执行数据对应的有向图。
(2)计算机设备101根据历史执行数据中的执行记录,确定有向图中的一个或多个约束组,每个约束组中包含具备约束关系的两个节点。在一种实施方式中,待测试数据库中包括目标变量,该目标变量可以是待测试数据库中包含的变量中的任一个变量。执行记录包括读写记录,若读写记录中包括第一历史事务对目标变量的写入记录和第二历史事务对目标变量的写入记录,则计算机设备101判定第一历史事务对应的节点和第二历史事务对应的节点之间存在一个约束组。第一历史事务和第二历史事务可以是历史执行数据中任意两个不相同的历史事务。
(3)计算机设备101在有向图中生成各个约束组分别对应的第二类型有向边,每个约束组对应两条方向不同的第二类型有向边。一个约束组对应的第二类型有向边上,不包含除该约束组中包含的具备约束关系的两个节点外的其他节点。举例来说,假设约束组1中包括节点1和节点2,则计算机设备101在有向图中生成约束组1对应的第二类型有向边,约束组1对应的第二类型有向边包括从节点1到节点2的一条有向边和从节点2到节点1的另一条有向边,这两条有向边上均只包含节点1和节点2(即不会经过有向图中的其它节点)。
(4)计算机设备101基于筛选规则,对有向图中的第二类型有向边进行剪枝处理,得到剪枝处理的结果。筛选规则用于对各个约束组对应的两条第二类型有向边进行筛选,具体来说,筛选规则用于筛选出每个约束组对应的两条第二类型有向边中的目标有向边,当目标有向边和基于该目标有向边生成的第三类型有向边存在于有向图中时,有向图中不存在“环”。剪枝处理可以理解为删除有向图中不满足筛选规则的有向边。
在一种实施方式中,有向图中包含目标约束组,目标约束组对应的第二类型有向边包括第一有向边,目标约束组为有向图中一个或多个约束组中的任一个约束组。若有向图中存在与第一有向边对应的第二有向边;其中,第二有向边与第一有向边的起始节点和关联的变量相同,且第二有向边是基于读写记录生成的第一类型有向边。则计算机设备101在有向图中生成第三类型有向边,得到更新后的有向图。进一步地,若更新后的有向图中存在“环”(如有向图中存在包含第三类型有向边的回路;或者,有向图中存在包含第二类型有向边的回路),则计算机设备101删除第一有向边和第三类型有向边。相应地,若更新后的有向图中不存在环,则计算机设备101保留第一有向边和第三类型有向边。
(5)计算机设备101根据至少一个约束组对应的第二类型有向边的剪枝结果,确定待测试数据库的测试结果。具体来说,若有向图中至少存在一个约束组对应的两条第二类型有向边均被剪枝,则计算机设备101判定待测试数据库测试不通过。待测试数据库测试不通过用于表示待测试数据库未达到快照隔离级别。相应地,若每个约束组对应的两条第二类型有向边中均存在唯一一条第二类型有向边未被剪枝,则计算机设备101判定待测试数据库的历史执行数据通过测试。待测试数据库的历史执行数据通过测试用于表示待测试数据库的历史执行数满足快照隔离。
在一种实施方式中,计算机设备101对有向图中的第二类型有向边进行剪枝处理的过程中,当检测到有向图中的任一个约束组对应的两条第二类型有向边均被剪枝时,计算机设备101判定待测试数据库测试不通过。
本申请实施例中,获取基于待测试数据库的历史执行数据生成的有向图,根据历史执行数据中的执行记录,确定有向图中的一个或多个约束组,在有向图中生成各个约束组分别对应的第二类型有向边;基于筛选规则,对有向图中的第二类型有向边进行剪枝处理,根据至少一个约束组对应的第二类型有向边的剪枝结果,确定待测试数据库的测试结果。可见,本申请通过一个或多个约束组对应的剪枝结果,来判断待测试数据库是否通过测试,从而确定待测试数据库的隔离级别是否达到快照隔离级别。
基于上述测试方案,本申请实施例提出更为详细的测试方法,下面将结合附图对本申请实施例提出的测试方法进行详细介绍。
请参阅图2,图2为本申请实施例提供的一种测试方法的流程图,该测试方法可以由计算机设备执行,该计算机设备可以是终端设备或者服务器。如图2所示,该测试方法可包括如下步骤S201-S205:
S201、获取基于待测试数据库的历史执行数据生成的有向图。
基于待测试数据库的历史执行数据生成的有向图具体可以是一个依赖图。待测试数据库的历史执行数据包含至少两个历史事务和至少一个执行记录,每个执行记录用于记录两个历史事务之间的事务执行关系,执行记录可以包括会话记录和读写记录。一个历史事务对应有向图中的一个节点,一个执行记录对应有向图中的一条第一类型有向边;也就是说,有向图中的第一类型有向边是基于会话记录,或读写记录生成的。
在一种实施方式中,计算机设备获取待测试数据库的历史执行数据,并根据该历史执行数据中的历史事务,生成有向图中的节点,一个历史事务对应一个节点;再基于历史执行数据中的执行记录,生成有向图中各个执行记录关联的节点间的第一类型有向边,得到待测试数据库的历史执行数据对应的有向图。举例来说,假设待测试数据库的历史执行数据中的历史事务的数量为5(包括历史事务1-历史事务5),则生成的节点的数量为5;假设待测试数据库的历史执行数据包括读写记录1,读写记录1用于指示历史事务1读取了历史事务3写入待测试数据库中的变量A,则读写记录关联的节点为有向图中历史事务1对应的节点1和历史事务3对应的节点3,计算机设备生成节点3到节点1的第一类型有向边。
图3为本申请实施例提供的一种有向图的示意图。如图3所示,有向图包括节点T0-节点T3,分别对应历史事务0-历史事务3,x,y,z均为待测试数据库中的变量,W(x,a)中a为写入标识,变量x的每次写入对应一个唯一写入标识;同理,W(y,b)中b为写入标识,变量y的每次写入对应一个唯一写入标识;W(z,c)中c为写入标识,变量z的每次写入对应一个唯一写入标识;例如,W(x,1)表示节点T1对应的历史事务1对待测试数据库中的变量x进行了写入,写入标识为1;又例如,W(x,0)W(y,0)表示节点T0对应的历史事务0对待测试数据库中的变量x和变量y进行了写入,写入标识均为0;再例如,W(z,0)表示节点T3对应的历史事务3对待测试数据库中的变量z进行了写入,写入标识为0。类似地,R(x,d)中d为读取标识,变量x的读取标识用于指示读取的变量x的来源;同理,R(y,e)中e为读取标识,变量y的读取标识用于指示读取的变量y的来源;例如,图3中的R(x,1)表示读取T1节点对应的历史事务1写入待测试数据库的变量x,R(y,0)表示读取T0节点对应的历史事务0写入待测试数据库的变量y。
节点T1到节点T2之间的有向边WR(x)是根据历史事务1和历史事务2之间的写入记录得到,关联的变量为x,节点T1到节点T2之间的有向边WR(x)表示节点T2对应的历史事务2读取了节点T1对应的历史事务1写入待测试数据库中的变量x;同理,节点T0到节点T2之间的有向边WR(y)是根据历史事务0和历史事务2之间的写入记录得到,关联的变量为y,节点T0到节点T2之间的有向边WR(y)表示节点T2对应的历史事务2读取了节点T0对应的历史事务0写入待测试数据库中的变量y。节点T0到节点T3之间的有向边SO是根据历史事务0和历史事务3之间的会话记录得到,节点T0到节点T3之间的有向边SO表示在同一个会话上,节点T3对应的历史事务3在节点T0对应的历史事务0之后执行。
需要说明的是,若基于待测试数据库的历史执行数据生成的有向图中存在“环”(即有向图中存在由至少两个节点构成的回路),则计算机设备判定待测试数据库测试不通过(即待测试数据库未达到快照隔离级别)。
S202、根据历史执行数据中的执行记录,确定有向图中的一个或多个约束组。
每个约束组中包含具备约束关系的两个节点。在一种实施方式中,待测试数据库中包括目标变量,该目标变量可以是待测试数据库中包含的变量中的任一个变量。执行记录包括读写记录,若读写记录中包括第一历史事务对目标变量的写入记录和第二历史事务对目标变量的写入记录,则计算机设备判定第一历史事务对应的节点和第二历史事务对应的节点之间存在一个约束组。第一历史事务和第二历史事务可以是历史执行数据中任意两个不相同的历史事务。
请参见图3,由图3可知,节点T0对应的历史事务0和节点T1对应的历史事务1均对待测试数据库中的变量x进行了写入,因此节点T0和节点T1之间存在一个约束组。
S203、在有向图中生成各个约束组分别对应的第二类型有向边。
每个约束组对应两条方向不同的第二类型有向边。可以理解的是,第二类型有向边是计算机设备基于有向图中的第一类型有向边生成的。一个约束组对应的第二类型有向边上,不包含除该约束组中包含的具备约束关系的两个节点外的其他节点。举例来说,假设约束组1中包括节点1和节点2,则计算机设备在有向图中生成约束组1对应的第二类型有向边,约束组1对应的第二类型有向边包括从节点1到节点2的一条有向边和从节点2到节点1的另一条有向边,这两条有向边上均只包含节点1和节点2(即不会经过有向图中的其它节点)。
图4为本申请实施例提供的另一种有向图的示意图。如图4所示,计算机设备基于图3中节点T0和节点T1之间的约束组,生成节点T0到节点T1的一条第二类型有向边WW(x)(可以记为T0→[WW]T1),关联的变量为x;以及生成节点T1到节点T0的一条第二类型有向边WW(x)(可以记为T1→[WW]T0),关联的变量为x;两条第二类型有向边的方向相反。T0→[WW]T1表示节点T1对应的历史事务1的写操作覆盖了节点T0对应历史事务0的写操作(即历史事务1写入待测试数据库中变量x的值,覆盖了历史事务0写入待测试数据库中变量x的值);T1→[WW]T0表示节点T0对应的历史事务0的写操作覆盖了节点T1对应历史事务1的写操作(即历史事务0写入待测试数据库中变量x的值,覆盖了历史事务1写入待测试数据库中变量x的值)。
S204、基于筛选规则,对有向图中的第二类型有向边进行剪枝处理。
筛选规则用于对各个约束组对应的两条第二类型有向边进行筛选,具体来说,筛选规则用于筛选出每个约束组对应的两条第二类型有向边中的目标有向边。若第二类型有向边和基于该第二类型有向边生成的第三类型有向边存在于有向图中时,该有向图中不存在“环”,则判定该第二类型有向边为目标有向边。也就是说,当目标有向边和基于该目标有向边生成的第三类型有向边存在于有向图中时,有向图中不存在“环”。需要说明的是,若存在约束组对应的两条第二类型有向边均不为目标有向边,则计算机设备对该约束组对应的两条第二类型有向边均进行剪枝。剪枝处理可以理解为删除有向图中不满足筛选规则的有向边。
在一种实施方式中,有向图中包含目标约束组,目标约束组对应的第二类型有向边包括第一有向边,目标约束组为有向图中一个或多个约束组中的任一个约束组。若有向图中存在与第一有向边对应的第二有向边,则计算机设备在有向图中生成第三类型有向边,得到更新后的有向图;其中,第二有向边与第一有向边的起始节点和关联的变量相同,且第二有向边是基于读写记录生成的第一类型有向边。
进一步地,若更新后的有向图中存在“环”(如有向图中存在包含第三类型有向边的回路;或者,有向图中存在包含第二类型有向边的回路),则计算机设备删除第一有向边和第三类型有向边。相应地,若更新后的有向图中不存在环,则计算机设备保留第一有向边和第三类型有向边。
在另一种实施方式中,待测试数据库为事务型数据库,即以事务作为逻辑工作单位的数据库。待测试数据库的历史执行数据是由多个历史事务和执行记录组成的。历史执行数据中历史事务的集合可以表示为T,会话记录可以表示为SO,读写记录可以表示为WR。各个历史事务之间存在以下四种偏序关系:会话序、读写序、写写序、写读序。具体介绍如下:
会话(SO)序是基于执行记录中的会话记录得到的,每个会话序对应有向图中的一条第一类型有向边;例如,若会话记录中包括在同一个会话中的历史事务B在历史事务A之后执行,则有向图中包括从历史事务A对应的节点到历史事务B对应的节点的第一类型有向边,可以记为:A→[SO]B。在同一个会话(session)上,所有的历史事务串行执行。
读写(WR)序是基于执行记录中的读写记录得到的,每个读写序对应有向图中的一条第一类型有向边;例如,若读写记录中包括历史事务B读取了历史事务A写入待测试数据库中的变量,则有向图中包括从历史事务A对应的节点到历史事务B对应的节点的第一类型有向边,可以记为A→[WR]B。
每个写写(WW)序对应有向图中的一条第二类型有向边。具体来说,若读写记录中包括历史事务A对待测试数据库中的目标变量的写入记录,以及历史事务B对待测试数据库中的目标变量的写入记录,则计算机设备判定有向图中历史事务A对应的节点A和历史事务B对应的节点B之间存在一个约束组。具体来说,基于节点A和节点B之间的约束组,可以在有向图中生成从节点A到节点B的一条第二类型有向边,以及一条从节点B到节点A的一条第二类型有向边;其中,从节点A到节点B的一条第二类型有向边,表示历史事务B覆盖了历史事务A的写操作(即历史事务B对待测试数据库中的目标变量的写入,覆盖了历史事务A对待测试数据库中的目标变量的写入),具体可以记为:A→[WW]B。由上述可知,第二类型有向边是基于第一类型有向边生成的。
写读(RW)序是基于读写序和写写序推导得到的,每个写读序对应有向图中的一条第三类型有向边。具体来说,若有向图中存在从节点A到节点B的一条第二类型有向边(即历史事务B对待测试数据库中的目标变量的写入覆盖了历史事务A对待测试数据库中的目标变量的写入),以及一条从节点A到节点C的一条基于读写记录生成的第一类型有向边(即历史事务C读取了历史事务A写入待测试数据库中的变量);则计算机设备可以在有向图中生成从节点C到节点B的一条第三类型有向边,表示历史事务B对待测试数据库中的目标变量的写入,覆盖了历史事务C读取的待测试数据库中的(被覆盖前)目标变量;具体可以记为:C→[RW]B。由上述可知,第三类型有向边是基于第一类型有向边和第二类型有向边生成的。
图5为本申请实施例提供的再一种有向图的示意图。如图5所示,有向图中包括有向边T1→[WW]T0,以及与T1→[WW]T0相对应的有向边T1→[WR]T2,计算机设备生成第三类型有向边T2→[RW]T0。在此情况下,有向图中存在T0→[WR]T2,T2→[RW]T0的“环”,计算机设备删除有向边T1→[WW]T0和有向边T2→[RW]T0。类似地,有向图中包括有向边T0→[WW]T1,以及与T0→[WW]T1对应的有向边T0→[WR]T3,计算机设备生成第三类型有向边T3→[RW]T1。在此情况下,有向图中不存在包含有向边T3→[RW]T1的“环”(也不存在包含有向边T0→[WW]T1的“环”),则计算机设备保留有向边T0→[WW]T1和有向边T3→[RW]T1。
按照上述实施方式,计算机设备逐一对有向图中的约束组对应的两条第二类型有向边进行剪枝处理,直至完成所有约束组的剪枝;或者,直至检测到一个约束组对应的两条第二类型有向边均被剪枝。
S205、根据至少一个约束组对应的第二类型有向边的剪枝结果,确定待测试数据库的测试结果。
若有向图中至少存在一个约束组对应的两条第二类型有向边均被剪枝,则计算机设备判定待测试数据库测试不通过。待测试数据库测试不通过用于表示待测试数据库未达到快照隔离级别。相应地,若每个约束组对应的两条第二类型有向边中均存在唯一一条第二类型有向边未被剪枝,则计算机设备判定待测试数据库的历史执行数据通过测试。待测试数据库的历史执行数据通过测试用于表示待测试数据库的历史执行数满足快照隔离。
在一种实施方式中,在计算机设备对有向图中的第二类型有向边进行剪枝处理的过程中,当检测到有向图中的任一个约束组对应的两条第二类型有向边均被剪枝时,计算机设备判定待测试数据库测试不通过。
在另一种实施方式中,计算机设备完成有向图中的第二类型有向边的剪枝后,若有向图中至少存在一个约束组对应的两条第二类型有向边均被剪枝,则判定待测试数据库测试不通过;相应地,计算机设备完成有向图中的第二类型有向边的剪枝后,若有向图中每个约束组对应的两条第二类型有向边中均存在唯一一条第二类型有向边未被剪枝,则计算机设备判定待测试数据库通过测试。
本申请实施例中,获取基于待测试数据库的历史执行数据生成的有向图,根据历史执行数据中的执行记录,确定有向图中的一个或多个约束组,在有向图中生成各个约束组分别对应的第二类型有向边,基于筛选规则,对有向图中的第二类型有向边进行剪枝处理,根据至少一个约束组对应的第二类型有向边的剪枝结果,确定待测试数据库的测试结果。可见,本申请通过一个或多个约束组对应的剪枝结果,来判断待测试数据库是否通过测试,从而确定待测试数据库的隔离级别是否达到快照隔离级别。
请参阅图6,图6为本申请实施例提供的另一种测试方法的流程图,该测试方法可以由计算机设备执行,该计算机设备可以是终端设备或者服务器。如图6所示,该测试方法可包括如下步骤S601-S610:
S601、获取基于待测试数据库的历史执行数据生成的有向图。
S602、根据历史执行数据中的执行记录,确定有向图中的一个或多个约束组。
S603、在有向图中生成各个约束组分别对应的第二类型有向边。
S604、基于筛选规则,对有向图中的第二类型有向边进行剪枝处理。
步骤S601-步骤S604的具体实施方式可参考图2中步骤S201-步骤S204中的实施方式,在此不再赘述。
在一种实施方式中,有向图中包含目标约束组,目标约束组对应的第二类型有向边包括第一有向边,目标约束组为有向图中一个或多个约束组中的任一个约束组。若有向图中存在与第一有向边对应的第二有向边,则计算机设备在有向图中生成第三类型有向边,得到更新后的有向图。若更新后的有向图中不存在环,则计算机设备保留第一有向边和第三类型有向边。
在计算机设备保留第一有向边和第三类型有向边的情况下,若更新后的有向图中存在从第一节点到第二节点的第三类型有向边,且更新后的有向图中存在从第三节点到第一节点的第一类型有向边,则计算机设备生成从第三节点至第二节点的第三类型有向边,并删除从第一节点到第二节点的第三类型有向边,以及删除从第三节点到第一节点的第一类型有向边,得到简化后的有向图。
图7为本申请实施例提供的一种有向图简化方式示意图。如图7所示,更新后的有向图中存在从T1节点到T2节点的第三类型有向边,可以表示为T1→[RW]T2,且更新后的有向图中存在从T0节点到T1节点的第一类型有向边,如T0→[WR]T1;或者,T0→[SO]T1。计算机设备生成从T0节点到T2节点的第三类型有向边,表示为T0→[RW]T2,并删除T1节点到T2节点的第三类型有向边,以及删除T0节点到T1节点的第一类型有向边,得到简化后的有向图。也就是说,简化后的有向图中仅包含T0节点,T1节点,T2节点和从T0节点到T2节点的第三类型有向边。
类似地,在计算机设备保留第一有向边和第三类型有向边的情况下,若更新后的有向图中存在从第一节点到第二节点的第三类型有向边,且更新后的有向图中存在从第三节点到第一节点的第二类型有向边,则计算机设备生成从第三节点至第二节点的第三类型有向边,并删除从第一节点到第二节点的第三类型有向边,以及删除从第三节点到第一节点的第二类型有向边,得到简化后的有向图。
图8为本申请实施例提供的另一种有向图简化方式示意图。如图8所示,更新后的有向图中存在从T1节点到T2节点的第三类型有向边,可以表示为T1→[RW]T2,且更新后的有向图中存在从T0节点到T1节点的第二类型有向边,可以表示为T0→[WW]T1。计算机设备生成从T0节点到T2节点的第三类型有向边,表示为T0→[RW]T2,并删除T1节点到T2节点的第三类型有向边,以及删除T0节点到T1节点的第二类型有向边,得到简化后的有向图。也就是说,简化后的有向图中仅包含T0节点,T1节点,T2节点和从T0节点到T2节点的第三类型有向边。
可以理解的是,通过对更新后的有向图进行简化,可以提高剪枝效率,并辅助数据库维护人员更加高效地对待测试数据库进行维护。
图9为本申请实施例提供的一种剪枝流程图。如图9所示,图9中的901为基于测试数据库的历史执行数据生成的有向图,具体实施方式可参考图2中的步骤S201,在此不再赘述。请参见图9中的902,由于T0节点和T5节点均对待测试数据库中的变量x进行了写入;因此,T0节点和T5节点之间存在一个约束组对应的两条第二类型有向边为{T0→[WW]T5/T5→[WW]T0}。由于有向图中存在从T0节点到T5节点的第一类型有向边(可以表示为T0→[SO]T5),可以与T5→[WW]T0组成一个“环”,因此,保留T0→[WW]T5,删除T5→[WW]T0,并基于T0→[WW]T5和T0→[WR]T4,生成第三类型有向边T4→[RW]T5。接着参见图9中的903,由于T0节点和T1节点均对待测试数据库中的变量x进行了写入;因此,T0节点和T1节点之间存在一个约束组对应的两条第二类型有向边为{T0→[WW]T1/T1→[WW]T0}。由于有向图中存在从T0节点到T3节点的第一类型有向边(可以表示为T0→[WR]T3),可以与基于T1→[WW]T0和T1→[WR]T3生成的第三类型有向边T3→[RW]T0组成一个“环”,因此,保留T0→[WW]T1,删除T1→[WW]T0和T3→[RW]T0,并基于T0→[WW]T1和T0→[WR]T4,生成第三类型有向边T4→[RW]T1。再参见图9中的904,由于T0节点和T2节点均对待测试数据库中的变量x进行了写入;因此,T0节点和T2节点之间存在一个约束组对应的两条第二类型有向边为{T0→[WW]T2/T2→[WW]T0}。由于有向图中存在从T0节点到T4节点的第一类型有向边(可以表示为T0→[WR]T4),可以与基于T2→[WW]T0和T2→[WR]T4生成的第三类型有向边T4→[RW]T0组成一个“环”,因此,保留T0→[WW]T2,删除T2→[WW]T0和T4→[RW]T0,并基于T0→[WW]T2和T0→[WR]T3,生成第三类型有向边T3→[RW]T2。此时,有向图中存在:T1→[WR]T3,T3→[RW]T2,T2→[WR]T4,T4→[RW]T1的环,具体可以参见图9中的905。在此情况下,需要删除T0→[WW]T2和T3→[RW]T2,删除后T0节点和T2节点之间的约束组对应的两条第二类型有向边{T0→[WW]T2/T2→[WW]T0}均被剪枝,计算机设备判定待测试数据库测试不通过,即待测试数据库的隔离级别未达到快照隔离级别。
S605、检测每个约束组对应的两条第二类型有向边中是否均存在唯一一条第二类型有向边未被剪枝。
可以理解的是,每个约束组对应的两条第二类型有向边可以构成一个“环”(即构成该约束组中包含的具备约束关系的两个节点之间的回路);因此,每个约束组对应的两条第二类型有向边最多能保留一条。
在一种实施方式中,计算机设备在基于筛选规则,对有向图中的第二类型有向边完成剪枝后,若每个约束组对应的两条第二类型有向边中均存在唯一一条第二类型有向边未被剪枝,则继续执行步骤S610。若存在至少一个约束组对应的两条第二类型有向边均被剪枝,则继续执行步骤S606。
在另一种实施方式中,计算机设备在基于筛选规则,对有向图中的第二类型有向边进行剪枝的过程中,若检测到一个约束组对应的两条第二类型有向边均被剪枝,则继续执行步骤S606。
S606、判定待测试数据库测试不通过。
待测试数据库测试不通过用于指示待测试数据库的隔离级别未达到快照隔离级别。
S607、获取反例指示信息。
反例指示信息用于指示有向图中未通过测试的目标环,目标环包括至少两条有向边和至少两个历史事务对应的节点;例如,目标环可以是用于指示待测试数据库的历史执行数据不满足SI的最小环(有向图的所有环中包含的有向边的数量最少的环)。
在一种实现方式中,计算机设备根据待测试数据库的历史执行数据生成有向图(PolyGraph),并对PolyGraph进行剪枝,具体实施方式可参考图2实施例或者图6中步骤S601-步骤S604。通过快照隔离检测规则和有向边简化规则(可参见图7和图8中的简化方式),对PolyGraph进行可满足性(Satisfiability,SAT)编码,并使用SAT求解器(如MonoSAT)判断SAT编码表示的有向图是否是无“环”的。如果有向图是无“环”的,则待测试数据库的历史执行数据满足SI;否则,SAT求解器输出待测试数据库的历史执行数据不满足SI的反例指示信息。
图10为本申请实施例提供的一种目标环的示意图。如图10所示,节点T(9,428),节点T(10,471)和节点T(10,472)之间存在回路(即构成了一个“环”)。节点T(a,b)对应待测试数据库的历史执行数据中编号为a的会话(Session)上的第b个历史事务。W(c,d)中c为变量标识,d为写入标识;同一个变量的变量标识相同,针对同一个变量的每次写入对应一个唯一写入标识。
S608、通过目标环中的各条有向边关联的约束组,还原与目标环相关的第二类型有向边。
与目标环相关的第二类型有向边是指:计算机设备通过目标环中的各条有向边关联的约束组,还原与各个约束组相关的第二类型有向边后,得到的有向图中的第二类型有向边。
对于第二类型有向边来说,该第二类型有向边关联的约束组是指该第二类型有向边所属的约束组;例如,假设约束组A包括第二类型有向边1和第二类型有向边2,且目标环中包括第二类型有向边1;则第二类型有向边1和第二类型有向边2关联的约束组为约束组A,计算机设备基于约束组A,在目标环中还原第二类型有向边2。
对于第三类型有向边来说,该第三类型有向边关联的约束组是指作为该第三类型有向边生成依据的第二类型有向边所属的约束组。例如,假设约束组A包括第二类型有向边1和第二类型有向边2,且目标环中的第三类型有向边是以第二类型有向边1作为生成依据生成的(即目标环中的第三类型有向边是基于第二类型有向边1生成的),且目标环中不包含第二类型有向边1和第二类型有向边2;则该第三类型有向边关联的约束组为约束组A,计算机设备基于约束组A,在目标环中还原第二类型有向边1和第二类型有向边2。
进一步地,若目标环中包含第三类型有向边,则计算机设备基于历史执行数据,还原与该第三类型有向边相关的第一类型有向边;其中,第三类型有向边是基于与第三类型有向边相关的第一类型有向边和第二类型有向边生成的,第三类型有向边相关的第一类型有向边和第二类型有向边的起始节点和关联的变量相同;与第三类型有向边相关的第一类型有向边是指作为该第三类型有向边生成依据的第一类型有向边。
图11为本申请实施例提供的另一种目标环的示意图。如图11所示,目标环中,第二类型有向边T(10,472)→[WW]T(9,428)关联的约束组为包含节点T(10,472)和节点T(9,428)的约束组,计算机设备基于该约束组生成第二类型有向边T(9,428)→[WW]T(10,472)。目标环中,第三类型有向边T(9,428)→[RW]T(10,471)关联的约束组为包含节点T(10,471)和节点T(4,172)的约束组。一方面,计算机设备基于该约束组还原第二类型有向边T(10,471)→[WW]T(4,172)和第二类型有向边T(4,172)→[WW]T(10,471)。另一方面,计算机设备基于历史执行数据,还原与第三类型有向边T(9,428)→[RW]T(10,471)相关的第一类型有向边T(4,172)→[WR]T(9,428)(第三类型有向边T(9,428)→[RW]T(10,471)是基于第一类型有向边T(4,172)→[WR]T(9,428)和第二类型有向边T(4,172)→[WW]T(10,471)生成的)。
S609、根据历史执行数据,恢复与目标环中的有向边不存在因果关系的第二类型有向边所属的候选环,得到反例图。
与目标环中的有向边不存在因果关系的第二类型有向边是指还原的与目标环相关的第二类型有向边中,对目标环中的有向边的生成不存在因果关系的第二类型有向边。
请参见图11,图11为计算机设备通过目标环中的各条有向边关联的约束组,还原与目标环相关的第二类型有向边后,得到的有向图。图11中与目标环相关的第二类型有向边为:T(10,472)→[WW]T(9,428),T(9,428)→[WW]T(10,472),T(10,471)→[WW]T(4,172),T(4,172)→[WW]T(10,471)。其中,T(10,472)→[WW]T(9,428)属于目标环(由T(10,472)→[WW]T(9,428),T(9,428)→[RW]T(10,471)和T(10,471)→[SO]T(10,472),构成)。目标环中的第三类型有向边T(9,428)→[RW]T(10,471)是基于第二类型有向边T(4,172)→[WW]T(10,471)和T(4,172)→[WR]T(9,428)生成的。因此,与目标环中的有向边不存在因果关系的第二类型有向边为:T(10,471)→[WW]T(4,172)和T(9,428)→[WW]T(10,472)。
图12为本申请实施例提供的一种反例图的示意图。如图12所示,R(a,b)中a为变量标识,用于指示读取的变量;b为读取标识用于指示读取的变量的来源。计算机设备根据历史执行数据,恢复节点T(10,467),以及T(4,172)→[WR]T(10,467)和T(10,467)→[SO]T(10,471),得到与T(10,471)→[WW]T(4,172)相关的候选环(由T(4,172)→[WR]T(10,467),T(10,467)→[SO]T(10,471)和T(10,471)→[WW]T(4,172)组成)。类似地,计算机设备根据历史执行数据,恢复T(9,423),T(8,383),T(8,380),以及T(10,472)→[WR]T(8,380),T(8,380)→[SO]T(8,383),T(8,383)→[WR]T(9,423),T(9,423)→[SO]T(9,428),得到与T(9,428)→[WW]T(10,472)相关的候选环(由T(10,472)→[WR]T(8,380),T(8,380)→[SO]T(8,383),T(8,383)→[WR]T(9,423),T(9,423)→[SO]T(9,428)和T(9,428)→[WW]T(10,472)组成)。
进一步地,计算机设备将删除反例图中与目标环中的有向边不存在因果关系的第二类型有向边,得到简化后的反例图。可以理解的是,简化后的反例图能够辅助数据库维护人员更加快速准确地了解待测试数据库中存在的问题。
图13为本申请实施例提供的另一种反例图的示意图。如图13所示,计算机设备删除反例图中与目标环中的有向边不存在因果关系的第二类型有向边:T(10,471)→[WW]T(4,172)和T(9,428)→[WW]T(10,472),得到简化后的反例图。
S610、判定待测试数据库测试通过。
在一种实施方式中,计算机设备在基于筛选规则,对有向图中的第二类型有向边完成剪枝后,若每个约束组对应的两条第二类型有向边中均存在唯一一条第二类型有向边未被剪枝,则计算机设备判定待测试数据库测试通过。
可选的,若每个约束组对应的两条第二类型有向边中均存在唯一一条第二类型有向边未被剪枝,则计算机设备判断剪枝后的有向图中是否存在“环”;例如,计算机设备可以对剪枝后的有向图进行逻辑编码,并通过求解器(如MonoSAT求解器)对逻辑编码结果进行检测,以确定剪枝后的有向图中是否存在“环”。若剪枝后的有向图中存在“环”(即回路),则判定待测试数据库未通过测试;若剪枝后的有向图中不存在“环”(即回路),则判定待测试数据库通过测试。
待测试数据通过测试用于表示该待测试数据库的历史执行数据满足快照隔离。在实际应用中,可以通过本申请提供的测试方法对待测试数据库的部分或全部历史执行数据进行测试,若待测试数据库的部分或全部历史执行数据通过测试,则可以以此为依据进一步判定待测试数据库达到了快照隔离级别。
实践表明,本申请提供的测试方法可以用于对历史事务数量达到百万,变量数量达到十亿的数据库进行测试;相较于已有的数据库测试方法来说,申请提供的测试方法运行效率更快,消耗的内存更少,且本申请提供的测试方法受数据库中读写操作比例的影响较小。在数据库中的变量数量增加的情况下,本申请提供的测试方法相较于已有的数据库测试方法来说性能更好。
本申请实施例中,获取基于待测试数据库的历史执行数据生成的有向图,根据历史执行数据中的执行记录,确定有向图中的一个或多个约束组,在有向图中生成各个约束组分别对应的第二类型有向边,基于筛选规则,对有向图中的第二类型有向边进行剪枝处理,根据至少一个约束组对应的第二类型有向边的剪枝结果,确定待测试数据库的测试结果。可见,本申请通过一个或多个约束组对应的剪枝结果,来判断待测试数据库是否通过测试,从而确定待测试数据库的隔离级别是否达到快照隔离级别。此外,通过在待测试数据库测试未通过的情况下输出简化的反例图,可以辅助数据库维护人员更加高效地对待测试数据库进行维护。
上述详细阐述了本申请实施例的方法,为了便于更好地实施本申请实施例的上述方案,相应地,下面提供了本申请实施例的装置。
请参见图14,图14为本申请实施例提供的一种测试装置的结构示意图,图14所示的测试装置可以搭载在计算机设备中,该计算机设备具体可以是终端设备或者服务器。图14所示的测试装置可以用于执行上述图2和图6所描述的方法实施例中的部分或全部功能。请参见图14,该测试装置包括:
获取单元1401,用于获取基于待测试数据库的历史执行数据生成的有向图,历史执行数据包含至少两个历史事务和至少一个执行记录;每个执行记录用于记录两个历史事务之间的事务执行关系;一个历史事务对应有向图中的一个节点;一个执行记录对应有向图中的一条第一类型有向边;
处理单元1402,用于根据历史执行数据中的执行记录,确定有向图中的一个或多个约束组,每个约束组中包含具备约束关系的两个节点;
以及用于在有向图中生成各个约束组分别对应的第二类型有向边;每个约束组对应两条方向不同的第二类型有向边;
以及用于基于筛选规则,对有向图中的第二类型有向边进行剪枝处理;
以及用于根据至少一个约束组对应的第二类型有向边的剪枝结果,确定待测试数据库的测试结果。
在一种实施方式中,处理单元1402用于,根据至少一个约束组对应的第二类型有向边的剪枝结果,确定待测试数据库的测试结果,具体用于:
若有向图中至少存在一个约束组对应的两条第二类型有向边均被剪枝,则判定待测试数据库测试不通过;
若每个约束组对应的两条第二类型有向边中均存在唯一一条第二类型有向边未被剪枝,则判定待测试数据库的历史执行数据通过测试;
其中,待测试数据库测试不通过用于表示待测试数据库的隔离级别未达到快照隔离级别,待测试数据库的历史执行数据通过测试用于表示待测试数据库的历史执行数满足快照隔离。
在一种实施方式中,处理单元1402还用于:
获取反例指示信息,反例指示信息用于指示有向图中未通过测试的目标环,目标环包括至少两条有向边和至少两个历史事务对应的节点;
通过目标环中的各条有向边关联的约束组,还原与目标环相关的第二类型有向边;与目标环相关的每条第二类型有向边的两个顶点中,存在至少一个顶点为目标环中的节点;
根据历史执行数据,恢复与目标环中的有向边不存在因果关系的第二类型有向边所属的候选环,得到反例图。
在一种实施方式中,处理单元1402还用于:
若目标环中包含第三类型有向边,则基于历史执行数据,还原与第三类型有向边相关的第一类型有向边;
其中,第三类型有向边是基于与第三类型有向边相关的第一类型有向边和第二类型有向边生成的,第三类型有向边相关的第一类型有向边和第二类型有向边的起始节点和关联的变量相同。
在一种实施方式中,处理单元1402还用于:
删除反例图中与目标环中的有向边不存在因果关系的第二类型有向边,得到简化后的反例图。
在一种实施方式中,待测试数据库中包括目标变量;执行记录包括读写记录;处理单元1402用于,根据历史执行数据中的执行记录,确定有向图中的一个或多个约束组,具体用于:
若读写记录中包括第一历史事务对目标变量的写入记录和第二历史事务对目标变量的写入记录,则判定第一历史事务对应的节点和第二历史事务对应的节点之间存在一个约束组。
在一种实施方式中,有向图中包含目标约束组,目标约束组对应的第二类型有向边包括第一有向边,目标约束组为有向图中一个或多个约束组中的任一个;执行记录包括会话记录和读写记录;处理单元1402用于,基于筛选规则,对有向图中的第二类型有向边进行剪枝处理,具体用于:
若有向图中存在与第一有向边对应的第二有向边,则在有向图中生成第三类型有向边,得到更新后的有向图;第二有向边与第一有向边的起始节点和关联的变量相同,且第二有向边是基于读写记录生成的第一类型有向边;
若更新后的有向图中存在环,则删除第一有向边和第三类型有向边。
在一种实施方式中,处理单元1402还用于:
若更新后的有向图中不存在环,则保留第一有向边和第三类型有向边。
在一种实施方式中,更新后的有向图中存在从第一节点到第二节点的第三类型有向边,处理单元1402还用于:
若更新后的有向图中存在从第三节点到第一节点的第一类型有向边,则生成从第三节点至第二节点的第三类型有向边,并删除从第一节点到第二节点的第三类型有向边,以及删除从第三节点到第一节点的第一类型有向边,得到简化后的有向图;
若更新后的有向图中存在从第三节点到第一节点的第二类型有向边,则生成从第三节点至第二节点的第三类型有向边,并删除从第一节点到第二节点的第三类型有向边,以及删除从第三节点到第一节点的第二类型有向边,得到简化后的有向图。
在一种实施方式中,处理单元1402用于,获取基于待测试数据库的历史执行数据生成的有向图,具体用于:
获取待测试数据库的历史执行数据;
根据历史执行数据中的历史事务,生成有向图中的节点,一个历史事务对应一个节点;
基于历史执行数据中的执行记录,生成各个执行记录关联的节点间的第一类型有向边,得到待测试数据库的历史执行数据对应的有向图。
根据本申请的一个实施例,图2和图6所示的测试方法所涉及的部分步骤可由图14所示的测试装置中的各个单元来执行。例如,图2中所示的步骤S201可由图14所示的获取单元1401执行,步骤S202-步骤S205可由图14所示的处理单元1402执行;图6中所示的步骤S601和步骤S607可由图14所示的获取单元1401执行,步骤S602-步骤S606和步骤S608-步骤S610可由图14所示的处理单元1402执行。图14所示的测试装置中的各个单元可以分别或全部合并为一个或若干个另外的单元来构成,或者其中的某个(些)单元还可以再拆分为功能上更小的多个单元来构成,这可以实现同样的操作,而不影响本申请的实施例的技术效果的实现。上述单元是基于逻辑功能划分的,在实际应用中,一个单元的功能也可以由多个单元来实现,或者多个单元的功能由一个单元实现。在本申请的其它实施例中,测试装置也可以包括其它单元,在实际应用中,这些功能也可以由其它单元协助实现,并且可以由多个单元协作实现。
根据本申请的另一个实施例,可以通过在包括中央处理单元(CPU)、随机存取存储介质(RAM)、只读存储介质(ROM)等处理元件和存储元件的例如计算机设备的通用计算装置上运行能够执行如图2和图6中所示的相应方法所涉及的各步骤的计算机程序(包括程序代码),来构造如图14中所示的测试装置,以及来实现本申请实施例的测试方法。计算机程序可以记载于例如计算机可读记录介质上,并通过计算机可读记录介质装载于上述计算装置中,并在其中运行。
基于同一发明构思,本申请实施例中提供的测试装置解决问题的原理与有益效果与本申请方法实施例中测试方法解决问题的原理和有益效果相似,可以参见方法的实施的原理和有益效果,为简洁描述,在这里不再赘述。
请参阅图15,图15为本申请实施例提供的一种计算机设备的结构示意图,该计算机设备可以终端设备或者服务器。如图15所示,计算机设备至少包括处理器1501、通信接口1502和存储器1503。其中,处理器1501、通信接口1502和存储器1503可通过总线或其他方式连接。其中,处理器1501(或称中央处理器(Central Processing Unit,CPU))是计算机设备的计算核心以及控制核心,其可以解析计算机设备内的各类指令以及处理计算机设备的各类数据,例如:CPU可以用于解析对象向计算机设备所发出的开关机指令,并控制计算机设备进行开关机操作;再如:CPU可以在计算机设备内部结构之间传输各类交互数据,等等。通信接口1502可选的可以包括标准的有线接口、无线接口(如WI-FI、移动通信接口等),受处理器1501的控制可以用于收发数据;通信接口1502还可以用于计算机设备内部数据的传输以及交互。存储器1503(Memory)是计算机设备中的记忆设备,用于存放程序和数据。可以理解的是,此处的存储器1503既可以包括计算机设备的内置存储器,当然也可以包括计算机设备所支持的扩展存储器。存储器1503提供存储空间,该存储空间存储了计算机设备的操作系统,可包括但不限于:Android系统、iOS系统、Windows Phone系统等等,本申请对此并不作限定。
本申请实施例还提供了一种计算机可读存储介质(Memory),计算机可读存储介质是计算机设备中的记忆设备,用于存放程序和数据。可以理解的是,此处的计算机可读存储介质既可以包括计算机设备中的内置存储介质,当然也可以包括计算机设备所支持的扩展存储介质。计算机可读存储介质提供存储空间,该存储空间存储了计算机设备的处理系统。并且,在该存储空间中还存放了适于被处理器1501加载并执行的计算机程序。需要说明的是,此处的计算机可读存储介质可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器;可选的,还可以是至少一个位于远离前述处理器的计算机可读存储介质。
在一个实施例中,处理器1501通过运行存储器1503中的计算机程序,执行如下操作:
获取基于待测试数据库的历史执行数据生成的有向图,历史执行数据包含至少两个历史事务和至少一个执行记录;每个执行记录用于记录两个历史事务之间的事务执行关系;一个历史事务对应有向图中的一个节点;一个执行记录对应有向图中的一条第一类型有向边;
根据历史执行数据中的执行记录,确定有向图中的一个或多个约束组,每个约束组中包含具备约束关系的两个节点;
在有向图中生成各个约束组分别对应的第二类型有向边;每个约束组对应两条方向不同的第二类型有向边;
基于筛选规则,对有向图中的第二类型有向边进行剪枝处理;
根据至少一个约束组对应的第二类型有向边的剪枝结果,确定待测试数据库的测试结果。
作为一种可选的实施例,处理器1501根据至少一个约束组对应的第二类型有向边的剪枝结果,确定待测试数据库的测试结果的具体实施例为:
若有向图中至少存在一个约束组对应的两条第二类型有向边均被剪枝,则判定待测试数据库测试不通过;
若每个约束组对应的两条第二类型有向边中均存在唯一一条第二类型有向边未被剪枝,则判定待测试数据库的历史执行数据通过测试;
其中,待测试数据库测试不通过用于表示待测试数据库的隔离级别未达到快照隔离级别,待测试数据库的历史执行数据通过测试用于表示待测试数据库的历史执行数满足快照隔离。
作为一种可选的实施例,处理器1501通过运行存储器1503中的计算机程序,还执行如下操作:
获取反例指示信息,反例指示信息用于指示有向图中未通过测试的目标环,目标环包括至少两条有向边和至少两个历史事务对应的节点;
通过目标环中的各条有向边关联的约束组,还原与目标环相关的第二类型有向边;与目标环相关的每条第二类型有向边的两个顶点中,存在至少一个顶点为目标环中的节点;
根据历史执行数据,恢复与目标环中的有向边不存在因果关系的第二类型有向边所属的候选环,得到反例图。
作为一种可选的实施例,处理器1501通过运行存储器1503中的计算机程序,还执行如下操作:
若目标环中包含第三类型有向边,则基于历史执行数据,还原与第三类型有向边相关的第一类型有向边;
其中,第三类型有向边是基于与第三类型有向边相关的第一类型有向边和第二类型有向边生成的,第三类型有向边相关的第一类型有向边和第二类型有向边的起始节点和关联的变量相同。
作为一种可选的实施例,处理器1501通过运行存储器1503中的计算机程序,还执行如下操作:
删除反例图中与目标环中的有向边不存在因果关系的第二类型有向边,得到简化后的反例图。
作为一种可选的实施例,待测试数据库中包括目标变量;执行记录包括读写记录;处理器1501根据历史执行数据中的执行记录,确定有向图中的一个或多个约束组的具体实施例为:
若读写记录中包括第一历史事务对目标变量的写入记录和第二历史事务对目标变量的写入记录,则判定第一历史事务对应的节点和第二历史事务对应的节点之间存在一个约束组。
作为一种可选的实施例,有向图中包含目标约束组,目标约束组对应的第二类型有向边包括第一有向边,目标约束组为有向图中一个或多个约束组中的任一个;执行记录包括会话记录和读写记录;处理器1501基于筛选规则,对有向图中的第二类型有向边进行剪枝处理的具体实施例为:
若有向图中存在与第一有向边对应的第二有向边,则在有向图中生成第三类型有向边,得到更新后的有向图;第二有向边与第一有向边的起始节点和关联的变量相同,且第二有向边是基于读写记录生成的第一类型有向边;
若更新后的有向图中存在环,则删除第一有向边和第三类型有向边。
作为一种可选的实施例,处理器1501通过运行存储器1503中的计算机程序,还执行如下操作:
若更新后的有向图中不存在环,则保留第一有向边和第三类型有向边。
作为一种可选的实施例,更新后的有向图中存在从第一节点到第二节点的第三类型有向边,处理器1501通过运行存储器1503中的计算机程序,还执行如下操作:
若更新后的有向图中存在从第三节点到第一节点的第一类型有向边,则生成从第三节点至第二节点的第三类型有向边,并删除从第一节点到第二节点的第三类型有向边,以及删除从第三节点到第一节点的第一类型有向边,得到简化后的有向图;
若更新后的有向图中存在从第三节点到第一节点的第二类型有向边,则生成从第三节点至第二节点的第三类型有向边,并删除从第一节点到第二节点的第三类型有向边,以及删除从第三节点到第一节点的第二类型有向边,得到简化后的有向图。
作为一种可选的实施例,处理器1501获取基于待测试数据库的历史执行数据生成的有向图的具体实施例为:
获取待测试数据库的历史执行数据;
根据历史执行数据中的历史事务,生成有向图中的节点,一个历史事务对应一个节点;
基于历史执行数据中的执行记录,生成各个执行记录关联的节点间的第一类型有向边,得到待测试数据库的历史执行数据对应的有向图。
基于同一发明构思,本申请实施例中提供的计算机设备解决问题的原理与有益效果与本申请方法实施例中测试方法解决问题的原理和有益效果相似,可以参见方法的实施的原理和有益效果,为简洁描述,在这里不再赘述。
本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,计算机程序适于被处理器加载并执行上述方法实施例的测试方法。
本申请实施例还提供一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述的测试方法。
本申请实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本申请实施例装置中的模块可以根据实际需要进行合并、划分和删减。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,可读存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
以上所揭露的仅为本申请一种较佳实施例而已,当然不能以此来限定本申请之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本申请权利要求所作的等同变化,仍属于申请所涵盖的范围。

Claims (14)

1.一种测试方法,其特征在于,所述方法包括:
获取基于待测试数据库的历史执行数据生成的有向图,所述历史执行数据包含至少两个历史事务和至少一个执行记录;每个执行记录用于记录两个历史事务之间的事务执行关系;一个历史事务对应所述有向图中的一个节点;一个执行记录对应所述有向图中的一条第一类型有向边;
根据所述历史执行数据中的执行记录,确定所述有向图中的一个或多个约束组,每个约束组中包含具备约束关系的两个节点;
在所述有向图中生成各个约束组分别对应的第二类型有向边;每个约束组对应两条方向不同的第二类型有向边;
基于筛选规则,对所述有向图中的第二类型有向边进行剪枝处理;
根据至少一个约束组对应的第二类型有向边的剪枝结果,确定所述待测试数据库的测试结果。
2.如权利要求1所述的方法,其特征在于,所述根据至少一个约束组对应的第二类型有向边的剪枝结果,确定所述待测试数据库的测试结果,包括:
若所述有向图中至少存在一个约束组对应的两条第二类型有向边均被剪枝,则判定所述待测试数据库测试不通过;
若每个约束组对应的两条第二类型有向边中均存在唯一一条第二类型有向边未被剪枝,则判定所述待测试数据库的历史执行数据通过测试;
其中,所述待测试数据库测试不通过用于表示所述待测试数据库的隔离级别未达到快照隔离级别,所述待测试数据库的历史执行数据通过测试用于表示所述待测试数据库的历史执行数满足快照隔离。
3.如权利要求1所述的方法,其特征在于,所述方法还包括:
获取反例指示信息,所述反例指示信息用于指示所述有向图中未通过测试的目标环,所述目标环包括至少两条有向边和至少两个历史事务对应的节点;
通过所述目标环中的各条有向边关联的约束组,还原与所述目标环相关的第二类型有向边;与所述目标环相关的每条第二类型有向边的两个顶点中,存在至少一个顶点为所述目标环中的节点;
根据所述历史执行数据,恢复与所述目标环中的有向边不存在因果关系的第二类型有向边所属的候选环,得到反例图。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:
若所述目标环中包含第三类型有向边,则基于所述历史执行数据,还原与所述第三类型有向边相关的第一类型有向边;
其中,所述第三类型有向边是基于与所述第三类型有向边相关的第一类型有向边和第二类型有向边生成的,所述第三类型有向边相关的第一类型有向边和第二类型有向边的起始节点和关联的变量相同。
5.如权利要求3所述的方法,其特征在于,所述方法还包括:
删除所述反例图中与所述目标环中的有向边不存在因果关系的第二类型有向边,得到简化后的反例图。
6.如权利要求1所述的方法,其特征在于,所述待测试数据库中包括目标变量;所述执行记录包括读写记录;所述根据所述历史执行数据中的执行记录,确定所述有向图中的一个或多个约束组,包括:
若所述读写记录中包括第一历史事务对所述目标变量的写入记录和第二历史事务对所述目标变量的写入记录,则判定所述第一历史事务对应的节点和所述第二历史事务对应的节点之间存在一个约束组。
7.如权利要求1所述的方法,其特征在于,所述有向图中包含目标约束组,所述目标约束组对应的第二类型有向边包括第一有向边,所述目标约束组为所述有向图中一个或多个约束组中的任一个;所述执行记录包括会话记录和读写记录;所述基于筛选规则,对所述有向图中的第二类型有向边进行剪枝处理,包括:
若所述有向图中存在与所述第一有向边对应的第二有向边,则在所述有向图中生成第三类型有向边,得到更新后的有向图;所述第二有向边与所述第一有向边的起始节点和关联的变量相同,且所述第二有向边是基于所述读写记录生成的第一类型有向边;
若所述更新后的有向图中存在环,则删除所述第一有向边和所述第三类型有向边。
8.如权利要求7所述的方法,其特征在于,所述方法还包括:
若所述更新后的有向图中不存在环,则保留所述第一有向边和所述第三类型有向边。
9.如权利要求8所述的方法,其特征在于,所述更新后的有向图中存在从第一节点到第二节点的第三类型有向边,所述方法还包括:
若所述更新后的有向图中存在从第三节点到所述第一节点的第一类型有向边,则生成从所述第三节点至所述第二节点的第三类型有向边,并删除从第一节点到第二节点的第三类型有向边,以及删除从第三节点到所述第一节点的第一类型有向边,得到简化后的有向图;
若所述更新后的有向图中存在从所述第三节点到所述第一节点的第二类型有向边,则生成从所述第三节点至所述第二节点的第三类型有向边,并删除从第一节点到第二节点的第三类型有向边,以及删除从所述第三节点到所述第一节点的第二类型有向边,得到简化后的有向图。
10.如权利要求1所述的方法,其特征在于,所述获取基于待测试数据库的历史执行数据生成的有向图,包括:
获取待测试数据库的历史执行数据;
根据所述历史执行数据中的历史事务,生成有向图中的节点,一个历史事务对应一个节点;
基于所述历史执行数据中的执行记录,生成各个执行记录关联的节点间的第一类型有向边,得到所述待测试数据库的历史执行数据对应的有向图。
11.一种测试装置,其特征在于,所述测试装置包括:
获取单元,用于获取基于待测试数据库的历史执行数据生成的有向图,所述历史执行数据包含至少两个历史事务和至少一个执行记录;每个执行记录用于记录两个历史事务之间的事务执行关系;一个历史事务对应所述有向图中的一个节点;一个执行记录对应所述有向图中的一条第一类型有向边;
处理单元,用于根据所述历史执行数据中的执行记录,确定所述有向图中的一个或多个约束组,每个约束组中包含具备约束关系的两个节点;
以及用于在所述有向图中生成各个约束组分别对应的第二类型有向边;每个约束组对应两条方向不同的第二类型有向边;
以及用于基于筛选规则,对所述有向图中的第二类型有向边进行剪枝处理;
以及用于根据至少一个约束组对应的第二类型有向边的剪枝结果,确定所述待测试数据库的测试结果。
12.一种计算机设备,其特征在于,包括:存储器和处理器;
存储器,所述存储器中存储有计算机程序;
处理器,用于加载所述计算机程序实现如权利要求1-10任一项所述的测试方法。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序适于被处理器加载并执行如权利要求1-10任一项所述的测试方法。
14.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,所述计算机程序适于被处理器加载并执行如权利要求1-10任一项所述的测试方法。
CN202310371041.0A 2023-04-04 2023-04-04 一种测试方法、装置、设备、存储介质及产品 Pending CN116401165A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310371041.0A CN116401165A (zh) 2023-04-04 2023-04-04 一种测试方法、装置、设备、存储介质及产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310371041.0A CN116401165A (zh) 2023-04-04 2023-04-04 一种测试方法、装置、设备、存储介质及产品

Publications (1)

Publication Number Publication Date
CN116401165A true CN116401165A (zh) 2023-07-07

Family

ID=87015566

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310371041.0A Pending CN116401165A (zh) 2023-04-04 2023-04-04 一种测试方法、装置、设备、存储介质及产品

Country Status (1)

Country Link
CN (1) CN116401165A (zh)

Similar Documents

Publication Publication Date Title
CN109034993A (zh) 对账方法、设备、系统及计算机可读存储介质
CN104252481A (zh) 主从数据库一致性的动态校验方法和装置
CN110781231A (zh) 基于数据库的批量导入方法、装置、设备及存储介质
CN108959059A (zh) 一种测试方法以及测试平台
CN114218568B (zh) 一种应用于云服务的大数据攻击处理方法及系统
CN114139209B (zh) 一种应用于业务用户大数据的信息防窃取方法及系统
CN110597655B (zh) 迁移和基于纠删码的重构相耦合快速预知修复方法及装置
CN113238924B (zh) 分布式图数据库系统中的混沌工程实现方法和系统
CN113157315A (zh) 一种软件不同版本的差异信息识别方法、装置、设备及介质
CN112287400A (zh) 超级账本中的交易排序方法、装置和计算机设备
CN117290236A (zh) 软件测试方法、装置、计算机设备及计算机可读存储介质
CN112860412B (zh) 业务数据处理方法、装置、电子设备及存储介质
CN111625330B (zh) 跨线程的任务处理方法、装置、服务器及存储介质
CN110177006B (zh) 基于接口预测模型的节点测试方法及装置
CN116560629A (zh) 一种数据传输对象的序列化方法、装置、介质和设备
CN116401165A (zh) 一种测试方法、装置、设备、存储介质及产品
CN116361153A (zh) 固件代码的测试方法、装置、电子设备、存储介质
CN114116681B (zh) 数据迁移方法及装置
US11074294B2 (en) System and method for Directed Acyclic Graph (DAG) encoding into hash linked blocks
CN106776296A (zh) 覆盖率检测的启动方法、装置和启动设备
CN114722261A (zh) 一种资源的处理方法、装置、电子设备及存储介质
CN112948480B (zh) 数据抽取方法、装置、电子设备及存储介质
CN109101187B (zh) 一种进行数据重构的方法和装置
CN118228716A (zh) 文件对比方法、装置、计算机设备和存储介质
CN117312597A (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