一种代码检测方法、设备及介质转让专利

申请号 : CN201910769427.0

文献号 : CN110659204B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄斌袁明凯王烨坤罗章龙严明

申请人 : 腾讯科技(深圳)有限公司

摘要 :

本发明公开了一种代码检测方法、设备及介质,所述代码检测的方法能够通过语义信息进行检测,或者通过场景逻辑进行检测。其中,通过语义信息进行检测的方法可以通过词库或者翻译获取代码变量的语义信息,所述语义信息能够表征代码执行的操作,根据通用测试用例,寻找对应的代码执行操作进行代码检测。通过场景逻辑检测的方法包括结合逻辑关系模型和语义信息,明确场景逻辑的语义,进行逐层筛选场景逻辑,检查伪代码文件中条件缺失的部分。所述方法将应用场景和代码变量进行关联,在具体的应用场景中进行错误代码的检测,并通过语义信息校验并明确代码变量之间的逻辑关系,提高场景逻辑筛选的准确度,同时提高了代码检测的准确度。

权利要求 :

1.一种代码检测方法,其特征在于,所述方法包括:获取源码文件编译的数据文件;

通过反编译数据文件,获取伪代码文件,所述伪代码文件为和源码文件逻辑相匹配的文件;

获取所述伪代码文件中代码变量的语义信息,所述语义信息为用于表征代码变量执行的操作;

基于所述语义信息对所述代码变量进行检测,获取所述伪代码文件中的错误代码;

基于预设的逻辑关系模型,确定所述伪代码文件中代码变量之间的逻辑关系,所述逻辑关系模型为do‑is、is‑is、is‑do和do‑do的逻辑关系组成的逻辑关系模型;

根据所述语义信息和所述逻辑关系,得到所述代码变量组成的场景逻辑;

基于所述场景逻辑对所述代码变量进行检测,获取所述伪代码文件中的错误代码。

2.根据权利要求1所述的一种代码检测方法,其特征在于,所述获取伪代码文件中代码变量的语义信息包括:

查找预设的词库信息是否存在所述伪代码文件中的代码变量;

若查找的结果为是时,则根据查找结果,获取所述代码变量的语义信息。

3.根据权利要求2所述的一种代码检测方法,其特征在于,所述获取所述伪代码文件中代码变量的语义信息还包括:

若查找的结果为否时,则根据预设的代码命名方法,拆分所述代码变量;

通过翻译所述拆分后的代码变量,获取所述代码变量的语义信息。

4.根据权利要求1所述的一种代码检测方法,其特征在于,所述基于所述语义信息对所述代码变量进行检测,获取所述伪代码文件中的错误代码包括:根据所述代码变量的语义信息,确定代码变量执行的操作;

确定通用测试用例中执行的操作;

根据所述通用测试用例中执行的操作,检测是否存在对应的代码变量执行的操作;

若否,则确定所述代码变量为伪代码文件中的错误代码。

5.根据权利要求1所述的一种代码检测方法,其特征在于,所述获取代码变量之间的逻辑关系之后,还包括:

根据所述语义信息,检查代码变量执行的操作是否关联;

若否,则确定所述代码变量之间的逻辑关系为错误的逻辑关系,并排除所述错误的逻辑关系。

6.根据权利要求1所述的一种代码检测方法,其特征在于,所述根据所述语义信息和所述逻辑关系,得到所述代码变量组成的场景逻辑包括:根据所述语义信息,确定所述代码变量执行的操作;

基于所述逻辑关系组合所述代码变量执行的操作,得到所述代码变量组成的场景逻辑。

7.根据权利要求1所述的一种代码检测方法,其特征在于,所述基于所述场景逻辑对所述代码变量进行检测,获取所述伪代码文件中的错误代码包括:基于所述场景逻辑中确定的语义信息,在伪代码文件中筛选所述场景逻辑,获取所述场景逻辑的出现次数;

若所述场景逻辑的出现次数大于或等于预设阈值,则确定所述场景逻辑为固定逻辑;

根据所述固定逻辑,检测所述伪代码文件中相同类型的场景逻辑是否与所述固定逻辑匹配;

若否,则确定所述场景逻辑为伪代码文件中的错误代码。

