CN115202731A - 代码检测方法和代码检测装置、计算机设备、存储介质 - Google Patents

代码检测方法和代码检测装置、计算机设备、存储介质 Download PDF

Info

Publication number
CN115202731A
CN115202731A CN202210739692.6A CN202210739692A CN115202731A CN 115202731 A CN115202731 A CN 115202731A CN 202210739692 A CN202210739692 A CN 202210739692A CN 115202731 A CN115202731 A CN 115202731A
Authority
CN
China
Prior art keywords
code
target
character string
comparison result
result
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
Application number
CN202210739692.6A
Other languages
English (en)
Inventor
李飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ping An Life Insurance Company of China Ltd
Original Assignee
Ping An Life Insurance Company of China Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Ping An Life Insurance Company of China Ltd filed Critical Ping An Life Insurance Company of China Ltd
Priority to CN202210739692.6A priority Critical patent/CN115202731A/zh
Publication of CN115202731A publication Critical patent/CN115202731A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/31User authentication

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Library & Information Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例提供了代码检测方法和代码检测装置、计算机设备、存储介质,属于计算机技术领域。通过检测目标代码文件的提交状态,并在第一状态下,将目标字符串与历史字符串进行比对,以得到字符串比对结果;根据字符串比对结果从预设的对象名单中确定目标对象,并将字符串比对结果发送给目标对象;获取目标对象根据字符串比对结果的反馈信息,并根据反馈信息确定代码检测结果。本申请实施例旨在通过将每个代码接口和维护它的所有开发人员,即关联对象关联起来。当出现目标代码文件被提交,及时将代码修改情况通知到目标对象,目标对象至少包括一个关联对象,并根据目标对象的反馈信息确定代码检测结果,实现代码检测,提高了代码检测的效率。

Description

