CN116302971A - 一种针对可编程数据平面可扩展的测试生成方法 - Google Patents
一种针对可编程数据平面可扩展的测试生成方法 Download PDFInfo
- Publication number
- CN116302971A CN116302971A CN202310114904.6A CN202310114904A CN116302971A CN 116302971 A CN116302971 A CN 116302971A CN 202310114904 A CN202310114904 A CN 202310114904A CN 116302971 A CN116302971 A CN 116302971A
- Authority
- CN
- China
- Prior art keywords
- test
- test message
- control flow
- file
- flow graph
- 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/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
- G06F40/186—Templates
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供一种针对可编程数据平面可扩展的测试生成方法。所述方法包括:获取并解析目标文件数据,获得对应的控制流图;根据所述控制流图,生成全覆盖的测试报文模板;通过对所述测试报文模板中的无关变量进行赋值,获得对应的测试报文数据;将所述测试报文数据在可编程数据平面设备上进行执行,获得对应的测试结果。旨在提高对程序测试的可扩展性,快速实现对大规模程序的分支全覆盖。
Description
技术领域
本发明涉及程序测试技术领域,特别是涉及一种针对可编程数据平面可扩展的测试生成方法。
背景技术
随着数据中心、云网络的发展,为了减少防火墙、负载均衡器等网络功能对集群计算资源的消耗,可编程数据平面逐渐在数据中心中普及。可编程数据平面能够帮助开发者快速部署新功能,能够免除昂贵而复杂的芯片流片过程。使用可编程数据平面的网络功能可以达到高速度、低延迟、高可用的特点。编程可编程数据平面的过程中无法避免错误,这些错误包括代码逻辑错误、编译器错误和硬件芯片错误。一部分原因是开发者经验不足、考虑不周。另一部分原因来自新兴的可编程数据平面设备技术不够成熟,编译器、硬件芯片存在一定缺陷。生产级网络应用中的错误会产生严重的伤害,网络应用的性能表现、功能正确性和程序可靠性会受到错误的破坏。所以,寻找并排除可编程数据平面中的错误重要而不可或缺的。
然而,生产级别数据平面程序组合了很多不同的匹配-执行以实现多种功能,它们具有非常复杂的控制流图。最近的程序验证工作取得了一定成就,但是程序验证在原理上被限制在检验程序代码错误,不能发现编译器错误和硬件错误。除了程序验证以外,最近的程序测试工作需要开发者手动编写测试样例,复杂而低效,这些手动的测试样例对程序的覆盖率低。
将测试应用到大规模程序的过程中的可扩展性成了核心挑战。全面地测试一个程序需要生成一组能覆盖每一个执行路径的测试用例。覆盖每一个执行路径是非常困难的,因为执行路径数量随着程序的大小呈指数级增长,这在软件测试的文献中被称为路径爆炸问题。生产级网络中使用的现代数据平面程序跨越了多个流水线,甚至是多个交换机。这样的复杂性超过了传统测试技术的能力范围。现有的测试可编程数据平面的工作,由于可扩展性不够强,无法对路径爆炸的大型数据平面程序进行测试。
发明内容
有鉴于此,本发明实施例提供一种针对可编程数据平面可扩展的测试生成方法,旨在提高对程序测试的可扩展性,快速实现对大规模程序的分支全覆盖。
本发明实施例第一方面提供一种针对可编程数据平面可扩展的测试生成方法,所述方法包括:
获取并解析目标文件数据,获得对应的控制流图;
根据所述控制流图,生成全覆盖的测试报文模板;
通过对所述测试报文模板中的无关变量进行赋值,获得对应的测试报文数据;
将所述测试报文数据在可编程数据平面设备上进行执行,获得对应的测试结果。
可选地,所述目标文件数据至少包括:P4代码文件、表项配置文件和测试意图文件。
可选地,所述获取并解析目标文件数据,获得对应的控制流图,包括:
获取待测的P4代码文件和所述P4代码文件对应的表项配置文件,以及测试意图文件;
通过解析所述P4代码文件和所述表项配置文件,构建初始控制流图;
通过解析所述测试意图文件,在所述初始控制流图中生成对应的各个节点,获得对应的控制流图。
可选地,所述P4代码文件包括编译器对P4代码文件进行编译获得的中间表达文件。
可选地,所述根据所述控制流图,生成全覆盖的测试报文模板,包括:
通过目标优先搜索对所述控制流图进行程序执行路径搜索,获得所述控制流图中程序执行的所有路径;
通过符号执行技术对所述所有路径进行可满足性判断,获得对应的可满足性判断结果;
根据所述可满足性判断结果生成全覆盖的测试报文模板。
可选地,所述根据所述可满足性判断结果生成全覆盖的测试报文模板,包括:
根据所述可满足性判断结果,确定所述所有路径中的合法执行路径,并更新维护的参数栈和条件栈;
根据维护的参数栈和条件栈生成全覆盖的测试报文模板。
可选地,所述将所述测试报文数据在可编程数据平面设备上进行执行,获得对应的测试结果,包括:
确定不同路径的测试报文数据;
通过在可编程数据平面设备对确定的不同路径的测试报文数据进行同时测试,获得对应的测试结果。
可选地,所述确定不同路径的测试报文数据,包括:
确定测试报文数据主魔数和从属魔数;
在多个测试报文数据的主魔数存在,以及所述多个测试报文数据的从属模数不同时,确定所述多个测试报文数据为不同路径的测试报文数据。
本发明实施例包括以下优点:
本发明实施例提供的一种针对可编程数据平面可扩展的测试生成方法,首先获取并解析目标文件数据,获得对应的控制流图。根据获得的控制流图,生成全覆盖的测试报文模板。通过对所述测试报文模板中的无关变量进行赋值,得到对应的测试报文数据。将所述测试报文数据在可编程数据平面设备上进行执行,获得对应的测试结果。由此可有效提高对程序测试的可扩展性,快速实现对大规模程序的分支全覆盖。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例示出的一种针对可编程数据平面可扩展的测试生成方法的流程图;
图2是本发明一实施例示出的一种针对可编程数据平面可扩展的测试生成方法中的测试生成框架的伪代码示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明中,图1是本发明一实施例示出的一种针对可编程数据平面可扩展的测试生成方法的流程图。参照图1,本发明提供的针对可编程数据平面可扩展的测试生成方法,包括:
步骤S11:获取并解析目标文件数据,获得对应的控制流图;
步骤S12:根据所述控制流图,生成全覆盖的测试报文模板;
步骤S13:通过对所述测试报文模板中的无关变量进行赋值,获得对应的测试报文数据;
步骤S14:将所述测试报文数据在可编程数据平面设备上进行执行,获得对应的测试结果。
在本发明中,所述目标文件数据至少包括:P4代码文件、表项配置文件和测试意图文件。
在本发明的实施例中,通过测试前端获取并解析目标文件数据获得对应的控制流图。具体地,测试前端承接用户输入的目标文件数据,并解析目标文件数据,将其结构化、抽象化为控制流图。其中,所述目标文件数据至少包括:P4代码文件、表项配置文件与测试意图文件。P4代码文件是待测P4程序的源代码;表项配置文件为所述P4代码文件对应的配置文件,本发明使用JSON格式的表项配置文件,该表项配置文件可以从交换机控制平面直接提取;测试意图文件包括待测报文类型和确定测试是否成功的判断规则。
在本发明的实施例中,解析测试意图文件目的是确定用户想要测试的测试内容,以及对该测试内容进行测试的测试结果是否正确的判断规则,该测试意图文件由技术人员根据自身测试意图进行创建。具体的,测试意图文件包含待测P4程序名、表项文件名、多交换机测试时交换机拓扑关系、测试输入条件和输出判断条件。其中,测试输入条件表征的即为用户的测试意图。例如,用户想要对TCP类型的报文进行测试时,测试输入条件为TCP类型,这时本发明将只生成TCP类型的测试报文,测试前端会将该测试输入条件加入控制流图,测试生成模块会使用该测试输入条件化简测试生成过程,以加快测试进度。输出判断条件表征输出测试报文数据应该满足的条件,测试驱动会利用该输出判断条件进行检查,以判断该测试报文数据进行测试后输出的结果是否正确。如,开发者想要测试SSH协议的报文是否成功被过滤,则测试输入条件为报文类型为SSH(即目标端口为22),测试输出条件为报文被过滤。
在本发明的实施例中,测试前端通过解析P4代码文件、表项配置文件与测试意图文件,将P4代码文件、表项配置文件与测试意图文件进行结构化、抽象化为计算机可读的控制流图。具体地,本发明的控制流图由两种类型的节点和多个有向边组成。节点类型分为断言节点和执行节点,断言节点代表代码分支条件或表项选择(如程序中的if条件语句对应两条代码分支),执行节点表示变量赋值(如程序中的对参数赋值的语句),也可以表示解析器和发射器的拆包、装包过程。有向边表示控制流的执行方向,从A指向B的有向边表示控制流图中A在B之前执行。
在本发明的实施例中,在基于目标文件数据获得对应的控制流图后,根据所述控制流图,针对控制流图生成全路径覆盖的测试集,也就是生成全覆盖的测试报文模板。
在本发明的实施例中,由于控制流图是基于目标文件数据生成的,而目标文件数据中的测试意图文件中包括用户对程序的测试意图,也就是需要对程序中的哪些执行路径进行测试。因此,本发明根据控制流图生成的测试报文模板中只对影响程序的执行路径产生影响的有关变量进行赋值,以使得获得的测试报文模板能够按照用户意图进行测试工作的执行,也就是沿着用户想要测试的程序执行路径进行测试。而实际测试报文模板中还有很多其他不会对程序的执行路径造成影响的无关变量,因此,本发明为使得该测试报文模板能够被正确执行,本发明在获得测试报文模板后,通过对测试报文模板中的无关变量进行赋值,获得对应的测试报文数据,此时的测试报文数据即是可以正确执行的测试用例。
在本发明的实施例中,在获得测试报文数据后,通过可编程数据平面设备执行该测试报文数据,获得对应的测试结果。
本发明实施例提供的一种针对可编程数据平面可扩展的测试生成方法,首先获取并解析目标文件数据,获得对应的控制流图。根据获得的控制流图,生成全覆盖的测试报文模板。通过对所述测试报文模板中的无关变量进行赋值,得到对应的测试报文数据。将所述测试报文数据在可编程数据平面设备上进行执行,获得对应的测试结果。由此可有效提高对程序测试的可扩展性,快速实现对大规模程序中用户所需测试的分支进行全覆盖。
在本发明中,所述P4代码文件包括编译器对P4代码文件进行编译获得的中间表达文件。
在本发明的实施例中,本发明为提高对程序测试的可扩展效率,本发明通过解析的P4代码文件为P4编译器对P4代码生成的中间表达,格式为JSON,可以使用高性能的JSON解析器进行解析。这样的优势是不需要编写复杂的P4代码解析程序,并且不需要寻找并解析复杂的P4库函数。例如,P4语义中的“固有元数据”由库文件定义,不同版本编译器的库文件并不相同。在本发明解析使用编译器中间表达形式后,不再需要关注库文件的具体情况,这是因为库文件已经被编译器自动找到。此外,本发明解析P4编译器对P4代码生成的中间表达的另一优势是编译器前端会对P4代码进行部分优化,编译器中间表达包含这部分优化的结果,因此使用P4编译器对P4代码生成的中间表达进行前端解析与硬件中的实际实现将更为相近,能够进行更准确的测试。应当理解的是,所述P4代码文件也可以是原始的P4代码。
在本发明中,所述获取并解析目标文件数据,获得对应的控制流图,包括:获取待测的P4代码文件和所述P4代码文件对应的表项配置文件,以及测试意图文件;通过解析所述P4代码文件和所述表项配置文件,构建初始控制流图;通过解析所述测试意图文件,在所述初始控制流图中生成对应的各个节点,获得对应的控制流图。
在本发明的实施例中,步骤S11:获取并解析目标文件数据,获得对应的控制流图的一种实施方式为首先获取待测的P4代码文件和该P4代码文件对应的表项配置文件以及测试意图文件。然后通过解析P4代码文件和该P4代码文件对应的表项配置文件,构建初始控制流图,该控制流图包含该P4代码文件的整体结构,进一步通过解析用户构建的测试意图文件,在该初始控制流图中生成测试意图所对应的各个节点。
在本发明的实施例中,控制流图G包括节点集合V和入口节点v0∈V。每个节点v都有0或1或多个后继节点,记录为succ(v)。每个节点各自对应着一条命令stmt(v)。每一条命令或操作一系列的头变量f i e l d_i d,代表测试报文数据的一个特定的切片区域。此外,还有一个特殊的变量被用来指定测试报文数据的报文头序列。控制流图G的节点可以分成两类,断言节点和执行节点。断言节点表示一条对报文头的限制,例如对I Pv4报文类型的限制对应着etherType==0x0800。断言节点对应于控制块的分支语句(例如i f-e l se语句)和P4程序中匹配-执行表的匹配部分。执行节点表示对于报文头的一条操作,例如将目的I P设定为192.168.0.1对应着dst I P←192.168.0.1。执行节点对应着P4程序中匹配执行表的执行部分。
在本发明中,所述根据所述控制流图,生成全覆盖的测试报文模板,包括:通过目标优先搜索对所述控制流图进行程序执行路径搜索,获得所述控制流图中程序执行的所有路径;通过符号执行技术对所述所有路径进行可满足性判断,获得对应的可满足性判断结果;根据所述可满足性判断结果生成全覆盖的测试报文模板。
在本发明的实施例中,步骤S12根据所述控制流图,生成全覆盖的测试报文模板的一种实施方式为首先通过目标优先搜索对所述控制流图进行程序执行路径搜索,以获得所述控制流图中的程序执行的所有路径。在得到控制流图中的所有程序执行路径后,由于该控制流图是基于测试意图文件生成的,其中包括了用户想要测试的程序执行路径。因此在通过目标优先搜索得到控制流图中程序执行的所有路径,并在搜索过程中通过符号执行技术实时对得到的路径进行可满足性判断,得到可满足性判断结果。所述可满足性判断结果表征的是该所有路径中用户想要测试的路径,也就是可以执行得通的程序执行路径。在得到可满足性判断结果中,基于该可满足性判断结果生成覆盖所有用户想要测试的程序执行路径的测试报文模板,所述测试报文模板中包括报文类型、报文各域取值等信息。
在本发明的实施例中,通过使用目标优先搜索和符号执行技术遍历控制流图,其核心在于列举控制流图中所有可能的路径,对于每条路径,本发明使用符号值评估其执行效果,并检查所有限制条件的组合是否可满足,即该路径是否有效。此后,本发明生成相应的测试样例,也就是测试报文模板,根据测试样例生成沿每个合法路径执行的输入数据包。本发明使用的目标优先搜索的方法枚举控制流图中所有的可能路径,其中,所述通过目标优先搜索包括深度优先搜索、广度优先搜索等。
在本发明中,所述根据所述可满足性判断结果生成全覆盖的测试报文模板,包括:根据所述可满足性判断结果,确定所述所有路径中的合法执行路径,并更新维护的参数栈和条件栈;根据维护的参数栈和条件栈生成全覆盖的测试报文模板。
在本发明的实施例中,本发明通过目标优先搜索遍历控制流图,获取所有可能的程序执行路径。在搜索路径的过程中,本发明通过符号执行技术收集各个程序执行路径的语义,然后检查程序执行路径的可满足性。在沿着可能的程序执行路径的符号执行过程中,本发明维护两个栈,即参数栈V和条件栈C。V将每个报文头映射为具体数值或符号算术表达式,而C栈的元素是布尔表达式,代表对符号变量的约束。[[V]]a表示用V的变量定义替换表达式a中的符号变量而得到的新表达式。本发明通过更新参数栈V的方式保存变量的最新值。对于断言节点的表达式,通过累计条件栈C中记录的约束条件。本发明通过SMT求解器(例如Z3)求解路径约束条件的方式,对路径进行合法性检查。例如dstIP==127.*.*,该表达式表征所有满足此前缀的输入将会沿此路径进行执行。本发明使用提前终结技术对路径剪枝并缩小搜索空间,例如,当之前的断言约束条件限定报文类型为IPv4时,这样之后的断言节点hdr.ipv6.isValid()将永远不会满足SMT的可行性检查,因此在路径前缀已经不合法后将终止枚举后续路径。如图2所示,图2示出了带有提前终结的使用目标优先搜索的基础测试生成框架的伪代码。根据节点类型,断言节点修改条件栈(如图2中的第2、3行),执行节点修改参数栈(如图2中的第11、12行)。当搜索到达控制流图的叶子结点时,生成相应的测试样例(如图2中的第5、6、13、14行)。否则,在当前节点的儿子节点上继续进行路径搜索(如图2中的第7-9行、第15-17行)。此外,通过在目标优先搜索过程中,于每个断言节点处使用SMT求解器检查可满足性的方法,本发明可实现提前终结并对搜索空间进行剪枝(如图2中的第4行)。最后,恢复两种类型栈完成递归的回溯(如图2中的第10、18行)。现代SMT求解器支持push、pop操作,能够重复利用之前求解的中间结果提高求解效率。本发明在断言节点处push一个附加的约束条件,在回溯的时候pop该约束条件,以满足现在SMT求解器的要求。
在本发明中,所述将所述测试报文数据在可编程数据平面设备上进行执行,获得对应的测试结果,包括:确定不同路径的测试报文数据;通过在可编程数据平面设备对确定的不同路径的测试报文数据进行同时测试,获得对应的测试结果。
在本发明的实施例中,本发明为提高测试速度,本发明的步骤S14:将所述测试报文数据在可编程数据平面设备上进行执行,获得对应的测试结果的一种实施方式为确定不同路径的测试报文数据,通过可编程数据平面设备对确定的不同路径的测试报文数据进行同时测试获得对应的测试结果,以此提高测试速度。其中,测试结果包括测试成功与失败的报文类型、经过的程序执行路径、错误原因等信息。
在本发明中,所述确定不同路径的测试报文数据,包括:确定测试报文数据主魔数和从属魔数;在多个测试报文数据的主魔数存在,以及所述多个测试报文数据的从属模数不同时,确定所述多个测试报文数据为不同路径的测试报文数据。
在本发明的实施例中,测试报文数据内置两种魔数,包括主魔数和从属魔数。主魔数用于确定测试报文数据是否为待测的测试报文数据。从属魔数用于确定测试报文数据的测试内容,以区分多种测试报文数据是否为相同测试路径的测试报文数据,具体地,从属魔数为主魔数后的负载部分,将包含测试报文模板的编号。具体地,确定各个测试报文数据各自的主魔数和各自的从属魔数;在多个测试报文数据的主魔数存在,以及所述多个测试报文数据的从属模数均不同时,确定所述多个测试报文数据为不同路径的测试报文数据。
在本发明的实施例中,本发明所提供的一种针对可编程数据平面可扩展的测试生成方法所实现的系统包括4部分,包括测试前端、控制流图、测试生成和测试驱动。
测试前端用于承接用户的输入,用于解析P4代码文件、表项配置文件和测试意图文件,并将其结构化、抽象化为计算机可读的控制流图。控制流图则是测试前端的产物,具体而言,本发明的控制流图包括两种类型的节点和多个有向边组成。节点分为断言节点和执行节点,断言节点代表代码分支条件或表项选择,执行节点表示变量赋值,也可以表示解析器和发射器的拆包、装包过程。有向边表示控制流的方向,从A指向B的有向边表示控制流图中A在B之前执行。
测试生成用于基于控制流图生成100%路径覆盖率的测试报文模板。输入是控制流图,输出是测试报文模板。测试生成通过使用深度优先搜索和符号执行技术遍历控制流图,使用符号执行的技术判断路径的可满足性。核心思想为列举控制流图中所有可能的路径。对于每条路径,通过符号值评估其执行效果,并检查所有限制条件的组合是否可满足,即该路径是否有效。此后,生成相应的测试报文模板,根据测试报文模板生成沿每个合法路径执行的输入数据包。
测试驱动用于基于测试报文模板生成对应的测试报文数据,将该测试报文数据配置在可编程数据平面设备上,接收输出报文并判断是否满足测试意图。测试报文模板由测试生成部分产生,包括报文类型、报文各域取值等信息。同时,还有不属于测试报文数据的网络包到达测试平台的交换机(例如SSH控制报文)。此外,由于测试报文数据有不同的执行路径,可能出现乱序的现象。因此,需要标记出报文是否属于测试所用的数据包,还需要标记测试报文数据对应哪一条测试路径。因此,本发明使用主魔数和从属魔数的方法进行解决,通过主魔数确定测试报文数据是否属于当前需要测试的程序,通过从属魔数也就是主魔数后的负载部分的编号确定测试报文数据的执行顺序。所以,测试驱动在查询到测试报文数据对应的路径后,需要与该路径的输入报文进行比较和检查,最终得到其是否成功的结论。在完成全部测试任务后,生成测试结果。此测试结果中包括每一条路径的测试报文数据是否成功,也包括每一个测试报文经过了哪些执行路径和表项。测试结果也标注了失败的报文的详细信息,并计算出成功率等信息,帮助开发者定位和解决错误。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种针对可编程数据平面可扩展的测试生成方法,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (8)
1.一种针对可编程数据平面可扩展的测试生成方法,其特征在于,所述方法包括:
获取并解析目标文件数据,获得对应的控制流图;
根据所述控制流图,生成全覆盖的测试报文模板;
通过对所述测试报文模板中的无关变量进行赋值,获得对应的测试报文数据;
将所述测试报文数据在可编程数据平面设备上进行执行,获得对应的测试结果。
2.根据权利要求1所述针对可编程数据平面可扩展的测试生成方法,其特征在于,所述目标文件数据至少包括:P4代码文件、表项配置文件和测试意图文件。
3.根据权利要求2所述针对可编程数据平面可扩展的测试生成方法,其特征在于,所述获取并解析目标文件数据,获得对应的控制流图,包括:
获取待测的P4代码文件和所述P4代码文件对应的表项配置文件,以及测试意图文件;
通过解析所述P4代码文件和所述表项配置文件,构建初始控制流图;
通过解析所述测试意图文件,在所述初始控制流图中生成对应的各个节点,获得对应的控制流图。
4.根据权利要求2所述针对可编程数据平面可扩展的测试生成方法,其特征在于,所述P4代码文件包括编译器对P4代码文件进行编译获得的中间表达文件。
5.根据权利要求2所述针对可编程数据平面可扩展的测试生成方法,其特征在于,所述根据所述控制流图,生成全覆盖的测试报文模板,包括:
通过目标优先搜索对所述控制流图进行程序执行路径搜索,获得所述控制流图中程序执行的所有路径;
通过符号执行技术对所述所有路径进行可满足性判断,获得对应的可满足性判断结果;
根据所述可满足性判断结果生成全覆盖的测试报文模板。
6.根据权利要求5所述针对可编程数据平面可扩展的测试生成方法,其特征在于,所述根据所述可满足性判断结果生成全覆盖的测试报文模板,包括:
根据所述可满足性判断结果,确定所述所有路径中的合法执行路径,并更新维护的参数栈和条件栈;
根据维护的参数栈和条件栈生成全覆盖的测试报文模板。
7.根据权利要求2所述针对可编程数据平面可扩展的测试生成方法,其特征在于,所述将所述测试报文数据在可编程数据平面设备上进行执行,获得对应的测试结果,包括:
确定不同路径的测试报文数据;
通过在可编程数据平面设备对确定的不同路径的测试报文数据进行同时测试,获得对应的测试结果。
8.根据权利要求7所述针对可编程数据平面可扩展的测试生成方法,其特征在于,所述确定不同路径的测试报文数据,包括:
确定测试报文数据主魔数和从属魔数;
在多个测试报文数据的主魔数存在,以及所述多个测试报文数据的从属模数不同时,确定所述多个测试报文数据为不同路径的测试报文数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310114904.6A CN116302971A (zh) | 2023-02-07 | 2023-02-07 | 一种针对可编程数据平面可扩展的测试生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310114904.6A CN116302971A (zh) | 2023-02-07 | 2023-02-07 | 一种针对可编程数据平面可扩展的测试生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116302971A true CN116302971A (zh) | 2023-06-23 |
Family
ID=86823171
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310114904.6A Pending CN116302971A (zh) | 2023-02-07 | 2023-02-07 | 一种针对可编程数据平面可扩展的测试生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116302971A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116737130A (zh) * | 2023-08-15 | 2023-09-12 | 之江实验室 | 面向模态中间表示的编译方法、系统、设备和存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108234339A (zh) * | 2017-12-07 | 2018-06-29 | 清华大学 | 可编程数据平面的报文转发方法 |
WO2019223247A1 (zh) * | 2018-05-23 | 2019-11-28 | 华南理工大学 | 基于路径覆盖测试用例自动生成的单元测试方法 |
CN110674027A (zh) * | 2019-08-16 | 2020-01-10 | 华东师范大学 | 面向p4编程语言的sdn数据平面软件一致性测试系统及方法 |
CN110958157A (zh) * | 2019-11-18 | 2020-04-03 | 清华大学 | 一种网络测试方法、系统、存储介质及电子设备 |
CN112988601A (zh) * | 2021-04-29 | 2021-06-18 | 中国工商银行股份有限公司 | 测试脚本开发方法及装置 |
CN114422385A (zh) * | 2022-03-28 | 2022-04-29 | 阿里云计算有限公司 | 网络系统测试用例的生成方法及系统 |
CN114896207A (zh) * | 2022-03-27 | 2022-08-12 | 杭州迪普科技股份有限公司 | 检索pcapng数据包文件的方法和装置 |
CN115052053A (zh) * | 2022-07-27 | 2022-09-13 | 中国工商银行股份有限公司 | 用于银行系统测试的报文处理方法及模拟器 |
CN115118617A (zh) * | 2022-05-26 | 2022-09-27 | 中国科学院计算技术研究所 | 一种基于p4可编程交换机的意图驱动网络测量方法及系统 |
-
2023
- 2023-02-07 CN CN202310114904.6A patent/CN116302971A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108234339A (zh) * | 2017-12-07 | 2018-06-29 | 清华大学 | 可编程数据平面的报文转发方法 |
WO2019223247A1 (zh) * | 2018-05-23 | 2019-11-28 | 华南理工大学 | 基于路径覆盖测试用例自动生成的单元测试方法 |
CN110674027A (zh) * | 2019-08-16 | 2020-01-10 | 华东师范大学 | 面向p4编程语言的sdn数据平面软件一致性测试系统及方法 |
CN110958157A (zh) * | 2019-11-18 | 2020-04-03 | 清华大学 | 一种网络测试方法、系统、存储介质及电子设备 |
CN112988601A (zh) * | 2021-04-29 | 2021-06-18 | 中国工商银行股份有限公司 | 测试脚本开发方法及装置 |
CN114896207A (zh) * | 2022-03-27 | 2022-08-12 | 杭州迪普科技股份有限公司 | 检索pcapng数据包文件的方法和装置 |
CN114422385A (zh) * | 2022-03-28 | 2022-04-29 | 阿里云计算有限公司 | 网络系统测试用例的生成方法及系统 |
CN115118617A (zh) * | 2022-05-26 | 2022-09-27 | 中国科学院计算技术研究所 | 一种基于p4可编程交换机的意图驱动网络测量方法及系统 |
CN115052053A (zh) * | 2022-07-27 | 2022-09-13 | 中国工商银行股份有限公司 | 用于银行系统测试的报文处理方法及模拟器 |
Non-Patent Citations (1)
Title |
---|
NAIQIAN ZHENG 等: "Meissa: scalable network testing for programmable data planes", SIGCOMM \'22: PROCEEDINGS OF THE ACM SIGCOMM 2022 CONFERENCE, pages 350 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116737130A (zh) * | 2023-08-15 | 2023-09-12 | 之江实验室 | 面向模态中间表示的编译方法、系统、设备和存储介质 |
CN116737130B (zh) * | 2023-08-15 | 2023-11-28 | 之江实验室 | 面向模态中间表示的编译方法、系统、设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Hauser et al. | A survey on data plane programming with p4: Fundamentals, advances, and applied research | |
US10372594B2 (en) | Method and device for retrieving test case based on code coverage | |
Beschastnikh et al. | Leveraging existing instrumentation to automatically infer invariant-constrained models | |
US10185650B1 (en) | Testing service with control testing | |
CN103198009B (zh) | 一种通用测试方法、系统及相应装置 | |
US8561035B2 (en) | Method and system to discover possible program variable values by connecting program value extraction with external data sources | |
US20070266137A1 (en) | Method and apparatus for automated testing of multiple device platforms through a command line interface | |
US20180203844A1 (en) | Detection of meaningful changes in content | |
EP2948851A1 (en) | Method and apparatus for testing browser compatibility | |
US20070263773A1 (en) | Methods and apparatus for automated testing of a device through a command line interface | |
US20140351801A1 (en) | Formal verification apparatus and method for software-defined networking | |
CN108536489B (zh) | 匹配资源环境的方法、装置和计算机可读存储介质 | |
CN111694746A (zh) | 面向编译型语言AS3的Flash缺陷模糊测评工具 | |
CN113572726B (zh) | 一种多模态网络控制-数据平面一致性校验方法及装置 | |
CN116302971A (zh) | 一种针对可编程数据平面可扩展的测试生成方法 | |
Yao et al. | Formal modeling and systematic black-box testing of sdn data plane | |
US10733075B2 (en) | Data-driven synthesis of fix patterns | |
CN111813675A (zh) | Ssa结构解析方法、装置、电子设备和存储介质 | |
CN111580821B (zh) | 脚本绑定方法、装置、电子设备及计算机可读存储介质 | |
CN117632710A (zh) | 测试代码的生成方法、装置、设备及存储介质 | |
JP2021002326A (ja) | ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化 | |
CN111309301B (zh) | 程序语言转换方法、装置和转换设备 | |
CN103559127A (zh) | 一种缺陷处理方法及缺陷处理器 | |
Anderson et al. | Supporting analysis of SQL queries in PHP AiR | |
US7506287B2 (en) | Method, system, and program product for pre-compile processing of hardware design language (HDL) source files |
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 |