8.一种设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1‑7任一项所述的一种代码检测方法。

9.一种介质,所述介质包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1‑7任一项所述的一种代码检测方法。

说明书 :

一种代码检测方法、设备及介质

技术领域

[0001] 本发明涉及代码调试领域,尤其涉及一种代码检测方法、设备及介质。

背景技术

[0002] 对于软件项目,尤其是游戏项目而言,存在一部分为代理项目的游戏,而对于绝大部分代理项目,源代码是高度机密信息,因此对这类项目直接进行源代码层级的扫描方案
经常是不可行。代理项目游戏中如果存在错误代码,进行检测和修正可能会不够及时准确,
容易引起玩家的不满情绪,会对游戏运营造成不良影响。
[0003] 此外,在进行代码检测时,通常只是在代码层面上进行检测,检查代码的功能是否完善,但是与具体的应用场景是分离的,不能确定代码是否能够完成具体的应用场景。有的
场景下,如果缺少某一判断条件,可能会导致玩家越权执行操作或者游戏角色的伤害计算
不对等等情况,但是可能在代码层面,缺少该判断条件并不会出现明显的问题。因此会出现
在运行代码时没有检测到错误的代码,但是更新游戏后,玩家在具体游戏场景里进行操作
时会出现漏洞的问题,同样会对游戏运营造成不良影响。

发明内容

[0004] 为了解决不能直接扫描源代码,以及技术代码和场景语义分离的问题,得到在无源码的情况下分析,以及关联代码和场景的技术效果,本发明提供了一种代码检测方法、设
备及介质。
[0005] 一方面,本发明提供了一种代码检测方法,所述方法包括:
[0006] 获取源码文件编译的数据文件;
[0007] 通过反编译数据文件,获取伪代码文件,所述伪代码文件为和源码文件逻辑相匹配的文件;
[0008] 获取所述伪代码文件中代码变量的语义信息,所述语义信息为用于表征代码变量执行的操作;
[0009] 基于所述语义信息对所述代码变量进行检测,获取所述伪代码文件中的错误代码;
[0010] 确定所述伪代码文件中代码变量之间的逻辑关系;
[0011] 根据所述语义信息和所述逻辑关系,得到所述代码变量组成的场景逻辑;
[0012] 基于所述场景逻辑对所述代码变量进行检测,获取所述伪代码文件中的错误代码。
[0013] 另一方面提供了一种设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所
述代码集或指令集由所述处理器加载并执行一种代码检测方法。
[0014] 另一方面提供了一种介质,所述介质包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所
述代码集或指令集由所述处理器加载并执行以实现一种代码检测方法。
[0015] 本发明提供的一种代码检测方法、设备及介质,所述方法能够通过语义信息进行检测,或者通过场景逻辑进行检测。其中,通过语义信息进行检测的方法可以通过词库或者
翻译获取代码变量的语义信息,所述语义信息能够表征代码执行的操作,根据通用测试用
例,寻找对应的代码执行操作进行代码检测。通过场景逻辑检测的方法可以根据逻辑关系
模型和语义信息,获取代码变量组成的场景逻辑,所述语义信息可以对所述场景逻辑进行
校验,排除错误的逻辑关系,以及对场景逻辑的语义进行明确。在伪代码文件中进行逐层筛
选场景逻辑,可以检查伪代码文件中场景逻辑条件缺失的部分。所述方法将应用场景和代
码变量进行关联,在具体的应用场景中进行错误代码的检测,并通过语义信息校验并明确
代码变量之间的逻辑关系,提高场景逻辑筛选的准确度,同时提高了代码检测的准确度。

附图说明

[0016] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本
发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以
根据这些附图获得其他的附图。
[0017] 图1为本发明实施例提供的一种代码检测方法的应用场景示意图;
[0018] 图2为本发明实施例提供的一种代码检测方法的流程图;
[0019] 图3为本发明实施例提供的一种代码检测方法中获取所述伪代码文件中代码变量的语义信息的方法的流程图;
[0020] 图4为本发明实施例提供的一种代码检测方法中基于所述语义信息进行错误代码检测的方法的流程图;
[0021] 图5为本发明实施例提供的一种代码检测方法中确定伪代码文件中代码变量之间的逻辑关系之后,进行错误的逻辑关系的排查方法;
[0022] 图6为本发明实施例提供的一种代码检测方法中获取代码变量组成的场景逻辑的方法的流程图;
[0023] 图7为本发明实施例提供的一种代码检测方法中基于所述场景逻辑检测伪代码文件中的错误代码的方法;
[0024] 图8为本发明实施例提供的一种代码检测装置的结构示意图;
[0025] 图9为本发明实施例提供的一种用于实现本发明实施例所提供的方法的设备的硬件结构示意图。

具体实施方式

[0026] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施
例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得
的所有其他实施例,都属于本发明保护的范围。
[0027] 在本发明的描述中,需要理解的是,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第
一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。而且,术语“第一”、
“第二”等适用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样
使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图
示或描述的那些以外的顺序实施。
[0028] 首先对本发明实施例中所涉及的相关术语做以下解释:
[0029] Python:Python是一种计算机程序设计语言,是一种面向对象的动态类型语言。
[0030] C++:是C语言的继承,既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序
设计。
[0031] 驼峰命名法:是电脑程式编写时的一套命名规则,是指混合使用大小写字母来构成变量和函数的名字,程序员们为了自己的代码能更容易的在同行之间交流,所以多采取
统一的可读性比较好的命名方式。
[0032] Windows:Windows操作系统是最常见的计算机操作系统,是微软公司开发的操作软件。
[0033] Linux:是一套免费使用和自由传播的类Unix操作系统,UNIX操作系统是一个多用户、多任务的分时操作系统,支持多种处理器架构。Linux是一个基于可移植操作系统接口
和Unix的多用户、多任务、支持多线程和多中央处理器的操作系统。
[0034] 请参见图1,其显示了本发明实施例提供的一种代码检测方法的应用场景示意图,所述应用场景包括用户终端19和服务器120。其中所述服务器通过部署在服务器上的反编
译程序,对用户终端中运行的待检测项目进行反编译,获得待检测项目的伪代码文件。服务
器通过词库或者翻译获取伪代码文件中代码变量的语义信息。基于所述语义信息,检测执
行器扫描所述伪代码文件,检测伪代码文件中的错误代码。获取伪代码文件中代码变量之
间的逻辑关系,根据所述语义信息和逻辑关系,得到所述代码变量组成的场景逻辑。基于所
述场景逻辑,检测执行器扫描所述伪代码文件,检测伪代码文件中的错误代码。
[0035] 在本发明实施例中,所述待检测项目为应用程序,比如游戏应用,可以应用在手机、电脑、笔记本等用户终端上。
[0036] 在本发明实施例中,所述检测执行器可以为部署在服务器上的检测程序,所述检测程序可以直接在Windows/Linux环境下对伪代码文件进行扫描,也可以部署或集成在工
具平台进行使用。
[0037] 在本发明实施例中,所述服务器用于提供Windows/Linux环境,以进行伪代码文件的扫描,所述服务器还可以是部署了检测程序的工具平台,对待检测项目进行检测。
[0038] 在本发明实施例中,应用了自然语言处理的方式,获取语义信息和场景逻辑,对代码进行检测。其中,自然语言处理(Nature Language processing,NLP)是计算机科学领域
与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通
信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因
此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着
密切的联系。自然语言处理技术通常包括文本处理、语义理解、机器翻译、机器人问答、知识
图谱等技术。
[0039] 请参见图2,其显示了一种代码检测方法,可应用于服务器侧,所述方法包括:
[0040] S210.获取源码文件编译的数据文件;
[0041] S220.通过反编译数据文件,获取伪代码文件,所述伪代码文件为和源码文件逻辑相匹配的文件;
[0042] 具体地,源码文件一般可以被编译成二进制文件,通过反汇编工具(Interactive Disassembler,IDA)则可以将二进制文件反编译逆向成伪代码文件,在伪代码文件中,具有
和源码类似的逻辑,可以表征代码执行的功能。
[0043] 具体地,所述伪代码文件为类C伪代码文件,具有类似C语言的逻辑结构。
[0044] 在本发明实施例中,反编译获取伪代码的方法,使得扫描程序可以在无源码的情况下直接对后面服务器文件进行反编译扫描,在避免代码泄露情况下进行风险预警。
[0045] S230.获取所述伪代码文件中代码变量的语义信息,所述语义信息为用于表征代码变量执行的操作;
[0046] 进一步地,请参见图3,所述获取所述伪代码文件中代码变量的语义信息的方法包括:
[0047] S310.查找预设的词库信息是否存在所述伪代码文件中的代码变量;
[0048] S320.若查找的结果为是时,则根据所述查找结果,获取所述代码变量的语义信息。
[0049] S330.若查找的结果为否时,则根据预设的代码命名方法,拆分所述代码变量;
[0050] S340.通过翻译所述拆分后的代码变量,获取所述代码变量的语义信息。
[0051] 具体地,代码变量的语义信息,包括类名和函数名等等,并不是完整含义的单词,通常是很多代码级的缩写,例如,一个表示判断玩家是否在游戏中的代码变量的名称可能
是isInGame、isOnline、bInGame、bOnline等等。在进行代码变量的语义分析之前,进行代码
变量的扫描和分析,通过去重合并的方式,建立代码变量的语义信息的词库。在进行语义分
析时,若在词库中能够直接查找到代码变量,则可以直接获取代码变量的语义信息。
[0052] 若在词库中没有查找到代码变量,可以根据代码名称命名法,对所述代码变量进行拆分。
[0053] 具体地,所述代码名称命名法可以是驼峰命名法,所述驼峰命名法指的是混合使用大小字母来构成变量和函数的名字,具有较好的可读性,能够显示所述代码变量的功能。
[0054] 例如在词库中没有查找到的代码变量为bInGame,则通过驼峰命名法,可以拆解为[b、in、game],之后根据中英文翻译的词库,查找拆解后的代码名称对应的中文词汇,对拆
解后的代码名称进行翻译,获取代码变量的语义信息。例如上述的bInGame,拆解为[b、in、
game],其中b表示判断,in表示在,game表示游戏,由此可以获得该代码变量的语义信息是
判断玩家是否在游戏中。
[0055] S240.基于所述语义信息对所述代码变量进行检测,获取所述伪代码文件中的错误代码;
[0056] 进一步地,请参见图4,基于所述语义信息进行错误代码检测的方法包括:
[0057] S410.根据所述代码变量的语义信息,确定代码变量执行的操作;
[0058] S420.确定通用测试用例中执行的操作;
[0059] S430.根据所述通用测试用例中执行的操作,检测是否存在对应的代码变量执行的操作;
[0060] S440.若否,则确定所述代码变量为伪代码文件中的错误代码。
[0061] 具体地,通过语义信息,可以确定代码变量执行的操作。从语义信息中可以获得代码变量的作用,例如代码变量bInGame是用来判断玩家是否在游戏中的代码变量。此时可以
通过语义信息进行初步的错误代码检测。通用的测试用例中通常会有固定的判断条件,根
据固定的判断条件,基于代码变量的语义信息,查找伪代码文件中是否具有与判断条件对
应的代码变量。若不存在对应的代码变量,则说明伪代码文件中缺少了某个判断条件,此时
可以确定缺失的代码变量为伪代码文件中的错误代码部分。
[0062] 在一个具体的示例中,在游戏中,玩家组队进入副本时,通常测试用例中需要判断以下几个条件:是否组队,是否队长操作,是否队伍是否满等等。可以通过语义信息直接对
上述条件进行判断。若某项目反编译伪代码判断结果如下:有队伍满判断,但是缺少队长等
其他权限判断,那么在该项目中可能存在玩家越权风险,所述伪代码文件中出现了错误代
码。
[0063] 根据语义信息,能够明确代码变量执行的操作,将通用测试用例显示的场景与代码关联,能够在具体场景中进行代码检测,具有更好的检测效果。
[0064] S250.确定所述伪代码文件中代码变量之间的逻辑关系;
[0065] 进一步地,基于预设的逻辑关系模型,确定所述伪代码文件中代码变量之间的逻辑关系,所述逻辑关系模型包括多个与代码变量对应的逻辑关系。
[0066] 具体地,所述逻辑关系模型主要包括有四种逻辑关系,分别是do‑is、is‑is、is‑do和do‑do。在一个具体的示例中,在解散玩家组队的场景中包括了is‑do的逻辑关系,所述逻
辑关系由代码变量isTeamLeader和代码变量TeamDismiss组成,表示先判断是否为队长,再
进行队伍解散的操作。
[0067] 在所述逻辑关系模型中,do‑is为先解引用,后判空的逻辑关系,例如在物品掉落的场景中,先获得掉落数量,在判断掉落数量是否在0和预设的最大值之间,缺少is的判空
步骤可能导致逻辑错误。is‑is表示多重判断的逻辑关系,例如玩家是否死亡,玩家是否为
家族成员,满足上述两条判断时阵亡玩家才能进入家族领地,在多重判断中,如果缺少某个
判断,可能会导致条件漏判。is‑do表示先判断,再执行的逻辑关系,例如,先判断玩家是否
具有某个角色,当判断玩家具有该角色时,玩家才能够选择该角色进行控制。do‑do表示多
次执行不同的操作的逻辑关系,例如在玩家进行武器升级消耗材料和钱时,先扣钱,再扣除
材料等游戏道具。
[0068] 进一步地,请参见图5,确定伪代码文件中代码变量之间的逻辑关系之后,进行错误的逻辑关系的排查方法包括:
[0069] S510.根据所述语义信息,检查代码变量执行的操作是否关联;
[0070] S520.若否,则确定所述代码变量之间的逻辑关系为错误的逻辑关系,并排除所述错误的逻辑关系。
[0071] 具体地,在确定代码变量之间的逻辑关系之后,需要对所述逻辑关系进行校验,排查错误的逻辑关系。获得具有逻辑关系的多个代码变量各自的语义信息,通过语义信息,得
到代码变量具体执行的操作,判断代码变量具体执行的操作之间是否关联,可以进行逻辑
关系的校验。
[0072] 在一个具体的示例中,按照语义,isContainer需要关联的操作为GetContainer,为is‑do的逻辑关系,若仅根据逻辑关系,判断isContainer与GetPlayerID()关联,此时虽
然也是is‑do的逻辑关系,但是在具体执行操作时isContainer与GetPlayerID()并不相
关,则在此时发生了关联误报,出现了错误的逻辑关系,需要根据语义信息进行排除。根据
语义信息,isContainer为判断是否在容器中,getContainer为获取容器,GetPlayerID()
为获取玩家的身份信息,则可以清楚地判断出isContainer与GetContainer关联。
[0073] 通过语义信息,对代码变量之间的逻辑关系进行校验,使得场景逻辑的语义信息充分,有效避免了在后续步骤中筛查场景逻辑时的漏报及误报。在确定固定逻辑时,通过语
义信息明确了代码变量之间的逻辑关系,也可以减少阈值上限,便于快速准确地确定固定
逻辑。
[0074] S260.根据所述语义信息和所述逻辑关系,得到所述代码变量组成的场景逻辑;
[0075] 进一步地,请参见图6,获取代码变量组成的场景逻辑的方法包括:
[0076] S610.根据所述语义信息,确定所述代码变量执行的操作;
[0077] S620.基于所述逻辑关系组合所述代码变量执行的操作,得到所述代码变量组成的场景逻辑。
[0078] 具体地,基于预设的逻辑关系模型,在伪代码文件中查找到与逻辑关系模型匹配的多个代码变量的组合。根据语义信息,获得代码变量具体执行的操作。基于逻辑关系模
型,组合代码变量执行的操作,可以获得代码变量组成的场景逻辑。基于所述语义信息,所
述场景逻辑具有明确执行的操作。
[0079] 在一个具体的示例中,以组队场景为例,通过is‑do的逻辑关系,查找到的is‑do类型的场景包括创建队伍、邀请入队、添加入队、请离队伍、组队跟随、队长转移和队伍解散
等。在这些场景中,对于添加入队来说,需要满足三个期待结果,即队伍已经满时不能添加
玩家入队、已经离线玩家不能入队和玩家已经加入其他队伍。实现所述期待结果分别需要
通过isTeamFull检查队伍是否已满,然后通过CreateTeam创建队伍;通过isOnline检查玩
家是否在线,通过InviteTeam邀请入队;通过isInTeam检查玩家是否已经加入其他队伍,通
过InviteTeam邀请入队。
[0080] 此时在实现添加入队时,根据语义信息中表征的代码变量执行的操作,可以进一步明确上述的is‑do类型的场景为具有进行检查和执行操作的语义,即check‑do关系,所述
check‑do关系具有明确执行的操作。
[0081] 在本发明实施例中通过明确语义类型的方式,确保伪代码文件中的场景逻辑具有已经被明确的语义,使得在后续步骤进行场景逻辑的筛选时能够进行准确性更高的筛选。
[0082] S270.基于所述场景逻辑对所述代码变量进行检测,获取所述伪代码文件中的错误代码。
[0083] 进一步地,请参见图7,基于所述场景逻辑检测伪代码文件中的错误代码的方法包括:
[0084] S710.在伪代码文件中筛选所述场景逻辑,获取所述场景逻辑的出现次数;
[0085] S720.若所述场景逻辑的出现次数大于或等于预设阈值,则确定所述场景逻辑为固定逻辑;
[0086] S730.根据所述固定逻辑,检测所述伪代码文件中相同类型的场景逻辑是否与所述固定逻辑匹配;
[0087] S740.若否,则确定所述场景逻辑为伪代码文件中的错误代码。
[0088] 具体地,在伪代码文件中筛选所述场景逻辑,通过明确语义类型的方式,确保在后续的伪代码文件中出现的场景逻辑必须具有已经明确的语义,才能进行场景逻辑次数的统
计,若出现次数大于设定阈值,则说明其为固定逻辑的可能性较大,固定逻辑即为固定的场
景逻辑,包括明确的执行操作。根据所述固定逻辑,再在整个项目的伪代码中进行检查,若
具有与固定逻辑不匹配的情况,则可以确定此处的伪代码文件中出现了错误代码。
[0089] 在一个具体的示例中,根据is‑do逻辑关系模型和语义信息,查找到check‑do的场景逻辑并校验。在伪代码文件中筛选check‑do场景逻辑,进行check‑do场景逻辑出现次数
的统计。若出现次数大于设定阈值,则说明其为固定的check‑do关系的可能性大。在整个项
目的伪代码中检查check‑do关系,若某函数中,调用了do函数前未调用check函数进行检
查,据此可以判断此处可能存在逻辑校验条件缺失的情况。
[0090] 具体地,本发明实施例提供的方法可以应用在游戏场景中,对游戏中已经编译好的代码进行反编译,获得伪代码文件。所述伪代码文件具有和源码文件相似的逻辑,但是并
不是源码文件,所述方法直接对伪代码文件进行检测并报错。
[0091] 在获得游戏项目的伪代码文件后,根据预设的词库查询伪代码文件中代码变量的语义信息,所述词库是对大量的游戏项目中代码变量进行去重合并的词库,所述词库是可
以更新的,以保证能够获取语义信息的效率。若在词库中没有查找到语义信息,则根据驼峰
命名法拆分代码变量,并翻译拆分后的词汇,得到代码变量的语义信息。翻译时可以根据中
英文词库中的信息,获取英文信息对应的中文信息,以明确代码变量执行的操作。
[0092] 进行代码检测时可以选择直接利用语义信息进行代码检测,也可以通过逻辑关系和语义信息,获取场景逻辑,并基于所述场景逻辑进行代码检测,使得代码与游戏场景相关
联。
[0093] 具体地,根据所述语义信息获得代码变量执行的操作,检查测试用例中的操作是否与代码变量执行的操作对应,若存在代码变量执行的操作缺失的情况,则需要对缺失的
情况进行判断,检测是否会对伪代码文件实现的功能有影响。
[0094] 具体地,根据逻辑关系模型,获取伪代码文件中对应的代码变量。校验所述代码变量之间的关系,基于语义信息,判断代码变量之间是否关联。若不关联,则说明逻辑关系是
错误的,那么需要排除错误的逻辑关系。基于所述逻辑关系,组合代码向量执行的操作,得
到场景逻辑。场景逻辑中有具体执行的功能,例如检查‑操作,可以应用在具体的场景下的,
例如检查玩家是否已经有队伍,创建队伍。确定了具有逻辑关系的代码变量之间的具体的
语义关系,获得场景逻辑后,可以在伪代码文件中筛选场景逻辑,将所述场景逻辑固定为固
定逻辑,再根据所述固定逻辑,检查伪代码文件中是否存在固定逻辑条件缺失的地方,进行
代码检测并报错。
[0095] 具体地,实施本实施例中的一种代码检测方法的产品是由Python和C++编译实现的扫描程序共同组成,打包成压缩文件部署在服务器上给项目提供服务。工具支持windows
版本和linux版本,支持以可扩展标记语言的格式文件输出扫描结果,也可以结合网络平台
展示扫描结果。
[0096] 本发明实施例提供了一种代码检测的方法,所述代码检测的方法能够通过语义信息进行检测,或者通过场景逻辑进行检测。其中,通过语义信息进行检测的方法可以通过词
库或者翻译获取代码变量的语义信息,所述语义信息能够表征代码执行的操作,根据通用
测试用例,寻找对应的代码执行操作进行代码检测。通过场景逻辑检测的方法可以根据逻
辑关系模型和语义信息,获取代码变量组成的场景逻辑,所述语义信息可以对所述场景逻
辑进行校验,排除错误的逻辑关系,以及对场景逻辑的语义进行明确。在伪代码文件中进行
逐层筛选场景逻辑,可以检查伪代码文件中场景逻辑条件缺失的部分。进一步地,所述有益
效果包括:
[0097] (1)将应用场景和代码变量进行关联,在具体的应用场景中进行错误代码的检测,提高了代码检测的准确度;
[0098] (2)可以在无源码的情况下直接对后面服务器文件进行反编译扫描,在避免代码泄露情况下进行风险预警;
[0099] (3)通过语义信息校验并明确代码变量之间的逻辑关系,提高场景逻辑筛选的准确度,同时提高了代码检测的准确度。
[0100] 本发明实施例还提供了一种代码检测装置,请参见图8,所述装置包括:数据文件获取模块810、反编译模块820、语义信息获取模块830、第一错误代码检测模块840、逻辑关
系获取模块850、场景逻辑获取模块860和第二错误代码检测模块870;
[0101] 所述数据文件获取模块810用于获取源码文件编译的数据文件;
[0102] 所述反编译模块820用于通过反编译数据文件,获取伪代码文件,所述伪代码文件为和源码文件逻辑相似的文件;
[0103] 所述语义信息获取模块830用于获取所述伪代码文件中代码变量的语义信息,所述语义信息为用于表征代码变量执行的操作;
[0104] 所述第一错误代码检测模块840用于基于所述语义信息对所述代码变量进行检测,获取所述伪代码文件中的错误代码;
[0105] 所述逻辑关系获取模块850用于确定所述伪代码文件中代码变量之间的逻辑关系;
[0106] 所述场景逻辑获取模块860用于根据所述语义信息和所述逻辑关系,得到所述代码变量组成的场景逻辑;
[0107] 所述第二错误代码检测模块870用于基于所述场景逻辑对所述代码变量进行检测,获取所述伪代码文件中的错误代码。
[0108] 进一步地,所述第一错误代码检测模块包括:代码操作确定单元、示例操作获得单元、第一检测单元和第一输出单元;
[0109] 所述代码操作确定单元用于根据所述代码变量的语义信息,确定代码变量执行的操作;
[0110] 所述示例操作确定单元用于确定通用测试用例中执行的操作;
[0111] 所述第一检测单元用于根据所述通用测试用例中执行的操作,检测是否存在对应的代码变量执行的操作;
[0112] 所述第一输出单元用于若否,则输出所述代码变量为伪代码文件中的错误代码。
[0113] 进一步地,所述第二错误代码检测模块还包括场景逻辑得到单元、场景逻辑筛选单元、固定逻辑判断单元、第二检测单元和第二输出单元;
[0114] 所述场景逻辑筛选单元用于在伪代码文件中筛选所述场景逻辑,获取所述场景逻辑的出现次数;
[0115] 所述固定逻辑判断单元用于若所述逻辑场景的出现次数大于或等于预设阈值,则输出确定所述场景逻辑为固定逻辑;
[0116] 所述第二检测单元用于根据所述固定逻辑,检测所述伪代码文件中相同类型的场景逻辑是否与所述固定逻辑匹配根据所述固定逻辑,检测所述代码变量执行的操作构成的
场景逻辑是否完整;
[0117] 所述第二输出单元用于若否,则确定所述场景逻辑为伪代码文件中的错误代码输出所述代码变量为伪代码文件中的错误代码。
[0118] 上述实施例中提供的装置可执行本发明任意实施例所提供方法,具备执行该方法相应的功能模块和有益效果。未在上述实施例中详尽描述的技术细节,可参见本发明任意
实施例所提供的一种代码检测方法。
[0119] 本实施例还提供了一种计算机可读存储介质,所述存储介质中存储有计算机可执行指令,所述计算机可执行指令由处理器加载并执行本实施例上述的一种代码检测方法。
[0120] 可选地,在本实施例中,上述存储介质可以位于计算机网络的多个网络服务器中的至少一个网络服务器。可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只
读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动
硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0121] 本实施例还提供了一种设备,所述设备包括处理器和存储器,其中,所述存储器存储有计算机程序,所述计算机程序适于由所述处理器加载并执行本实施例上述的一种代码
检测方法。
[0122] 所述设备可以为计算机终端、移动终端或服务器,所述设备还可以参与构成本发明实施例所提供的装置或系统。如图9所示,计算机终端9(或移动终端9或服务器9)可以包
括一个或多个(图中采用902a、902b,……,902n来示出)处理器902(处理器902可以包括但
不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器904、以
及用于通信功能的传输装置906。除此以外,还可以包括:显示器、输入/输出接口(I/O接
口)、网络接口、电源和/或相机。本领域普通技术人员可以理解,图9所示的结构仅为示意,
其并不对上述电子装置的结构造成限定。例如,计算机终端9还可包括比图9中所示更多或
者更少的组件,或者具有与图9所示不同的配置。
[0123] 应当注意到的是上述一个或多个处理器902和/或其他数据处理电路在本文中通常可以被称为“数据处理电路”。该数据处理电路可以全部或部分的体现为软件、硬件、固件
或其他任意组合。此外,数据处理电路可为单个独立的处理模块,或全部或部分的结合到计
算机终端9(或移动设备9)中的其他元件中的任意一个内。如本申请实施例中所涉及到的,
该数据处理电路作为一种处理器控制(例如与接口连接的可变电阻终端路径的选择)。
[0124] 存储器904可用于存储应用软件的软件程序以及模块,如本发明实施例中所述的方法对应的程序指令/数据存储装置,处理器902通过运行存储在存储器904内的软件程序
以及模块,从而执行各种功能应用以及数据处理,即实现上述的一种基于自注意力网络的
时序行为捕捉框生成方法。存储器904可包括高速随机存储器,还可包括非易失性存储器,
如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储
器904可进一步包括相对于处理器902远程设置的存储器,这些远程存储器可以通过网络连
接至计算机终端9。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网
及其组合。
[0125] 传输装置906用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端9的通信供应商提供的无线网络。在一个实例中,传输装置906包括一个网络适
配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与
互联网进行通讯。在一个实例中,传输装置906可以为射频(Radio Frequency,RF)模块,其
用于通过无线方式与互联网进行通讯。
[0126] 显示器可以例如触摸屏式的液晶显示器(LCD),该液晶显示器可使得用户能够与计算机终端9(或移动终端9)的用户界面进行交互。
[0127] 本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤和顺序仅仅为众多步骤
执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或中断产品执行时,可以
按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理
的环境)。
[0128] 本实施例中所示出的结构,仅仅是与本申请方案相关的部分结构,并不构成对本申请方案所应用于其上的设备的限定,具体的设备可以包括比示出的更多或更少的部件,
或者组合某些部件,或者具有不同的部件的布置。应当理解到,本实施例中所揭露的方法、
装置等,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,
所述模块的划分仅仅为一种逻辑功能的划分,实际实现时可以有另外的划分方式,例如多
个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一
点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或
单元模块的间接耦合或通信连接。
[0129] 基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一
个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者
网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:
U盘、移动硬盘、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random 
Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0130] 本领域技术人员还可以进一步意识到,结合本说明书所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合实现,为了清楚地说明
硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步
骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条
件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但这种实
现不应认为超出本发明的范围。
[0131] 以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前
述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些
修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。