代码检测方法和代码检测装置、计算机设备、存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种代码检测方法和代码检测装置、计算机设备、存储介质。
背景技术
现有的应用系统开发接口所涉及的业务繁多,常常同一接口由多人开发,同一接口对接不同的开发人员,经常会出现代码被修改但开发人员不知道的情况。例如,在基于SVN的代码管理平台中,某人在提交自己代码的过程中,不小心动到其他开发人员的代码模块。或者,在协同开发过程,会存在公共部分的代码,开发人员在改动的过程中,可能存在不清楚其他业务需求的情况下,改动了公共部分,这极有可能导致严重的生产问题。因此,要求每个开发人员在发版前对当前版本的所有代码都浏览且评估,显然过于浪费人力。因此,如何提供一种代码检测方法,能够提高代码的检测效率,成为了亟待解决的技术问题。
发明内容
本申请实施例的主要目的在于提出一种代码检测方法和装置、设备、介质,能够提高代码的检测效率。
为实现上述目的,本申请实施例的第一方面提出了一种代码检测方法,所述方法包括:
检测目标代码文件的提交状态;其中,所述提交状态包括用于表征向服务器提交所述目标代码文件的第一状态;
在所述提交状态为所述第一状态下,对所述目标代码文件进行解析处理,以得到至少一个目标代码接口;其中,每一所述目标代码接口包括目标代码段和目标接口信息;
根据所述目标代码段生成目标字符串;
根据所述目标接口信息从所述服务器获取历史字符串;
将所述目标字符串与所述历史字符串进行比对,以得到字符串比对结果;
根据所述字符串比对结果从预设的对象名单中确定目标对象,并将所述字符串比对结果发送给所述目标对象;
获取所述目标对象根据所述字符串比对结果的反馈信息,并根据所述反馈信息确定代码检测结果。
在一些实施例,在所述检测目标代码文件的提交状态之后,所述方法还包括:
根据所述第一状态获检测所述目标代码文件的提交对象,得到当前提交对象;
根据所述目标代码文件从所述对象名单获取关联对象;
根据所述当前提交对象和所述关联对象,向所述关联对象发送警示信息。
在一些实施例,所述警示信息包括第一信息或第二信息,所述根据所述当前提交对象和所述关联对象,向所述关联对象发送警示信息,包括:
对所述当前提交对象和所述关联对象进行比对,得到对象比对结果;
若所述对象比对结果为所述关联对象不存在所述当前提交对象,则向所述关联对象发送所述第一信息;
或者,
若所述对象比对结果为所述关联对象存在所述当前提交对象,则获取所述当前提交对象的代码权限、并获取所述代码文件的操作权限范围;比对所述代码权限和所述操作权限范围,若所述代码权限不在所述操作权限范围内,则向所述关联对象发送所述第二信息。
在一些实施例,每一所述目标代码接口包括至少两个所述代码段,所述根据所述目标代码段生成目标字符串,包括:
对所有所述代码段进行扫描,确定每一所述代码段的代码调用关系;
根据所述代码调用关系得到每一所述代码段的拼接顺序;
根据所述拼接顺序将所述代码段进行拼接,得到所述目标字符串。
在一些实施例,所述字符串比对结果包括第一结果,所述将所述目标字符串与所述历史字符串进行比对,以得到字符串比对结果,包括:
获取所述目标字符串的拼接顺序,并获取所述历史字符串的预设顺序;其中,所述历史字符串由所述预设顺序进行拼接得到;
比对所述拼接顺序和所述预设顺序;
若所述拼接顺序与所述预设顺序不一致,得到所述第一结果。
在一些实施例,所述历史字符串包括历史代码段,所述字符串比对结果还包括第二结果,所述将所述目标字符串与所述历史字符串进行比对,以得到字符串比对结果,还包括:
若所述拼接顺序与所述预设顺序一致,则从所述目标字符串和所述历史字符串的起始位置开始,对每一所述目标代码段与每一所述历史代码段进行比对;
若所述目标代码段与所述历史代码段不一致,则对不一致的所述目标代码段进行标记,得到标记代码段、并得到所述第二结果。
在一些实施例,所述将所述目标字符串与所述历史字符串进行比对,以得到字符串比对结果,还包括:
对所述标记代码段进行编译,以得到编译结果;
根据所述编译结果确定所述标记代码段的风险等级;
将所述风险等级添加至所述第二结果。
为实现上述目的,本申请实施例的第二方面提出了一种代码检测装置,所述装置包括:
检测状态模块,用于检测目标代码文件的提交状态;其中,所述提交状态包括用于表征向服务器提交所述目标代码文件的第一状态;
解析处理模块,用于在所述提交状态为所述第一状态下,对所述目标代码文件进行解析处理,以得到至少一个目标代码接口;其中,每一所述目标代码接口包括目标代码段和目标接口信息;
生成模块,用于根据所述目标代码段生成目标字符串;
获取模块,用于根据所述目标接口信息从所述服务器获取历史字符串;
比对模块,用于将所述目标字符串与所述历史字符串进行比对,以得到字符串比对结果;
发送模块,用于根据所述字符串比对结果从预设的对象名单中确定目标对象,并将所述字符串比对结果发送给所述目标对象;
检测结果确定模块,用于获取所述目标对象根据所述字符串比对结果的反馈信息,并根据所述反馈信息确定代码检测结果。
为实现上述目的,本申请实施例的第三方面提出了一种计算机设备,所述计算机设备包括存储器、处理器、存储在所述存储器上并可在所述处理器上运行的程序以及用于实现所述处理器和所述存储器之间的连接通信的数据总线,所述程序被所述处理器执行时实现上述第一方面所述的方法。
为实现上述目的,本申请实施例的第四方面提出了一种存储介质,所述存储介质为计算机可读存储介质,用于计算机可读存储,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现上述第一方面所述的方法。
本申请提出的代码检测方法和代码检测装置、计算机设备、存储介质,通过检测目标代码文件的提交状态,并在提交状态为第一状态下,对目标代码文件进行解析处理,以得到至少一个目标代码接口;其中,每一目标代码接口包括目标代码段和目标接口信息,根据目标代码段生成目标字符串,根据目标接口信息从服务器获取历史字符串,根据目标字符串与历史字符串进行字符串比对得到的字符串比对结果从预设的对象名单中确定目标对象,并将字符串比对结果发送给目标对象;获取目标对象根据字符串比对结果的反馈信息,并根据反馈信息确定代码检测结果。本申请实施例旨在通过将每个代码接口和维护它的所有开发人员,即关联对象关联起来。当出现代码被提交,例如代码被修改,或者在多协同开发中,公共部分修改错误的情况下,通过字符串比对结果,及时将修改通知到目标对象,目标对象至少包括一个关联对象,并根据目标对象的反馈信息确定代码检测结果,实现代码检测。本申请实施例提高了代码检测的效率,也能够避免因代码修改而出现生产问题。
附图说明
图1是本申请实施例提供的代码检测方法的流程图;
图2是本申请实施例提供的代码检测方法的另一流程图;
图3是图1中的步骤S103的流程图;
图4是图1中的步骤S105的流程图;
图5是图1中的步骤S105的流程图;
图6是图1中的步骤S105的流程图;
图7是本申请实施例提供的代码检测装置的模块结构框图;
图8是本申请实施例提供的计算机设备的硬件结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。
需要说明的是,虽然在装置示意图中进行了功能模块划分,在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于装置中的模块划分,或流程图中的顺序执行所示出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
首先,对本申请中涉及的若干名词进行解析:
人工智能(Artificial Intelligence,AI):是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学;人工智能是计算机科学的一个分支,人工智能企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能可以对人的意识、思维的信息过程的模拟。人工智能还是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。
哈夫曼编码(Huffman Coding):又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。
RLE压缩算法(Run Length Encoding):可简称RLE算法,把数据按照线性序列分成两种情况:一种是连续的重复数据块,另一种是连续的不重复数据块。RLE算法的原理就是用一个表示块数的属性加上一个数据块代表原来连续的若干块数据,从而达到节省存储空间的目的。一般RLE算法都选择数据块的长度为1字节,表示块数的诚性也用1字节表示,对于颜色数小于256色的图像文件或文本文件,块长度选择1字节是比较合适的。RLE算法有很多优化和改进的变种算法,这些算法对连续重复数据的处理方式基本上都是一样的。对于连续重复出现的数据,RLE算法一般用两字节表示原来连续的多字节重复数据。
BF算法(Brute Force):是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。首先S[1]和T[1]比较,若相等,则再比较S[2]和T[2],一直到T[M]为止;若S[1]和T[1]不等,则S向右移动一个字符的位置,再依次进行比较。如果存在k,1≤k≤N,且S[k+1…k+M]=T[1…M],则匹配成功;否则失败。
RK算法:由Rabin和Karp共同提出,其基本思想就是:设模式串为P,其长度为m,主串为S,其长度为n。则模式串P可以看作是一个m位的d进制数A,主串S可以看作是一个n位的d进制数。模式匹配过程就是将A与主串中的每个长度为m的d进制数S[t…t+m-1](t=0,1,2,…,n-m+1)的值做比较,所以整个模式匹配过程就变成了两个d进制数之间的比较过程。将模式串P的hash值跟主串S中的每一个长度为|P|的子串的hash值比较;如果不同,则它们肯定不相等;如果相同,则再诸位比较。
现有的应用系统开发接口所涉及的业务繁多,常常同一接口由多人开发,同一接口对接不同的开发人员,经常会出现代码被修改但开发人员不知道的情况。例如,在基于SVN的代码管理平台中,某人在提交自己代码的过程中,不小心动到其他开发人员的代码模块。或者,在协同开发过程,会存在公共部分的代码,开发人员在改动的过程中,可能存在不清楚其他业务需求的情况下,改动了公共部分,这极有可能导致严重的生产问题。因此,要求每个开发人员在发版前对当前版本的所有代码都浏览且评估,显然过于浪费人力。因此,如何提供一种代码检测方法,能够提高代码的检测效率,成为了亟待解决的技术问题。
基于此,本申请实施例的主要目的在于提出代码检测方法和代码检测装置、计算机设备、存储介质,旨在通过将每个代码接口和维护它的所有开发人员关联起来,当出现代码被提交,例如代码被修改,或者在多协同开发中,公共部分修改错误的情况下,通过字符串比对结果,及时将修改通知到目标对象,并根据目标对象的反馈信息确定代码检测结果,实现代码检测。本申请实施例提高了代码检测的效率,也能够避免因代码修改而出现生产问题。
本申请实施例可以基于人工智能技术对相关的数据进行获取和处理。其中,人工智能(Artificial Intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。
人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、机器人技术、生物识别技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
本申请实施例提供的代码检测方法,涉及人工智能技术领域。本申请实施例提供的代码检测方法可应用于终端中,也可应用于服务器端中,还可以是运行于终端或服务器端中的软件。在一些实施例中,终端可以是智能手机、平板电脑、笔记本电脑、台式计算机等;服务器端可以配置成独立的物理服务器,也可以配置成多个物理服务器构成的服务器集群或者分布式系统,还可以配置成提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN以及大数据和人工智能平台等基础云计算服务的云服务器;软件可以是实现代码检测方法的应用等,但并不局限于以上形式。
本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
需要说明的是,在本申请的各个具体实施方式中,当涉及到需要根据用户信息、用户行为数据,用户历史数据以及用户位置信息等与用户身份或特性相关的数据进行相关处理时,都会先获得用户的许可或者同意,而且,对这些数据的收集、使用和处理等,都会遵守相关国家和地区的相关法律法规和标准。此外,当本申请实施例需要获取用户的敏感个人信息时,会通过弹窗或者跳转到确认页面等方式获得用户的单独许可或者单独同意,在明确获得用户的单独许可或者单独同意之后,再获取用于使本申请实施例能够正常运行的必要的用户相关数据。
本申请实施例提供代码检测方法和代码检测装置、计算机设备、存储介质,具体通过如下实施例进行说明,首先描述本申请实施例中的代码检测方法。
图1是本申请实施例提供的代码检测方法的一个可选的流程图,图1中的方法可以包括但不限于包括步骤S101至步骤S107。
步骤S101,检测目标代码文件的提交状态;其中,提交状态包括用于表征向服务器提交目标代码文件的第一状态;
步骤S102,在提交状态为第一状态下,对目标代码文件进行解析处理,以得到至少一个目标代码接口;其中,每一目标代码接口包括目标代码段和目标接口信息;
步骤S103,根据目标代码段生成目标字符串;
步骤S104,根据目标接口信息从服务器获取历史字符串;
步骤S105,将目标字符串与历史字符串进行比对,以得到字符串比对结果;
步骤S106,根据字符串比对结果从预设的对象名单中确定目标对象,并将字符串比对结果发送给目标对象;
步骤S107,获取目标对象根据字符串比对结果的反馈信息,并根据反馈信息确定代码检测结果。
本申请实施例所示意的步骤S101至步骤S107,通过将每个代码接口和维护它的所有目标对象关联起来,当出现代码被提交,例如代码被修改,或者在多协同开发中,公共部分修改错误的情况下,通过字符串比对结果,及时将修改通知到目标对象,并根据目标对象的反馈信息确定代码检测结果,实现代码检测。本申请实施例提高了代码检测的效率,也能够避免因代码修改而出现生产问题。
在一些实施例的步骤S101中,目标代码文件一般由多名开发人员共同开发或处理,开发人员在本申请实施例中表示为关联对象。在一示例中,目标代码文件配置有对象名单,对象名单包括多名关联对象,每一关联对象对目标代码文件的修改都需要通知到其他的关联对象。在本申请实施例中,以检测目标代码文件的提交状态作为判断目标代码文件是否被修改的依据。需要说明的是,提交状态包括用于表征向服务器提交目标代码文件的第一状态,另外,提交状态还包括用于表征未向服务器提交目标代码文件的第二状态。还需要说明的是,无论目标代码文件是否有被关联对象修改,只要检测到目标代码文件的提交状态为第一状态,默认目标代码文件已被关联对象修改,该关联对象也称当前提交对象,后续再对该目标代码文件进行处理,以确定最终代码检测结果。
请参阅图2,图2是本申请实施例提供的代码检测方法的一个可选的流程图,在一些实施例中,步骤S101之后,图2中的方法可以包括但不限于包括步骤S201至步骤S203:
步骤S201,根据第一状态获检测目标代码文件的提交对象,得到当前提交对象;
步骤S202,根据目标代码文件从对象名单获取关联对象;
步骤S203,根据当前提交对象和关联对象,向关联对象发送警示信息。
本申请实施例所示意的步骤S201至步骤S203,当前提交对象是指对目标代码文件进行提交操作的对象,但不一定属于目标代码文件的关联对象。若当前提交对象不属于目标代码文件的关联对象,很有可能是该目标代码文件被其他无关对象误修改,会产生警示信息,提醒关联对象。即使当前提交对象属于目标代码文件的关联对象,由于关联对象的代码权限不同,若是没有操作权限的对象对该目标代码文件进行操作,也会产生警示信息。向关联对象发送警示信息,以提醒关联对象。需要说明的是,预先存储有对象名单中各个对象的邮箱地址,可通过邮件等社交工具向关联对象发送警示信息。
具体的,警示信息包括第一信息,对当前提交对象和关联对象进行比对,得到对象比对结果;若对象比对结果为关联对象不存在当前提交对象,则向关联对象发送第一信息。在一示例中,第一信息可为“有不明人员违规修改代码”,还可为“当前代码存在被恶意修改的风险”。警示信息还包括第二信息,若对象比对结果为关联对象存在当前提交对象,则获取当前提交对象的代码权限、并获取代码文件的操作权限范围;比对代码权限和操作权限范围,若代码权限不在操作权限范围内,则向关联对象发送第二信息。在一示例中,第二信息可为“当前代码存在超范围修改”,还可为“当前提交对象的代码权限不足”。
在一些实施例的步骤S102中,若提交状态为第一状态,说明目标代码文件被当前提交对象提交至服务器。一般情况下,服务器会对目标文件进行解析,并根据解析后的结果覆盖原先的历史代码文件。但这样一来,其他关联对象将不清楚代码文件是否有被修改,或者定位出目标代码文件的哪一部分被修改。因此,在本申请实施例中,对目标代码文件进行解析处理得到至少一个目标代码接口,每一目标代码接口包括目标代码段和目标接口信息,以根据目标代码接口确定目标代码文件的修改部分。并且,进一步可根据目标代码段和目标接口信息定位该目标代码文件的具体修改部分,提供代码检测的效率。
在另一些实施例中,在根据目标代码段生成目标字符串之前,代码检测方法还包括:
获取历史字符串的历史提交对象;
若当前提交对象与历史提交对象一致,则获取历史字符串的历史修改时间,并获取目标字符串的当前修改时间;
根据历史修改时间和当前修改时间计算修改时间差;
若修改时间差小于预设的时长阈值,将目标代码段标记为中间代码段,并将中间代码段保存至预设的缓存空间;
若修改时间差大于或等于时长阈值,从缓存空间中读出所有的中间代码段,并对中间代码段和目标代码段进行合并处理,以得到更新的目标代码段。
具体的,通过上述步骤对提交对象进行比对,并在历史提交对象和当前提交对象一致的情况下,进行修改时间差和时长阈值的比较,并在修改时间差小于时长阈值的情况下,将目标代码段标记为中间代码段并放至预设的缓存空间,当修改时间差大于或等于时长阈值,则从缓存空间中读出所有的中间代码段,并对中间代码段和最后一次目标代码段进行合并处理,以得到更新的目标代码段。本申请实施例可以避免因时长阈值内,同一提交对象对代码段进行多次修改,从而造成目标代码文件被多次提交的情况出现,从而减少代码检测的次数,进而提高代码检测效率。
在一些实施例的步骤S103中,对代码段进行解析处理,以将目标代码段生成目标字符串,从而以便后续进行字符串比对。
请参阅图3,在一些实施例中,每一目标代码接口包括至少两个代码段,步骤S103可以包括但不限于包括步骤S301至步骤S303:
步骤S301,对所有代码段进行扫描,确定每一代码段的代码调用关系;
步骤S302,根据代码调用关系得到每一代码段的拼接顺序;
步骤S303,根据拼接顺序将代码段进行拼接,得到目标字符串。
本申请实施例所示意的步骤S301至步骤S303,由于每一目标代码接口包括多个代码段,多个代码段之间若不固定顺序,即使当前提交对象未对代码段进行实质修改,例如是调整了代码段之间的顺序,后续进行字符串比对时也会出现比对不一致的情况。因此,根据每一代码段的代码调用关系确定拼接顺序,并根据拼接顺序将多个代码段进行拼接得到目标字符串。以避免因调整代码段顺序而出现比对不一致的字符串比对结果,影响检测效率。具体的,以目标代码接口包括A、B、C、D、E、F、G等代码段为例,其中,B、C均调用A,D、E均调用B,F、G均调用C。根据代码调用关系得到的拼接顺序为A(1)、B(2)、C(5)、D(3)、E(4)、F(6)、G(7),因此目标字符串可为:A、B、D、E、C、F、G。需要说明的是,多个代码段中若存在调用共同的代码段,则将其标记为并列代码段,例如B、C共同调用A,则B、C为并列代码段。并列代码段的拼接顺序中的先后按照原先在目标代码文件中的顺序决定,例如,本示例中B在C之前,因而将B的拼接顺序确定为2,C的拼接顺序在B后面。本申请实施例通过对代码段的拼接顺序进行确定,以减少因代码段的顺序调整而出现字符串比对不一致的几率,能够提高代码检测效率。
需要说明的是,考虑到多个代码段中存在不可修改的代码段,为了提高字符串比对速度,在生成字符串的过程中,可跳过其中一些不可修改的代码段。具体的,每一代码段都有对应的标识信息,可根据代码段的标识信息确定该代码段为待处理代码段,再根据调用关系确定待处理代码段的拼接顺序,最后根据拼接顺序将将待处理代码段进行拼接,得到目标字符串。
在一些实施例的步骤S104中,根据目标接口信息从服务器获取历史字符串,具体的,服务器用于存储代码文件,可通过接口信息区分不同的代码段,每一代码段以字符串形式存储于服务器,可根据目标接口信息从服务器获取与目标代码段对应的历史字符串。在一示例中,服务器存储的是各个接口信息对应的字符串压缩包,可根据目标接口信息从服务器中确定历史字符串压缩包,对该历史字符串压缩包进行解压缩,以得到历史字符串。需要说明的是,可通过现有的哈弗曼编码压缩算法、RLE压缩算法等压缩算法进行字符串压缩得到字符串压缩包,相应的,根据解哈弗曼编码、解RLE算法等解压缩算法对字符串压缩包进行解压缩,得到历史字符串。
在一些实施例的步骤S105中,将目标字符串与历史字符串进行比对,以得到字符串比对结果。请参阅图4,在一些实施例中,字符串比对结果包括第一结果,步骤S105可以包括但不限于包括步骤S401至步骤S403:
步骤S401,获取目标字符串的拼接顺序,并获取历史字符串的预设顺序;其中,历史字符串由预设顺序进行拼接得到;
步骤S402,比对拼接顺序和预设顺序;
步骤S403,若拼接顺序与预设顺序不一致,得到第一结果。
本申请实施例所示意的步骤S401至步骤S403,若目标字符串的拼接顺序和历史字符串的预设顺序不一致,则说明目标字符串和历史字符串至少在代码段的顺序上存在不同,因此,得到的第一结果包括代码段的顺序比对不一致的信息。
请参阅图5,在另一些实施例中,字符串比对结果还包括第二结果,步骤S402之后,步骤S105还可以包括但不限于包括步骤S501至步骤S502:
步骤S501,若拼接顺序与预设顺序一致,则从目标字符串和历史字符串的起始位置开始,对每一目标代码段与每一历史代码段进行比对;
步骤S502,若目标代码段与历史代码段不一致,则对不一致的目标代码段进行标记,得到标记代码段、并得到第二结果。
本申请实施例所示意的步骤S501至步骤S502,在拼接顺序和预设顺序一致的情况下,对目标字符串和历史字符串从起始位置开始进行字符串比对,直至末尾位置,对字符串不一致的地方进行标记,以实现对不一致的目标代码段进行标记。可将标记的代码段和第二结果一起发送给关联对象,以提高获取关联对象的反馈信息的效率。
请参阅图6,在另一些实施例中,字符串比对结果还包括第二结果,步骤S502之后,步骤S105还可以包括但不限于包括步骤S601至步骤S603:
步骤S601,对标记代码段进行编译,以得到编译结果;
步骤S602,根据编译结果确定标记代码段的风险等级;
步骤S603,将风险等级添加至第二结果。
本申请实施例所示意的步骤S601至步骤S603,可根据预设的测试用例对标记代码段进行编译得到编译结果。编译结果包括:编译通过、编译失败。若编译结果为编译通过,说明虽然标记代码段已被当前提交人员进行修改,但该修改并未导致基础功能失效,风险等级可配置为中风险或低风险,并将风险等级添加至第二结果并发送给目标对象。若编译结果为编译失败,说明此时代码段并仅被修改,甚至可能会出现生产问题,将风险等级配置为高风险或特高风险,将其添加至第二结果中并发送至目标对象,以提醒目标对象此次代码检测的重要程度。
需要说明的是,第二结果包括代码段的内容比对不一致的信息。另外,第一结果和第二结果都可称为比对不一致结果。
在一些实施例的步骤S106中,字符串比对结果还包括比对一致结果、比对失败结果等。不同的字符串比对结果对代码文件的影响不同。例如,若字符串比对结果为比对一致结果,说明代码段并未被修改,很有可能是当前提交对象进行了误操作,若将该字符串比对结果都发送至所有关联对象,会造成资源浪费。但若字符串比对结果为比对失败结果,说明代码段被严重修改,已无法正常进行字符串比对,需将比对失败结果发送至所有关联对象,必要时可添加风险等级,以便提醒所有关联对象。具体的,预先存储有对象名单中各个关联对象的邮箱地址,可通过邮箱地址向目标对象发送字符串比对结果。需要说明的是,目标对象可包括多名关联对象。
需要说明的是,可通过现有的字符串对比算法进行字符串比对,例如:BF算法,RK算法等。若目标字符串与历史字符串完全一样,说明比对一致,否则说明比对不一致。而在比对不一致的基础上,造成比对失败结果的字符串比对结果出现的原因包括:目标字符串被完全删除,或者是目标字符串的字符数量小于历史字符串的字符数量的一半,或者是目标字符串的字符数量是历史字符串的字符数量的两倍以上。另外,在一示例中,给对象名单中的关联对象按重要等级分类,以便根据不同的字符串比对结果从对象名单中确定相应重要等级的关联对象作为目标对象,需要说明的是,目标对象可包括多名关联对象。若字符串比对结果为字符串比对一致,从预设的对象名单中选择重要等级最低的关联对象作为目标对象,并将字符串比对一致的字符串比对结果发送至目标对象。
在一些实施例的步骤S107中,给目标对象发送不同的字符串比对结果,所得到的反馈信息略有不同。例如,若给目标对象发送比对一致的字符串比对结果,则目标对象给出的反馈信息为同意修改,此时代码检测结果为检测成功。若代码检测结果为检测成功,说明当前提交对象所提交的目标字符串通过检测,可将目标字符串保存到服务器并覆盖之前的历史字符串。本申请实施例通过每一次提交目标代码文件都经过其他关联对象校验的方式,可以清晰定位每一次修改代码的当前提交对象以及被修改的代码部分,提高代码检测的效率。并且,可将每一次提交代码的检测过程以日志记录下来,以便后续若出现生产问题可及时查找相应的负责人员。
请参阅图7,本申请实施例还提供代码检测装置,可以实现上述代码检测方法,图7为本申请实施例提供的代码检测装置的模块结构框图,该装置包括:检测状态模块701、解析处理模块702、生成模块703、获取模块704、比对模块705、发送模块706和检测结果确定模块707。其中,检测状态模块701用于检测目标代码文件的提交状态;其中,提交状态包括用于表征向服务器提交目标代码文件的第一状态;解析处理模块702用于在提交状态为第一状态下,对目标代码文件进行解析处理,以得到至少一个目标代码接口;其中,每一目标代码接口包括目标代码段和目标接口信息;生成模块703用于根据目标代码段生成目标字符串;获取模块704用于根据目标接口信息从服务器获取历史字符串;比对模块705用于将目标字符串与历史字符串进行比对,以得到字符串比对结果;发送模块706用于根据字符串比对结果从预设的对象名单中确定目标对象,并将字符串比对结果发送给目标对象;检测结果确定模块707用于获取目标对象根据字符串比对结果的反馈信息,并根据反馈信息确定代码检测结果。
需要说明的是,该代码检测装置的具体实施方式与上述代码检测方法的具体实施例基本相同,在此不再赘述。
本申请实施例还提供了计算机设备,计算机设备包括:存储器、处理器、存储在存储器上并可在处理器上运行的程序以及用于实现处理器和存储器之间的连接通信的数据总线,程序被处理器执行时实现上述代码检测方法。该计算机设备可以为包括平板电脑、车载电脑等任意智能终端。
请参阅图8,图8示意了另一实施例的计算机设备的硬件结构,计算机设备包括:
处理器801,可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本申请实施例所提供的技术方案;
存储器802,可以采用只读存储器(Read Only Memory,ROM)、静态存储设备、动态存储设备或者随机存取存储器(Random Access Memory,RAM)等形式实现。存储器802可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器802中,并由处理器801来调用执行本申请实施例的代码检测方法;
输入/输出接口803,用于实现信息输入及输出;
通信接口804,用于实现本设备与其他设备的通信交互,可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信;
总线805,在设备的各个组件(例如处理器801、存储器802、输入/输出接口803和通信接口804)之间传输信息;
其中处理器801、存储器802、输入/输出接口803和通信接口804通过总线805实现彼此之间在设备内部的通信连接。
本申请实施例还提供了存储介质,存储介质为计算机可读存储介质,用于计算机可读存储,存储介质存储有一个或者多个程序,一个或者多个程序可被一个或者多个处理器执行,以实现上述代码检测方法。
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本申请实施例提供的代码检测方法、代码检测装置、计算机设备及存储介质,通过检测目标代码文件的提交状态,并在提交状态为第一状态下,对目标代码文件进行解析处理,以得到至少一个目标代码接口;这样一来,通过目标代码接口将目标代码文件进行分割,以便更快速查找出代码修改的部分。其中,每一目标代码接口包括目标代码段和目标接口信息,根据目标代码段生成目标字符串,根据目标接口信息从服务器获取历史字符串,根据目标字符串与历史字符串进行字符串比对得到的字符串比对结果从预设的对象名单中确定目标对象,并将字符串比对结果发送给目标对象;由于不同的字符串比对结果对代码文件的影响不同,因此根据字符串比对结果从对象名单中确定目标对象,以区分不同的字符串比对结果对涉及的目标对象的影响。获取目标对象根据字符串比对结果的反馈信息,并根据反馈信息确定代码检测结果。本申请实施例旨在通过将每个代码接口和维护它的所有开发人员,即关联对象关联起来。当出现代码被提交,例如代码被修改,或者在多协同开发中,公共部分修改错误的情况下,通过字符串比对结果,及时将修改通知到目标对象,目标对象包括多名关联对象,并根据目标对象的反馈信息确定代码检测结果,实现代码检测。本申请实施例提高了代码检测的效率,也能够避免因代码修改而出现生产问题。
本申请实施例描述的实施例是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域技术人员可知,随着技术的演变和新应用场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本领域技术人员可以理解的是,图1-6中示出的技术方案并不构成对本申请实施例的限定,可以包括比图示更多或更少的步骤,或者组合某些步骤,或者不同的步骤。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、设备中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。
本申请的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括多指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序的介质。
以上参照附图说明了本申请实施例的优选实施例,并非因此局限本申请实施例的权利范围。本领域技术人员不脱离本申请实施例的范围和实质内所作的任何修改、等同替换和改进,均应在本申请实施例的权利范围之内。

Claims (10)

1.一种代码检测方法,其特征在于,所述方法包括:
检测目标代码文件的提交状态;其中,所述提交状态包括用于表征向服务器提交所述目标代码文件的第一状态;
在所述提交状态为所述第一状态下,对所述目标代码文件进行解析处理,以得到至少一个目标代码接口;其中,每一所述目标代码接口包括目标代码段和目标接口信息;
根据所述目标代码段生成目标字符串;
根据所述目标接口信息从所述服务器获取历史字符串;
将所述目标字符串与所述历史字符串进行比对,以得到字符串比对结果;
根据所述字符串比对结果从预设的对象名单中确定目标对象,并将所述字符串比对结果发送给所述目标对象;
获取所述目标对象根据所述字符串比对结果的反馈信息,并根据所述反馈信息确定代码检测结果。
2.根据权利要求1所述的方法,其特征在于,在所述检测目标代码文件的提交状态之后,所述方法还包括:
根据所述第一状态获检测所述目标代码文件的提交对象,得到当前提交对象;
根据所述目标代码文件从所述对象名单获取关联对象;
根据所述当前提交对象和所述关联对象,向所述关联对象发送警示信息。
3.根据权利要求2所述的方法,其特征在于,所述警示信息包括第一信息或第二信息,所述根据所述当前提交对象和所述关联对象,向所述关联对象发送警示信息,包括:
对所述当前提交对象和所述关联对象进行比对,得到对象比对结果;
若所述对象比对结果为所述关联对象不存在所述当前提交对象,则向所述关联对象发送所述第一信息;
或者,
若所述对象比对结果为所述关联对象存在所述当前提交对象,则获取所述当前提交对象的代码权限、并获取所述代码文件的操作权限范围;比对所述代码权限和所述操作权限范围,若所述代码权限不在所述操作权限范围内,则向所述关联对象发送所述第二信息。
4.根据权利要求1至3任一项所述的方法,其特征在于,每一所述目标代码接口包括至少两个所述代码段,所述根据所述目标代码段生成目标字符串,包括:
对所有所述代码段进行扫描,确定每一所述代码段的代码调用关系;
根据所述代码调用关系得到每一所述代码段的拼接顺序;
根据所述拼接顺序将所述代码段进行拼接,得到所述目标字符串。
5.根据权利要求4所述的方法,其特征在于,所述字符串比对结果包括第一结果,所述将所述目标字符串与所述历史字符串进行比对,以得到字符串比对结果,包括:
获取所述目标字符串的拼接顺序,并获取所述历史字符串的预设顺序;其中,所述历史字符串由所述预设顺序进行拼接得到;
比对所述拼接顺序和所述预设顺序;
若所述拼接顺序与所述预设顺序不一致,得到所述第一结果。
6.根据权利要求5所述的方法,其特征在于,所述历史字符串包括历史代码段,所述字符串比对结果还包括第二结果,所述将所述目标字符串与所述历史字符串进行比对,以得到字符串比对结果,还包括:
若所述拼接顺序与所述预设顺序一致,则从所述目标字符串和所述历史字符串的起始位置开始,对每一所述目标代码段与每一所述历史代码段进行比对;
若所述目标代码段与所述历史代码段不一致,则对不一致的所述目标代码段进行标记,得到标记代码段、并得到所述第二结果。
7.根据权利要求6所述的方法,其特征在于,所述将所述目标字符串与所述历史字符串进行比对,以得到字符串比对结果,还包括:
对所述标记代码段进行编译,以得到编译结果;
根据所述编译结果确定所述标记代码段的风险等级;
将所述风险等级添加至所述第二结果。
8.一种代码检测装置,其特征在于,所述装置包括:
检测状态模块,用于检测目标代码文件的提交状态;其中,所述提交状态包括用于表征向服务器提交所述目标代码文件的第一状态;
解析处理模块,用于在所述提交状态为所述第一状态下,对所述目标代码文件进行解析处理,以得到至少一个目标代码接口;其中,每一所述目标代码接口包括目标代码段和目标接口信息;
生成模块,用于根据所述目标代码段生成目标字符串;
获取模块,用于根据所述目标接口信息从所述服务器获取历史字符串;
比对模块,用于将所述目标字符串与所述历史字符串进行比对,以得到字符串比对结果;
发送模块,用于根据所述字符串比对结果从预设的对象名单中确定目标对象,并将所述字符串比对结果发送给所述目标对象;
检测结果确定模块,用于获取所述目标对象根据所述字符串比对结果的反馈信息,并根据所述反馈信息确定代码检测结果。
9.一种计算机设备,其特征在于,所述计算机设备包括存储器、处理器、存储在所述存储器上并可在所述处理器上运行的程序以及用于实现所述处理器和所述存储器之间的连接通信的数据总线,所述程序被所述处理器执行时实现如权利要求1至7任一项所述的方法的步骤。
10.一种存储介质,所述存储介质为计算机可读存储介质,用于计算机可读存储,其特征在于,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现权利要求1至7中任一项所述的方法的步骤。
CN202210739692.6A 2022-06-28 2022-06-28 代码检测方法和代码检测装置、计算机设备、存储介质 Pending CN115202731A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210739692.6A CN115202731A (zh) 2022-06-28 2022-06-28 代码检测方法和代码检测装置、计算机设备、存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210739692.6A CN115202731A (zh) 2022-06-28 2022-06-28 代码检测方法和代码检测装置、计算机设备、存储介质

Publications (1)

Publication Number Publication Date
CN115202731A true CN115202731A (zh) 2022-10-18

Family

ID=83577481

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210739692.6A Pending CN115202731A (zh) 2022-06-28 2022-06-28 代码检测方法和代码检测装置、计算机设备、存储介质

Country Status (1)

Country Link
CN (1) CN115202731A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116149725A (zh) * 2023-04-23 2023-05-23 山东捷瑞数字科技股份有限公司 三维引擎中协同开发代码的关联方法、装置、设备及介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116149725A (zh) * 2023-04-23 2023-05-23 山东捷瑞数字科技股份有限公司 三维引擎中协同开发代码的关联方法、装置、设备及介质

Similar Documents

Publication Publication Date Title
CN108985057B (zh) 一种webshell检测方法及相关设备
CN109543891B (zh) 容量预测模型的建立方法、设备及计算机可读存储介质
CN109672608B (zh) 根据时间发送消息的方法
CN115202731A (zh) 代码检测方法和代码检测装置、计算机设备、存储介质
CN115208414A (zh) 数据压缩方法、数据压缩装置、计算机设备及存储介质
CN102541888A (zh) 专利电子文件解析系统及方法
CN115563600A (zh) 数据审核方法和装置、电子设备及存储介质
CN113810375B (zh) webshell检测方法、装置、设备及可读存储介质
CN109145589B (zh) 应用程序获取方法及装置
CN111371581A (zh) 物联网卡业务异常检测的方法、装置、设备和介质
CN114817913A (zh) 代码检测方法、装置、计算机设备和存储介质
US8607218B2 (en) Updating computer files
CN117113430A (zh) 网页违规图片检测方法和装置、电子设备、存储介质
CN116010147A (zh) 异常处理表的生成方法、系统、电子设备及存储介质
CN115543339A (zh) 代码转换方法和装置、计算机设备及存储介质
CN115270711A (zh) 电子签名方法、电子签名装置、电子设备、存储介质
CN114936227A (zh) 数据校验方法、数据校验系统、电子设备及存储介质
CN109347948A (zh) 一种基于区块链技术的大数据防篡改方法及系统
CN116561755A (zh) 云api的漏洞检测方法、装置、计算机设备和存储介质
CN109145220B (zh) 数据处理方法、装置及电子设备
CN108171014B (zh) 一种rtf可疑文件的检测方法、系统及存储介质
CN111107143A (zh) 一种网络文件传输检测方法、装置和系统
CN111158654A (zh) 算法调用方法、装置、服务器及存储介质
CN103699841A (zh) 拦截编码绕过的方法及设备
CN115543227B (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