CN114816972A - 着色语言的测试方法、装置、电子设备以及存储介质 - Google Patents
着色语言的测试方法、装置、电子设备以及存储介质 Download PDFInfo
- Publication number
- CN114816972A CN114816972A CN202110089213.6A CN202110089213A CN114816972A CN 114816972 A CN114816972 A CN 114816972A CN 202110089213 A CN202110089213 A CN 202110089213A CN 114816972 A CN114816972 A CN 114816972A
- Authority
- CN
- China
- Prior art keywords
- coloring
- character
- application
- language text
- application program
- 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
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)
- Stored Programmes (AREA)
Abstract
本申请实施例公开了一种着色语言的测试方法、装置、电子设备以及存储介质,包括:接收待检测应用的应用程序文件;解析所述应用程序文件,得到所述待检测应用对应的着色语言文本,所述着色语言文本包括至少一个着色字符串;对所述着色字符串进行分解处理,得到所述着色字符串对应的字符集合;根据所述字符集合中的字符,构建所述着色字符串对应的语法树;基于所述语法树对所述着色语言文本进行测试。该方案可以提高着色语言的测试效率。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种着色语言的测试方法、装置、电子设备以及存储介质。
背景技术
随着计算机技术的发展,用户可以在终端上安装各种应用程序,比如,用户可以在手机上安装不同的游戏应用。在一款游戏应用发布之前,通常需要对该游戏应用进行测试,其中,着色器检测是游戏应用测试中至关重要的环节之一。
在目前的着色器检测方案中,由于游戏开发过程中会采用不同的着色语言和开发方式,同时移动设备之间存在性能差异,测试时所需的测试设备数量会非常大,故目前的测试方法测试效率低下。
发明内容
本申请实施例提供一种着色语言的测试方法、装置、电子设备以及存储介质,可以提高着色语言的测试效率。
本申请实施例提供了一种着色语言的测试方法,包括:
接收待检测应用的应用程序文件;
解析所述应用程序文件,得到所述待检测应用对应的着色语言文本,所述着色语言文本包括至少一个着色字符串;
对所述着色字符串进行分解处理,得到所述着色字符串对应的字符集合;
根据所述字符集合中的字符,构建所述着色字符串对应的语法树;
基于所述语法树对所述着色语言文本进行测试。
相应的,本申请实施例还提供了一种着色语言的测试装置,包括:
接收模块,用于接收待检测应用的应用程序文件;
解析模块,用于解析所述应用程序文件,得到所述待检测应用对应的着色语言文本,所述着色语言文本包括至少一个着色字符串;
分解模块,用于对所述着色字符串进行分解处理,得到所述着色字符串对应的字符集合;
构建模块,用于根据所述字符集合中的字符,构建所述着色字符串对应的语法树;
测试模块,用于基于所述语法树对所述着色语言文本进行测试。
可选的,在本申请的一些实施例中,所述构建模块包括:
获取单元,用于获取所述字符集合中每个字符对应的字符标识;
构建单元,用于以获取的字符标识为节点,构建所述着色字符串对应的语法树。
可选的,在本申请的一些实施例中,所述构建单元包括:
识别子单元,用于识别各字符内容的字符类型;
确定子单元,用于将字符类型为连接运算符类型的字符确定为连接运算字符;
构建子单元,用于以连接运算字符为基准,根据获取的字符标识构建所述着色字符串对应的语法树。
可选的,在本申请的一些实施例中,所述构建子单元具体用于:
删除字符类型为预设字符类型的字符内容;
以连接运算字符为基准,根据剩余的字符对应的字符标识构建所述着色字符串对应的语法树。
可选的,在本申请的一些实施例中,所述解析模块包括:
第二识别单元,用于识别所述应用程序文件对应的开发引擎;
解析单元,用于基于识别结果对所述应用程序文件进行解析,得到所述待检测应用对应的着色语言文本。
可选的,在本申请的一些实施例中,所述解析单元具体用于:
当所述应用程序文件对应的开发引擎为第一预设引擎类型时,获取应用程序文件的文件封装方式;
基于所述文件封装方式对所述应用程序文件进行解析,得到所述应用程序文件的解析文本;
从所述解析文本中提取所述待检测应用对应的着色语言文本。
可选的,在本申请的一些实施例中,所述解析单元具体用于:
当所述应用程序文件对应的开发引擎为第二预设引擎类型时,对所述应用文件进行解压处理,得到所述待检测应用对应的序列化代码文本;
对所述序列化代码文本进行反序列化处理,得到所述待检测应用对应的着色语言数据;
解析所述着色语言数据,得到所述待检测应用对应的着色语言文本。
可选的,在本申请的一些实施例中,所述测试模块包括:
调用单元,用于调用预设的标准着色语言文本;
测试单元,用于基于所述语法树以及标准着色语言文本,对所述着色语言文本进行静态测试;
显示单元,用于显示测试结果。
可选的,在本申请的一些实施例中,所述显示单元具体用于:
显示所述着色语言文本中各着色字符串对应的规则描述信息和位置信息。
本申请实施例在接收待检测应用的应用程序文件后,解析所述应用程序文件,得到所述待检测应用对应的着色语言文本,所述着色语言文本包括至少一个着色字符串,然后,对所述着色字符串进行分解处理,得到所述着色字符串对应的字符集合,接着,根据所述字符集合中的字符,构建所述着色字符串对应的语法树,最后,基于所述语法树对所述着色语言文本进行测试。因此,可以提高着色语言的测试效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a是本申请实施例提供的着色语言的测试方法的场景示意图
图1b是本申请实施例提供的着色语言的测试方法的流程示意图;
图1c是本申请实施例提供的着色语言的测试方法中对应用程序文件进行解析的流程示意图;
图1d是本申请实施例提供的着色语言的测试方法中对应用程序文件进行解析的另一流程示意图;
图1e是本申请实施例提供的着色语言的测试方法中语法树的结构示意图;
图2a是本申请实施例提供的着色语言的测试方法的另一流程示意图;
图2b是本申请实施例提供的自动化测试的页面示意图;
图2c是本申请实施例提供的自动化测试的另一页面示意图;
图3是本申请实施例提供的着色语言的测试装置的结构示意图;
图4是本申请实施例提供的终端的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供一种着色语言的测试方法以及装置。
其中,该着色语言的测试装置具体可以集成在服务器或终端中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
以该着色语言的测试装置集成在终端为例,请参阅图1a,当需要进行着色语言的测试时,终端在接收到着色语言的测试请求后,接收待检测应用的应用程序文件,可以理解的是,待检测应用的代码必须先进行编码,然后,被打包成为一个系统所能识别的文件(应用程序文件)才可以进行后续的检测;终端对接收的应用程序文件进行解析,得到待检测应用对应的着色语言文本,着色语言文本包括至少一个着色字符串,接着,终端对着色字符串进行分解处理,得到着色字符串对应的字符集合,比如,终端根据词法规则对着色字符串进行分解处理,得到着色字符串对应的多个字符,再然后,终端根据字符集合中的字符,构建着色字符串对应的语法树,最后,终端基于语法树对着色语言文本进行测试。
本申请提供的着色语言的测试方法,在获取到着色语言文本后,对着色语言文本中的着色字符串进行分解,从而构建着色字符串对应的语法树,然后,利用构建的语法树对着色语言文本进行测试,即,使用了应用程序文件着色器对应的代码,避免开发游戏时的游戏引擎而导致使用大量的测试设备,进而提高了着色语言的测试效率。
以下分别进行详细说明。需说明的是,以下实施例的描述顺序不作为对实施例优先顺序的限定。
一种着色语言的测试方法,包括:接收待检测应用的应用程序文件,解析应用程序文件,得到待检测应用对应的着色语言文本,对着色字符串进行分解处理,得到着色字符串对应的字符集合,根据字符集合中的字符,构建着色字符串对应的语法树,基于语法树对着色语言文本进行测试。
请参阅图1b,图1b为本申请实施例提供的着色语言的测试方法的流程示意图。该着色语言的测试方法的具体流程可以如下:
101、接收待检测应用的应用程序文件。
其中,应用程序文件是经编译打包后,可以被系统所能识别的文件,比如,该应用程序文件可以为安卓应用程序文件或苹果应用应用程序文件,安卓应用程序文件的后缀为APK,一个APK文件(安卓应用程序文件)内包含被编译的代码文件(.dex文件),文件资源(resources)、原生资源文件(assets)、证书(certificates)和清单文件(manifest file)。而苹果应用程序文件的后缀为IPA,一个IPA文件实质是一个zip压缩包,包含3个组件:payload目录下的.app目录,这个是软件的主程序;iTunesArtwork,实质是一个无后缀名的png图片,用来在iTunes中显示图标;iTunesMetadata.plist,记录购买者信息以及售价等数据。
例如,具体的,用户可以将待检测游戏的代码进行编译并打包后,得到应用程序文件,响应于针对应用程序文件触发的操作时,接收待检测应用的应用程序文件。
102、解析应用程序文件,得到待检测应用对应的着色语言文本。
首先,介绍着色器的概念,着色器(Shader)是用来实现图像渲染的,用来替代固定渲染管线的可编辑程序。其中该着色器包括四种子着色器,第一种是顶点着色器(Vertexshader),第二种是像素着色器(Pixel shader),第三种是几何着色器(Geometry shader),第四种是计算着色器(Compute shader),第五种为细分曲面着色器(Tessellation orhull shader),当在屏幕上绘制或显示一些物体时,这些物体的显示形式是图元(Primitives)或者网格(Mesh)。比如游戏中一个几何模型角色或一个贴在网格上的纹理角色,比如我们做阴影效果时先绘制网格再计算阴影,比如一个发射物体发射前需要先绘制该物体外形网格。这些物体都可归结为网格(Mesh),它可被分解为图元(Privitive),即图元是网格的基本单位。图元有三角形、直线或点,而着色器可以用于通过四种子着色器去描述任何的元素,例如地图资源信息和人物(Actor)资源信息,实现游戏的特效。再将缓存的着色器利用虚幻引擎命令行编译至管线状态对象(PSO)缓存工具,进而加载至主工程项目中,使得游戏应用在启动时可以预先渲染缓存的着色器中的资源信息,用于加快人工测试过的资源信息的加载,可以在很小的程度下降低卡顿。着色器替代了传统的固定渲染管线,可以实现3D图形学计算中的相关计算,由于其可编辑性,可以实现各种各样的图像效果而不用受显卡的固定渲染管线限制。
例如,具体的,可以根据应用程序文件对应的开发引擎对应用程序文件进行解析,从而得到待检测应用对应的着色语言文本,即,可选的,在一些实施例中,步骤“解析应用程序文件,得到待检测应用对应的着色语言文本”,具体可以包括:
(11)识别应用程序文件对应的开发引擎;
(12)基于识别结果对应用程序文件进行解析,得到待检测应用对应的着色语言文本。
比如,应用程序文件对应的开发引擎为优美缔(Unity)游戏引擎,Unity游戏引擎提供一整套软件解决方案,可用于创作、运营和变现实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备,具体的,请参阅图1c,在游戏开发时,用户可以在Unity游戏引擎中可以通过AssetBundle(资产组合)方式(一种资源打包方式)将资源进行打包,故,在对应用程序文件的解析方式为逆向分析AssetBundle的打包方式,从而得到待检测应用对应的着色语言文本,其中,AssetBundle文件是一个存在于硬盘上的文件,可以称之为压缩包。这个压缩包可以认为是一个文件夹,里面包含了多个文件。这些文件可以分为两类:序列化文件(serialized file)和源文件(resource files)。serialized file:资源被打碎放在一个对象中,最后统一被写进一个单独的文件(只有一个);resource files:某些二进制资源(图片、声音)被单独保存,方便快速加载;并且,AssetBundle文件是一个AssetBundle对象,可以通过代码从一个特定的压缩包加载出来的对象。进一步的,可以利用Unity游戏引擎自带的开源项目AssetStudio可以实现相关资源解析。解析出资源后,可以获取到明文的Shaderlab格式文件(着色器文件)。由于该Shaderlab文件内部嵌套了明文GLSLES源码,然后,再解析Shaderlab文件,可以获取到明文的GLSLES源代码(即着色语言文本)也即,可选的,在一些实施例中,步骤“基于识别结果对应用程序文件进行解析,得到待检测应用对应的着色语言文本”,具体可以包括:
(21)当应用程序文件对应的开发引擎为第一预设引擎类型时,获取应用程序文件的文件封装方式;
(22)基于文件封装方式对应用程序文件进行解析,得到应用程序文件的解析文本;
(23)从解析文本中提取待检测应用对应的着色语言文本。
又比如,应用程序文件对应的开发引擎为虚幻引擎(Unreal Engine,UE),虚幻引擎是目前世界最知名授权最广的顶尖游戏引擎,占有全球商用游戏引擎80%的市场份额。经过不断的发展,虚幻引擎已经成为整个游戏界运用范围最广,整体运用程度最高,次世代画面标准最高的一款游戏引擎,以虚幻4引擎(UE4)为例进行具体说明,在UE4游戏引擎中,GLSLES代码需要通过多次处理,才能获取到明文可见的GLSLES明文文件(即着色语言文本)。不同的UE4版本,获取着色语言文本的方式有差异,即,可选的,在一些实施例中,步骤“基于识别结果对应用程序文件进行解析,得到待检测应用对应的着色语言文本”,具体可以包括:
(31)当应用程序文件对应的开发引擎为第二预设引擎类型时,对应用文件进行解压处理,得到待检测应用对应的序列化代码文本;
(32)对序列化代码文本进行反序列化处理,得到待检测应用对应的着色语言数据;
(33)解析着色语言数据,得到待检测应用对应的着色语言文本。
进一步的,请参阅图1d,UE4游戏引擎获取着色语言文本的流程相对于Unity游戏引擎获取着色语言文本的流程复杂,其中,在这种场景下,应用程序文件为一个压缩方式为仅存储的标准zip文件,故,首先,对应用程序文件进行解压处理,得到应用程序的数据包,然后,可以采用编辑器对该数据包进行处理,从而得到序列化代码文本,接着,对序列化代码文本进行反序列化处理,得到待检测应用对应的着色语言数据,该着色语言数据包括着色器的名称、着色器的类型以及着色语言文本,最后,解析着色语言数据,得到待检测应用对应的着色语言文本,需要说明的是,序列化是把对象转换为字节序列,反序列化是把字节序列恢复为对象,序列化最重要的作用:在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中;反序列化的最重要的作用:根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。由于数据的存储底层都是二进制的方式,因此着色语言数据的存取就需要进行序列化。
103、对着色字符串进行分解处理,得到着色字符串对应的字符集合。
其中,着色语言文本包括至少一个着色字符串,具体的,可以对着色字符串进行词法分析,得到着色字符串对应的字符集合,字符集合包括至少一个字符,字符是类字形单位或符号,包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。字符是电子计算机或无线电通信中字母、数字、符号的统称,其是数据结构中最小的数据存取单位,通常由8个二进制位(一个字节)来表示一个字符,比如,struct info{vec3 color,structinfo、{、vec3以及color均为该着色字符串的字符。
104、根据字符集合中的字符,构建着色字符串对应的语法树。
树形语法结构为代码文件的抽象语法结构的树状表现形式,也即,抽象语法树(AbstractSyntaxTree,简称为AST),树形语法结构是一个二叉树,每一个非叶子节点代表一个运算符,它的两个子节点分别代表该运算符的两个运算分量。树形语法结构包含了表达式的逻辑结构和运算符的优先级关系,从而提高代码场景匹配的准确性以及实现代码文件对应的场景的效率。
例如,具体的,可以以字符集合中的字符为基准,构建着色字符串对应的语法树,可选的,在一些实施例中,可以获取字符对应的字符标识,以获取的字符标识为节点,构建着色字符串对应的语法树,即,步骤“根据字符集合中的字符,构建着色字符串对应的语法树”,具体可以包括:
(41)获取字符集合中每个字符对应的字符标识;
(42)以获取的字符标识为节点,构建着色字符串对应的语法树。
其中,字符与字符标识之间的对应关系是预先构建的,比如,字符A对应字符标识“1”,字符B对应字符标识“2”,由于字符集合中的字符可能会是一长串的字母和数字间的组合,若以字符为节点构建着色字符串对应的语法树,在后续的结果展示中,语法树的篇幅是非常大的,故,通过获取字符集合中每个字符对应的字符标识,以此构建着色字符串对应的语法树,在相同的展示页面尺寸下,可以展示更多字符串的信息,便于后续进行语法检测。
其中,字符可以为数值、对象或数学符号等等,语法树的枝叶也被叫做节点。一个语法树可以由单一的节点或是成百上千个节点够成,通过组合在一起来描述静态分析的程序语法,静态分析是在不需要执行代码的前提下对代码进行分析的处理过程,即通过检查代码之间的逻辑性完成对代码的分析,静态分析的目的是多种多样的,它可用于语法检查,编译、代码高亮、代码转换,优化或压缩等等场景,可以理解的是,执行代码的同时进行代码分析即是动态分析。
需要说明的是,当在源程序语法分析工作时,是在相应程序设计语言的语法规则指导下进行的。语法规则描述了该语言的各种语法成分的组成结构,通常可以用前后文无关文法或Backus-Naur范式(BNF)将一个程序设计语言的语法规则确切的描述出来。前后文无关文法有分为这么几类:LL(1),LR(0),LR(1),LR(k),LALR(1)等。每一种文法都有不同的要求,如LL(1)要求文法无二义性和不存在左递归。当把一个文法改为LL(1)文法时,需要引入一些隔外的文法符号与产生式。
例如,当在开发语言时,可能在开始的时候,选择LL(1)文法来描述语言的语法规则,编译器前端生成LL(1)语法树,编译器后端对LL(1)语法树进行处理,生成字节码或者是汇编代码。但是随着工程的开发,在语言中加入了更多的特性,受限于LL(1)文法的局限性,将编译器前端改成LR(1)语法树,然而,由于之前编译器后端是对LL(1)语树进行处理,对于运维人员而言,不得不同时也修改后端的代码,导致语法分析的效率地下。
语法树的其中一个特点为:不依赖于具体的文法。无论是LL(1)文法,还是LR(1),或者还是其它的方法,都要求在语法分析时候,构造出相同的语法树,这样可以给编译器后端提供了清晰,统一的接口。即使是前端采用了不同的文法,都只需要改变前端代码,而不用连累到后端。即减少了工作量,也提高的编译器的可维护性。
还需要说明的是,传统的语法树在编译过程中包括代码表达式之间的逻辑关系,比如,if-else语句和else语句的逻辑关系,而在本申请中的语法树与传统编译过程中的语法树不同,本申请的语法树只针对单个代码表达式建立语法树,并不建立代码表达式和代码表达式之间的结构关系。若着色语言文本中出现不完整的或者不能通过编译的着色字符串,一旦输入的代码文件按存在语法错误,那么构建出来的语法树将会是错误的并且是没有意义的,而构建的单个表达式的语法树,如果出现错误,也只是整个代码文件的局部出现错误,并不影响代码文件中的其它代码表达式的语法树,从而提高了语法树在构建过程中的可靠性。
进一步的,为了区分不同的字符,可以识别各字符的字符类型,基于识别到的字符类型,以此构建着色字符串对应的语法树,其中,在字符串中,常常会出现连接运算字符,比如,“pos=pos0.x+10”,里面的“=”和“+”均为连接运算字符,因此,字符串“pos=pos0.x+10”可以基于“=”和“+”构建相应的语法树,即,可选的,在一些实施例中,步骤“以获取的字符标识为节点,构建着色字符串对应的语法树”,具体可以包括:
(51)识别各字符的字符类型;
(52)将字符类型为连接运算符类型的字符确定为连接运算字符;
(53)以连接运算字符为基准,根据获取的字符标识构建着色字符串对应的语法树。
对于字符串“pos=pos0.x+10”,其对应的语法树结构如图1e所示,即便是相同字符类型的字符内容,如“=”和“+”,由于其在字符串中的位置不同,因此,两者在语法树的层级也是不同的,
另外,需要说明的是,抽象语法树的另一个特点为:不依赖于语言的细节。由于语法树是用编程语言编写的源代码的抽象语法结构的树表示。树的每个节点表示在源代码中出现的构造。语法是“抽象的”,因为它不代表真实语法中字符串之间的顺序,而是依赖字符串内部的结构以及内容相关的细节,即,可选的,在一些实施例中,步骤“根据字符类型和每个字符内容在着色字符串中的位置,以字符内容为节点构建着色字符串对应的语法树”,具体可以包括:
(61)删除字符类型为预设字符类型的字符内容;
(62)以连接运算字符为基准,根据剩余的字符对应的字符标识构建着色字符串对应的语法树。
其中,预设字符类型可以根据实际进行设置,比如,将数值字符类型设置为预设字符类型,也可以将对象字符类型设置为预设字符类型,具体的,对于“pos=pos0.x+10)”,在该字符串中,将“)”设置为预设字符类型,只有“)”不是预设字符类型的字符内容,故,在语法树中会将其删除,也就是说,语法树和字符串并不是完全匹配的,其所表达的是与字符串结构和细节相关的内容。
可选的,在一些实施例中,当语法树构建完成后,还可以对语法树进行语法分析,用于分析语法树中的变量、作用域和函数信息,变量信息可以包括变量名称、定义作用域、属性、变量类型、精度以及系统输入/输出变量。函数是指一段可以直接被另一段程序或代码引用的程序或代码,也叫做子程序。
105、基于语法树对着色语言文本进行测试。
在本申请中,可以基于语法树对三类问题进行测试,包括兼容问题、性能问题以及逻辑问题,其中,兼容问题指的是:某些特性在部分设备上不支持,比如,y660设备上使用扩展EXT_shader_framebuffer_fetch会导致花屏。性能问题指的是:某些特殊的内置函数或者特定用法,相对其他的实现方法更加的消耗性能。逻辑问题指的是除兼容问题和性能问题外。
在生成语法树后,可以对着色语言文本执行静态代码扫描,静态代码扫描为在软件工程中,程序员在写好源代码之后,无需经过编译器的编译,无需搭建源代码的运行环境,而直接使用一些扫描工具对源代码进行扫描,可以节省大量的人力和时间成本,提高开发效率,并且可以根据语法树找出源代码中存在的很多只靠人力无法发现的一些安全漏洞,从而提高了代码扫描的准确性,大大降低了项目中的安全风险,提高了软件质量。这样为上层静态代码检查项扫描提供了准确、高效的符号化结果,使得代码中的检查项具备语法层面以及逻辑分析能力,最终输出的代码扫描结果能够帮助开发人员、测试人员快速定位代码中隐藏的问题,进而提高了代码质量,降低后期对代码的修复成本。
例如,具体的,可以遍历语法树中的所有标识符号,将标识符号与标准着色文本进行匹配,当匹配成功时,则获取匹配的文本对应的表达(规则描述),即,可选的,在一些实施例中,步骤“基于语法树对着色语言文本进行测试”,具体可以包括:
(71)调用预设的标准着色语言文本;
(72)基于语法树以及标准着色语言文本,对着色语言文本进行静态测试,并显示测试结果。
其中,标准着色语言文本是预先设置的,其具有相应的规则描述,通过标识符号与标准着色文本的匹配,可以确定着色语言文本中存在哪些问题,当然,还可以通过可视化的形式显示相应的信息,即,可选的,在一些实施例中,步骤“显示测试结果”,具体可以为:显示着色语言文本中各着色字符串对应的规则描述信息和位置信息。
本申请提供的着色语言的测试方法,在获取到着色语言文本后,对着色语言文本中的着色字符串进行分解,从而构建着色字符串对应的语法树,然后,利用构建的语法树对着色语言文本进行测试,即,使用了应用程序文件着色器对应的代码,避免开发游戏时的游戏引擎而导致使用大量的测试设备,进而提高了着色语言的测试效率。
根据实施例所述的方法,以下将举例进一步详细说明。
在本实施例中将以该着色语言的测试装置具体集成在终端中为例进行说明。
请参阅图2a,一种着色语言的测试方法,具体流程可以如下:
201、终端接收待检测应用的应用程序文件。
例如,用户在对待检测游戏的代码进行编译并打包,用户将应用程序文件上传至终端中,比如,可以在终端上显示文件上传控件,响应于用户针对文件上传控件触发的操作,终端接收待检测应用的应用程序文件。
202、终端解析应用程序文件,得到待检测应用对应的着色语言文本。
例如,具体的,终端首先可以确定应用程序文件对应的开发引擎,开发引擎可以包括Unity和UE4,然后,终端根据应用程序文件对应的开发引擎对应用程序文件进行解析,得到待检测应用对应的着色语言文本,比如,终端可以调用编辑器对应用程序文件进行解析,从而得到待检测应用对应的着色语言文本。
203、终端对着色字符串进行分解处理,得到着色字符串对应的字符集合。
其中,着色语言文本包括至少一个着色字符串,具体的,终端可以对着色字符串进行词法分析,着色字符串对应的字符集合,字符集合包括至少一个字符,字符是类字形单位或符号,包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。
204、终端根据字符集合中的字符,构建着色字符串对应的语法树。
例如,具体的,终端可以以字符集合中的字符为基准,构建着色字符串对应的语法树。
205、终端基于语法树对着色语言文本进行测试。
例如,具体的,终端可以遍历语法树中的所有标识符号,将标识符号与标准着色文本进行匹配,终端当匹配成功时,则获取匹配的文本对应的规则描述。
为了便于进一步理解本申请的着色语言的测试方案,请参阅图2b,以自动化测试着色器的场景为例进行具体说明,终端可以显示自动化测试页面,该自动化测试页面中显示有自动化测试进度以及文件上传控件,响应于用户针对文件上传控件触发的操作,终端接收用户上传的应用程序文件,然后,终端解析应用程序文件,得到包括至少一个着色字符串的着色语言文本,接着,终端对着色字符串进行抽象语法树处理,即,将着色字符串转换成语法树,最后,终端基于语法树对着色语言文本进行测试,并且,终端还可以显示测试结果,如图2c所示。
由上可知,本申请实施例的终端在接收待检测应用的应用程序文件后,终端解析所述应用程序文件,得到待检测应用对应的着色语言文本,然后,终端对着色字符串进行分解处理,得到着色字符串对应的字符集合,接着,终端根据字符集合中的字符,构建着色字符串对应的语法树,最后,终端基于语法树对着色语言文本进行测试。本申请提供的终端在获取到着色语言文本后,对着色语言文本中的着色字符串进行分解,从而构建着色字符串对应的语法树,然后,利用构建的语法树对着色语言文本进行测试,即,使用了应用程序文件着色器对应的代码,避免开发游戏时的游戏引擎而导致使用大量的测试设备,进而提高了着色语言的测试效率。
为便于更好的实施本申请实施例着色语言的测试方法,本申请实施例还提供一种基于上述着色语言的测试装置(简称测试装置)。其中名词的含义与上述着色语言的测试方法中相同,具体实现细节可以参考方法实施例中的说明。
请参阅图3,图3为本申请实施例提供的着色语言的测试装置的结构示意图,其中该测试装置可以包括接收模块301、解析模块302、分解模块303、构建模块304以及测试模块305,具体可以如下:
接收模块301,用于接收待检测应用的应用程序文件。
例如,具体的,用户在对待检测游戏的代码进行编译并打包,用户将应用程序文件上传至终端中,比如,接收模块301所在的终端可以显示文件上传控件,响应于用户针对文件上传控件触发的操作,接收模块301接收待检测应用的应用程序文件。
解析模块302,用于解析应用程序文件,得到待检测应用对应的着色语言文本。
其中,着色语言文本包括至少一个着色字符串,例如,具体的,解析模块302可以根据应用程序文件对应的开发引擎对应用程序文件进行解析,从而得到待检测应用对应的着色语言文本。
可选的,在一些实施例中,解析模块302具体可以包括:
第二识别单元,用于识别应用程序文件对应的开发引擎;
解析单元,用于基于识别结果对应用程序文件进行解析,得到待检测应用对应的着色语言文本。
可选的,在一些实施例中,解析单元具体可以用于:当应用程序文件对应的开发引擎为第一预设引擎类型时,获取应用程序文件的文件封装方式,基于文件封装方式对所述应用程序文件进行解析,得到应用程序文件的解析文本,从所述解析文本中提取待检测应用对应的着色语言文本。
可选的,在一些实施例中,解析单元具体可以用于:当应用程序文件对应的开发引擎为第二预设引擎类型时,对应用文件进行解压处理,得到待检测应用对应的序列化代码文本,对序列化代码文本进行反序列化处理,得到待检测应用对应的着色语言数据,解析着色语言数据,得到待检测应用对应的着色语言文本。
分解模块303,用于对着色字符串进行分解处理,得到着色字符串对应的字符集合。
构建模块304,用于根据字符集合中的字符,构建着色字符串对应的语法树。
例如,具体的,构建模块304可以对标识符号进行语法分析,然后,基于分析结果,以字符内容为节点,构建着色字符串对应的语法树
可选的,在一些实施例中,构建模块304具体可以包括:
获取单元,用于获取字符集合中每个字符对应的字符标识;
构建单元,用于以获取的字符标识为节点,构建着色字符串对应的语法树。
可选的,在一些实施例中,构建单元具体可以包括:
识别子单元,用于识别各字符内容的字符类型;
确定子单元,用于将字符类型为连接运算符类型的字符确定为连接运算字符;
构建子单元,用于以连接运算字符为基准,根据获取的字符标识构建所述着色字符串对应的语法树。
可选的,在一些实施例中,构建子单元具体可以用于:删除字符类型为预设字符类型的字符内容,以连接运算字符为基准,根据剩余的字符对应的字符标识构建所述着色字符串对应的语法树。
测试模块305,用于基于语法树对着色语言文本进行测试。
例如,具体的,测试模块305可以遍历语法树中的所有标识符号,将标识符号与标准着色文本进行匹配,测试模块305当匹配成功时,则获取匹配的文本对应的规则描述。
可选的,在一些实施例中,测试模块305具体可以包括:
调用单元,用于调用预设的标准着色语言文本;
测试单元,用于基于语法树以及标准着色语言文本,对着色语言文本进行静态测试;
显示单元,用于显示测试结果。
可选的,在一些实施例中,显示单元具体可以用于:显示着色语言文本中各着色字符串对应的规则描述信息和位置信息。
本申请实施例的接收模块301在接收待检测应用的应用程序文件后,解析模块302解析所述应用程序文件,得到待检测应用对应的着色语言文本,然后,分解模块303对着色字符串进行分解处理,得到着色字符串对应的字符集合,接着,构建模块304根据字符集合中的字符,构建着色字符串对应的语法树,最后,测试模块305基于语法树对着色语言文本进行测试。本申请提供的测试装置在获取到着色语言文本后,对着色语言文本中的着色字符串进行分解,从而构建着色字符串对应的语法树,然后,利用构建的语法树对着色语言文本进行测试,即,使用了应用程序文件着色器对应的代码,避免开发游戏时的游戏引擎而导致使用大量的测试设备,进而提高了着色语言的测试效率。
此外,本申请还提供一种电子设备,如图4所示,其示出了本申请所涉及的电子设备的结构示意图,具体来讲:
该电子设备可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403和输入单元404等部件。本领域技术人员可以理解,图4中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器401是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器401可包括一个或多个处理核心;优选的,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。
存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
电子设备还包括给各个部件供电的电源403,优选的,电源403可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该电子设备还可包括输入单元404,该输入单元404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,电子设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,电子设备中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:
接收待检测应用的应用程序文件,解析应用程序文件,得到待检测应用对应的着色语言文本,对着色字符串进行分解处理,得到着色字符串对应的字符集合,根据字符集合中的字符,构建着色字符串对应的语法树,基于语法树对着色语言文本进行测试。
在一些实施例中,实现功能:获取字符集合中每个字符对应的字符标识;以获取的字符标识为节点,构建着色字符串对应的语法树。
在一些实施例中,实现功能:识别各字符内容的字符类型;将字符类型为连接运算符类型的字符确定为连接运算字符;以连接运算字符为基准,根据获取的字符标识构建所述着色字符串对应的语法树。
在一些实施例中,实现功能:删除字符类型为预设字符类型的字符;以连接运算字符为基准,根据剩余的字符对应的字符标识构建所述着色字符串对应的语法树。
在一些实施例中,实现功能:识别所述应用程序文件对应的开发引擎;基于识别结果对所述应用程序文件进行解析,得到所述待检测应用对应的着色语言文本。
在一些实施例中,实现功能:当所述应用程序文件对应的开发引擎为第一预设引擎类型时,获取应用程序文件的文件封装方式;基于所述文件封装方式对所述应用程序文件进行解析,得到所述应用程序文件的解析文本;从所述解析文本中提取所述待检测应用对应的着色语言文本。
在一些实施例中,实现功能:当所述应用程序文件对应的开发引擎为第二预设引擎类型时,对所述应用文件进行解压处理,得到所述待检测应用对应的序列化代码文本;对所述序列化代码文本进行反序列化处理,得到所述待检测应用对应的着色语言数据;解析所述着色语言数据,得到所述待检测应用对应的着色语言文本。
在一些实施例中,实现功能:调用预设的标准着色语言文本;基于所述语法树以及标准着色语言文本,对所述着色语言文本进行静态测试,并显示测试结果。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
本申请实施例在接收待检测应用的应用程序文件后,解析应用程序文件,得到待检测应用对应的着色语言文本,然后,对着色字符串进行分解处理,得到着色字符串对应的字符集合,接着,根据字符集合中的字符,构建着色字符串对应的语法树,最后,基于语法树对所述着色语言文本进行测试。本申请提供的着色语言的测试方法,在获取到着色语言文本后,对着色语言文本中的着色字符串进行分解,从而构建着色字符串对应的语法树,然后,利用构建的语法树对着色语言文本进行测试,即,使用了应用程序文件着色器对应的代码,避免开发游戏时的游戏引擎而导致使用大量的测试设备,进而提高了着色语言的测试效率。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本申请所提供的任一种着色语言的测试方法中的步骤。例如,该指令可以执行如下步骤:
接收待检测应用的应用程序文件,解析应用程序文件,得到待检测应用对应的着色语言文本,对着色字符串进行分解处理,得到着色字符串对应的字符集合,根据字符集合中的字符,构建着色字符串对应的语法树,基于语法树对着色语言文本进行测试。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该存储介质中所存储的指令,可以执行本申请所提供的任一种着色语言的测试方法中的步骤,因此,可以实现本申请所提供的任一种着色语言的测试方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种可选实现方式中提供的方法。
以上对本申请所提供的一种着色语言的测试方法、装置、电子设备以及存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (12)
1.一种应用测试方法,其特征在于,包括:
接收待检测应用的应用程序文件;
解析所述应用程序文件,得到所述待检测应用对应的着色语言文本,所述着色语言文本包括至少一个着色字符串;
对所述着色字符串进行分解处理,得到所述着色字符串对应的字符集合;
根据所述字符集合中的字符,构建所述着色字符串对应的语法树;
基于所述语法树对所述着色语言文本进行测试。
2.根据权利要求1所述的方法,其特征在于,所述根据所述字符集合中的字符,构建所述着色字符串对应的语法树,包括:
获取所述字符集合中每个字符对应的字符标识;
以获取的字符标识为节点,构建所述着色字符串对应的语法树。
3.根据权利要求2所述的方法,其特征在于,所述以获取的字符标识为节点,构建所述着色字符串对应的语法树,包括:
识别各字符的字符类型;
将字符类型为连接运算符类型的字符确定为连接运算字符;
以连接运算字符为基准,根据获取的字符标识构建所述着色字符串对应的语法树。
4.根据权利要求3所述的方法,其特征在于,所述以连接运算字符为基准,根据获取的字符标识构建所述着色字符串对应的语法树,包括:
删除字符类型为预设字符类型的字符;
以连接运算字符为基准,根据剩余的字符对应的字符标识构建所述着色字符串对应的语法树。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述解析所述应用程序文件,得到所述待检测应用对应的着色语言文本,包括:
识别所述应用程序文件对应的开发引擎;
基于识别结果对所述应用程序文件进行解析,得到所述待检测应用对应的着色语言文本。
6.根据权利要求5所述的方法,其特征在于,所述基于识别结果对所述应用程序文件进行解析,得到所述待检测应用对应的着色语言文本,包括:
当所述应用程序文件对应的开发引擎为第一预设引擎类型时,获取应用程序文件的文件封装方式;
基于所述文件封装方式对所述应用程序文件进行解析,得到所述应用程序文件的解析文本;
从所述解析文本中提取所述待检测应用对应的着色语言文本。
7.根据权利要求5所述的方法,其特征在于,所述基于识别结果对所述应用程序文件进行解析,得到所述待检测应用对应的着色语言文本,包括:
当所述应用程序文件对应的开发引擎为第二预设引擎类型时,对所述应用文件进行解压处理,得到所述待检测应用对应的序列化代码文本;
对所述序列化代码文本进行反序列化处理,得到所述待检测应用对应的着色语言数据;
解析所述着色语言数据,得到所述待检测应用对应的着色语言文本。
8.根据权利要求1至4任一项所述的方法,其特征在于,所述基于所述语法树对所述着色语言文本进行测试,包括:
调用预设的标准着色语言文本;
基于所述语法树以及标准着色语言文本,对所述着色语言文本进行静态测试,并显示测试结果。
9.根据权利要求8所述的方法,其特征在于,所述显示测试结果包括:
显示所述着色语言文本中各着色字符串对应的规则描述信息和位置信息。
10.一种着色语言的测试装置,其特征在于,包括:
接收模块,用于接收待检测应用的应用程序文件;
解析模块,用于解析所述应用程序文件,得到所述待检测应用对应的着色语言文本,所述着色语言文本包括至少一个着色字符串;
分解模块,用于对所述着色字符串进行分解处理,得到所述着色字符串对应的字符集合;
构建模块,用于根据所述字符集合中的字符,构建所述着色字符串对应的语法树;
测试模块,用于基于所述语法树对所述着色语言文本进行测试。
11.一种电子设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如权利要求1-9任一项所述着色语言的测试方法的步骤。
12.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1-9任一项所述着色语言的测试方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110089213.6A CN114816972A (zh) | 2021-01-22 | 2021-01-22 | 着色语言的测试方法、装置、电子设备以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110089213.6A CN114816972A (zh) | 2021-01-22 | 2021-01-22 | 着色语言的测试方法、装置、电子设备以及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114816972A true CN114816972A (zh) | 2022-07-29 |
Family
ID=82523753
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110089213.6A Pending CN114816972A (zh) | 2021-01-22 | 2021-01-22 | 着色语言的测试方法、装置、电子设备以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114816972A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117270962A (zh) * | 2023-11-22 | 2023-12-22 | 北京渲光科技有限公司 | 一种处理着色语言的方法、装置、存储介质及电子设备 |
-
2021
- 2021-01-22 CN CN202110089213.6A patent/CN114816972A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117270962A (zh) * | 2023-11-22 | 2023-12-22 | 北京渲光科技有限公司 | 一种处理着色语言的方法、装置、存储介质及电子设备 |
CN117270962B (zh) * | 2023-11-22 | 2024-02-09 | 北京渲光科技有限公司 | 一种处理着色语言的方法、装置、存储介质及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108885545B (zh) | 用于实时数据流编程语言的工具和方法 | |
US9952835B2 (en) | Generation of hybrid enterprise mobile applications in cloud environment | |
CN108037913B (zh) | xUML4MC模型到MSVL语言程序的转换方法、计算机可读存储介质 | |
EP3834080B1 (en) | Static reconcilliation of application view hierarchies | |
CN115543290B (zh) | 可视化编程方法及系统 | |
CN112818176B (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN113448562A (zh) | 一种逻辑代码自动生成方法、装置和电子设备 | |
CN107797805B (zh) | 一种代码封装方法、装置及计算机可读存储介质 | |
CN113448852A (zh) | 一种测试案例的获取方法、装置、电子设备及存储介质 | |
CN116755669A (zh) | 一种基于dsl语言操作模型的低代码开发方法和工具 | |
CN113778897A (zh) | 接口的自动测试方法、装置、设备及存储介质 | |
CN115509522A (zh) | 面向低代码场景的接口编排方法、系统、电子设备 | |
CN114398282A (zh) | 测试脚本的生成方法、装置、设备及存储介质 | |
CN112860584B (zh) | 基于工作流模型的测试方法及装置 | |
CN114816972A (zh) | 着色语言的测试方法、装置、电子设备以及存储介质 | |
CN113220561A (zh) | 一种测试用例管理方法、装置、设备及介质 | |
CN113296759B (zh) | 用户界面处理方法、用户界面处理系统、设备及存储介质 | |
CN111539200B (zh) | 一种生成富文本的方法、装置、介质和电子设备 | |
CN115495362A (zh) | 生成测试代码的方法、装置、存储介质及计算机设备 | |
CN111273913B (zh) | 一种输出规范表示的应用程序接口数据的方法及装置 | |
CN107918958B (zh) | 一种可视化和可定制的三维渲染系统及方法 | |
CN117591104B (zh) | 模型的生成方法、装置、电子设备及存储介质 | |
CN117075912B (zh) | 用于程序语言转换的方法、编译方法及相关设备 | |
US20240160459A1 (en) | Continuous integration emulator | |
CN117251250B (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 |