CN111949249A - 用于基于Protobuf的项目的通用验证方法 - Google Patents
用于基于Protobuf的项目的通用验证方法 Download PDFInfo
- Publication number
- CN111949249A CN111949249A CN202010163293.0A CN202010163293A CN111949249A CN 111949249 A CN111949249 A CN 111949249A CN 202010163293 A CN202010163293 A CN 202010163293A CN 111949249 A CN111949249 A CN 111949249A
- Authority
- CN
- China
- Prior art keywords
- protobuf
- verification
- header file
- processor
- file
- 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.)
- Granted
Links
- 238000012795 verification Methods 0.000 title claims abstract description 75
- 238000000034 method Methods 0.000 title claims abstract description 40
- 238000004891 communication Methods 0.000 claims abstract description 13
- 230000006870 function Effects 0.000 claims description 31
- 230000015654 memory Effects 0.000 claims description 20
- 238000012545 processing Methods 0.000 claims description 20
- 238000010200 validation analysis Methods 0.000 claims description 19
- 230000008569 process Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 10
- 238000013473 artificial intelligence Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 4
- 230000001413 cellular effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 230000033001 locomotion Effects 0.000 description 2
- 230000005291 magnetic effect Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 235000019800 disodium phosphate Nutrition 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 229910000078 germane Inorganic materials 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 229910044991 metal oxide Inorganic materials 0.000 description 1
- 150000004706 metal oxides Chemical class 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000007935 neutral effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000004043 responsiveness Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 238000010897 surface acoustic wave method Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1847—File system types specifically adapted to static storage, e.g. adapted to flash memory or SSD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- 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/3696—Methods or tools to render software testable
-
- 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/3664—Environments for testing or debugging software
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/565—Static detection by checking file integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Library & Information Science (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
公开了一种用于在使用协议缓冲器(Protobuf)用于数据通信的应用的验证中使用验证替换头文件的方法、装置和系统。操作包括:从Protobuf定义文件获取一个或多个Protobuf消息类型;基于Protobuf消息类型生成验证替换头文件;将一个或多个验证存根添加到验证替换头文件;在应用的源代码中包括验证替换头文件;以及执行包括验证替换头文件的应用的验证。
Description
技术领域
本公开的实施例一般涉及软件开发。更具体地,本公开的实施例涉及在使用Protobuf的应用的验证中使用验证替换头文件。
背景技术
由Google开发的协议缓冲器(Protobuf)是一种串行化结构化数据的语言和平台中立的方法。在开发程序中通过导线彼此通信或存储数据是有用的。
越来越多的人工智能(AI)应用(例如,用于操作自主车辆的AI程序)正在使用Protobuf。由于由标准的Protobuf代码生成器,诸如Google提供的Protobuf代码生成器生成的Protobuf头文件的复杂性,使用自动化验证和确认工具对这种AI应用的验证和确认(例如,为了存储器安全)可能是缓慢且耗时的。
发明内容
在第一方面中,本公开实施例提供一种用于在使用协议缓冲器(Protobuf)用于数据通信的应用的验证中使用验证替换头文件的计算机实现的方法,包括:
从根据Protobuf规范定义第一组一个或多个函数的Protobuf定义文件获取一个或多个Protobuf消息类型,其中所述第一组的所述函数调用一组Protobuf库;
基于所述Protobuf消息类型生成所述验证替换头文件,所述验证替换头文件根据标准C/C++编程语言定义第二组一个或多个函数,其中所述第二组的所述函数调用一组标准C/C++库;
将一个或多个验证存根插入到所述验证替换头文件;以及
基于所述一组标准C/C++库执行包括所述验证替换头文件的所述应用的所述验证,而不必验证所述一组Protobuf库。
在第二方面中,本公开实施例提供一种非暂时性机器可读介质,其中存储有指令,当由处理器执行时,所述指令使得所述处理器执行如第一方面所述的用于在使用协议缓冲器(Protobuf)用于数据通信的应用的验证中使用验证替换头文件的方法。
在第三方面中,本公开实施例提供一种数据处理系统,包括:
处理器;以及
存储器,耦合到所述处理器以存储指令,当由所述处理器执行时,所述指令使得所述处理器执行如第一方面所述的用于在使用协议缓冲器(Protobuf)用于数据通信的应用的验证中使用验证替换头文件的方法。
根据本公开实施例提供的方法和系统,可以实现对应用的快速的验证和确认。
附图说明
本公开的实施例通过示例的方式示出并且不限于附图中的图,在附图中相同的附图标记表示相似的元件。
图1A是示出生成Protobuf头文件的过程的框图。
图1B示出Protobuf定义文件的示例。
图2是示出根据一个实施例的生成验证替换头文件的过程的框图。
图3A是示出根据一个实施例的与示例.proto Protobuf定义文件对应的示例AST的示图。
图3B和3C是根据一个实施例定义与图3A对应的某些字段的数据结构。
图3D示出根据一个实施例的与图3A的示例AST对应的等效代码。
图4是示出根据一个实施例的在使用Protobuf用于数据通信的应用的验证中使用验证替换头文件的方法的流程图。
图5是示出根据一个实施例的数据处理系统的框图。
具体实施方式
将参考以下讨论的细节描述本公开的各个实施例和方面,并且附图将示出各个实施例。以下描述和附图是本公开的说明并且不应被解释为限制本公开。描述了许多具体细节以提供对本公开的各种实施例的全面理解。然而,在某些情况下,为了提供对本公开的实施例的简要讨论,没有描述公知或常规的细节。
说明书中对“一个实施例”或“实施例”的引用意味着结合该实施例描述的特定特征、结构或特性可包括在本公开的至少一个实施例中。在说明书中的各个地方出现的短语“在一个实施例中”不一定都指同一实施例。
根据一些实施例,在使用协议缓冲器(Protobuf)用于数据通信的应用的验证中使用验证替换头文件。从Protobuf定义文件获取一个或多个Protobuf消息类型。Protobuf定义文件与Protobuf规范兼容,Protobuf规范定义在执行对应的源代码期间将被调用的一个或多个函数。验证替换头文件是基于Protobuf消息类型生成的,其中验证替换头文件定义使用标准C/C++库,而不是Protobuf的专有库被调用的一个或多个函数。Protobuf的专有库难以验证。将一个或多个验证存根添加到验证替换头文件。验证替换头文件被包括在应用的源代码中。此后,执行包括验证替换头文件的应用的验证,包括验证基于验证替换头文件调用的标准C/C++库的函数的源代码。
在一个实施例中,从Protobuf定义文件获取一个或多个Protobuf消息类型包括基于Protobuf定义文件生成抽象语法树(AST)并解析AST。在一个实施例中,在验证替换头文件中为每个Protobuf消息类型创建C++类,并且在C++类中为对应的Protobuf消息类型的每个字段生成一个成员字段和对应的成员函数。
在一个实施例中,包括检验替换头文件的应用的验证依赖于C/C++标准库以创建、存取或删除C++类的一个或多个对象。在一个实施例中,验证存根包括与成员函数相关联的一个或多个前置条件、与成员函数相关联的一个或多个后置条件、或其组合。在一个实施例中,一个或多个前置条件和/或一个或多个后置条件是可定制的。在一个实施例中,在Protobuf定义文件中定义Protobuf消息类型。
参考图1A,示出说明生成Protobuf头文件的过程的框图100。开发者使用Protobuf接口描述语言在Protobuf定义文件110(通常具有.proto的文件名扩展)中定义结构化数据或消息。在下文中,Protobuf定义文件110也可以简称为proto文件。Protobuf定义文件110与Protobuf规范兼容,Protobuf规范与Google定义的一组Protobuf库相关联。Protobuf代码生成器120基于Protobuf定义文件110生成一个或多个Protobuf头文件130。标准的Protobuf代码生成器120可从Google获得。例如,使用C/C++语言,Protobuf代码生成器120从Protobuf定义文件110产生头文件(具有扩展.pb.h)和实现文件(具有扩展.pb.cc)。此后,头文件130可以由开发者包括在应用中,这使得应用能够根据包括在Protobuf定义文件110中的消息类型定义读和写Protobuf消息。
为了说明的目的,命名为example.proto的简单的示例Protobuf定义文件110在图1B中被提供。在该示例中,example.proto文件定义了两种消息类型:MsgType1和MsgType2,其中MsgType1包括所需的32位整数值,MsgType2包括所需的布尔值。
在本文档结尾处的附录A中列出的example.pb.h头文件是由Google的标准Protobuf代码生成器基于图1B所示的example.proto头文件产生的示例头文件。可以看出该example.pb.h头文件严重取决于来自Google的Protobuf的实现的专有库(例如,其头文件列在行1至7的库),这可能大大增加验证过程中涉及的工作量,因为验证过程将不得不深入到Google的Protobuf库中并验证对应的函数。
越来越多的人工智能(AI)应用(例如,用于操作自主车辆的AI程序)正在使用Protobuf。由于标准Protobuf代码生成器生成的Protobuf头文件的复杂性,使用自动化验证和确认工具对这种AI应用的验证和确认(例如,为了存储器安全)可能是缓慢且耗时的。特别地,由标准Protobuf代码生成器生成的Protobuf头文件是复杂的,因为它们是使用来自标准Protobuf库的数据结构生成的。因此,在待被验证和确认的应用中包括由标准Protobuf代码生成器生成的Protobuf头文件可能不必要地减速验证和确认过程。
参考图2,示出根据一个实施例的生成验证替换头文件的过程的框图200。抽象语法树(AST)生成器210分析Protobuf定义文件110以生成描述Protobuf定义文件110中定义的消息类型的AST。然后,AST解析器220解析AST以获得所有的Protobuf消息类型,包括每个Protobuf消息类型中的所有字段。应当理解的是,这样获得的Protobuf消息类型将与在基于其生成AST的Protobuf定义文件110中定义的那些消息类型一致。
一旦获得了Protobuf消息类型,验证码生成器230基于Protobuf消息类型生成一个或多个C++类。特别地,针对每个Protobuf消息类型生成至少一个C++类。针对Protobuf消息类型中的每个字段,验证码生成器230生成成员字段以及成员函数,以访问对应于Protobuf消息类型的C++类中的成员字段。包括数据成员和函数成员的C++类被保存在验证替换头文件250中。
此外,为了使得验证替换头文件250可被验证,验证存根生成器240将验证存根添加到验证替换头文件250。验证存根包括用于至少一个成员函数的前置条件和/或后置条件,以确保其存储器安全等。例如,前置条件可以包括:1)如果函数的输入参数是指针,则它不应是NULL指针;以及2)函数的输入参数不应超过相应的原始类型的范围(例如,诸如整数、单精度浮点、双精度浮点等原始类型具有定义的范围)。在另一实施例中,示例性前置条件可以是输入值应当在特定范围内。后置条件的一个示例可以是输出值必须在特定范围内。本文所述的示例性前置条件和后置条件是说明性的,并且不限制本公开。在不同的实施例中,可以以不同的方式定制前置条件和后置条件。此外,可以以任何适当的格式定义前置条件和后置条件。在一个实施例中,使用ANSI/ISO C规范语言(ACSL)定义前置条件和后置条件。
因此,由于使用了标准C++类,所以当在验证和确认时验证替换头文件250被包括在应用中时,仅依赖C/C++标准库(例如,stdlibc++)以创建、访问或删除对象,并且在验证和确认时不使用更复杂的Protobuf专用代码、函数和库。
为了说明的目的,在本文档结尾处的附录B中提供了命名为verification_example.h的示例性验证替换头文件250,其对应于example.proto定义文件。可以看出,与在附录A中的example.pb.h头文件相比,用于每个消息类型的所有必要方法都被大大简化。将与前置条件和后置条件有关的验证检查添加到具有参数的函数。特别地,指针检查被添加到具有指针作为其自变量的函数。例如,如附录B的46-47行所示,插入验证子“/*@require\valid(x)*/”。类似地,行81需要验证变量“from”,而行86需要验证变量“other”。这种验证存根指示验证过程验证变量“x”是有效指针。如果验证失败(例如,指针X是无效指针),则可以生成告警以通知用户。条件遵循ACSL格式。因此,验证过程将自动检查和验证是否满足条件。基于Protobuf定义文件生成AST在本领域普通技术人员的技能之内。
参考图3A,示出与example.proto定义文件对应的示例AST 300的示图。AST 300包括与Protobuf定义文件名(“1:example.proto”)、包名(“2:test”)和两个定义的消息类型(即,MsgType1和MsgType2)(节点"3:1":两个消息类型都具有1个字段;节点“4:2”:两个消息类型都具有“需要的”标签;节点“5:5”和“5:8”:字段类型分别是int32和bool)有关的信息。类似于键值对,根据一个实施例,使用数字枚举表示键(例如,图3B中所示的字段ID)及其相关联的值(例如,图3C中所示的字段类型)。AST解析器可解析AST以获得所有的Protobuf消息类型,包括每个Protobuf消息类型中的所有字段。为了说明的目的,在图3D中提供了AST的等效代码表示。
参照图4,示出说明在使用Protobuf用于数据通信的应用的验证中使用验证替换头文件的方法400的流程图。方法400可以用硬件、软件或其组合实现。在框410处,基于Protobuf定义文件(例如,Protobuf兼容定义文件)获得一个或多个Protobuf消息类型。在框420处,基于Protobuf消息类型生成验证替换头文件,验证替换头文件与标准C/C++头文件兼容。在框430处,将一个或多个验证存根添加到验证替换头文件。在框440处,验证替换头文件被包括在应用的源代码中。在框450处,通过仅验证标准C/C++库而不必验证Protobuf的专有库来执行包括验证替换头文件的应用的验证。
注意,如上所示和所述的一些或所有组件可以用软件、硬件或其组合实现。例如,这些组件可以被实现为安装并存储在永久存储设备中的软件,可以由处理器(未示出)加载到存储器中并在存储器中执行以实施贯穿本申请所述的过程或操作。可替换地,这些组件可被实现为编程或嵌入到专用硬件中的可执行代码,专用硬件诸如集成电路(例如,专用IC或ASIC)、数字信号处理器(DSP)或现场可编程门阵列(FPGA),其可经由来自应用的对应的驱动器和/或操作系统访问。此外,这些组件可以被实现为处理器或处理器内核中的特定硬件逻辑,作为软件组件经由一个或多个特定指令可访问的指令集的一部分。
应当理解的是,尽管已经参考C++编程语言描述了一些实施例,但是编程语言并不限制本公开,并且本公开的实施例可以适用于其他编程语言而不偏离本公开的范围。
图5是示出可与本公开的一个实施例一起使用的数据处理系统的示例的框图。例如,系统1500可以表示执行上述过程或方法中的任一个的上述数据处理系统中的任一个,例如图2的AST生成器210、AST解析器220、验证码生成器230和验证存根生成器240。系统1500可包括许多不同的组件。这些组件可以被实现为集成电路(IC)、其部分、分立电子设备、或适用于诸如计算机系统的主板或内插式卡的电路板的其它模块、或被实现为以其它方式并入计算机系统的机箱内的组件。
还应当注意,系统1500旨在示出计算机系统的许多组件的高级视图。然而,应当理解的是,在某些实施方式中可以存在额外的组件,并且此外,在其他实施方式中可以出现所示组件的不同布置。系统1500可以表示台式机、笔记本电脑、平板计算机、服务器、移动电话、媒体播放器、个人数字助理(PDA)、智能手表、个人通信器、游戏设备、网络路由器或集线器、无线接入点(AP)或中继器、机顶盒或其组合。此外,虽然仅示出单个机器或系统,但是术语“机器”或“系统”还应当被认为包括单独地或联合地执行一组(或多组)指令以执行本文所讨论的方法中的任何一个或多个的机器或系统的任何集合。
在一个实施例中,系统1500包括经由总线或互连1510连接的处理器1501、存储器1503和设备1505-1508。处理器1501可以表示单个处理器或其中包括单个处理器核或多个处理器核的多个处理器。处理器1501可表示一个或多个通用处理器,诸如微处理器、中央处理单元(CPU)等。更特别地,处理器1501可以是复杂指令集计算(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、或实现其它指令集的处理器、或实现指令集的组合的处理器。处理器1501还可以是一个或多个专用处理器,诸如专用集成电路(ASIC)、蜂窝或基带处理器、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、网络处理器、图形处理器、通信处理器、密码处理器、协处理器、嵌入式处理器或能够处理指令的任何其它类型的逻辑。
处理器1501可以是低功率多核处理器插槽,诸如超低电压处理器,其可以充当主处理单元和中央集线器,用于与系统的各种组件通信。这种处理器可以实现为片上系统(SoC)。处理器1501被配置为执行用于执行本文所讨论的操作和步骤的指令。系统1500可进一步包括与可选的图形子系统1504通信的图形接口,图形子系统1504可包括显示控制器、图形处理器和/或显示设备。
处理器1501可与存储器1503通信,在一个实施例中,存储器1503可经由多个存储器设备实现以提供给定量的系统存储器。存储器1503可包括一个或多个易失性存储(或存储器)设备,诸如随机存取存储器(RAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、静态RAM(SRAM)或其他类型的存储设备。存储器1503可以存储包括由处理器1501或任何其它设备执行的指令序列的信息。例如,各种操作系统、设备驱动、固件(例如,输入输出基本系统或BIOS)和/或应用程序的可执行代码和/或数据可以被加载到存储器1503中,并由处理器1501执行。操作系统可以是任何类型的操作系统诸如,例如机器人操作系统(ROS)、来自的操作系统、来自苹果(Apple)的Mac 来自的LINUX、UNIX或其它实时或嵌入式操作系统。
系统1500还可包括IO设备,诸如设备1505-1508,包括网络接口设备1505、可选输入设备1506和其它可选的IO设备1507。网络接口设备1505可包括无线收发器和/或网络接口卡(NIC)。无线收发器可以是WiFi收发器、红外收发器、蓝牙收发器、WiMax收发器、无线蜂窝电话收发器、卫星收发器(例如,全球定位系统(GPS)收发器)或其它射频(RF)收发器,或其组合。NIC可以是以太网卡。
输入设备1506可包括鼠标、触摸板、触敏屏(其可与显示设备1504集成)、诸如指示笔的指示器设备、和/或键盘(例如,作为触敏屏的一部分显示的物理键盘或虚拟键盘)。例如,输入设备1506可包括耦合到触摸屏的触摸屏控制器。触摸屏和触摸屏控制器可以例如使用多种触摸灵敏度技术中的任何一种检测其接触和移动或中断,多种触摸灵敏度技术包括但不限于电容性、电阻性、红外和表面声波技术,以及用于确定与触摸屏的一个或多个接触点的其它接近传感器阵列或其它元件。
IO设备1507可包括音频设备。音频设备可包括扬声器和/或麦克风,以促进语音使能功能,诸如语音识别、语音复制、数字记录和/或电话功能。其它IO设备1507还可包括通用串行总线(USB)端口、并行端口、串行端口、打印机、网络接口、总线桥(例如PCI-PCI桥)、传感器(例如,诸如加速度计、陀螺仪、磁力计、光传感器、罗盘、接近传感器等的运动传感器)或其组合。设备1507可以进一步包括成像处理子系统(例如,相机),其可包括光学传感器,诸如电荷耦合器件(CCD)或互补金属氧化物半导体(CMOS)光学传感器,用于促进相机功能,诸如记录照片和视频剪辑。某些传感器可以经由传感器集线器(未示出)耦合到互连1510,而诸如键盘或热传感器的其它设备可以由嵌入式控制器(未示出)控制,这取决于系统1500的具体配置或设计。
为了提供诸如数据、应用程序、一个或多个操作系统等信息的永久存储,大容量存储器(未图示)也可耦合到处理器1501。在各种实施例中,为了使能更薄和更轻的系统设计以及改进系统响应性,该大容量存储器可经由固态装置(SSD)实现。然而,在其它实施例中,大容量存储可主要使用具有较少量SSD存储以充当SSD高速缓存的硬盘驱动器(HDD)实现,以在断电事件期间启用上下文状态和其它此类信息的非易失性存储,使得在系统活动的重新启动时可发生快速上电。此外,闪存设备可以例如经由串行外围接口(SPI)耦合到处理器1501。该闪存设备可以提供系统软件的非易失性存储,包括BIOS以及系统的其它固件。
存储设备1508可包括计算机可访问存储介质1509(也称为机器可读存储介质或计算机可读介质),在其上存储体现本文所述的方法或功能中的任何一个或多个的一组或多组指令或软件(例如,模块、单元和/或逻辑1528)。处理模块/单元/逻辑1528可以表示上述组件中的任一个,例如AST生成器210、AST解析器220、验证码生成器230和验证存根生成器240。在由数据处理系统1500执行处理模块/单元/逻辑1528期间,处理模块/单元/逻辑1528还可以完全或至少部分地驻留在存储器1503内和/或处理器1501内,存储器1503和处理器1501也构成机器可访问存储介质。处理模块/单元/逻辑1528还可以经由网络接口设备1505通过网络被发送或接收。
计算机可读存储介质1509还可用于永久地存储上述某些软件功能。尽管在示例性实施例中将计算机可读存储介质1509示出为单个介质,但是术语“计算机可读存储介质”应当被理解为包括存储一组或多组指令的单个介质或多个介质(例如,集中式或分布式数据库,和/或相关联的高速缓存和服务器)。术语“计算机可读存储介质”还应当被理解为包括能够存储或编码用于由机器执行的指令集并且使得机器执行本公开的方法中的任何一个或多个的任何介质。术语“计算机可读存储介质”因此应被理解为包括但不限于固态存储器、光和磁介质、或任何其它非瞬态机器可读介质。
处理模块/单元/逻辑1528、组件和本文所述的其他特征可以被实现为分立硬件组件或者被集成在诸如ASIC、FPGA、DSP或类似设备之类的硬件组件的功能中。另外,处理模块/单元/逻辑1528可以被实现为硬件设备内的固件或功能电路。此外,处理模块/单元/逻辑1528可以以硬件设备和软件组件的任何组合实现。
注意,尽管系统1500使用数据处理系统的各种组件被示出,但它不旨在表示互连组件的任何特别体系结构或方式;因为这些细节与本公开的实施例没有密切关系。还将理解的是,具有更少组件或可能更多组件的网络计算机、手持式计算机、移动电话、服务器和/或其它数据处理系统也可与本公开的实施例一起使用。
已经根据对计算机存储器内的数据位的操作的算法和符号表示呈现了前述详细描述的一些部分。这些算法描述和表示是数据处理领域的技术人员用来最有效地将他们的工作实质传达给本领域的其他技术人员的方式。算法在这里并且通常被认为是导致期望结果的自相容操作序列。这些操作是需要对物理量进行物理操作的那些操作。
然而,应当记住的是,所有这些和类似的术语都与适当的物理量相关联,并且仅仅是应用于这些量的方便的标记。除非特别声明,否则从以上讨论中显而易见的是,应当理解的是,在整个说明书中,使用诸如所附权利要求书中所阐述的术语的讨论指的是计算机系统或类似电子计算设备的动作和处理,所述计算机系统或类似电子计算设备将计算机系统的寄存器和存储器内表示为物理(电子)量的数据操纵和变换成计算机系统存储器或寄存器或其它这样的信息存储、传输或显示设备内类似地表示为物理量的其它数据。
本公开的实施例还涉及用于执行本文的操作的装置。这种计算机程序存储在非瞬态计算机可读介质中。机器可读介质包括用于以机器(例如,计算机)可读的形式存储信息的任何机制。例如,机器可读(例如,计算机可读)介质包括机器(例如,计算机)可读存储介质(例如,只读存储器(“ROM”)、随机存取存储器(“RAM”)、磁盘存储介质、光存储介质、闪存设备)。
在前述附图中描述的过程或方法可以由包括硬件(例如,电路、专用逻辑等)、软件(例如,包括在非暂时性计算机可读介质上)或两者的组合的处理逻辑来执行。尽管以上根据一些顺序操作描述了过程或方法,但是应当理解的是,可以以不同的顺序执行所述的一些操作。此外,一些操作可以并行地而不是顺序地执行。
本公开的实施例不是参考任何特定编程语言描述的。将了解,可使用各种编程语言实施如本文所述的本公开的实施例的教示。
在前述说明书中,已经参考本公开的具体示例性实施例描述了本公开的实施例。显然,在不背离如所附权利要求书中所阐述的本公开的更宽的精神和范围的情况下,可以对其进行各种修改。因此,说明书和附图应被认为是说明性的而不是限制性的。
附录A
example.pb.h
附录B
verification.example.h
Claims (9)
1.一种用于在使用协议缓冲器(Protobuf)用于数据通信的应用的验证中使用验证替换头文件的计算机实现的方法,包括:
从根据Protobuf规范定义第一组一个或多个函数的Protobuf定义文件获取一个或多个Protobuf消息类型,其中所述第一组的所述函数调用一组Protobuf库;
基于所述Protobuf消息类型生成所述验证替换头文件,所述验证替换头文件根据标准C/C++编程语言定义第二组一个或多个函数,其中所述第二组的所述函数调用一组标准C/C++库;
将一个或多个验证存根插入到所述验证替换头文件;以及
基于所述一组标准C/C++库执行包括所述验证替换头文件的所述应用的所述验证,而不必验证所述一组Protobuf库。
2.如权利要求1所述的方法,其中从所述Protobuf定义文件获取所述一个或多个Protobuf消息类型包括基于所述Protobuf定义文件生成抽象语法树(AST)以及解析所述AST。
3.如权利要求1所述的方法,其中在所述验证替换头文件中为每个Protobuf消息类型创建C++类,以及在所述C++类中为对应的Protobuf消息类型的每个字段生成一个成员字段和对应的成员函数。
4.如权利要求3所述的方法,其中包括所述验证替换头文件的所述应用的所述验证依赖于C/C++标准库以创建、访问或删除所述C/C++类的一个或多个对象。
5.如权利要求3所述的方法,其中所述验证存根包括与所述成员函数相关联的一个或多个前置条件、与所述成员函数相关联的一个或多个后置条件、或其组合。
6.如权利要求5所述的方法,其中所述一个或多个前置条件和/或所述一个或多个后置条件是可定制的。
7.如权利要求1所述的方法,其中所述Protobuf消息类型在Protobuf定义文件中定义。
8.一种非暂时性机器可读介质,其中存储有指令,当由处理器执行时,所述指令使得所述处理器执行如权利要求1至7中任一项所述的用于在使用协议缓冲器(Protobuf)用于数据通信的应用的验证中使用验证替换头文件的方法。
9.一种数据处理系统,包括:
处理器;以及
存储器,耦合到所述处理器以存储指令,当由所述处理器执行时,所述指令使得所述处理器执行如权利要求1至7中任一项所述的用于在使用协议缓冲器(Protobuf)用于数据通信的应用的验证中使用验证替换头文件的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/411,755 US10732944B1 (en) | 2019-05-14 | 2019-05-14 | Generic verification approach for Protobuf based projects |
US16/411,755 | 2019-05-14 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111949249A true CN111949249A (zh) | 2020-11-17 |
CN111949249B CN111949249B (zh) | 2023-12-01 |
Family
ID=69845207
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010163293.0A Active CN111949249B (zh) | 2019-05-14 | 2020-03-10 | 用于基于Protobuf的项目的通用验证方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10732944B1 (zh) |
EP (1) | EP3739445B1 (zh) |
JP (1) | JP6994071B2 (zh) |
KR (1) | KR102300451B1 (zh) |
CN (1) | CN111949249B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112765023A (zh) * | 2021-01-19 | 2021-05-07 | 上海幻电信息科技有限公司 | 测试用例生成方法、装置 |
CN113391817A (zh) * | 2021-06-16 | 2021-09-14 | 中国海洋大学 | 基于antlr4的头文件替换方法及装置 |
CN113687817A (zh) * | 2021-08-16 | 2021-11-23 | 山东新一代信息产业技术研究院有限公司 | 一种消息格式解析器及解析方法 |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11640282B2 (en) * | 2019-10-24 | 2023-05-02 | Here Global B.V. | Method, apparatus, and system for providing a broker for data modeling and code generation |
CN111949254A (zh) * | 2020-08-07 | 2020-11-17 | 北京字节跳动网络技术有限公司 | 生成统一ast的方法、装置、计算机设备和存储介质 |
CN112379886A (zh) * | 2020-11-30 | 2021-02-19 | 北京一流科技有限公司 | 数据格式转换系统及其方法 |
CN112925768B (zh) * | 2021-03-03 | 2024-02-27 | 北京中安星云软件技术有限公司 | 一种基于Protobuf协议的HBASE数据库解析方法及系统 |
CN113746851B (zh) * | 2021-09-08 | 2023-08-18 | 上海幻电信息科技有限公司 | 一种支持实时解析grpc请求的代理系统和方法 |
CN114401321A (zh) * | 2021-12-31 | 2022-04-26 | 中国电力科学研究院有限公司 | 宽频测量数据轻量化传输方法、系统、设备及存储介质 |
CN117251144B (zh) * | 2023-11-20 | 2024-03-29 | 北京友友天宇系统技术有限公司 | 一种基于主题的数据对象访问与发布方法及相关设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1860437A (zh) * | 2003-04-16 | 2006-11-08 | 皇家飞利浦电子股份有限公司 | 可编译计算机程序的处理 |
CN101842773A (zh) * | 2007-11-27 | 2010-09-22 | 波音公司 | 替换部件签名列表文件 |
US20120246653A1 (en) * | 2011-03-23 | 2012-09-27 | Infinidat Ltd. | Generic command parser |
US20160283539A1 (en) * | 2014-04-15 | 2016-09-29 | Google Inc. | Methods for In-Place Access of Serialized Data |
CN108696381A (zh) * | 2017-04-12 | 2018-10-23 | 腾讯科技(深圳)有限公司 | 一种协议配置方法及装置 |
CN109086147A (zh) * | 2018-07-31 | 2018-12-25 | 深圳市元征科技股份有限公司 | 应用程序的服务接口调用方法、装置及存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6978231B2 (en) * | 2000-12-05 | 2005-12-20 | Derek Edward Williams | Embedded hardware description language instrumentation |
US7441185B2 (en) | 2005-01-25 | 2008-10-21 | Microsoft Corporation | Method and system for binary serialization of documents |
CN100571167C (zh) | 2006-02-24 | 2009-12-16 | 国际商业机器公司 | Web服务业务流程的单元测试的方法和设备 |
JP2008305003A (ja) | 2007-06-05 | 2008-12-18 | Nec Software Kyushu Ltd | マルチタスク通信を行うプログラムの動作検証方法及び動作検証システム |
JP5548433B2 (ja) | 2009-11-30 | 2014-07-16 | 株式会社野村総合研究所 | Webサービス基盤システム |
JP5209016B2 (ja) | 2010-09-28 | 2013-06-12 | ヤフー株式会社 | WebAPI作成支援装置及びWebAPI作成支援方法 |
-
2019
- 2019-05-14 US US16/411,755 patent/US10732944B1/en active Active
-
2020
- 2020-03-10 CN CN202010163293.0A patent/CN111949249B/zh active Active
- 2020-03-17 EP EP20163639.6A patent/EP3739445B1/en active Active
- 2020-04-10 JP JP2020070764A patent/JP6994071B2/ja active Active
- 2020-05-07 KR KR1020200054373A patent/KR102300451B1/ko active IP Right Grant
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1860437A (zh) * | 2003-04-16 | 2006-11-08 | 皇家飞利浦电子股份有限公司 | 可编译计算机程序的处理 |
CN101842773A (zh) * | 2007-11-27 | 2010-09-22 | 波音公司 | 替换部件签名列表文件 |
US20120246653A1 (en) * | 2011-03-23 | 2012-09-27 | Infinidat Ltd. | Generic command parser |
US20160283539A1 (en) * | 2014-04-15 | 2016-09-29 | Google Inc. | Methods for In-Place Access of Serialized Data |
CN108696381A (zh) * | 2017-04-12 | 2018-10-23 | 腾讯科技(深圳)有限公司 | 一种协议配置方法及装置 |
CN109086147A (zh) * | 2018-07-31 | 2018-12-25 | 深圳市元征科技股份有限公司 | 应用程序的服务接口调用方法、装置及存储介质 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112765023A (zh) * | 2021-01-19 | 2021-05-07 | 上海幻电信息科技有限公司 | 测试用例生成方法、装置 |
CN112765023B (zh) * | 2021-01-19 | 2023-10-03 | 上海幻电信息科技有限公司 | 测试用例生成方法、装置 |
CN113391817A (zh) * | 2021-06-16 | 2021-09-14 | 中国海洋大学 | 基于antlr4的头文件替换方法及装置 |
CN113391817B (zh) * | 2021-06-16 | 2022-08-26 | 中国海洋大学 | 基于antlr4的头文件替换方法及装置 |
CN113687817A (zh) * | 2021-08-16 | 2021-11-23 | 山东新一代信息产业技术研究院有限公司 | 一种消息格式解析器及解析方法 |
CN113687817B (zh) * | 2021-08-16 | 2023-10-31 | 山东新一代信息产业技术研究院有限公司 | 一种消息格式解析器及解析方法 |
Also Published As
Publication number | Publication date |
---|---|
JP6994071B2 (ja) | 2022-01-14 |
EP3739445B1 (en) | 2023-05-03 |
KR20200131746A (ko) | 2020-11-24 |
KR102300451B1 (ko) | 2021-09-08 |
JP2020187737A (ja) | 2020-11-19 |
EP3739445A1 (en) | 2020-11-18 |
US10732944B1 (en) | 2020-08-04 |
CN111949249B (zh) | 2023-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111949249B (zh) | 用于基于Protobuf的项目的通用验证方法 | |
US10810115B2 (en) | Systems and methods using artificial intelligence to identify, test, and verify system modifications | |
CN107122289B (zh) | 系统回归测试的方法、装置及系统 | |
US10983803B2 (en) | Annotating dynamic libraries for multi-OS applications | |
KR101773490B1 (ko) | 데이터-의존 회로 경로 응답들을 이용하는 고유하고 복제불가한 플랫폼 식별자들 | |
US11327739B2 (en) | Method and apparatus for improving runtime performance after application update in electronic device | |
US20160117154A1 (en) | Automated software include graph and build environment analysis and optimization in compiled language | |
US20130305228A1 (en) | Reducing application startup time through algorithm validation and selection | |
US20230185554A1 (en) | Application installation method and electronic device for supporting same | |
US11474795B2 (en) | Static enforcement of provable assertions at compile | |
CN111782207A (zh) | 任务流代码生成方法、装置、设备及存储介质 | |
US9460243B2 (en) | Selective importance sampling | |
US11080094B2 (en) | Method, apparatus, and electronic device for improving parallel performance of CPU | |
US10860412B2 (en) | Coordinated panic flow | |
CN110908882A (zh) | 一种应用程序的性能分析方法、装置、终端设备及介质 | |
CN115712566A (zh) | 一种针对接口字段的校验方法、装置、设备和存储介质 | |
CN111399926A (zh) | 下载启动程序的方法和装置 | |
CN112711602B (zh) | 一种存储过程的运行方法、装置,数据库系统及存储介质 | |
TW202219842A (zh) | 產生原始程式碼以為邊緣設備和現有工具鏈構建安全的機器學習引擎 | |
US20200349304A1 (en) | Method, apparatus, device, and medium for implementing simulator | |
CN107451050B (zh) | 函数获取方法和装置、服务器 | |
US20190258504A1 (en) | Device, system and method to communicate a kernel binary via a network | |
JP5093508B2 (ja) | ループ最適化システム、ループ最適化方法、及びループ最適化用プログラム | |
WO2024040509A1 (en) | Implementation of device seamless update with pre-authorization policy in trusted execution environment | |
CN116483736B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |