CN116361153A - 固件代码的测试方法、装置、电子设备、存储介质 - Google Patents
固件代码的测试方法、装置、电子设备、存储介质 Download PDFInfo
- Publication number
- CN116361153A CN116361153A CN202310180017.9A CN202310180017A CN116361153A CN 116361153 A CN116361153 A CN 116361153A CN 202310180017 A CN202310180017 A CN 202310180017A CN 116361153 A CN116361153 A CN 116361153A
- Authority
- CN
- China
- Prior art keywords
- test
- node
- data
- frame
- test data
- 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
- 238000012360 testing method Methods 0.000 title claims abstract description 875
- 238000000034 method Methods 0.000 title claims abstract description 101
- 238000012545 processing Methods 0.000 claims abstract description 300
- 238000013479 data entry Methods 0.000 claims abstract description 47
- 230000006870 function Effects 0.000 claims description 139
- 238000004590 computer program Methods 0.000 claims description 25
- 230000035772 mutation Effects 0.000 claims description 24
- 230000004044 response Effects 0.000 description 28
- 230000008569 process Effects 0.000 description 27
- 230000015556 catabolic process Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 9
- 108010016634 Seed Storage Proteins Proteins 0.000 description 8
- 238000004458 analytical method Methods 0.000 description 8
- 230000006854 communication Effects 0.000 description 8
- 125000004122 cyclic group Chemical group 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 238000010998 test method Methods 0.000 description 5
- 230000002159 abnormal effect Effects 0.000 description 4
- 238000003780 insertion Methods 0.000 description 4
- 230000037431 insertion Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 235000000332 black box Nutrition 0.000 description 3
- 238000012217 deletion Methods 0.000 description 3
- 230000037430 deletion Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000002829 reductive effect Effects 0.000 description 3
- 230000002441 reversible effect Effects 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000009191 jumping Effects 0.000 description 2
- 230000000670 limiting effect Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 238000013522 software testing Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005206 flow analysis Methods 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 238000002789 length control Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000004092 self-diagnosis Methods 0.000 description 1
- 238000011269 treatment regimen Methods 0.000 description 1
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N7/00—Computing arrangements based on specific mathematical models
- G06N7/02—Computing arrangements based on specific mathematical models using fuzzy logic
-
- 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
Abstract
本申请涉及一种固件代码的测试方法、装置、电子设备、存储介质。所述方法包括:获取待测固件代码以及测试数据;根据与多帧处理协议对应的字符串标识从待测固件代码中确定出目标函数集合,获取目标函数集合中的数据入口点和处理循环点;运行待测固件代码,当运行到数据入口点时,对测试数据进行模糊处理生成多帧模糊测试数据;将第N帧模糊测试数据输入至目标函数集合中运行得到相应的测试结果,记录与第N帧模糊测试数据对应的函数运行结果;当运行到处理循环点时,将第N+1帧模糊测试数据和第N帧模糊测试数据对应的函数运行结果输入目标函数集合中运行得到相应的测试结果。采用本方法能够针对多帧处理协议进行定向测试从而提高测试效率。
Description
技术领域
本申请涉及软件测试技术领域,特别是涉及一种固件代码的测试方法、装置、电子设备、存储介质和计算机程序产品。
背景技术
近年来汽车行业飞速发展,越来越多的传感器和计算资源被添加到汽车中来提供更佳的智能化服务。这些传感器通常由嵌入式电子控制单元(Electronic Control Unit,简称ECU)和微控制单元(Micro controller Unit,简称MCU)控制,其目的是优化对各级设备和子系统的控制和管理。这些数量众多的ECU和MCU通过车内的通信网络实现相互通信,而控制器局域网总线协议(Controller Area Network,简称CAN协议)就承载着这一串联各控制单元的重要任务。
CAN协议作为最常见的车载通信协议之一,具有成本低廉、不易受到干扰,有自诊断和纠错能力等优点。但CAN协议同样也带来了新的攻击面。由于CAN协议更多是保障通信的可靠,而非网络安全,因此,在CAN协议层面无法防止车载网络免受网络攻击。因此,除了必要的入侵检测系统等防御手段,在CAN协议层面对车辆内部各控制单元对消息处理协议的安全性进行有效的测试也是保障汽车安全的重要方法。
CAN协议是一种多主播通信协议。其通过帧提供基于报文的通信,每个帧都有一个报文识别码、数据码、循环冗余校验码和一些控制位,每个节点会监听每一帧报文,并根据报文识别字段处理相关的报文。当一次要传输的数据载荷过长时就会通过拆分成多个帧一同进行传输,在报文接收端进行重新组装。多帧的支持在不改变CAN协议和数据包格式的前提下提供了对长数据传输的支持。目前在汽车内部也有大量的控制单元内部的处理协议提供了对多帧的处理代码。但目前针对CAN协议的测试仍以单帧测试为主,这也导致针对多帧的复杂处理协议无法被有效测试。
发明内容
基于此,有必要针对上述技术问题,提供一种固件代码的测试方法、装置、电子设备、计算机可读存储介质和计算机程序产品,以解决当前测试方法只生成单帧测试数据而无法有效触发复杂应用场景中的深层代码协议的问题。
第一方面,本申请提供了一种固件代码的测试方法。所述方法包括:
获取待测固件代码以及测试数据;
根据与多帧处理协议对应的字符串标识从所述待测固件代码中确定出与所述多帧处理协议对应的目标函数集合,获取所述目标函数集合中的数据入口点和处理循环点;
运行所述待测固件代码,当运行到所述数据入口点时,对所述测试数据进行模糊处理生成多帧模糊测试数据;
将第N帧模糊测试数据输入至所述目标函数集合中运行得到相应的测试结果,记录与所述第N帧模糊测试数据对应的函数运行结果;
当运行到所述处理循环点时,将第N+1帧模糊测试数据和所述第N帧模糊测试数据对应的函数运行结果输入所述目标函数集合中运行得到相应的测试结果。
在其中一个实施例中,所述运行所述待测固件代码,当运行到所述数据入口点时,对所述测试数据进行模糊处理生成多帧模糊测试数据,包括:
在多个分布式节点中运行所述待测固件代码,当运行到所述数据入口点时,通过每个所述分布式节点执行黑盒处理策略对所述测试数据进行模糊处理生成所述多帧模糊测试数据。
在其中一个实施例中,所述方法还包括:
从多个所述分布式节点中确定出主节点和多个从节点;
通过所述主节点从每个所述从节点中获取生成的多帧模糊测试数据,将每个所述从节点生成的多帧模糊测试数据输入所述目标函数集合中进行测试得到相应的节点测试结果;
通过所述主节点对每个所述从节点对应的节点测试结果和所述主节点生成的多帧模糊测试数据对应的测试结果进行比较得到节点比较结果;
通过所述主节点响应于所述节点比较结果符合节点同步条件的判断结果,将所述从节点生成的多帧模糊测试数据存储至所述主节点中。
在其中一个实施例中,所述方法还包括:
根据每个所述分布式节点在第一时间间隔内生成的多帧模糊测试数据,确定出每个所述分布式节点在所述第一时间间隔内的数据生成状态;
响应于每个所述分布式节点在所述第一时间间隔内的数据生成状态符合节点调度条件的判断结果,调度第一数量个的分布式节点执行灰盒处理策略,所述灰盒处理策略的复杂度大于所述黑盒处理策略的复杂度;
根据调度后的每个所述分布式节点在第二时间间隔内生成的多帧模糊测试数据,确定出调度后的每个所述分布式节点在所述第二时间间隔内的数据生成状态;
响应于调度后的每个所述分布式节点在所述第二时间间隔内的数据生成状态符合所述节点调度条件的判断结果,调度第二数量个的分布式节点执行白盒处理策略,所述白盒处理策略的复杂度大于所述灰盒处理策略的复杂度;
其中,执行所述黑盒处理策略的分布式节点总数量大于执行所述灰盒处理策略的分布式节点总数量,并且执行所述灰盒处理策略的分布式节点总数量大于执行所述白盒处理策略的分布式节点总数量。
在其中一个实施例中,在所述响应于调度后的每个所述分布式节点在所述第二时间间隔内的数据生成状态符合所述节点调度条件的判断结果,调度第二数量个的分布式节点执行白盒处理策略之后,还包括:
响应于执行所述黑盒处理策略的分布式节点和/或执行所述灰盒处理策略的分布式节点的数据生成状态不符合所述节点调度条件的判断结果,调度执行所述白盒处理策略的分布式节点执行所述黑盒处理策略或所述灰盒处理策略。
在其中一个实施例中,所述黑盒处理策略包括黑盒随机变异策略和/或黑盒智能拼接策略;
所述黑盒随机变异策略,用于对当前处理的测试数据进行数据变异生成所述多帧模糊测试数据;
所述黑盒智能拼接策略,用于对所述当前处理的测试数据进行裁剪得到预设长度的拼接数据,对多个所述拼接数据进行拼接得到所述多帧模糊测试数据。
在其中一个实施例中,所述方法还包括:
获取节点配置参数,根据所述节点配置参数对多个所述分布式节点进行配置得到执行所述黑盒随机变异策略的第一测试节点和执行所述黑盒智能拼接策略的第二测试节点;
所述在多个分布式节点中运行所述待测固件代码,当运行到所述数据入口点时,通过每个所述分布式节点执行黑盒处理策略对所述测试数据进行模糊处理生成所述多帧模糊测试数据,包括:
分别在所述第一测试节点和所述第二测试节点上运行所述待测固件代码;
当运行到所述数据入口点时,通过所述第一测试节点执行所述黑盒随机变异策略对所述测试数据进行变异处理生成所述第一测试节点对应的多帧模糊测试数据;
当运行到所述数据入口点时,通过所述第二测试节点执行所述黑盒智能拼接策略对所述测试数据进行拼接处理生成所述第二测试节点对应的多帧模糊测试数据。
在其中一个实施例中,所述节点配置参数包括所述第一测试节点对应的第一节点数量和所述第二测试节点对应的第二节点数量;
所述方法还包括:
获取与所述第一测试节点在预设测试周期内生成的多帧模糊测试数据对应的代码覆盖率;
根据所述代码覆盖率确定所述第一测试节点在所述预设测试周期内的数据生成状态;
响应于所述预设测试周期内的数据生成状态符合节点调度条件的判断结果,获取所述第一测试节点在所述预设测试周期内的平均测试时间以及所述第二测试节点在所述预设测试周期内的平均测试时间;
确定所述第一测试节点的平均测试时间与所述第二测试节点的平均测试时间的时间比值以及所述第一节点数量和所述第二节点数量的数量比值;
响应于所述时间比值小于所述数量比值的结果,调度所述第一测试节点执行所述黑盒智能拼接策略。
在其中一个实施例中,所述灰盒处理策略用于:
根据所述多帧处理协议中与控制字段对应的数据帧属性,生成与所述多帧处理协议对应的协议模板;
根据所述协议模板对当前处理的测试数据进行字段长度调整,得到所述多帧模糊测试数据。
在其中一个实施例中,所述白盒处理策略用于:
根据所述目标函数集合和每个所述分布式节点生成的多帧模糊测试数据,确定出所述待测固件代码中的未覆盖代码块;
获取与所述未覆盖代码块对应的控制字段,确定与所述控制字段对应的路径约束条件;
在所述路径约束条件下,对所述控制字段进行变异处理得到所述多帧模糊测试数据。
在其中一个实施例中,所述方法还包括:
根据所述测试数据和所述多帧模糊测试数据,构建种子数据库;
循环运行所述待测固件代码,每当运行到所述数据入口点时,从所述种子数据库中随机选取一个多帧数据作为当前处理的种子测试数据;
对所述种子测试数据进行模糊处理生成多帧种子模糊数据,将所述多帧种子模糊数据输入所述目标函数集合中进行测试得到相应的种子测试结果;
对所述种子测试结果和所述种子数据库对应的测试结果进行比较得到种子比较结果,响应于所述种子比较结果符合种子存储条件的判断结果,将所述多帧种子模糊数据添加至所述种子数据库中。
在其中一个实施例中,所述方法还包括:
当检测到所述待测固件代码运行崩溃时,将运行崩溃点的栈回溯并记录导致所述待测固件代码运行崩溃的目标测试数据;
继续循环运行所述待测固件代码,当循环运行结束时,对多个所述目标测试数据进行去重,输出去重后的所述目标测试数据。
第二方面,本申请还提供了一种固件代码的测试装置。所述装置包括:
数据获取模块,用于获取待测固件代码以及测试数据;
定向识别模块,用于根据与多帧处理协议对应的字符串标识从所述待测固件代码中确定出与所述多帧处理协议对应的目标函数集合,获取所述目标函数集合中的数据入口点和处理循环点;
数据生成模块,用于运行所述待测固件代码,当运行到所述数据入口点时,对所述测试数据进行模糊处理生成多帧模糊测试数据;
多帧测试模块,用于将第N帧模糊测试数据输入至所述目标函数集合中运行得到相应的测试结果,记录与所述第N帧模糊测试数据对应的函数运行结果,当运行到所述处理循环点时,将第N+1帧模糊测试数据和所述第N帧模糊测试数据对应的函数运行结果输入所述目标函数集合中运行得到相应的测试结果。
第三方面,本申请还提供了一种电子设备。所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述第一方面任一项实施例所述的固件代码的测试方法。
第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面任一项实施例所述的固件代码的测试方法。
第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述第一方面任一项实施例所述的固件代码的测试方法。
上述固件代码的测试方法、装置、电子设备、存储介质和计算机程序产品,通过获取待测固件代码以及测试数据;根据与多帧处理协议对应的字符串标识从待测固件代码中确定出与多帧处理协议对应的目标函数集合,获取目标函数集合中的数据入口点和处理循环点;运行待测固件代码,当运行到数据入口点时,对测试数据进行模糊处理生成多帧模糊测试数据;将第N帧模糊测试数据输入至目标函数集合中运行得到相应的测试结果,记录与第N帧模糊测试数据对应的函数运行结果;当运行到处理循环点时,将第N+1帧模糊测试数据和第N帧模糊测试数据对应的函数运行结果输入目标函数集合中运行得到相应的测试结果,不仅能够针对多帧处理协议进行定向测试,从而提高对固件代码的测试效率,还能够保障固件在进入测试时的正常运行状态,避免其他因素导致的固件代码运行崩溃误报,从而提高对固件代码的测试准确率。
附图说明
图1为一个实施例中固件代码的测试方法的流程示意图;
图2为一个实施例中节点数据同步步骤的流程示意图;
图3为一个实施例中分布式节点多策略调度步骤的流程示意图;
图4为一个实施例中分布式节点配置步骤的流程示意图;
图5为一个实施例中第一测试节点调度步骤的流程示意图;
图6为一个实施例中种子数据库构建步骤的流程示意图;
图7为另一个实施例中固件代码的测试方法的流程示意图;
图8为一个实施例中固件代码的测试装置的结构框图;
图9为一个实施例中电子设备的内部结构图。
具体实施方式
目前常用的固件代码测试方法仍以单帧测试为主,难以触发固件在处理多帧报文数据时引入的更复杂的状态机,从而导致针对多帧的复杂处理逻辑无法被有效测试,存在较大的安全隐患。采用单帧测试方法时对每个测试用例的处理周期较短,难以适应多帧测试需求中由于数据帧数和代码处理逻辑复杂度的增加而导致的以倍数或指数的方式增加的测试时间。这对测试的起始点和终止点的识别,以及数据输入点的识别都有了更高的要求。但即使满足以上要求,原来基于单节点的测试模式也很难满足测试效率要求。因此,如何利用多节点分布式场景来提升对多帧测试的整体效率是需要解决的关键问题。
因此,针对上述技术问题,本申请提供了一种针对多帧测试的固件代码的测试方法。为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据。
在一个实施例中,如图1所示,提供了一种固件代码的测试方法,本实施例以该方法应用于电子设备进行举例说明。其中,电子设备可以但不仅限于是各种个人计算机、笔记本电脑、智能手机、平板电脑、物联网设备、便携式可穿戴设备、服务器或虚拟硬件等多种设备中的任一种。
本实施例中,该方法包括以下步骤:
步骤S102,获取待测固件代码以及测试数据。
其中,待测固件代码可以但不仅限于包括嵌入式电子控制单元或微控制单元的固件源代码或固件二进制程序。待测固件代码中可以存储有对多帧报文数据的处理逻辑代码。
测试数据中可以包含多个字节,测试数据中的字节数量可以大于或等于两帧报文对应的字节数量以触发待测固件代码中的多帧数据处理策略。譬如,当一帧报文对应的字节数量为16时,可以选择包含32个字节或多于32个字节的数据作为对待测固件代码的测试数据。
具体地,在本实施例中,电子设备可以响应于对固件代码的测试请求,获取用户导入的待测固件代码以及用于对待测固件代码进行测试的连续测试数据。可选地,在一些实施例中,电子设备也可以响应于对固件代码的测试请求,通过总线、端口、蓝牙、无线局域网等通信方式直接从目标硬件设备中读取相应的待测固件代码以及用户输入的测试数据。
步骤S104,根据与多帧处理协议对应的字符串标识从待测固件代码中确定出与多帧处理协议对应的目标函数集合,获取目标函数集合中的数据入口点和处理循环点。
其中,多帧处理协议可以但不仅限于包括控制器局域网总线协议(CAN协议)、以太网协议、传输控制协议/网际协议(Transmission Control Protocol/Internet Protocol,简称TCP/IP协议)等多种通信协议中的任一种。
具体地,在本实施例中,在待测固件代码中包含二进制程序的情况下,电子设备可以获取二进制程序的符号表(记录有二进制程序中的每个标识符以及与标识符对应的声明信息),通过符号表中识别出二进制程序内部的函数名以及函数体。当二进制程序中缺少符号表等显性特征时,电子设备可以采用逆向分析的方法从二进制程序中恢复相应的函数名以及函数体。
当待测固件代码中包含源代码或已经得到二进制程序的逆向分析结果时,电子设备可以基于固件的逻辑来识别源代码或逆向分析结果中的各类任务。譬如,在实时操作系统(Real Time Operating System,简称RTOS)类的固件中通常采用创建任务函数(例如createTask函数)等显性方法来创建任务。因此,电子设备可以通过查找创建任务函数来识别各类任务。
识别得到与待测固件代码对应的各类任务之后,电子设备可以获取待测固件代码对应的字符串集合,根据与多帧处理协议对应的命名策略从字符串集合中确定出与多帧处理协议对应的字符串标识。采用字符串局部匹配的方法,将与多帧处理协议对应的字符串标识与待测固件代码对应的各类任务进行匹配,从待测固件代码中确定出与多帧处理协议对应的目标函数集合(FuncSet)。
可选地,在一些实施例中,字符串集合可以是编程人员预先结合一定的先验知识对与待测固件代码对应的固件所使用的软件开发工具包(Software Development Kit,简称SDK)的函数命名逻辑或者相应固件开发人员的函数命名策略进行分析处理得到的。一个示例中,电子设备确定出的与CAN协议对应的字符串标识可以包含“CAN”或者“CanIf”等字符串标识。
在本实施例中,在得到与多帧处理协议对应的目标函数集合之后,电子设备可以通过采用控制流分析方法对目标函数集合进行处理,生成与目标函数集合中的每个函数对应的上层调用关系图(CallGraph),并识别出最上层的任务集合(TaskSet),也即直接与函数外部进行交互的任务集合。根据每个函数对应的上层调用关系图、数据流关系图以及目标函数集合中的各个变量以及参数的类型基础结构(譬如结构体等),对目标函数集合中与多帧处理协议对应的参数以及局部变量进行定位,得到多帧处理协议在传入对应的处理函数之前被写入固件内存的代码位置以及所在的接口类函数(CanMsgLoc),从而得到目标函数集合的数据入口点(QueueReceive)。
一个示例中,电子设备可以根据固件所使用的软件开发工具包或固件运行的基础系统版本确定出多帧处理协议对应的报文数据在传入对应的任务处理函数之前所在的接口类函数,从而通过中断写入这个接口类函数将外部报文数据传入后续对应的任务处理函数进行处理。
在本实施例中,由于嵌入式电子控制单元或微控制单元中的实时操作系统类固件中,每个持久化任务在处理完一个单帧报文数据后都会跳转到接口类函数的代码位置等待新的一帧报文数据。为了避免连续多帧报文数据中的异常帧数据导致退出当前任务,需要识别目标函数集合中类似的循环跳转位置(也可称为单帧报文数据的处理结束位置LoopLoc),从而得到目标函数集合的处理循环点。当检测到任务长时间未运行到处理循环点时,主动退出当次测试流程并记录对应的测试数据。
步骤S106,运行待测固件代码,当运行到数据入口点时,对测试数据进行模糊处理生成多帧模糊测试数据。
具体地,在本实施例中,电子设备可以在目标函数集合的接口类函数中添加测试数据生成和内存写入逻辑。从而使得在电子设备中运行待测固件代码的过程中,当运行到数据入口点时,从外部获取测试数据,执行测试数据生成和内存写入逻辑对测试数据进行模糊处理,并生成相应的多帧模糊测试数据。可选地,在一些实施例中,电子设备可以采用对测试数据进行数据翻转、迭代插入、随机删减或裁剪拼接等模糊处理方法生成多帧模糊测试数据。
步骤S108,将第N帧模糊测试数据输入至目标函数集合中运行得到相应的测试结果,记录与第N帧模糊测试数据对应的函数运行结果。
其中,N为从1开始的正整数,N的最大值可以等于模糊测试数据的帧数。
测试结果可以包括但不仅限于代码运行状态(譬如成功运行或运行崩溃)、代码覆盖位置、代码覆盖率或测试效率等结果中的任一种或多种。
具体地,在本实施例中,电子设备可以在目标函数集合的数据入口点和处理循环点之间添加内存模糊测试逻辑。从而使得电子设备在生成多帧模糊测试数据后,执行内存模糊测试逻辑从N=1开始依次将第N帧模糊测试数据输入至目标函数集合中,执行目标函数集合中的各类任务对第N帧模糊测试数据进行解析得到相应的函数运行结果。在目标函数集合中根据函数运行结果对第N帧模糊测试数据进行运行测试,得到与第N帧模糊测试数据对应的测试结果。
步骤S110,当运行到处理循环点时,将第N+1帧模糊测试数据和第N帧模糊测试数据对应的函数运行结果输入目标函数集合运行得到相应的测试结果。
具体地,在本实施例中,由于对连续多帧报文数据的多帧处理逻辑需要依赖前一帧的解析情况对后续帧的报文数据进行处理。因此,电子设备在完成对第N帧模糊测试数据的测试之后,会自动跳转到目标函数集合的处理循环点处,重复执行内存模糊测试逻辑将第N+1帧模糊测试数据和第N帧模糊测试数据对应的函数运行结果输入目标函数集合。
执行目标函数集合中的各类任务根据第N帧模糊测试数据对应的函数运行结果对第N+1帧模糊测试数据进行解析,得到与第N+1帧模糊测试数据的函数运行结果。在目标函数集合中根据第N+1帧模糊测试数据的函数运行结果对第N+1帧模糊测试数据进行测试,得到与第N+1帧模糊测试数据对应的测试结果。
可选地,在一些实施例中,电子设备在完成对第N+1帧模糊测试数据的测试之后,再次跳转到目标函数集合的处理循环点处,重复执行内存模糊测试逻辑对第N+2帧模糊测试数据进行测试,直至完成对每帧模糊测试数据的测试操作,结束待测固件代码的本次测试流程。
可选地,在一些实施例中,为避免当前任务出现挂起状态而造成超时,电子设备还可以识别出目标函数集合中类似的任务退出点(ExitLoc)。当检测到任务长时间未运行到任务退出点时,主动退出当次测试流程并记录对应的测试数据。当任务正常运行到任务退出点时,可以确定当次测试流程结束。当检测到待测固件代码运行崩溃时,输出测试结果为导致运行崩溃的测试数据。
相比于目前常用的固件代码测试方法中采用控制器局域网总线向目标硬件设备发送多帧处理协议的测试数据,并监控目标硬件设备的状态反馈进行异常检测的技术手段而言,采用本实施例中提供的上述固件代码的测试方法,通过获取待测固件代码以及测试数据;根据与多帧处理协议对应的字符串标识从待测固件代码中确定出与多帧处理协议对应的目标函数集合,获取目标函数集合中的数据入口点和处理循环点;运行待测固件代码,当运行到数据入口点时,对测试数据进行模糊处理生成多帧模糊测试数据;将第N帧模糊测试数据输入至目标函数集合中运行得到相应的测试结果,记录与第N帧模糊测试数据对应的函数运行结果;当运行到处理循环点时,将第N+1帧模糊测试数据和第N帧模糊测试数据对应的函数运行结果输入目标函数集合中运行得到相应的测试结果,不仅能够针对多帧处理协议进行定向测试,从而提高对固件代码的测试效率,还能够保障固件在进入测试时的正常运行状态,从而避免其他因素导致的固件代码运行崩溃误报,提高对固件代码的测试准确率。
在一个实施例中,步骤S106,运行待测固件代码,当运行到数据入口点时,对测试数据进行模糊处理生成多帧模糊测试数据,包括:在多个分布式节点中运行待测固件代码,当运行到数据入口点时,通过每个分布式节点执行黑盒处理策略对测试数据进行模糊处理生成多帧模糊测试数据。
其中,黑盒处理策略可以用于表征对当前处理的测试数据进行数据变异处理操作和/或剪切拼接处理操作的策略。
具体地,在本实施例中,电子设备中可以预先部署有多个分布式节点,通过多个分布式节点能够在电子设备中构建分布式的运行环境,从而提高电子设备的可靠性和扩展性,使得电子设备计算速度更快更灵活。向多个分布式节点下发固件代码测试指令,在多个分布式节点中运行待测固件代码。
当每个分布式节点运行到数据入口点时,可以通过每个分布式节点执行上述实施例中所采用的黑盒处理策略,对测试数据进行模糊处理生成多帧模糊测试数据。从而使得每个分布式节点可以利用生成的多帧模糊测试数据在待测固件代码的目标函数集合中运行得到相应的测试结果。其中,每个分布式节点中生成的多帧模糊测试数据可能相同,也可能不相同。
本实施例中,通过在多个分布式节点中运行待测固件代码,当运行到数据入口点时,通过每个分布式节点执行黑盒处理策略对测试数据进行模糊处理生成多帧模糊测试数据,能够提高多帧模糊测试数据的生成效率以及数据有效性,从而提高电子设备对固件代码的测试效率以及准确率。
在一个实施例中,如图2所示,本申请提供的固件代码的测试方法还包括:
步骤S202,从多个分布式节点中确定出主节点和多个从节点。
其中,主节点可以用于和多个从节点进行数据同步,而每个从节点只能和主节点进行数据同步。
具体地,在本实施例中,电子设备可以根据每个分布式节点的数据同步属性从多个分布式节点中确定出主节点和多个从节点;或者,也可以根据用户输入的控制指令从多个分布式节点中配置出主节点和多个从节点;或者,还可以随机从多个分布式节点中选取一个节点作为主节点,其余未被选取的节点为从节点。每个分布式节点中有单独的目录来存储测试数据和模糊测试数据。
步骤S204,通过主节点从每个从节点中获取生成的多帧模糊测试数据,将每个从节点生成的多帧模糊测试数据输入目标函数集合中进行测试得到相应的节点测试结果。
具体地,在本实施例中,在循环运行待测固件代码进行测试的过程中,每当运行到测试的结束点时,多个分布式节点都会执行数据同步的操作。以下操作以主节点为执行对象对数据同步操作进行说明:通过主节点从每个从节点存储测试数据的目录中获取每个从节点在本轮循环中生成的多帧模糊测试数据。通过主节点分别将每个多帧模糊测试数据输入至目标函数集合中运行得到与每个从节点生成的多帧模糊测试数据对应的节点测试结果。
步骤S206,通过主节点对每个从节点对应的节点测试结果和主节点生成的多帧模糊测试数据对应的测试结果进行比较得到节点比较结果。
步骤S208,通过主节点响应于节点比较结果符合节点同步条件的判断结果,将从节点生成的多帧模糊测试数据存储至主节点中。
其中,节点同步条件可以用于决定是否将从节点的数据同步至主节点。
具体地,在本实施例中,电子设备可以通过主节点对每个从节点对应的节点测试结果和主节点存储的多帧模糊测试数据的测试结果进行比较,譬如将节点测试结果中的代码覆盖率、代码覆盖位置或测试效率等参数与主节点对应的测试结果进行比较,从而得到主节点和每个从节点的节点比较结果。
当从节点对应的节点测试结果中代码覆盖率大于主节点对应的测试结果中的代码覆盖率,或者节点测试结果中代码覆盖位置与主节点对应的代码覆盖位置不匹配,或者节点测试结果中的测试效率高于主节点对应的测试效率时,可以确定节点比较结果符合节点同步条件。通过主节点响应于节点比较结果符合节点同步条件的判断结果,将当前处理的从节点生成的多帧模糊测试数据存储至主节点中,以实现主节点和从节点的数据同步。后续主节点可以采用存储的从节点的多帧模糊测试数据作为种子数据进行后续循环测试的种子文件。
同理地,每个从节点也可以从主节点存储测试数据的目录中获取主节点存储的多帧模糊测试数据。通过每个从节点将主节点的多帧模糊测试数据输入至目标函数集合中运行得到相应的测试结果。通过每个从节点将主节点对应的测试结果和从节点自身存储的多帧模糊测试数据对应的测试结果进行比较,当确定主节点的代码覆盖率大于自身的代码覆盖率或主节点的代码覆盖位置与自身的代码覆盖位置不匹配时,可以将主节点的多帧模糊测试数据存储至从节点中。后续从节点可以采用存储的主节点的多帧模糊测试数据作为种子数据进行后续循环测试的种子文件。
本实施例中,通过在每轮循环测试结束时,进行主从节点的数据同步,通过主节点再次运行从节点生成的多帧模糊测试数据得到相应的节点测试结果,比较从节点的节点测试结果和主节点当前已存储的多帧模糊测试数据的测试结果,从而确定出从节点生成的多帧模糊测试数据是否测试性能优于当前主节点存储的多帧模糊测试数据,将测试性能更优的数据同步至主节点中,能够有利于后续的循环测试处理操作,从而提高对待测固件代码的测试效率。
在一个实施例中,如图3所示,本申请提供的固件代码的测试方法还包括:
步骤S302,根据每个分布式节点在第一时间间隔内生成的多帧模糊测试数据,确定出每个分布式节点在第一时间间隔内的数据生成状态。
其中,第一时间间隔可以根据分布式节点执行一次黑盒处理策略所花的时间确定。譬如,第一时间间隔可以等于分布式节点执行若干次(可以为一次或一次以上)黑盒处理策略所花的时间,以确保分布式节点在第一时间间隔内可以至少执行一次黑盒处理策略。
数据生成状态可以用于根据分布式节点生成的多帧模糊测试数据确定。当生成的多帧模糊测试数据未触发新的代码覆盖,也即生成的多帧模糊测试数据无效时,可以确定数据生成状态为无效状态。否则,数据生成状态为有效状态。
具体地,在本实施例中,电子设备可以对每个分布式节点执行以下操作:获取分布式节点在当前时刻之前生成的多帧模糊测试数据的测试结果R’。记录分布式节点从当前时刻开始的第一时间间隔内生成的若干个(可以为一个或一个以上)多帧模糊测试数据的测试结果R。电子设备可以比较第一时间间隔内生成的若干个多帧模糊测试数据的测试结果R和当前时刻之前生成的多帧模糊测试数据的测试结果R’,根据测试结果的比较结果确定出分布式节点在第一时间间隔内的数据生成状态。
譬如,当测试结果R对应的代码覆盖率大于测试结果R’对应的代码覆盖率或测试结果R对应的代码覆盖位置与测试结果R’对应的代码覆盖位置不匹配时,可以确定分布式节点在第一时间间隔内生成了新的模糊测试数据,触发了目标函数集合中新的代码覆盖,也即分布式节点在第一时间间隔内的数据生成状态为有效状态。
当测试结果R对应的代码覆盖率小于或等于测试结果R’对应的代码覆盖率或测试结果R对应的代码覆盖位置与测试结果R’对应的代码覆盖位置相匹配时,可以确定分布式节点在第一时间间隔内未生成新的模糊测试数据,也即分布式节点在第一时间间隔内的数据生成状态为无效状态。
步骤S304,响应于每个分布式节点在第一时间间隔内的数据生成状态符合节点调度条件的判断结果,调度第一数量个的分布式节点执行灰盒处理策略。
其中,灰盒处理策略可以用于表征采用根据多帧处理协议构建的协议模板对当前处理的测试数据进行处理的策略。由于需要预先构建与多帧处理协议对应的协议模板,因此灰盒处理策略的复杂度大于黑盒处理策略的复杂度。
节点调度条件可以用于决定是否调度节点执行不同的处理策略。
具体地,在本实施例中,电子设备中可以存储有节点调度条件,节点调度条件可以为分布式节点在预设时间间隔内的数据生成状态为无效状态。当电子设备确定每个分布式节点在第一时间间隔内的数据生成状态为无效状态时,可以得到每个分布式节点在第一时间间隔内的数据生成状态符合节点调度条件的判断结果。响应于符合节点调度条件的判断结果,调度第一数量个(可以由用户设定或者由电子设备随机选取)的分布式节点从此刻开始执行灰盒处理策略对测试数据进行模糊处理以生成相应的模糊测试数据。
步骤S306,根据调度后的每个分布式节点在第二时间间隔内生成的多帧模糊测试数据,确定出调度后的每个分布式节点在第二时间间隔内的数据生成状态。
步骤S308,响应于调度后的每个分布式节点在第二时间间隔内的数据生成状态符合节点调度条件的判断结果,调度第二数量个的分布式节点执行白盒处理策略。
其中,第二时间间隔可以根据分布式节点执行一次灰盒处理策略所花的时间确定。由于灰盒处理策略的复杂度大于黑盒处理策略的复杂度,分布式节点执行一次灰盒处理策略所花的时间会大于执行一次黑盒处理策略所花的时间。因此第二时间间隔大于第一时间间隔。优选地,第二时间间隔的时间长度可以等于第一时间间隔的时间长度的两倍。
白盒处理策略可以用于表征根据在当前时刻之前生成的多帧模糊测试数据的代码覆盖情况(根据代码覆盖率和/或代码覆盖位置等参数确定)对当前处理的测试数据进行约束以生成相应的多帧模糊测试数据的策略。由于需要预先确定多帧模糊测试数据的代码覆盖情况,因此,白盒处理策略的复杂度大于灰盒处理策略的复杂度。
具体地,在本实施例中,电子设备可以记录在对第一数量个的分布式节点进行调度后的第二时间间隔内,每个分布式节点生成的多帧模糊测试数据的测试结果。对每个分布式节点执行以下操作:
比较第二时间间隔内生成的多帧模糊测试数据的测试结果和第一时间间隔内生成的多帧模糊测试数据的测试结果,根据比较结果确定出在第二时间间隔内分布式节点的数据生成状态。当第二时间间隔内的代码覆盖率大于第一时间间隔内的代码覆盖率或者第二时间间隔内的代码覆盖位置与第一时间间隔内的代码覆盖位置不匹配时,确定分布式节点在第二时间间隔内的数据生成状态为有效状态,否则为无效状态。
在确定每个分布式节点在第二时间间隔内的数据生成状态为无效状态的情况下,确定符合节点调度条件,调度第二数量个的分布式节点执行白盒处理策略。优选地,电子设备可以从执行灰盒处理策略的分布式节点中调度第二数量个的分布式节点执行白盒处理策略。
由于白盒处理策略的复杂度大于灰盒处理策略的复杂度,分布式节点执行白盒处理策略所花的时间会大于执行灰盒处理策略所花的时间。因此,为了保障电子设备具有较高的测试效率,需要控制执行黑盒处理策略的分布式节点总数量大于执行灰盒处理策略的分布式节点总数量,并且执行灰盒处理策略的分布式节点总数量大于执行白盒处理策略的分布式节点总数量,以平衡执行每种处理策略的分布式节点所花费的时间和计算成本。
本实施例中,通过比较分布式节点在时间间隔前后生成的多个多帧模糊测试数据的测试结果,确定分布式节点在时间间隔内的数据生成状态,根据数据生成状态是否符合节点调度条件的判断结果调度分布式节点执行复杂度不同的处理策略,能够有效提高分布式节点的测试利用率以及多帧模糊测试数据的数据有效性,从而有利于提高对固件代码的测试准确率以及测试效率。
在一个实施例中,当电子设备处于单节点测试的模式下,单个分布式节点的执行策略可以为:首先使用黑盒处理策略对当前处理的测试数据进行模糊处理并测试。当分布式节点在预设时间间隔内无法触发新的代码覆盖时,调度分布式节点执行灰盒处理策略并测试,持续执行预设时间片。当时间片结束时如果分布式节点执行灰盒处理策略生成的多帧模糊测试数据能够探测到新的代码覆盖则切换到黑盒测试阶段执行黑盒处理策略,否则切换到白盒测试阶段执行白盒处理策略。当分布式节点执行白盒处理策略生成的多帧模糊测试数据能够触发新的代码覆盖时则切换到黑盒模糊测试节点执行黑盒处理策略,否则分布式节点持续执行白盒处理策略并测试。
在一个实施例中,在步骤S308,响应于调度后的每个分布式节点在第二时间间隔内的数据生成状态符合节点调度条件的判断结果,调度第二数量个的分布式节点执行白盒处理策略之后,还包括:响应于执行黑盒处理策略的分布式节点和/或执行灰盒处理策略的分布式节点的数据生成状态不符合节点调度条件的判断结果,调度执行白盒处理策略的分布式节点执行黑盒处理策略或灰盒处理策略。
具体地,在本实施例中,电子设备可以继续记录在调度第二数量个的分布式节点执行白盒处理策略之后的第一时间间隔内的数据生成状态。当存在执行黑盒处理策略的分布式节点的数据生成状态为有效状态时,确定执行复杂度较低的分布式节点中生成了新的模糊测试数据,能够触发新的代码覆盖,得到分布式节点的数据生成状态不符合节点调度条件的判断结果。可以响应于执行黑盒处理策略的分布式节点不符合节点调度条件的判断结果,调度执行白盒处理策略的分布式节点执行黑盒处理策略或灰盒处理策略。
或者,也可以记录在调度第二数量个的分布式节点执行白盒处理策略之后的第二时间间隔内的数据生成状态。当存在执行黑盒处理策略的分布式节点或执行灰盒处理策略的分布式节点的数据生成状态为有效状态时,可以响应于不符合节点调度条件的判断结果,调度执行白盒处理策略的分布式节点执行黑盒处理策略或灰盒处理策略。优选的,可以从执行白盒处理策略的分布式节点中选取数据生成状态为无效状态的分布式节点作为需要调度的节点。
当电子设备确定执行白盒处理策略的分布式节点总数量为零时,响应于不符合节点调度条件的判断结果,可以从执行灰盒处理策略的分布式节点中调度数据生成状态为无效状态的分布式节点执行黑盒处理策略,直至执行灰盒处理策略的分布式节点总数量为零或者固件代码测试流程结束。
在电子设备确定不存在不符合节点调度条件的分布式节点时,则保持当前执行各种处理策略的分布式节点总数量,不作调度处理。
本实施例中,通过持续监测预设时间间隔内分布式节点的数据生成状态,响应于数据生成状态不符合节点调度条件的判断结果,调度分布式节点执行复杂度较低的处理策略,能够降低分布式节点所花费的计算成本和策略执行时间。
在一个实施例中,黑盒处理策略可以包括但不仅限于黑盒随机变异策略和/或黑盒智能拼接策略。
黑盒随机变异策略可以用于对当前处理的测试数据进行数据翻转、求数据极值、采用预设数据变异模型对数据进行运算、迭代插入、随机删减等数据变异处理,以生成相应的多帧模糊测试数据。
黑盒智能拼接策略可以用于对当前处理的测试数据进行裁剪得到预设长度的数据,将预设长度的数据作为拼接数据。对多个拼接数据进行拼接处理得到相应的多帧模糊测试数据。其中,预设长度可以与一帧报文对应的字节数量存在倍数关系。譬如,当测试数据A为33字节,而一帧报文为16字节时,可以根据一帧报文对应的字节数量的倍数确定预设长度为32字节,也即与两帧报文对应的字节数量。从而使得电子设备执行黑盒智能拼接策略可以对33字节的测试数据A进行裁剪得到32字节的拼接数据A’,以A’+A’*n(n=1,2,3,…)的方式随机对多个拼接数据A’进行拼接处理得到相应的多帧模糊测试数据。
黑盒随机变异策略和黑盒智能拼接策略可以用于对当前处理的测试数据先进行数据变异处理得到变异测试数据,而后对变异测试数据进行裁剪处理得到预设长度下的拼接数据。对多个拼接数据进行拼接处理得到相应的多帧模糊测试数据。可选地,在一个实施例中,还可以对当前处理的测试数据进行多次数据变异处理得到不同的变异测试数据B和C。从而对不同的变异测试数据B和C进行裁剪得到相应的拼接数据B’和C’,以B’*n+C’*m(n=1,2,3,…;m=1,2,3,…)的方式对多个拼接数据B’和C’进行拼接处理生成相应的多帧模糊测试数据。
本实施例中,通过采用黑盒随机变异策略和/或黑盒智能拼接策略对当前处理的测试数据进行模糊处理以生成相应的多帧模糊测试数据,能够降低模糊测试数据的生成难度,并同时提高模糊测试数据的数据有效性。
在一个实施例中,如图4所示,本申请提供的固件代码的测试方法还包括:
步骤S402,获取节点配置参数,根据节点配置参数对多个分布式节点进行配置得到第一测试节点和第二测试节点。
步骤S404,分别在第一测试节点和第二测试节点上运行待测固件代码。
其中,节点配置参数可以包括但不仅限于节点的标识码(譬如节点的序号、节点的网络地址等)、节点执行的策略内容或配置的节点数量等多种参数中任一种或多种。
具体地,电子设备可以获取用户输入的节点配置参数。采用节点配置参数对多个分布式节点进行配置得到执行黑盒随机变异策略的第一测试节点和执行黑盒智能拼接策略的第二测试节点。分别在每个第一测试节点和每个第二测试节点中运行待测固件代码。
步骤S406,当运行到数据入口点时,通过第一测试节点执行黑盒随机变异策略对测试数据进行变异处理生成第一测试节点对应的多帧模糊测试数据。
步骤S408,当运行到数据入口点时,通过第二测试节点执行黑盒智能拼接策略对测试数据进行拼接处理生成第二测试节点对应的多帧模糊测试数据。
具体地,当每个第一测试节点运行到待测固件代码中目标函数集合的数据入口点时,通过每个第一测试节点执行黑盒随机变异策略对当前处理的测试数据进行变异处理生成第一测试节点对应的多帧模糊测试数据。具体的变异处理操作可以操作上述实施例中提供的黑盒随机变异策略实现,在此不作具体阐述。
当每个第二测试节点运行到待测固件代码中目标函数集合的数据入口点时,通过每个第二测试节点执行黑盒智能拼接策略对当前处理的测试数据进行裁剪拼接处理生成第二测试节点对应的多帧模糊测试数据。具体的裁剪拼接操作可以操作上述实施例中提供的黑盒智能拼接策略实现,在此不作具体阐述。
本实施例中,通过根据节点配置参数对多个分布式节点进行初始化配置,利用第一测试节点执行黑盒随机变异策略对当前处理的测试数据进行变异处理,利用第二测试节点执行黑盒智能拼接策略对当前处理的测试数据进行拼接处理,能够提高多帧模糊测试数据的数据有效性和多样性。
在一个实施例中,节点配置参数还可以包括第一测试节点对应的第一节点数量和第二测试节点对应的第二节点数量,其中,第一节点数量可以大于第二节点数量。如图5所示,提供了一种分布式节点调度步骤的流程示意图。
步骤S502,获取与第一测试节点在预设测试周期内生成的多帧模糊测试数据对应的代码覆盖率。
步骤S504,根据代码覆盖率确定第一测试节点在预设测试周期内的数据生成状态。
具体地,电子设备可以获取第一测试节点在当前时刻之前生成的多帧模糊测试数据的代码覆盖率。记录第一测试节点在当前时刻之后的预设测试周期内生成的多帧模糊测试数据的代码覆盖率。比较预设测试周期内生成的多帧模糊测试数据的代码覆盖率和当前时刻之前生成的多帧模糊测试数据的代码覆盖率。当预设测试周期内的代码覆盖率小于当前时刻之前的代码覆盖率时,确定第一测试节点在预设测试周期内未生成能够触发新的代码覆盖的模糊测试数据,也即第一测试节点在预设测试周期内的数据生成状态为无效状态。
步骤S506,响应于预设测试周期内的数据生成状态符合节点调度条件的判断结果,获取平均测试时间。
具体地,电子设备可以在每个第一测试节点在预设测试周期内的数据生成状态为无效状态的情况下,得到符合节点调度条件的判断结果。响应于符合节点调度条件的判断结果,分别获取每个第一测试节点在预设测试周期内执行黑盒随机变异策略并测试所花费的第一测试时间以及每个第二测试节点在预设测试周期内执行黑盒智能拼接策略并测试所花费的第二测试时间。对第一节点数量和第一测试时间进行运算得到与第一测试节点对应的平均测试时间。对第二节点数量和第二测试时间进行运算得到与第二测试节点对应的平均测试时间。
步骤S508,确定第一测试节点的平均测试时间与第二测试节点的平均测试时间的时间比值以及第一节点数量和第二节点数量的数量比值。
步骤S510,响应于时间比值小于数量比值的结果,调度第一测试节点执行黑盒智能拼接策略。
具体地,电子设备可以对第一测试节点的平均测试时间与第二测试节点对应的平均测试时间进行运算处理得到第一测试节点和第二测试节点的时间比值。对第一节点数量和第二节点数量进行运算处理,得到第一测试节点和第二测试节点对应的数量比值。对时间比值和数量比值进行比较,响应于时间比值小于数量比值的结果,调度若干个第一测试节点执行黑盒智能拼接策略。
本实施例中,通过在执行黑盒随机变异策略的第一测试节点符合节点调度条件的情况下,分析比较第一测试节点和第二测试节点的平均测试时间,确定时间比值和数量比值,从而在时间比值小于数量比值的情况下,调度第一测试节点执行黑盒智能拼接策略,能够保证分布式节点在随机变异这类路径广度测试上更优也更随机的方法中占有一定的比重,避免所有分布式节点都执行智能拼接这种测试时间相对较长的方法,从而提高整体分布式节点的测试效率。
在一个实施例中,灰盒处理策略可以用于:根据多帧处理协议中与控制字段对应的数据帧属性,生成与多帧处理协议对应的协议模板,根据协议模板对当前处理的测试数据进行字段长度调整,得到多帧模糊测试数据。
其中,数据帧属性可以用于表征对消息报文格式的定义约束。
具体地,在本实施例中,电子设备可以获取多帧处理协议下的消息报文。根据消息报文中的各个控制字段(譬如协议标识码字段、长度字段以及与长度字段关联的有效负载字段等)在整个帧中的偏移以及占用的字节大小等数据帧属性,生成与多帧处理协议对应的协议模板。
根据协议模板中的字段属性与当前处理的测试数据进行匹配,确定出测试数据中与控制字段对应的测试内容。根据协议模板中的数据帧属性对确定出的测试内容进行填充或删减等字段长度调整操作以保障数据一致性,从而得到相应的多帧模糊测试数据。
可选地,在一些实施例中,电子设备可以根据协议模板对测试数据中长度字段下的测试内容进行加一或减一的变形,以此来探测待测固件代码中对于控制字段的长度与数据实际长度的匹配是否做正确检查。
可选地,在一些实施例中,电子设备可以根据协议模板中各个控制字段的偏移属性对各控制字段进行随机变换。对于变换后大概率走入二进制程序或者固件异常处理代码(就是处理错误帧数据的代码块)的字段标注为不可改变属性un-changeable,即其可修改性低。以使得分布式节点在后续的基于协议模板的变异中会降低对该类字段的随机变异操作,从而使得分布式节点执行数据变异操作的时间分配更加合理。
本实施例中,通过根据多帧处理协议构建相应的协议模板,利用协议模板对测试数据进行字段长度调整生成相应的模糊测试数据,能够便于保存测试数据的报文格式,避免直接进入多帧的异常处理逻辑。
在一个实施例中,白盒处理策略可以用于:根据目标函数集合和每个分布式节点生成的多帧模糊测试数据,确定出待测固件代码中的未覆盖代码块,获取与未覆盖代码块对应的控制字段,确定与控制字段对应的路径约束条件,在路径约束条件下,对控制字段进行变异处理得到多帧模糊测试数据。
具体地,在本实施例中,电子设备可以获取当前时刻之前每个分布式节点生成的所有多帧模糊测试数据。分别将每个多帧模糊测试数据输入目标函数集合中运行,记录每个多帧模糊测试数据对应的代码覆盖位置并汇总。利用代码覆盖位置的汇总结果从目标函数集合中确定出未覆盖代码块。
构建目标函数集合中的数据入口点到未覆盖代码块的函数调用图和控制流图。利用多帧处理协议在传入对应的处理函数之前被写入固件内存的代码位置为符号进行符号执行分析,确定出未覆盖代码块对应的控制字段(是一种用于决定执行路径的关键数据)在多帧处理协议下的消息报文中的偏移,并映射到协议模板中识别出该控制字段对应的字段类型。同时,记录该控制字段被写入固件内存到决定执行路径的跳转过程中的路径约束条件。在路径约束条件下,对控制字段进行变异处理得到多帧模糊测试数据。
可选地,在一些实施例中,分布式节点可以参照以下操作实现白盒处理策略:通过分析或追踪固件对多帧消息的处理过程,提取得到待测固件代码中的多帧消息处理模块(也即与目标函数集合对应的代码块)。对当前分布式节点已生成的模糊测试数据与多帧消息处理模块的覆盖情况对应的测试结果进行汇总,从而提取出当前还未覆盖的代码块。构建从CAN消息解析入口到该类未覆盖代码块的函数调用图和控制流图,并以CAN帧消息写入的内存地址为符号进行符号执行分析,从而确定未覆盖代码关联的控制数据(决定了执行路径的关键数据)在CAN消息中的偏移,并映射到CAN模板识别出该控制数据的类型。同时,记录该数据被写入内存到决定路径跳转过程中的约束条件,一同在后续的变形中辅助测试数据的生成。
一个示例中,电子设备可以在识别到未覆盖代码块对应的控制字段为X的情况下,获取与控制字段X对应的路径约束条件(X&0xFF)==0x10,也即X的数值与0xFF的按位与运算的结果需要等于0x10的约束条件。进而可以通过路径约束条件求解得到控制字段X对应的数值并填充到当前处理的测试数据中。判断新生成的多帧模糊测试数据能否探索到新的代码覆盖。需要说明的是,当电子设备感知到是长度控制等字段和其他数据相关联的数据需要满足特定条件时,电子设备会控制后续分布式节点只变异控制字段,执行控制字段及关联数据一同变异的策略来生成新的多帧模糊测试数据。
本实施例中,通过根据已生成的多帧模糊测试数据的代码覆盖位置分析得到目标函数集合中的未覆盖代码块,针对未覆盖代码块确定出相关联的控制字段,获取控制字段对应的路径约束条件,根据路径预设条件和协议模板中控制字段对应的数据帧属性,对测试数据进行变异处理生成相应的多帧模糊测试数据,能够缩小测试范围,从而提高对待测固件代码的测试精度和测试效率。
在一个实施例中,如图6所示,本申请提供的固件代码的测试方法还包括:
步骤S602,根据测试数据和多帧模糊测试数据,构建种子数据库。
步骤S604,循环运行待测固件代码,每当运行到数据入口点时从种子数据库中随机选取一个多帧数据作为当前处理的种子测试数据。
具体地,在本实施例中,电子设备可以根据初始输入的测试数据和后续对测试数据进行模糊处理后生成的多帧模糊测试数据构建种子数据库。循环运行待测固件代码,直至对待测固件代码的测试结果符合循环停止条件或者循环次数达到循环停止阈值。每当运行到数据入口点时,从种子数据库中随机选取一个多帧数据作为当前处理的种子测试数据。
步骤S606,对种子测试数据进行模糊处理生成多帧种子模糊数据,将多帧种子模糊数据输入目标函数集合中进行测试得到相应的种子测试结果。
步骤S608,对种子测试结果和种子数据库对应的测试结果进行比较得到种子比较结果,响应于种子比较结果符合种子存储条件的判断结果,将多帧种子模糊数据添加至种子数据库中。
其中,种子存储条件可以用于表征决定是否将当前处理的数据存储至种子数据库的判断条件。
具体地,在本实施例中,电子设备可以对种子测试数据进行模糊处理生成相应的多帧种子模糊数据,将多帧种子模糊数据依次输入目标函数集合中进行测试得到相应的种子测试结果。对种子测试结果和种子数据库中存储的多帧模糊测试数据对应的测试结果进行比较得到种子比较结果。
当种子比较结果为种子测试结果的代码覆盖率高于种子数据库中的多帧数据对应的代码覆盖率,或种子测试结果的代码覆盖位置和种子数据库中的多帧数据对应的代码覆盖位置不匹配时,确定种子比较结果符合种子存储条件。响应于种子比较结果符合种子存储条件的判断结果,将当前生成的多帧种子模糊数据添加至种子数据库中,从而使得能够在下一轮循环测试中可以作为种子测试数据对待测固件代码进行测试。
本实施例中,通过构建种子数据库存储测试数据和模糊测试数据,循环运行待测固件代码,每当运行到目标函数集合的数据入口点时,从种子数据库中随机选取一个数据作为种子测试数据进行模糊测试处理,并将每轮生成的模糊测试数据与种子数据库中的数据进行比较,从而将代码覆盖情况更优的模糊测试数据存储至种子数据库以便于后续的模糊测试处理,能够提高对待测固件代码的测试效率,同时还能够便于对模糊测试数据的管理。
在一个实施例中,本申请提供的固件代码的测试方法还包括:当检测到待测固件代码运行崩溃时,将运行崩溃点的栈回溯并记录导致待测固件代码运行崩溃的目标测试数据,继续循环运行待测固件代码,当循环运行结束时,对多个目标测试数据进行去重,输出去重后的目标测试数据。
具体地,电子设备在将多帧模糊测试数据输入目标函数集合中运行之后,会实时监测待测固件代码的运行状态。当检测到待测固件代码运行崩溃时,查询得到待测固件代码中的运行崩溃点,将运行崩溃点的栈回溯,结束当前轮循环测试流程并记录当前在目标函数集合中运行的模糊测试数据,也即导致待测固件代码运行崩溃的目标测试数据。继续跳转到目标函数集合的数据入口点,执行下一轮的循环测试流程。直至循环测试的次数满足停止条件或模糊测试数据的测试结果满足停止条件时,确定循环运行结束。当循环运行结束时,根据测试结果对当前已记录的多个目标测试数据进行去重,譬如可以对运行崩溃点的栈相同的多个目标测试数据进行去重,仅保留记录时间最接近当前时间的目标测试数据;或者,也可以对多个目标测试数据进行数据内容匹配,从多个数据内容一致的目标测试数据中保留记录时间最接近当前时间的目标测试数据。从而得到去重后的目标测试数据并输出,以便于后续用户根据目标测试数据对待测固件代码的漏洞进行修复。
本实施例中,通过将运行崩溃点的栈回溯并记录导致待测固件代码运行崩溃的目标测试数据,当循环运行结束时,输出去重后的目标测试数据,能够避免代码运行崩溃对整体循环测试效率的影响。
在一个实施例中,如图7所示,提供了一种固件代码的测试方法,包括:
步骤S702,获取待测固件代码以及测试数据,确定出待测固件代码中与控制器局域网总线协议对应的目标函数集合。
具体地,在本实施例中,电子设备可以获取嵌入式电子控制单元或微控制单元的二进制程序或源代码作为待测固件代码,以及获取与控制器局域网总线协议(以下简称CAN协议)对应的多帧连续报文作为测试数据。根据与CAN协议对应的字符串标识从待测固件代码中确定出与CAN协议对应的目标函数集合。根据目标函数集合中每个函数对应的上层调用关系图、数据流关系图以及变量参数的类型基础结构,确定出目标函数集合的数据入口点、处理循环点和任务退出点。
步骤S704,根据节点配置参数对多个分布式节点进行配置得到第一测试节点和第二测试节点,循环运行待测固件代码进行模糊测试。
其中,模糊测试可以用于表征一种自动化软件测试方法,其原理是通过向目标系统或者软件注入非法、畸形或非预期的输入,并对目标系统的崩溃等异常状态进行监控,以挖掘目标中的缺陷和漏洞。
具体地,由于目前主流的模糊测试数据生成方法主要分为生成式和变异式。生成式方法会根据给定的数据(文件或协议)生成模板并按照模板来约束模糊测试数据的生成,因此生成式的方法对专家经验和对测试目标的了解程度要求较高。并且单纯的基于模板的模糊测试数据生成方式会导致该方法的扩展性较弱,很难应用到CAN协议的变种或者其他协议的测试中。
而变异式的方法会对已有的测试数据进行一系列的变异(例如数据翻转、极值、运算、迭代插入、随机增删等操作)生成新的模糊测试数据。虽然数据生成效率高,但很容易破坏数据或消息报文的格式,导致程序进入错误处理模块。尤其是在多帧CAN协议的通信过程中,难以适应后续帧的处理逻辑往往需要依赖前帧的解析情况的特点,从而造成后续的处理可能退化为单帧的测试,或者直接进入多帧的异常处理逻辑的结果。
因此,在本实施例中,电子设备可以结合模板式和生成式的方法并基于测试结果中的代码覆盖率或代码覆盖位置反馈来共同执行模糊测试数据生成操作。同时,由于针对多帧逻辑的测试需要处理的数据帧较多并且触发的代码逻辑复杂度较高,会导致针对多帧的每轮循环测试流程的执行时间比单帧测试的时间长。但模糊测试的核心是利用较高的频率生成新的模糊测试数据并输入至目标函数集合中运行得到相应的测试结果来对待测固件代码进行充分测试,因此,为缓解测试吞吐率较多的问题,提出了一种分布式CAN协议测试方法:通过获取用户输入的节点配置参数或者是设备中预先存储的默认的节点配置参数,采用节点配置参数对多个分布式节点进行配置得到第一节点数量个的执行黑盒随机变异策略的第一测试节点以及第二节点数量个的执行黑盒智能拼接策略的第二测试节点。
分别在每个第一测试节点和每个第二测试节点中循环运行待测固件代码,构建节点的种子数据库。在第一轮循环测试时,将当前电子设备获取的测试数据作为种子测试数据对待测固件代码进行模糊测试。在后续每轮循环测试中,可以随机从种子数据库中存储的测试数据和多帧模糊测试数据中选取出当前需要处理的测试数据作为当前轮的种子测试数据进行模糊测试。
譬如,在每轮循环测试中,可以通过每个第一测试节点执行黑盒随机变异策略对种子测试数据进行数据变异处理(例如数据翻转、极值、运算、迭代插入、随机删减等方式)得到与第一测试节点对应的多帧模糊测试数据。依次将每一帧模糊测试数据输入至目标函数集合中运行,当处理完毕当前帧模糊测试数据后,记录对当前帧模糊测试数据的函数运行结果并跳转至数据入口点。依次输入下一帧模糊测试数据以及当前帧模糊测试数据对应的函数运行结果,通过目标函数集合根据当前帧模糊测试数据对应的函数运行结果对下一帧模糊测试数据进行解析处理得到与下一帧模糊测试数据对应的函数运行结果。从而得到当前轮循环测试中与多帧模糊测试数据对应的测试结果。
在每轮循环测试中,可以通过每个第二测试节点执行黑盒智能拼接策略,根据CAN消息的规定长度按照倍数对种子测试数据进行裁剪得到与CAN协议对应的预设长度下的拼接数据,对多个拼接数据进行拼接处理得到于第二测试节点相应的多帧模糊测试数据。譬如,假设第二测试节点当前需要处理的种子测试数据A的字节长度为33,而CAN消息规定的一个帧的字节长度为16。那么就将A的最后一个字节裁剪以使其长度为32(这样处理的合理性在于,当种子测试数据A能够触发新的代码覆盖时,极大的概率是其前面32个字节的数据,也就是两个帧的数据造成的影响,后一个单字节只会导致待测固件代码进入错误帧的处理逻辑,而很难在模糊测试过程中触发新的覆盖)。而后用A’+A’*n(n=1,2,3,…)的方式随机拼接得到相应的模糊测试数据。或者也可以从种子数据库中再获取种子测试数据B并用同样的方式裁剪成B’,然后用A’*n+B’*m(n=1,2,3,…;m=1,2,3,…)拼接生成新的模糊测试数据。
在每轮循环测试结束后,每个节点可以采用种子存储条件(也即判断是否满足触发新的代码覆盖的条件)对当前轮生成的多帧种子模糊数据对应的种子测试结果进行判断,以决定是否将当前轮生成的多帧种子模糊数据存储至种子数据库中。本实施例中通过采用以上两种方法的组合就可以触发大量的浅层处理逻辑以及实现一部分协议状态机代码的覆盖,并且实现了较快的数据生成速度,便于在循环测试前期广度搜索模糊测试数据的路径空间。
从第一测试节点和第二测试节点中确定出主节点和多个从节点。通过主节点从每个从节点的种子数据库中读取相应的模糊测试数据并进行模糊测试得到与每个从节点对应的节点测试结果,通过主节点比较自身存储的模糊测试数据的测试结果和每个从节点对应的节点测试结果,响应于比较结果符合节点同步条件的判断结果,将从节点的模糊测试数据存储至主节点的种子数据库。同理地,每个从节点可以参照上述数据同步操作实现与主节点的数据同步。具体的主从节点数据同步操作可以参照上述实施例中提供的主从节点的数据同步方法实现,在此不作具体阐述。
步骤S706,根据第一测试节点在预设测试周期内的数据生成状态,调度第一测试节点执行与第二测试节点的处理策略。
具体地,在本实施例中,电子设备可以获取第一测试节点当前已生成的多帧模糊测试数据的测试结果,并记录从当前时刻开始的预设测试周期内生成的多帧模糊测试数据的测试结果。比较测试结果的代码覆盖率或代码覆盖位置,根据比较结果确定出第一测试节点是否在预设测试周期内生成了能够触发新的代码覆盖的模糊测试数据,从而得到第一测试节点在预设测试周期内的数据生成状态。当第一测试节点在预设测试周期内的数据生成状态为无效状态时,响应于数据生成状态符合节点调度条件的判断结果,获取第一测试节点和第二测试节点在预设测试周期内的平均测试时间。运算得到第一测试节点和第二测试节点的平均测试时间的时间比值以及第一节点数量和第二节点数量的数量比值。响应于时间比值小于数量比值的结果,调度第一测试节点执行第二测试节点的处理策略,也即黑盒智能拼接策略。具体的第一测试节点的调度操作可以参照上述实施例中提供的第一测试节点的调度方法实现,在此不作具体阐述。
可选地,在一些实施例中,电子设备在测试前期可以采用节点配置参数配置得到P个第一测试节点和Q个第二测试节点(P>=1、Q>=1且Q<P)。统计各分布式节点执行每轮循环测试的时间T和平均执行时间AVG(T)。在各分布式节点运行时间片I后,采用节点调度条件判断各分布式节点的数据生成状态。如果有第一测试节点P1在时间间隔J1内未触发新的代码覆盖,则根据目前各分布式节点的平均执行时间确定AVG(TQ1+TQ2+…)/AVG(TP1+TP2+…)的值,根据节点数量确定Q/P。当AVG(TQ1+TQ2+…)/AVG(TP1+TP2+…)<Q/P时,调度第一测试节点P1执行黑盒智能拼接策略,否则保持现在的节点分配不变。这样分配是为了保证黑盒随机变异这类在路径广度测试上更优也更随机的方法能有一定的比重,避免所有节点都执行黑盒智能拼接这种测试时间相对较长的方法。
步骤S708,根据第一测试节点和第二测试节点在预设时间间隔内的数据生成状态,调度第一测试节点和第二测试节点执行与数据生成状态相应的处理策略。
具体地,当循环测试进入中后期时,如果各分布式节点仍执行相同的处理策略对待测固件代码进行模糊测试时,难以触发新的代码覆盖,导致生成的模糊测试数据有效性较低。因此,在本实施例中,电子设备可以根据各分布式节点在预设时间间隔内的数据生成状态,调度各分布式节点执行不同的处理策略,以提升模糊测试数据生成的有效性。
譬如,可以根据第一测试节点和第二测试节点在第一时间间隔内生成的多帧模糊测试数据的测试结果,统计确定出执行黑盒处理策略的各分布式节点(包括执行黑盒随机变异策略的第一测试节点和执行黑盒智能拼接策略的第二测试节点)在第一时间间隔内的数据生成状态。在确定执行黑盒处理策略的各分布式节点在第一时间间隔内均未生成能够触发新的代码覆盖的模糊测试数据的情况下,响应于数据生成状态符合节点调度条件的判断结果,从执行黑盒处理策略的各分布式节点中调度第一数量个的分布式节点执行灰盒处理策略。
其中,分布式节点在执行灰盒处理策略对当前处理的测试数据进行模糊处理时,需要构建与CAN协议对应的协议模板。利用协议模板对当前处理的测试数据进行字段长度调整,譬如对控制字段的字节长度进行增加或删减等处理,从而生成相应的多帧模糊测试数据。
继续记录灰盒调度后的每个分布式节点在第二时间间隔内的数据生成状态,响应于数据生成状态符合节点调度条件的判断结果,调度第二数量个的分布式节点执行白盒处理策略。其中,黑盒处理策略的复杂度小于灰盒处理策略的复杂度小于白盒处理策略的复杂度。执行黑盒处理策略的节点总数量大于执行灰盒处理策略的节点总数量大于执行白盒处理策略的节点总数量。
其中,分布式节点在执行白盒处理策略对当前处理的测试数据进行模糊处理时,需要对当前已存储的每个多帧模糊测试数据的代码覆盖位置进行汇总,从而利用汇总结果确定出目标函数集合中的未覆盖代码块。根据协议模板和函数调用关系确定出与未覆盖代码块中的控制字段对应的路径约束条件。在路径约束条件以及协议模板对控制字段的数据帧属性下,对当前处理的测试数据中的控制字段进行变异处理得到相应的多帧模糊测试数据。
持续记录预设时间间隔后的每个分布式节点的数据生成状态,当存在执行黑盒处理策略的分布式节点在预设时间间隔内生成了能够触发新的代码覆盖的模糊测试数据,或者执行灰盒处理策略的分布式节点在预设时间间隔内生成了能够触发新的代码覆盖的模糊测试数据,也即数据生成状态不符合节点调度条件时,响应于不符合节点调度条件的判断结果,从预设时间间隔内数据生成状态满足节点调度条件的执行白盒处理策略的分布式节点中调度一个或多个节点执行黑盒处理策略或灰盒处理策略。当执行白盒处理策略的分布式节点数量为零时,响应于执行黑盒处理策略的分布式节点不符合节点调度条件的判断结果,对执行灰盒处理策略的分布式节点进行调度以执行黑盒处理策略。
可选地,在一些实施例中,存在H个分布式节点,并且各分布式节点均执行黑盒处理策略,将执行黑盒处理策略的分布式节点作为H类节点。获取时间间隔J2内的H类节点的数据生成状态。当H类节点在时间间隔J2内未生成能够触发新的代码覆盖的模糊测试数据时,响应于H类节点在时间间隔J2内的数据生成状态满足节点调度条件的结果,调度h个分布式节点执行灰盒处理策略,将执行灰盒处理策略的分布式节点作为h类节点。继续检测H类节点和h类节点在时间间隔J2*2内的数据生成状态。响应于H类节点和h类节点在时间间隔J2*2内的数据生成状态满足节点调度条件的结果,调度W个分布式节点执行白盒处理策略,将执行白盒处理策略的分布式节点作为W类节点。
上述节点调度操作执行时,需要满足H类节点、h类节点和W类节点的数量为:H>h>W,若不满足则保持当前节点配置不变。
步骤S710,当循环运行结束时,对多个导致待测固件代码运行崩溃的目标测试数据进行去重处理,输出去重后的目标测试数据。
具体地,在本实施例中,电子设备在循环运行待测固件代码的测试过程中,可以实时检测待测固件代码的运行状态,当检测到待测固件代码运行崩溃时,查询得到导致待测固件代码运行失败的运行崩溃点,将运行崩溃点的栈回溯并记录相应的目标测试数据。然后跳转至目标函数集合的数据入口点,执行下一轮的循环测试流程。当循环运行结束时,对当前已记录的多个导致待测固件代码运行崩溃的目标测试数据进行去重处理,譬如可以对运行崩溃点的栈相同的多个目标测试数据进行去重,仅保留记录时间最接近当前时间的目标测试数据,从而得到去重后的目标测试数据。输出导致待测固件代码运行崩溃的目标测试数据,以便于后续基于输出的目标测试数据对待测固件代码进行漏洞更新。
本实施例中,通过使用内存模糊测试技术来提升对待测固件代码中与CAN协议对应的特定代码的测试效率,有效实现对各类嵌入式电子控制单元或微控制单元等固件CAN协议的测试。通过调度分布式节点执行黑盒、灰盒、白盒等不同复杂度的处理策略来增强数据有效性和可用性,有效地提高了针对CAN协议多帧报文处理逻辑代码的探测效率,使得在安全代码研发周期中可以更加高效进行模糊测试,从而保证采用了CAN协议多帧报文项目的代码安全性。同时通过利用分布式测试技术来分配各分布式节点的测试任务并同步不同测试节点间的数据,平衡执行不同处理策略的时间消耗,在模糊测试遇到瓶颈时能够自动调度节点执行不同的策略以尝试突破测试瓶颈在较短时间内生成更多较优的测试数据,以此来提升分布式环境下对CAN协议的测试效率。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其他的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的固件代码的测试方法的固件代码的测试装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个固件代码的测试装置实施例中的具体限定可以参见上文中对于固件代码的测试方法的限定,在此不再赘述。
在一个实施例中,如图8所示,提供了一种固件代码的测试装置800,包括:数据获取模块802、定向识别模块804、数据生成模块806和多帧测试模块808,其中:
数据获取模块802,用于获取待测固件代码以及测试数据;
定向识别模块804,用于根据与多帧处理协议对应的字符串标识从待测固件代码中确定出与多帧处理协议对应的目标函数集合,获取目标函数集合中的数据入口点和处理循环点;
数据生成模块806,用于运行待测固件代码,当运行到数据入口点时,对测试数据进行模糊处理生成多帧模糊测试数据;
多帧测试模块808,用于将第N帧模糊测试数据输入至目标函数集合中运行得到相应的测试结果,记录与第N帧模糊测试数据对应的函数运行结果,当运行到处理循环点时,将第N+1帧模糊测试数据和第N帧模糊测试数据对应的函数运行结果输入目标函数集合中运行得到相应的测试结果。
在一个实施例中,多帧测试模块808还用于在多个分布式节点中运行待测固件代码,当运行到数据入口点时,通过每个分布式节点执行黑盒处理策略对测试数据进行模糊处理生成多帧模糊测试数据。
在一个实施例中,固件代码的测试装置800还包括:节点确定模块,用于从多个分布式节点中确定出主节点和多个从节点;节点同步模块,用于通过主节点从每个从节点中获取生成的多帧模糊测试数据,将每个从节点生成的多帧模糊测试数据输入目标函数集合中进行测试得到相应的节点测试结果;通过主节点对每个从节点对应的节点测试结果和主节点生成的多帧模糊测试数据对应的测试结果进行比较得到节点比较结果;通过主节点响应于节点比较结果符合节点同步条件的判断结果,将从节点生成的多帧模糊测试数据存储至主节点中。
在一个实施例中,固件代码的测试装置800还包括:第一确定模块,用于根据每个分布式节点在第一时间间隔内生成的多帧模糊测试数据,确定出每个分布式节点在第一时间间隔内的数据生成状态;第一调度模块,用于响应于每个分布式节点在第一时间间隔内的数据生成状态符合节点调度条件的判断结果,调度第一数量个的分布式节点执行灰盒处理策略,灰盒处理策略的复杂度大于黑盒处理策略的复杂度;第二确定模块,用于根据调度后的每个分布式节点在第二时间间隔内生成的多帧模糊测试数据,确定出调度后的每个分布式节点在第二时间间隔内的数据生成状态;第二调度模块,用于响应于调度后的每个分布式节点在第二时间间隔内的数据生成状态符合节点调度条件的判断结果,调度第二数量个的分布式节点执行白盒处理策略,白盒处理策略的复杂度大于灰盒处理策略的复杂度;其中,执行黑盒处理策略的分布式节点总数量大于执行灰盒处理策略的分布式节点总数量,并且执行灰盒处理策略的分布式节点总数量大于执行白盒处理策略的分布式节点总数量。
在一个实施例中,固件代码的测试装置800还包括:第三调度模块,用于响应于执行黑盒处理策略的分布式节点和/或执行灰盒处理策略的分布式节点的数据生成状态不符合节点调度条件的判断结果,调度执行白盒处理策略的分布式节点执行黑盒处理策略或灰盒处理策略。
在一个实施例中,黑盒处理策略包括黑盒随机变异策略和/或黑盒智能拼接策略;黑盒随机变异策略,用于对当前处理的测试数据进行数据变异生成多帧模糊测试数据;黑盒智能拼接策略,用于对当前处理的测试数据进行裁剪得到预设长度的拼接数据,对多个拼接数据进行拼接得到多帧模糊测试数据。
在一个实施例中,固件代码的测试装置800还包括:节点配置模块,用于获取节点配置参数,根据节点配置参数对多个分布式节点进行配置得到执行黑盒随机变异策略的第一测试节点和执行黑盒智能拼接策略的第二测试节点。多帧测试模块808还用于分别在第一测试节点和第二测试节点上运行待测固件代码;当运行到数据入口点时,通过第一测试节点执行黑盒随机变异策略对测试数据进行变异处理生成第一测试节点对应的多帧模糊测试数据;当运行到数据入口点时,通过第二测试节点执行黑盒智能拼接策略对测试数据进行拼接处理生成第二测试节点对应的多帧模糊测试数据。
在一个实施例中,节点配置参数包括第一测试节点对应的第一节点数量和第二测试节点对应的第二节点数量。固件代码的测试装置800还包括:状态确定模块,用于获取与第一测试节点在预设测试周期内生成的多帧模糊测试数据对应的代码覆盖率;根据代码覆盖率确定第一测试节点在预设测试周期内的数据生成状态;时间获取模块,用于响应于预设测试周期内的数据生成状态符合节点调度条件的判断结果,获取第一测试节点在预设测试周期内的平均测试时间以及第二测试节点在预设测试周期内的平均测试时间;比值确定模块,用于确定第一测试节点的平均测试时间与第二测试节点的平均测试时间的时间比值以及第一节点数量和第二节点数量的数量比值;节点调度模块,用于响应于时间比值小于数量比值的结果,调度第一测试节点执行黑盒智能拼接策略。
在一个实施例中,灰盒处理策略用于:根据多帧处理协议中与控制字段对应的数据帧属性,生成与多帧处理协议对应的协议模板;根据协议模板对当前处理的测试数据进行字段长度调整,得到多帧模糊测试数据。
在一个实施例中,白盒处理策略用于:根据目标函数集合和每个分布式节点生成的多帧模糊测试数据,确定出待测固件代码中的未覆盖代码块;获取与未覆盖代码块对应的控制字段,确定与控制字段对应的路径约束条件;在路径约束条件下,对控制字段进行变异处理得到多帧模糊测试数据。
在一个实施例中,固件代码的测试装置800还包括:数据库构建模块,用于根据测试数据和多帧模糊测试数据,构建种子数据库;种子选取模块,用于循环运行待测固件代码,每当运行到数据入口点时,从种子数据库中随机选取一个多帧数据作为当前处理的种子测试数据;种子测试模块,用于对种子测试数据进行模糊处理生成多帧种子模糊数据,将多帧种子模糊数据输入目标函数集合中进行测试得到相应的种子测试结果;种子存储模块,用于对种子测试结果和种子数据库对应的测试结果进行比较得到种子比较结果,响应于种子比较结果符合种子存储条件的判断结果,将多帧种子模糊数据添加至种子数据库中。
在一个实施例中,固件代码的测试装置800还包括:漏洞报警模块,用于当检测到待测固件代码运行崩溃时,将运行崩溃点的栈回溯并记录导致待测固件代码运行崩溃的目标测试数据,继续循环运行所述待测固件代码,当循环运行结束时,对多个目标测试数据进行去重,输出去重后的目标测试数据。
上述固件代码的测试装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于电子设备中的处理器中,也可以以软件形式存储于电子设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种电子设备,其内部结构图可以如图9所示。该电子设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的数据库用于存储待测固件代码、测试数据以及测试结果。该电子设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种固件代码的测试方法。
本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种电子设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可以存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其他介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程协议器、基于量子计算的数据处理协议器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (10)
1.一种固件代码的测试方法,其特征在于,所述方法包括:
获取待测固件代码以及测试数据;
根据与多帧处理协议对应的字符串标识从所述待测固件代码中确定出与所述多帧处理协议对应的目标函数集合,获取所述目标函数集合中的数据入口点和处理循环点;
运行所述待测固件代码,当运行到所述数据入口点时,对所述测试数据进行模糊处理生成多帧模糊测试数据;
将第N帧模糊测试数据输入至所述目标函数集合中运行得到相应的测试结果,记录与所述第N帧模糊测试数据对应的函数运行结果;
当运行到所述处理循环点时,将第N+1帧模糊测试数据和所述第N帧模糊测试数据对应的函数运行结果输入所述目标函数集合中运行得到相应的测试结果。
2.根据权利要求1所述的方法,其特征在于,所述运行所述待测固件代码,当运行到所述数据入口点时,对所述测试数据进行模糊处理生成多帧模糊测试数据,包括:
在多个分布式节点中运行所述待测固件代码,当运行到所述数据入口点时,通过每个所述分布式节点执行黑盒处理策略对所述测试数据进行模糊处理生成所述多帧模糊测试数据。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
从多个所述分布式节点中确定出主节点和多个从节点;
通过所述主节点从每个所述从节点中获取生成的多帧模糊测试数据,将每个所述从节点生成的多帧模糊测试数据输入所述目标函数集合中进行测试得到相应的节点测试结果;
通过所述主节点对每个所述从节点对应的节点测试结果和所述主节点生成的多帧模糊测试数据对应的测试结果进行比较得到节点比较结果;
通过所述主节点响应于所述节点比较结果符合节点同步条件的判断结果,将所述从节点生成的多帧模糊测试数据存储至所述主节点中。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
根据每个所述分布式节点在第一时间间隔内生成的多帧模糊测试数据,确定出每个所述分布式节点在所述第一时间间隔内的数据生成状态;
响应于每个所述分布式节点在所述第一时间间隔内的数据生成状态符合节点调度条件的判断结果,调度第一数量个的分布式节点执行灰盒处理策略,所述灰盒处理策略的复杂度大于所述黑盒处理策略的复杂度;
根据调度后的每个所述分布式节点在第二时间间隔内生成的多帧模糊测试数据,确定出调度后的每个所述分布式节点在所述第二时间间隔内的数据生成状态;
响应于调度后的每个所述分布式节点在所述第二时间间隔内的数据生成状态符合所述节点调度条件的判断结果,调度第二数量个的分布式节点执行白盒处理策略,所述白盒处理策略的复杂度大于所述灰盒处理策略的复杂度;
其中,执行所述黑盒处理策略的分布式节点总数量大于执行所述灰盒处理策略的分布式节点总数量,并且执行所述灰盒处理策略的分布式节点总数量大于执行所述白盒处理策略的分布式节点总数量。
5.根据权利要求4所述的方法,其特征在于,所述黑盒处理策略包括黑盒随机变异策略和/或黑盒智能拼接策略;
所述黑盒随机变异策略,用于对当前处理的测试数据进行数据变异生成所述多帧模糊测试数据;
所述黑盒智能拼接策略,用于对所述当前处理的测试数据进行裁剪得到预设长度的拼接数据,对多个所述拼接数据进行拼接得到所述多帧模糊测试数据;
所述方法还包括:
获取节点配置参数,根据所述节点配置参数对多个所述分布式节点进行配置得到执行所述黑盒随机变异策略的第一测试节点和执行所述黑盒智能拼接策略的第二测试节点;
所述在多个分布式节点中运行所述待测固件代码,当运行到所述数据入口点时,通过每个所述分布式节点执行黑盒处理策略对所述测试数据进行模糊处理生成所述多帧模糊测试数据,包括:
分别在所述第一测试节点和所述第二测试节点上运行所述待测固件代码;
当运行到所述数据入口点时,通过所述第一测试节点执行所述黑盒随机变异策略对所述测试数据进行变异处理生成所述第一测试节点对应的多帧模糊测试数据;
当运行到所述数据入口点时,通过所述第二测试节点执行所述黑盒智能拼接策略对所述测试数据进行拼接处理生成所述第二测试节点对应的多帧模糊测试数据。
6.根据权利要求5所述的方法,其特征在于,所述节点配置参数包括所述第一测试节点对应的第一节点数量和所述第二测试节点对应的第二节点数量;
所述方法还包括:
获取与所述第一测试节点在预设测试周期内生成的多帧模糊测试数据对应的代码覆盖率;
根据所述代码覆盖率确定所述第一测试节点在所述预设测试周期内的数据生成状态;
响应于所述预设测试周期内的数据生成状态符合节点调度条件的判断结果,获取所述第一测试节点在所述预设测试周期内的平均测试时间以及所述第二测试节点在所述预设测试周期内的平均测试时间;
确定所述第一测试节点的平均测试时间与所述第二测试节点的平均测试时间的时间比值以及所述第一节点数量和所述第二节点数量的数量比值;
响应于所述时间比值小于所述数量比值的结果,调度所述第一测试节点执行所述黑盒智能拼接策略。
7.一种固件代码的测试装置,其特征在于,所述装置包括:
数据获取模块,用于获取待测固件代码以及测试数据;
定向识别模块,用于根据与多帧处理协议对应的字符串标识从所述待测固件代码中确定出与所述多帧处理协议对应的目标函数集合,获取所述目标函数集合中的数据入口点和处理循环点;
数据生成模块,用于运行所述待测固件代码,当运行到所述数据入口点时,对所述测试数据进行模糊处理生成多帧模糊测试数据;
多帧测试模块,用于将第N帧模糊测试数据输入至所述目标函数集合中运行得到相应的测试结果,记录与所述第N帧模糊测试数据对应的函数运行结果,当运行到所述处理循环点时,将第N+1帧模糊测试数据和所述第N帧模糊测试数据对应的函数运行结果输入所述目标函数集合中运行得到相应的测试结果。
8.一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述的方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
10.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310180017.9A CN116361153A (zh) | 2023-02-27 | 2023-02-27 | 固件代码的测试方法、装置、电子设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310180017.9A CN116361153A (zh) | 2023-02-27 | 2023-02-27 | 固件代码的测试方法、装置、电子设备、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116361153A true CN116361153A (zh) | 2023-06-30 |
Family
ID=86905983
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310180017.9A Pending CN116361153A (zh) | 2023-02-27 | 2023-02-27 | 固件代码的测试方法、装置、电子设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116361153A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116755782A (zh) * | 2023-08-18 | 2023-09-15 | 腾讯科技(深圳)有限公司 | 一种指令调度的方法、装置、设备、存储介质及程序产品 |
-
2023
- 2023-02-27 CN CN202310180017.9A patent/CN116361153A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116755782A (zh) * | 2023-08-18 | 2023-09-15 | 腾讯科技(深圳)有限公司 | 一种指令调度的方法、装置、设备、存储介质及程序产品 |
CN116755782B (zh) * | 2023-08-18 | 2023-10-20 | 腾讯科技(深圳)有限公司 | 一种指令调度的方法、装置、设备、存储介质及程序产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10649838B2 (en) | Automatic correlation of dynamic system events within computing devices | |
CN107832062B (zh) | 一种程序更新方法及终端设备 | |
CN108108127B (zh) | 一种文件读取方法及系统 | |
US20200364258A1 (en) | Container Image Size Reduction Via Runtime Analysis | |
US11270227B2 (en) | Method for managing a machine learning model | |
US20160292581A1 (en) | Minimized processing of streaming changes into a semantic reasoner | |
CN112667860A (zh) | 一种子图匹配方法、装置、设备及存储介质 | |
CN111414228B (zh) | 基于Kubernetes的管理存储空间的方法和相关装置 | |
CN116361153A (zh) | 固件代码的测试方法、装置、电子设备、存储介质 | |
CN111355696A (zh) | 一种报文识别方法、装置、dpi设备及存储介质 | |
CN112287339A (zh) | Apt入侵检测方法、装置以及计算机设备 | |
CN112712125B (zh) | 事件流的模式匹配方法、装置、存储介质及处理器 | |
CN110532773B (zh) | 恶意访问行为识别方法、数据处理方法、装置和设备 | |
US8407187B2 (en) | Validating files using a sliding window to access and correlate records in an arbitrarily large dataset | |
CN110928941A (zh) | 一种数据分片抽取方法及装置 | |
CN109255238B (zh) | 终端威胁检测与响应方法及引擎 | |
CN113342500B (zh) | 任务执行方法、装置、设备及存储介质 | |
CN109800775B (zh) | 文件聚类方法、装置、设备及可读介质 | |
CN115951845A (zh) | 一种磁盘管理方法、装置、设备及存储介质 | |
CN116302433A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN115470264A (zh) | 一种数据审计方法及装置、电子设备、存储介质 | |
CN114915446A (zh) | 一种融合先验知识的智能网络安全检测方法 | |
CN113918204A (zh) | 一种元数据脚本管理方法、装置、电子设备和存储介质 | |
CN115221360A (zh) | 树形结构配置方法和系统 | |
CN115484105B (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 |