CN110928797B - 一种代码耦合检测方法、装置、终端设备及存储介质 - Google Patents
一种代码耦合检测方法、装置、终端设备及存储介质 Download PDFInfo
- Publication number
- CN110928797B CN110928797B CN201911205937.1A CN201911205937A CN110928797B CN 110928797 B CN110928797 B CN 110928797B CN 201911205937 A CN201911205937 A CN 201911205937A CN 110928797 B CN110928797 B CN 110928797B
- Authority
- CN
- China
- Prior art keywords
- file
- header file
- middleware
- library
- reference header
- 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.)
- Active
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
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种代码耦合检测方法、装置、终端设备及存储介质。所述方法,包括:扫描待检测的中间件中的每个文件,获取中间件中的每个引用头文件,以及所述引用头文件在中间件中的引用形式;根据中间件针对所述引用头文件的引用形式,检测所述引用头文件是否为其他工程文件,其他工程文件为除去中间件内部的头文件,中间件在非耦合状态下依赖的系统库和三方库之外的其他文件;响应于存在至少一个引用头文件为其他工程文件,确认中间件中存在代码耦合。解决了现有的代码耦合检测方案适用性不强,代码耦合定位困难,以及检测结果准确性不高的技术问题。取得了提高代码耦合检测的适用性,代码耦合检测结果以及代码耦合定位的准确性的有益效果。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种代码耦合检测方法、装置、终端设备及存储介质。
背景技术
为了让一些基础服务能在多个APP(Application,应用程序)间复用,可以将这些基础服务做成若干个中间件。其中,中间件指APP架构中处于业务下方的,为业务提供服务的基础组件,与具体业务无关,如网络服务、路由服务、缓存服务等。但是,在中间件的维护过程中,由于团队人数众多,就算是进行权限控制,也难免会有开发人员为了方便,在中间件中不经过解耦而直接引用了其它工程代码,这样虽然整个APP功能和编译都不会受影响,但是对于该中间件来说后续将难以维护,也很难将其复用到其它APP中,更不能单独编译生成自身的静态库。
相关技术中,为了对中间件进行代码耦合检测,可以对每个中间件工程单独编译,如果编译失败,则这个中间件很有可能存在代码耦合。
但是,对中间件进行编译,首先会比较耗时,而且需要依赖xcode环境,如果把代码放到如win/linux这样的服务器上就无法完成检测;而且,对于代码耦合自动定位比较困难,需要对xcode的编译结果进行分析,但目前xcode并未提供解析编译结果文件的方法;另外,编译失败也不一定是代码耦合造成的,也可能是编译本身问题。由此可见,相关技术中的代码耦合检测方案存在适用性不强,代码耦合定位困难,以及检测结果准确性不高等问题。
发明内容
本发明实施例提供一种代码耦合检测方法、装置、终端设备及存储介质,以解决现有的代码耦合检测方案适用性不强,代码耦合定位困难,以及检测结果准确性不高的问题。
为了解决上述技术问题,本发明是这样实现的:
第一方面,本发明实施例提供了一种代码耦合检测方法,包括:
扫描待检测的中间件中的每个文件,获取所述中间件中的每个引用头文件,以及所述引用头文件在所述中间件中的引用形式;
根据所述中间件针对所述引用头文件的引用形式,检测所述引用头文件是否为其他工程文件,所述其他工程文件为除去所述中间件内部的头文件,所述中间件在非耦合状态下依赖的系统库和三方库之外的其他文件;
响应于存在至少一个所述引用头文件为其他工程文件,确认所述中间件中存在代码耦合。
可选地,在所述根据所述中间件针对所述引用头文件的引用形式,检测所述引用头文件是否为其他工程文件的步骤之前,还包括:
获取所述中间件在非耦合状态下依赖的系统库和三方库;
根据所述系统库、所述三方库以及所述中间件,构建所述中间件关联的白名单和头文件列表。
可选地,所述根据所述中间件针对所述引用头文件的引用形式,检测所述引用头文件是否为其他工程文件的步骤,包括:
根据所述中间件针对所述引用头文件的引用形式,确定用以检测所述引用头文件是否为其他工程文件的的检测路径,所述检测路径包括在所述白名单中检测,和/或在所述头文件列表中检测;
根据所述检测路径,检测所述引用头文件是否为其他工程文件。
可选地,所述根据所述系统库、所述三方库以及所述中间件,构建所述中间件关联的白名单和头文件列表的步骤,包括:
根据所述中间件中包含的全部头文件,以及以.a为文件后缀名的三方库中包含的头文件,构建所述头文件列表;
根据所述系统库以及以.framework为文件后缀名的三方库,构建所述白名单。
可选地,所述根据所述中间件针对所述引用头文件的引用形式,确定用以检测所述引用头文件是否为其他工程文件的的检测路径的步骤,包括:
针对每个所述引用头文件,响应于所述中间件针对所述引用头文件的引用形式为基于引号的引用形式,确定所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件;
响应于所述中间件针对所述引用头文件的引用形式为基于尖括号的引用形式,确定所述引用头文件的检测路径为在所述白名单中检测所述引用头文件。
可选地,所述根据所述检测路径,检测所述引用头文件是否为其他工程文件的步骤,包括:
响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且包含库标识的引用形式,获取所述库标识,并在所述白名单中查找所述库标识;
如果在所述白名单中未查找到所述库标识,确认所述引用头文件为其他工程文件;
响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且不包含库标识的引用形式,在所述白名单中查找所述引用头文件的文件标识;
如果在所述白名单中未查找到所述文件标识,确认所述引用头文件为其他工程文件;
响应于所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件,在所述头文件列表中查找所述引用头文件的文件标识;
如果在所述头文件列表中未查找到所述文件标识,确认所述引用头文件为其他工程文件。
可选地,在所述根据所述中间件针对所述引用头文件的引用形式,检测所述引用头文件是否为其他工程文件的步骤之后,还包括:
响应于所述引用头文件为其他工程文件,记录所述引用头文件的文件信息到预设的异常文件中;
其中,所述文件信息包括所述引用头文件的文件路径、所述引用头文件在所述中间件中的引用信息。
第二方面,本发明实施例提供了一种代码耦合检测装置,包括:
引用头文件扫描模块,用于扫描待检测的中间件中的每个文件,获取所述中间件中的每个引用头文件,以及所述引用头文件在所述中间件中的引用形式;
引用头文件检测模块,用于根据所述中间件针对所述引用头文件的引用形式,检测所述引用头文件是否为其他工程文件,所述其他工程文件为除去所述中间件内部的头文件,所述中间件在非耦合状态下依赖的系统库和三方库之外的其他文件;
代码耦合确认模块,用于响应于存在至少一个所述引用头文件为其他工程文件,确认所述中间件中存在代码耦合。
可选地,还包括:
非耦合依赖库获取模块,用于获取所述中间件在非耦合状态下依赖的系统库和三方库;
非耦合依赖库拆分模块,用于根据所述系统库、所述三方库以及所述中间件,构建所述中间件关联的白名单和头文件列表。
可选地,所述引用头文件检测模块,包括:
检测路径确认子模块,用于根据所述中间件针对所述引用头文件的引用形式,确定用以检测所述引用头文件是否为其他工程文件的的检测路径,所述检测路径包括在所述白名单中检测,和/或在所述头文件列表中检测;
引用头文件检测子模块,用于根据所述检测路径,检测所述引用头文件是否为其他工程文件。
可选地,所述非耦合依赖库拆分模块,包括:
头文件列表构建子模块,用于根据所述中间件中包含的全部头文件,以及以.a为文件后缀名的三方库中包含的头文件,构建所述头文件列表;
白名单构建子模块,用于根据所述系统库以及以.framework为文件后缀名的三方库,构建所述白名单。
可选地,所述检测路径确认子模块,包括:
第一检测路径确认单元,用于针对每个所述引用头文件,响应于所述中间件针对所述引用头文件的引用形式为基于引号的引用形式,确定所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件;
第二检测路径确认单元,用于响应于所述中间件针对所述引用头文件的引用形式为基于尖括号的引用形式,确定所述引用头文件的检测路径为在所述白名单中检测所述引用头文件。
可选地,所述引用头文件检测子模块,包括:
第一引用头文件检测单元,用于响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且包含库标识的引用形式,获取所述库标识,并在所述白名单中查找所述库标识;
第一其他工程文件确认单元,用于如果在所述白名单中未查找到所述库标识,确认所述引用头文件为其他工程文件;
第二引用头文件检测单元,用于响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且不包含库标识的引用形式,在所述白名单中查找所述引用头文件的文件标识;
第二其他工程文件确认单元,用于如果在所述白名单中未查找到所述文件标识,确认所述引用头文件为其他工程文件;
第三引用头文件检测单元,用于响应于所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件,在所述头文件列表中查找所述引用头文件的文件标识;
第三其他工程文件确认单元,用于如果在所述头文件列表中未查找到所述文件标识,确认所述引用头文件为其他工程文件。
可选地,还包括:
异常文件记录模块,用于响应于所述引用头文件为其他工程文件,记录所述引用头文件的文件信息到预设的异常文件中;其中,所述文件信息包括所述引用头文件的文件路径、所述引用头文件在所述中间件中的引用信息。
第三方面,本发明实施例另外提供了一种终端设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如前述的代码耦合检测方法的步骤。
第四方面,本发明实施例另外提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如前述的代码耦合检测方法的步骤。
在本发明实施例中,通过扫描待检测的中间件中的每个文件,获取所述中间件中的每个引用头文件,以及所述引用头文件在所述中间件中的引用形式;根据所述中间件针对所述引用头文件的引用形式,检测所述引用头文件是否为其他工程文件,所述其他工程文件为除去所述中间件内部的头文件,所述中间件在非耦合状态下依赖的系统库和三方库之外的其他文件;响应于存在至少一个所述引用头文件为其他工程文件,确认所述中间件中存在代码耦合。解决了现有的代码耦合检测方案适用性不强,代码耦合定位困难,以及检测结果准确性不高的技术问题。取得了提高代码耦合检测的适用性,代码耦合检测结果以及代码耦合定位的准确性的有益效果。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例中的一种代码耦合检测方法的步骤流程图;
图2是本发明实施例中的另一种代码耦合检测方法的步骤流程图;
图3是本发明实施例中的一种中间件中不同引用形式与其所依赖的系统和三方库之间的关系示意图;
图4是本发明实施例中的一种代码耦合检测装置的结构示意图;
图5是本发明实施例中的另一种代码耦合检测装置的结构示意图;
图6是本发明实施例中的一种终端设备的硬件结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参照图1,示出了本发明实施例中一种代码耦合检测方法的步骤流程图。
步骤110,扫描待检测的中间件中的每个文件,获取所述中间件中的每个引用头文件,以及所述引用头文件在所述中间件中的引用形式。
在本发明实施例中的中间件包括APP架构中处于业务下方的,为业务提供服务的基础组件,与具体业务无关,如网络服务、路由服务、缓存服务等。
正常情况下中间件只依赖系统库和三方库,因此每个中间件是能单独运行生成静态库的,在本发明实施例中,代码耦合可以理解为中间件代码被修改并依赖了除系统库和三方库外的其它代码。如果代码有耦合,中间件工程本身会因为找不到代码引用而导致编译失败。其中的系统库可以理解为中间件所在操作系统中的文件库,三方库可以理解为由第三方平台公开的可随意使用的文件库,例如UIKit、TencentOpen API,等等。
如前述,由于编译失败也不一定是代码耦合造成的,也可能是编译本身问题。因此基于编译方式的代码耦合的检测结果并以一定准确。
因此,在本发明实施例中,为了提高代码耦合检测结果的准确性,可以针对中间件中引用的每个头文件,检测其是否为除系统库和三方库之外的其他文件,从而可以实现代码耦合的检测。而且,由于中间件可以针对不同的引用头文件采用不同的引用形式,而且不同引用方式中包含的可以用以进行判断当前引用的头文件是否为其他工程文件的参照内容也可以有所不同。其中的引用头文件可以理解为中间件所引用的头文件。
例如,一般而言,在中间件中的import形式可以包括以下三种,即“A.H”、<XXX/A.h>、<A.h>,其中,“.h”和“.H”均表示头文件的文件后缀名,“XXX”表示库标识、“A”表示文件标识,当然在本发明实施例中,也可以包含后缀名的“A.h”作为文件标识,对此本发明实施例不加以限定。而且系统库和三方库可能涉及到三种引用形式,而如果是对外部的其他工程引用则通常只会用“A.h”、<XXX/A.h>两种引用形式,但不排除异常使用情况。
因此,具体地,可以先扫描待检测的中间件中的每个文件,获取所述中间件中的每个引用头文件,以及所述引用头文件在所述中间件中的引用形式。例如,可以通过对中间件的每个代码文件进行分析,分析每个文件的import(引用)情况。其中的引用头文件也即中间件中引用的头文件。
步骤120,根据所述中间件针对所述引用头文件的引用形式,检测所述引用头文件是否为其他工程文件,所述其他工程文件为除去所述中间件内部的头文件,所述中间件在非耦合状态下依赖的系统库和三方库之外的其他文件。
如前述,不同引用方式中包含的可以用以进行判断当前引用的头文件是否为其他工程文件的参照内容也可以有所不同,而且不同引用形式对引用头文件的格式要求也会有所不同。因此,在本发明实施例中,可以根据中间件中针对每个引用头文件的引用形式,检测相应的引用头文件是否为其他工程文件。其中的其他工程文件为除去所述中间件内部的头文件,所述中间件在非耦合状态下依赖的系统库和三方库之外的其他文件。
例如,假设如前述,在中间件中的import形式可以包括以下三种,即“A.H”、<XXX/A.h>、<A.h>,那么则可以通过对“A.H”、<XXX/A.h>、<A.h>三种形式,检测引用头文件是否为其他工程文件,从而进行判断分析中间件是否有代码耦合。具体的,如果引用形式为“A.H”或者是<A.h>,此时仅仅可以获取得到引用文件标识,因此只能基于引用文件标识进行检测,而如果引用形式为<XXX/A.h>,此时可以获取得到库标识以及引用文件标识,因此可以基于库标识以及引用文件标识进行检测,等等。
当然,在本发明实施例中,不同引用形式的引用头文件的具体检测方式可以根据需求进行自定义设置,对此本发明实施例不加以限定。
其中,可以通过任何可用方式获取中间件内部的头文件,以及中间件在非耦合状态下依赖的系统库和三方库,对此本发明实施例不加以限定。例如,可以通过分析中间件的代码文件,获取其中包含的头文件。
而且,由于所有中间件在最初始的时候都是可以编译成功的,也就是所有中间件中不会有import外部工程的情况,也就是没有代码耦合,产生的代码耦合都是在后续的业务版本迭代中发生的。因此,可以在最初中间件可以编译成功的时候获取中间件依赖的系统库和三方库。
例如,在最初中间件可以编译成功的时候,通过扫描中间件中引用的文件,进而判断其引用的每个头文件是否为自身的内部文件,如果不是则可以认定相应头文件所属的库为系统库或者是三方库,等等。
步骤130,响应于存在至少一个所述引用头文件为其他工程文件,确认所述中间件中存在代码耦合。
而如果在中间件中存在至少一个引用头文件为其他工程文件,则会影响编译结果,使得中间件工程本身可能会因为找不到代码引用而导致编译失败,很难将其复用到其它APP中。因此,在本发明实施例中,则可以确认此时的中间件中存在代码耦合。从而可以及时检测出代码耦合,以方便开发人员及时解耦合,以实现解耦合后的中间件可以复用到其它APP中。
在本发明实施例中,通过扫描待检测的中间件中的每个文件,获取所述中间件中的每个引用头文件,以及所述引用头文件在所述中间件中的引用形式;根据所述中间件针对所述引用头文件的引用形式,检测所述引用头文件是否为其他工程文件,所述其他工程文件为除去所述中间件内部的头文件,所述中间件在非耦合状态下依赖的系统库和三方库之外的其他文件;响应于存在至少一个所述引用头文件为其他工程文件,确认所述中间件中存在代码耦合。由于上述方案不受运行环境限制,从而提高了代码耦合检测的适用性,而且,由于上述方案针对中间件中的每个引用头文件进行检测,因此可以有效提高代码耦合检测结果以及代码耦合定位的准确性。
另外,为了提高检测引用头文件是否为中间件在非耦合状态下依赖的系统库和三方库之外的其他文件的结果准确性,可以预先中间件在非耦合状态下依赖的系统库和三方库,参照图2,在另一实施例中,在步骤120之前还可以包括:
步骤140,获取所述中间件在非耦合状态下依赖的系统库和三方库。
步骤150,根据所述系统库、所述三方库以及所述中间件,构建所述中间件关联的白名单和头文件列表。
在本发明实施例中,为了方便进行代码耦合检测,可以预先提供一个外部头文件或者库的白名单,白名单可以适时更新,如果引用头文件在白名单中或者在中间件中则可忽略,否则可以视为有代码耦合。
而且如前述,正常情况下移动端中间件只依赖系统库和三方库,那么则可以基于中间件在非耦合状态下依赖的系统库和三方库,以及中间件自身包含的文件,构建相应中间件关联的白名单和头文件列表。
其中,可以通过任何可用方式获取中间件在非耦合状态下依赖的系统库和三方库,对此本发明实施例不加以限定。
例如,由于所有中间件在最初始的时候都是可以编译成功的,也就是所有中间件中不会有import外部工程的情况,也就是没有代码耦合,产生的代码耦合都是在后续的业务版本迭代中发生的。因此,可以在中间件最初创建完成的时候,通过扫描中间件中的<XXX/A.h>、<A.h>等引用形式来获取到中间件所依赖的系统库和三方库等。
而且,后续对于系统库和三方库,通常情况不会有减少,只会在原来的基础上进行追加新的可依赖的系统库和三方库。
在本发明实施例中,如果不对三方库、系统库以及中间件内部的头文件进行重新拆分组合,那么此时针对不同引用形式中包含的内容,如果引用形式中仅包含文件标识,那么此时则可以需要在每个三方库内部、每个系统库内部以及中间件内部检索是否有相应的文件标识,相应地,如果引用形式中包含库标识,那么也需要分别在系统库和三方库中检索是否有与相应的库标识相同的库,从而使得代码耦合检测过程耗时仍然较长。
因此,在本发明实施例中,为了进一步提高代码检测效率,则可以根据系统库、所述三方库以及所述中间件,构建所述中间件关联的白名单和头文件列表,以将检测路径划分为两种,从而提高每个引用头文件的检测效率,进而进一步提高中间件代码耦合的检测效率。其中,头文件列表可以包含头文件的文件标识,白名单既可以包含文件标识,也可以包含库标识。
具体的,可以设置白名单中包含可以获取得到的中间件在非耦合状态下依赖的系统库的库标识,以及三方库的库标识,而在头文件列表中则可以包含中间件在非耦合状态下可依赖的全部文件的文件标识;或者,也可以设置白名单中包含可以获取得到的中间件在非耦合状态下依赖的系统库的库标识,以及三方库的库标识,以及系统库和三方库中包含的全部文件的文件标识,而在头文件列表中仅包含中间件内部的全部文件的文件标识;等等。具体的,白名单和头文件列表中包含的内容可以根据需求进行自定义,对此本发明实施例不加以限定。
当然,在本发明实施例中,也可以根据所述系统库、所述三方库以及所述中间件,只构建中间件关联的白名单。此时在白名单中,可以包括中间件在非耦合状态下可以依赖的系统库的库标识,以及三方库的库标识,以及中间件在非耦合状态下可依赖的全部文件的文件标识,例如其依赖的系统库和三方库中包含的文件标识,以及中间件内部的头文件的文件标识,等等。
参照图2,在本发明实施例中,所述步骤120进一步可以包括:
步骤121,根据所述中间件针对所述引用头文件的引用形式,确定用以检测所述引用头文件是否为其他工程文件的的检测路径,所述检测路径包括在所述白名单中检测,和/或在所述头文件列表中检测。
步骤122,根据所述检测路径,检测所述引用头文件是否为其他工程文件。
如前述,在本发明实施例中,可以根据中间件在非耦合状态下依赖的系统库、三方库以及所述中间件,构建所述中间件关联的白名单和头文件列表。而且,由于引用形式不同,具体可以参照的内容也有所不同。例如,如果引用形式中仅仅包含文件标识,那么则可以则包含文件标识的白名单和/或头文件列表中检测,而如果引用形式中仅仅包含库标识,那么只需在白名单中检测。因此,在本发明实施例中,在代码耦合检测过程中,针对中间件中的任意一个引用头文件,可以先根据所述中间件针对所述引用头文件的引用形式,确定用以检测所述引用头文件是否为其他工程文件的的检测路径,进而根据相应引用头文件的检测路径,检测相应的引用头文件是否为其他工程文件。从而可以有效提高代码耦合的检测效率。
可选地,在本发明实施例中,所述步骤150进一步可以包括:
步骤151,根据所述中间件中包含的全部头文件,以及以.a为文件后缀名的三方库中包含的头文件,构建所述头文件列表;
步骤152,根据所述系统库以及以.framework为文件后缀名的三方库,构建所述白名单。
参照图3,为中间件中不同import形式与其所依赖的系统和三方库之间的关系示意图。
可以看出,此时中间件对于三方库中文件的引用形式可以包括“A.h”和<XXX/A.h>两种,具体地在代码中的表示形式分别为#import“A.h”、#import<XXX/A.h>,中间件对于系统库中文件的引用形式可以包括<XXX/A.h>和<A.h>两种,具体地在代码中的表示形式分别为#import<XXX/A.h>、#import<A.h>。中间件对于中间件内部文件的引用形式则可以为“A.h”。而中间件对中间件外部其他pod(Plain Old Documentation)文件等外部工程引用则通常只会用“A.h”、<XXX/A.h>的形式。
而且,由于中间件都可以通过<XXX/A.h>、<A.h>的形式引用三方库和系统库,但是不通过<XXX/A.h>、<A.h>的形式引用中间件内部的头文件。而且在中间件最初是否不存在代码耦合。因此在本发明实施例中,可以在最初时候通过扫描中间件中的<XXX/A.h>、<A.h>引用方式来获取到中间件在非耦合状态下依赖的三方库和系统库。
另外可以看出,由虚线所示,白名单可以与三方库和系统库相关,头文件列表可以与中间件内部文件,也即中间件中包含的头文件有关。
此外,对于中间件所依赖的每个三方库而言,如果三方库的文件后缀名为.a,也即三方库为.a样式,此时中间件可以通过“A.h”的形式引用其中的头文件;如果三方库的后缀名为.framework,也即三方库为.framework样式,此时中间件可以通过<XXX/A.h>的形式引用其中的头文件,也即需要借助三方库的库标识引用其中的头文件。
基于上述情况,如果根据所述中间件包含的全部头文件、所述系统库中包含的全部头文件,以及所述三方库中包含的全部头文件,构建所述头文件列表;根据所述系统库以及所述三方库,构建所述白名单。此时,头文件列表中可以包括中间件内部的全部头文件的文件标识、系统库中包含的每个头文件的文件标识,以及所述三方库中包含的每个头文件的文件标识;白名单中仅包括系统库的库标识以及所述三方库的库标识。
此时,针对每个所述引用头文件,响应于所述中间件针对所述引用头文件的引用形式为基于引号的引用形式,和/或者为基于尖括号且包含库标识的引用形式,确定所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件;响应于所述中间件针对所述引用头文件的引用形式为基于尖括号且不包含库标识的引用形式,确定所述引用头文件的检测路径为在所述白名单中检测所述引用头文件。而且,响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,获取所述引用形式中的库标识,并在所述白名单中查找所述库标识;如果在所述白名单中未查找到所述库标识,确认所述引用头文件为其他工程文件;响应于所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件,在所述头文件列表中查找所述引用头文件的文件标识;如果在所述头文件列表中未查找到所述文件标识,确认所述引用头文件为其他工程文件。
但是一般而言,中间件所依赖的系统库和三方库的数量会远远小于头文件的数量,从而使得此时构建得到的头文件列表中包含的数据量远大于白名单中的数据量,也即在头文件列表中查找文件标识可能仍然会耗时较长,例如上述的“A.h”和<A.h>等引用形式,由于只能参考文件标识进行检索,从而使得虽然整个中间件的代码耦合检测效率有所提升,但是提升程度有限。
另外,如果根据中间件内部包含的所有头文件设置头文件列表,根据三方库和系统库设置白名单。那么此时,头文件列表中可以仅包含中间件内部包含的所有头文件的文件标识,白名单中可以包括三方库的库标识和系统库的库标识,以及三方库中包含的每个头文件的文件标识,系统库中包含的每个头文件的文件标识。
但是此时由于白名单和头文件列表中都包含文件标识,那么此时对于上述的“A.h”引用形式,由于中间件可以通过“A.h”引用形式引用三方库中的头文件,也可以通过“A.h”引用形式引用中间件内部头文件,因此针对上述引用形式则需要分别在白名单和头文件列表中进行头文件标识的检索,也会在一定程序上使得整个中间件的代码耦合检测效率的提升程度有限。
因此,在本发明实施例中,为了尽可能地提高代码耦合的检测效率,可以优选地设置每个引用头文件的检测路径为仅在白名单或者头文件列表中检测,尽量避免需要在白名单和头文件列表中都检测的情况。那么此时则可以根据中间件中包含的全部头文件,以及以.a为文件后缀名的三方库中包含的头文件,构建所述头文件列表;并且,根据所述系统库以及以.framework为文件后缀名的三方库,构建所述白名单。
此时构建得到的头文件列表中可以包括中间件中包含的全部头文件的文件标识,以及以.a为文件后缀名的三方库中包含的头文件的文件标识;白名单中则可以包括全部系统库的库标识、每个系统库中包含的头文件的文件标识,以及以.framework为文件后缀名的三方库的库标识和以.framework为文件后缀名的三方库中包含的头文件的文件标识。其中的文件后缀名也即文件扩展名(filename extension),是操作系统用来标志文件类型的一种机制。
另外,在本发明实施例中,为了避免其他异常情况,还可以设置白名单中还包括以.a为文件后缀名的三方库的库标识,等等。
可选地,在本发明实施例中,所述步骤121进一步可以包括:
步骤1211,针对每个所述引用头文件,响应于所述中间件针对所述引用头文件的引用形式为基于引号的引用形式,确定所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件;
步骤1212,响应于所述中间件针对所述引用头文件的引用形式为基于尖括号的引用形式,确定所述引用头文件的检测路径为在所述白名单中检测所述引用头文件。
基于上述的步骤151-152中的白名单和头文件列表的设置方式,那么针对中间件中的任意一个引用头文件,如果在中间件中针对相应的引用头文件的引用形式为基于引号的引用形式,例如上述的“A.h”等,则可以确定相应引用头文件的检测路径为在头文件列表中检测所述引用头文件;而如果在中间件中针对相应引用头文件的引用形式为基于尖括号的引用形式,,例如上述的<XXX/A.h>和<A.h>等,则可以确定相应引用头文件的检测路径为在白名单中检测所述引用头文件。
例如,在中间件的代码文件中检测其引用的头文件的过程中,可以扫描中间件中的每一个文件,查找import。如果当前检测到的引用头文件的引用方式为上述的“A.h”,则可以直接基于头文件列表进行检测,而如果当前检测到的引用头文件的引用方式为上述的<XXX/A.h>、<A.h>等,则可以直接基于白名单进行检测。
此时,针对不同的引用形式,只需在头文件列表和白名单中的一个中进行检测,相对于每种引用形式都分别在头文件列表和白名单中检测的方式,可以有效提高检测效率。
可选地,在本发明实施例中,所述步骤122进一步可以包括:
步骤1221,响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且包含库标识的引用形式,获取所述库标识,并在所述白名单中查找所述库标识;
步骤1222,如果在所述白名单中未查找到所述库标识,确认所述引用头文件为其他工程文件。
针对中间件中的任意一个引用头文件,如果当前查找到的引用头文件的检测路径为在所述白名单中检测所述引用头文件,而且相应引用头文件的引用形式为基于尖括号且包含库标识的引用形式,则可以从相应引用头文件在中间件的引用形式中获取库标识,并在白名单中查找所述库标识。如果在白名单中查找到库标识,则可以不针对相应的引用头文件做任何操作,继续查找新的引用头文件并检测;而如果在白名单中未查找到相应的库标识,则可以直接确认相应的引用头文件为其他工程文件。进而还可以记录或者标记相应的引用头文件为其他工程文件,具体的对确认为其他工程文件的引用头文件执行的操作可以根据需求进行自定义设置,对此本发明实施例不加以限定。同样地,还可以继续查找新的引用头文件并检测,直至对中间件中每个引用头文件都检测完成。
例如,对于上述的<XXX/A.h>形式,则可以取其中表征库标识的XXX字段,在白名单中搜索XXX,如果没有,则可以确认所述引用头文件为其他工程文件。
步骤1223,响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且不包含库标识的引用形式,在所述白名单中查找所述引用头文件的文件标识;
步骤1224,如果在所述白名单中未查找到所述文件标识,确认所述引用头文件为其他工程文件。
而如果当前查找到的引用头文件的检测路径为在白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且不包含库标识的引用形式,例如上述的<A.h>,此时则可以只能参照引用头文件的文件标识,因此可以直接在所述白名单中查找所述引用头文件的文件标识,如果在所述白名单中未查找到所述文件标识,则可以确认所述引用头文件为其他工程文件,并继续后续的检测工作,而如果在所述白名单中查找到所述文件标识,则可以不针对相应的引用头文件做任何操作,继续后续的检测工作,也即查找新的引用头文件并检测。
例如,对于上述的<A.h>引用形式,则可以直接取A.h在白名单中搜索,或者是在白名单中搜索文件标识为A的文件,如果没有,则可以确认所述引用头文件为其他工程文件。
步骤1225,响应于所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件,在所述头文件列表中查找所述引用头文件的文件标识;
步骤1226,如果在所述头文件列表中未查找到所述文件标识,确认所述引用头文件为其他工程文件。
而如果引用头文件的检测路径为在所述头文件列表中检测所述引用头文件,如前述,此时的引用头文件的引用形式可以为上述的基于引号的引用形式,则可以在头文件列表中查找相应的引用头文件的文件标识,如果在头文件列表中未查找到相应的文件标识,则可以确认相应的引用头文件为其他工程文件,并继续后续的检测工作,而如果在头文件列表中查找到所述文件标识,则可以不针对相应的引用头文件做任何操作,继续后续的检测工作,也即查找新的引用头文件并检测。
例如,对于前述的“A.h”引用形式,则在可以头文件列表中查找A.h或者是文件标识为A的文件,如果没有找到,则可以确认相应的引用头文件为其他工程文件。
其中,上述提及的文件标识可以为任意一种可以表征文件身份的标识信息,例如可以为文件名称、预设的文件唯一标识码,等等。相应的库标识也可以为任意一种可以表征库身份的标识信息,例如可以为库名称、预设的库唯一标识码,等等。具体的文件标识和库标识的内容均可以根据需求进行自定义设置,对此本发明实施例不加以限定。
参照图2,在本发明实施例中,在所述步骤120之后,还可以包括:
步骤160,响应于所述引用头文件为其他工程文件,记录所述引用头文件的文件信息到预设的异常文件中;其中,所述文件信息包括所述引用头文件的文件路径、所述引用头文件在所述中间件中的引用信息。
在本发明实施例中,为了方便后续技术人员准确定位中间件中的耦合部分,以进行解耦合等操作,可以在确认中间件中的任意引用头文件为其他工程文件的情况下,记录相应确认为其他工程文件的引用头文件的文件信息到预设的异常文件中。其中的文件信息可以包括但不限于相应的引用头文件的文件路径、所述引用头文件在所述中间件中的引用信息。其中的引用头文件的文件路径可以为获取引用头文件的物理路径等等。
例如,假设当前确认为其他工程文件的引用头文件在中间件中的引用形式为“A.h”,那么则可以记录引用头文件的A.h的文件路径,以及引用头文件在所述中间件中的引用信息的A.h,也即引用头文件的文件标识到预设的异常文件中;而如果当前确认为其他工程文件的引用头文件在中间件中的引用形式为<XXX/A.h>,那么则可以记录当前引用头文件的文件路径,以及引用头文件在所述中间件中的引用信息的XXX/A.h到预设的异常文件中。
另外,在中间件检测完成后,还可以将异常文件内容通过邮件等任何可用方式发送给相关人员。
在本发明实施例中,还可以获取所述中间件在非耦合状态下依赖的系统库和三方库;根据所述系统库、所述三方库以及所述中间件,构建所述中间件关联的白名单和头文件列表。并且,根据所述中间件针对所述引用头文件的引用形式,确定用以检测所述引用头文件是否为其他工程文件的的检测路径,所述检测路径包括在所述白名单中检测,和/或在所述头文件列表中检测;根据所述检测路径,检测所述引用头文件是否为其他工程文件。从而通过对系统库、所述三方库以及所述中间件进行组合拆分,提高代码耦合的检测效率,以及检测结果的准确性。
而且,在本发明实施例中,还可以根据所述中间件中包含的全部头文件,以及以.a为文件后缀名的三方库中包含的头文件,构建所述头文件列表;根据所述系统库以及以.framework为文件后缀名的三方库,构建所述白名单。并且,针对每个所述引用头文件,响应于所述中间件针对所述引用头文件的引用形式为基于引号的引用形式,确定所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件;响应于所述中间件针对所述引用头文件的引用形式为基于尖括号的引用形式,确定所述引用头文件的检测路径为在所述白名单中检测所述引用头文件。以及,响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且包含库标识的引用形式,获取所述库标识,并在所述白名单中查找所述库标识;如果在所述白名单中未查找到所述库标识,确认所述引用头文件为其他工程文件;响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且不包含库标识的引用形式,在所述白名单中查找所述引用头文件的文件标识;如果在所述白名单中未查找到所述文件标识,确认所述引用头文件为其他工程文件;响应于所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件,在所述头文件列表中查找所述引用头文件的文件标识;如果在所述头文件列表中未查找到所述文件标识,确认所述引用头文件为其他工程文件。从而通过基于引用方式,以及不同格式的三方库所支持的引用方式划分白名单和头文件列表,从而进一步提高代码耦合的检测效率以及检测结果的准确性。
另外,在本发明实施例中,还可以响应于所述引用头文件为其他工程文件,记录所述引用头文件的文件信息到预设的异常文件中;其中,所述文件信息包括所述引用头文件的文件路径、所述引用头文件在所述中间件中的引用信息。从而可以及时记录导致代码耦合的引用头文件,以方便后续技术人员及时准确定位耦合代码。
参照图4,示出了本发明实施例中一种代码耦合检测装置的结构示意图。
本发明实施例的代码耦合检测装置包括:引用头文件扫描模块210、引用头文件检测模块220和代码耦合确认模块230。
下面分别详细介绍各模块的功能以及各模块之间的交互关系。
引用头文件扫描模块210,用于扫描待检测的中间件中的每个文件,获取所述中间件中的每个引用头文件,以及所述引用头文件在所述中间件中的引用形式。
引用头文件检测模块220,用于根据所述中间件针对所述引用头文件的引用形式,检测所述引用头文件是否为其他工程文件,所述其他工程文件为除去所述中间件内部的头文件,所述中间件在非耦合状态下依赖的系统库和三方库之外的其他文件。
代码耦合确认模块230,用于响应于存在至少一个所述引用头文件为其他工程文件,确认所述中间件中存在代码耦合。
在本发明实施例中,通过扫描待检测的中间件中的每个文件,获取所述中间件中的每个引用头文件,以及所述引用头文件在所述中间件中的引用形式;根据所述中间件针对所述引用头文件的引用形式,检测所述引用头文件是否为其他工程文件,所述其他工程文件为除去所述中间件内部的头文件,所述中间件在非耦合状态下依赖的系统库和三方库之外的其他文件;响应于存在至少一个所述引用头文件为其他工程文件,确认所述中间件中存在代码耦合。由于上述方案不受运行环境限制,从而提高了代码耦合检测的适用性,而且,由于上述方案针对中间件中的每个引用头文件进行检测,因此可以有效提高代码耦合检测结果以及代码耦合定位的准确性。
参照图5,在本发明实施例中,所述装置还可以包括:
非耦合依赖库获取模块240,用于获取所述中间件在非耦合状态下依赖的系统库和三方库。
非耦合依赖库拆分模块250,用于根据所述系统库、所述三方库以及所述中间件,构建所述中间件关联的白名单和头文件列表。
参照图5,在本发明实施例中,所述引用头文件检测模块220,进一步可以包括:
检测路径确认子模块221,用于根据所述中间件针对所述引用头文件的引用形式,确定用以检测所述引用头文件是否为其他工程文件的的检测路径,所述检测路径包括在所述白名单中检测,和/或在所述头文件列表中检测;
引用头文件检测子模块222,用于根据所述检测路径,检测所述引用头文件是否为其他工程文件。
可选地,在本发明实施例中,所述非耦合依赖库拆分模块250,进一步可以包括:
头文件列表构建子模块,用于根据所述中间件中包含的全部头文件,以及以.a为文件后缀名的三方库中包含的头文件,构建所述头文件列表;
白名单构建子模块,用于根据所述系统库以及以.framework为文件后缀名的三方库,构建所述白名单。
可选地,在本发明实施例中,所述检测路径确认子模块221,进一步可以包括:
第一检测路径确认单元,用于针对每个所述引用头文件,响应于所述中间件针对所述引用头文件的引用形式为基于引号的引用形式,确定所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件;
第二检测路径确认单元,用于响应于所述中间件针对所述引用头文件的引用形式为基于尖括号的引用形式,确定所述引用头文件的检测路径为在所述白名单中检测所述引用头文件。
可选地,在本发明实施例中,所述引用头文件检测子模块222,进一步可以包括:包括:
第一引用头文件检测单元,用于响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且包含库标识的引用形式,获取所述库标识,并在所述白名单中查找所述库标识;
第一其他工程文件确认单元,用于如果在所述白名单中未查找到所述库标识,确认所述引用头文件为其他工程文件;
第二引用头文件检测单元,用于响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且不包含库标识的引用形式,在所述白名单中查找所述引用头文件的文件标识;
第二其他工程文件确认单元,用于如果在所述白名单中未查找到所述文件标识,确认所述引用头文件为其他工程文件;
第三引用头文件检测单元,用于响应于所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件,在所述头文件列表中查找所述引用头文件的文件标识;
第三其他工程文件确认单元,用于如果在所述头文件列表中未查找到所述文件标识,确认所述引用头文件为其他工程文件。
参照图5,在本发明实施例中,所述装置还可以包括:
异常文件记录模块260,用于响应于所述引用头文件为其他工程文件,记录所述引用头文件的文件信息到预设的异常文件中;其中,所述文件信息包括所述引用头文件的文件路径、所述引用头文件在所述中间件中的引用信息。
在本发明实施例中,还可以获取所述中间件在非耦合状态下依赖的系统库和三方库;根据所述系统库、所述三方库以及所述中间件,构建所述中间件关联的白名单和头文件列表。并且,根据所述中间件针对所述引用头文件的引用形式,确定用以检测所述引用头文件是否为其他工程文件的的检测路径,所述检测路径包括在所述白名单中检测,和/或在所述头文件列表中检测;根据所述检测路径,检测所述引用头文件是否为其他工程文件。从而通过对系统库、所述三方库以及所述中间件进行组合拆分,提高代码耦合的检测效率,以及检测结果的准确性。
而且,在本发明实施例中,还可以根据所述中间件中包含的全部头文件,以及以.a为文件后缀名的三方库中包含的头文件,构建所述头文件列表;根据所述系统库以及以.framework为文件后缀名的三方库,构建所述白名单。并且,针对每个所述引用头文件,响应于所述中间件针对所述引用头文件的引用形式为基于引号的引用形式,确定所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件;响应于所述中间件针对所述引用头文件的引用形式为基于尖括号的引用形式,确定所述引用头文件的检测路径为在所述白名单中检测所述引用头文件。以及,响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且包含库标识的引用形式,获取所述库标识,并在所述白名单中查找所述库标识;如果在所述白名单中未查找到所述库标识,确认所述引用头文件为其他工程文件;响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且不包含库标识的引用形式,在所述白名单中查找所述引用头文件的文件标识;如果在所述白名单中未查找到所述文件标识,确认所述引用头文件为其他工程文件;响应于所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件,在所述头文件列表中查找所述引用头文件的文件标识;如果在所述头文件列表中未查找到所述文件标识,确认所述引用头文件为其他工程文件。从而通过基于引用方式,以及不同格式的三方库所支持的引用方式划分白名单和头文件列表,从而进一步提高代码耦合的检测效率以及检测结果的准确性。
另外,在本发明实施例中,还可以响应于所述引用头文件为其他工程文件,记录所述引用头文件的文件信息到预设的异常文件中;其中,所述文件信息包括所述引用头文件的文件路径、所述引用头文件在所述中间件中的引用信息。从而可以及时记录导致代码耦合的引用头文件,以方便后续技术人员及时准确定位耦合代码。
本发明实施例提供的代码耦合检测装置能够实现图1和图2的方法实施例中实现的各个过程,为避免重复,这里不再赘述。
图6为实现本发明各个实施例的一种终端设备的硬件结构示意图。
该终端设备300包括但不限于:射频单元301、网络模块302、音频输出单元303、输入单元304、传感器305、显示单元306、用户输入单元307、接口单元308、存储器309、处理器310、以及电源311等部件。本领域技术人员可以理解,图6中示出的终端设备结构并不构成对终端设备的限定,终端设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。在本发明实施例中,终端设备包括但不限于手机、平板电脑、笔记本电脑、掌上电脑、车载终端、可穿戴设备、以及计步器等。
应理解的是,本发明实施例中,射频单元301可用于收发信息或通话过程中,信号的接收和发送,具体的,将来自基站的下行数据接收后,给处理器310处理;另外,将上行的数据发送给基站。通常,射频单元301包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器、双工器等。此外,射频单元301还可以通过无线通信系统与网络和其他设备通信。
终端设备通过网络模块302为用户提供了无线的宽带互联网访问,如帮助用户收发电子邮件、浏览网页和访问流式媒体等。
音频输出单元303可以将射频单元301或网络模块302接收的或者在存储器309中存储的音频数据转换成音频信号并且输出为声音。而且,音频输出单元303还可以提供与终端设备300执行的特定功能相关的音频输出(例如,呼叫信号接收声音、消息接收声音等等)。音频输出单元303包括扬声器、蜂鸣器以及受话器等。
输入单元304用于接收音频或视频信号。输入单元304可以包括图形处理器(Graphics Processing Unit,GPU)3041和麦克风3042,图形处理器3041对在视频捕获模式或图像捕获模式中由图像捕获装置(如摄像头)获得的静态图片或视频的图像数据进行处理。处理后的图像帧可以显示在显示单元306上。经图形处理器3041处理后的图像帧可以存储在存储器309(或其它存储介质)中或者经由射频单元301或网络模块302进行发送。麦克风3042可以接收声音,并且能够将这样的声音处理为音频数据。处理后的音频数据可以在电话通话模式的情况下转换为可经由射频单元301发送到移动通信基站的格式输出。
终端设备300还包括至少一种传感器305,比如光传感器、运动传感器以及其他传感器。具体地,光传感器包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板3061的亮度,接近传感器可在终端设备300移动到耳边时,关闭显示面板3061和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别终端设备姿态(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;传感器305还可以包括指纹传感器、压力传感器、虹膜传感器、分子传感器、陀螺仪、气压计、湿度计、温度计、红外线传感器等,在此不再赘述。
显示单元306用于显示由用户输入的信息或提供给用户的信息。显示单元306可包括显示面板3061,可以采用液晶显示器(Liquid Crystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板3061。
用户输入单元307可用于接收输入的数字或字符信息,以及产生与终端设备的用户设置以及功能控制有关的键信号输入。具体地,用户输入单元307包括触控面板3071以及其他输入设备3072。触控面板3071,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板3071上或在触控面板3071附近的操作)。触控面板3071可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器310,接收处理器310发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板3071。除了触控面板3071,用户输入单元307还可以包括其他输入设备3072。具体地,其他输入设备3072可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆,在此不再赘述。
进一步的,触控面板3071可覆盖在显示面板3061上,当触控面板3071检测到在其上或附近的触摸操作后,传送给处理器310以确定触摸事件的类型,随后处理器310根据触摸事件的类型在显示面板3061上提供相应的视觉输出。虽然在图6中,触控面板3071与显示面板3061是作为两个独立的部件来实现终端设备的输入和输出功能,但是在某些实施例中,可以将触控面板3071与显示面板3061集成而实现终端设备的输入和输出功能,具体此处不做限定。
接口单元308为外部装置与终端设备300连接的接口。例如,外部装置可以包括有线或无线头戴式耳机端口、外部电源(或电池充电器)端口、有线或无线数据端口、存储卡端口、用于连接具有识别模块的装置的端口、音频输入/输出(I/O)端口、视频I/O端口、耳机端口等等。接口单元308可以用于接收来自外部装置的输入(例如,数据信息、电力等等)并且将接收到的输入传输到终端设备300内的一个或多个元件或者可以用于在终端设备300和外部装置之间传输数据。
存储器309可用于存储软件程序以及各种数据。存储器309可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器309可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
处理器310是终端设备的控制中心,利用各种接口和线路连接整个终端设备的各个部分,通过运行或执行存储在存储器309内的软件程序和/或模块,以及调用存储在存储器309内的数据,执行终端设备的各种功能和处理数据,从而对终端设备进行整体监控。处理器310可包括一个或多个处理单元;优选的,处理器310可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器310中。
终端设备300还可以包括给各个部件供电的电源311(比如电池),优选的,电源311可以通过电源管理系统与处理器310逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
另外,终端设备300包括一些未示出的功能模块,在此不再赘述。
优选的,本发明实施例还提供了一种终端设备,包括:处理器310,存储器309,存储在存储器309上并可在处理器310上运行的计算机程序,该计算机程序被处理器310执行时实现上述代码耦合检测方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述代码耦合检测方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。
本领域普通技术人员可以意识到,结合本发明实施例中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (12)
1.一种代码耦合检测方法,其特征在于,包括:
扫描待检测的中间件中的每个文件,获取所述中间件中的每个引用头文件,以及所述引用头文件在所述中间件中的引用形式;
根据所述中间件针对所述引用头文件的引用形式,检测所述引用头文件是否为其他工程文件,所述其他工程文件为除去所述中间件内部的头文件,所述中间件在非耦合状态下依赖的系统库和三方库之外的其他文件;
响应于存在至少一个所述引用头文件为其他工程文件,确认所述中间件中存在代码耦合;
其中,在所述根据所述中间件针对所述引用头文件的引用形式,检测所述引用头文件是否为其他工程文件的步骤之前,还包括:
获取所述中间件在非耦合状态下依赖的系统库和三方库;
根据所述系统库、所述三方库以及所述中间件,构建所述中间件关联的白名单和头文件列表;
所述根据所述中间件针对所述引用头文件的引用形式,检测所述引用头文件是否为其他工程文件的步骤,包括:
根据所述中间件针对所述引用头文件的引用形式,确定用以检测所述引用头文件是否为其他工程文件的检测路径,所述检测路径包括在所述白名单中检测,和/或在所述头文件列表中检测;
根据所述检测路径,检测所述引用头文件是否为其他工程文件。
2.根据权利要求1所述的方法,其特征在于,所述根据所述系统库、所述三方库以及所述中间件,构建所述中间件关联的白名单和头文件列表的步骤,包括:
根据所述中间件中包含的全部头文件,以及以.a为文件后缀名的三方库中包含的头文件,构建所述头文件列表;
根据所述系统库以及以.framework为文件后缀名的三方库,构建所述白名单。
3.根据权利要求2所述的方法,其特征在于,所述根据所述中间件针对所述引用头文件的引用形式,确定用以检测所述引用头文件是否为其他工程文件的检测路径的步骤,包括:
针对每个所述引用头文件,响应于所述中间件针对所述引用头文件的引用形式为基于引号的引用形式,确定所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件;
响应于所述中间件针对所述引用头文件的引用形式为基于尖括号的引用形式,确定所述引用头文件的检测路径为在所述白名单中检测所述引用头文件。
4.根据权利要求3所述的方法,其特征在于,所述根据所述检测路径,检测所述引用头文件是否为其他工程文件的步骤,包括:
响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且包含库标识的引用形式,获取所述库标识,并在所述白名单中查找所述库标识;
如果在所述白名单中未查找到所述库标识,确认所述引用头文件为其他工程文件;
响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且不包含库标识的引用形式,在所述白名单中查找所述引用头文件的文件标识;
如果在所述白名单中未查找到所述文件标识,确认所述引用头文件为其他工程文件;
响应于所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件,在所述头文件列表中查找所述引用头文件的文件标识;
如果在所述头文件列表中未查找到所述文件标识,确认所述引用头文件为其他工程文件。
5.根据权利要求1-4中任一项时所述的方法,其特征在于,在所述根据所述中间件针对所述引用头文件的引用形式,检测所述引用头文件是否为其他工程文件的步骤之后,还包括:
响应于所述引用头文件为其他工程文件,记录所述引用头文件的文件信息到预设的异常文件中;
其中,所述文件信息包括所述引用头文件的文件路径、所述引用头文件在所述中间件中的引用信息。
6.一种代码耦合检测装置,其特征在于,包括:
引用头文件扫描模块,用于扫描待检测的中间件中的每个文件,获取所述中间件中的每个引用头文件,以及所述引用头文件在所述中间件中的引用形式;
引用头文件检测模块,用于根据所述中间件针对所述引用头文件的引用形式,检测所述引用头文件是否为其他工程文件,所述其他工程文件为除去所述中间件内部的头文件,所述中间件在非耦合状态下依赖的系统库和三方库之外的其他文件;
代码耦合确认模块,用于响应于存在至少一个所述引用头文件为其他工程文件,确认所述中间件中存在代码耦合;
非耦合依赖库获取模块,用于获取所述中间件在非耦合状态下依赖的系统库和三方库;
非耦合依赖库拆分模块,用于根据所述系统库、所述三方库以及所述中间件,构建所述中间件关联的白名单和头文件列表;
其中,所述引用头文件检测模块,包括:
检测路径确认子模块,用于根据所述中间件针对所述引用头文件的引用形式,确定用以检测所述引用头文件是否为其他工程文件的检测路径,所述检测路径包括在所述白名单中检测,和/或在所述头文件列表中检测;
引用头文件检测子模块,用于根据所述检测路径,检测所述引用头文件是否为其他工程文件。
7.根据权利要求6所述的装置,其特征在于,所述非耦合依赖库拆分模块,包括:
头文件列表构建子模块,用于根据所述中间件中包含的全部头文件,以及以.a为文件后缀名的三方库中包含的头文件,构建所述头文件列表;
白名单构建子模块,用于根据所述系统库以及以.framework为文件后缀名的三方库,构建所述白名单。
8.根据权利要求7所述的装置,其特征在于,所述检测路径确认子模块,包括:
第一检测路径确认单元,用于针对每个所述引用头文件,响应于所述中间件针对所述引用头文件的引用形式为基于引号的引用形式,确定所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件;
第二检测路径确认单元,用于响应于所述中间件针对所述引用头文件的引用形式为基于尖括号的引用形式,确定所述引用头文件的检测路径为在所述白名单中检测所述引用头文件。
9.根据权利要求8所述的装置,其特征在于,所述引用头文件检测子模块,包括:
第一引用头文件检测单元,用于响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且包含库标识的引用形式,获取所述库标识,并在所述白名单中查找所述库标识;
第一其他工程文件确认单元,用于如果在所述白名单中未查找到所述库标识,确认所述引用头文件为其他工程文件;
第二引用头文件检测单元,用于响应于所述引用头文件的检测路径为在所述白名单中检测所述引用头文件,且所述引用头文件的引用形式为基于尖括号且不包含库标识的引用形式,在所述白名单中查找所述引用头文件的文件标识;
第二其他工程文件确认单元,用于如果在所述白名单中未查找到所述文件标识,确认所述引用头文件为其他工程文件;
第三引用头文件检测单元,用于响应于所述引用头文件的检测路径为在所述头文件列表中检测所述引用头文件,在所述头文件列表中查找所述引用头文件的文件标识;
第三其他工程文件确认单元,用于如果在所述头文件列表中未查找到所述文件标识,确认所述引用头文件为其他工程文件。
10.根据权利要求6-9中任一项时所述的装置,其特征在于,还包括:
异常文件记录模块,用于响应于所述引用头文件为其他工程文件,记录所述引用头文件的文件信息到预设的异常文件中;其中,所述文件信息包括所述引用头文件的文件路径、所述引用头文件在所述中间件中的引用信息。
11.一种终端设备,其特征在于,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至5中任一项所述的代码耦合检测方法的步骤。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至5中任一项所述的代码耦合检测方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911205937.1A CN110928797B (zh) | 2019-11-29 | 2019-11-29 | 一种代码耦合检测方法、装置、终端设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911205937.1A CN110928797B (zh) | 2019-11-29 | 2019-11-29 | 一种代码耦合检测方法、装置、终端设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110928797A CN110928797A (zh) | 2020-03-27 |
CN110928797B true CN110928797B (zh) | 2021-01-22 |
Family
ID=69847017
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911205937.1A Active CN110928797B (zh) | 2019-11-29 | 2019-11-29 | 一种代码耦合检测方法、装置、终端设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110928797B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111581094B (zh) * | 2020-05-08 | 2023-06-23 | 贝壳技术有限公司 | 头文件名检测方法、装置、存储介质及电子设备 |
CN111984531B (zh) * | 2020-07-31 | 2022-01-28 | 五八有限公司 | 一种代码耦合检测的方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109189729A (zh) * | 2018-09-03 | 2019-01-11 | 五八有限公司 | 各组件间依赖关系的查找方法、装置、设备及存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9058177B2 (en) * | 2004-02-12 | 2015-06-16 | Raju Venkata Chiluvuri | Real software components for achieving real component-based design |
US9210128B2 (en) * | 2012-10-25 | 2015-12-08 | Check Point Software Technologies Ltd. | Filtering of applications for access to an enterprise network |
CN103995752A (zh) * | 2014-06-16 | 2014-08-20 | 上海斐讯数据通信技术有限公司 | 模块间通知回调方法及模块交互结构 |
CN105867906B (zh) * | 2016-03-22 | 2018-11-27 | 东南大学 | 一种面向软件演化的代码可替换性评估方法 |
CN108628728B (zh) * | 2017-03-15 | 2021-07-16 | 华为技术有限公司 | 检测方法和装置 |
CN108153529A (zh) * | 2017-12-22 | 2018-06-12 | 杭州迪普科技股份有限公司 | 一种文件编译的方法及装置 |
-
2019
- 2019-11-29 CN CN201911205937.1A patent/CN110928797B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109189729A (zh) * | 2018-09-03 | 2019-01-11 | 五八有限公司 | 各组件间依赖关系的查找方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110928797A (zh) | 2020-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111142930B (zh) | 安装包文件打包方法、装置、终端设备及存储介质 | |
CN108089977B (zh) | 一种应用程序的异常处理方法、装置及移动终端 | |
CN105429775B (zh) | 一种上报日志的方法及装置 | |
CN111597542B (zh) | 验证信息共享方法、装置及电子设备及存储介质 | |
CN109857297B (zh) | 信息处理方法及终端设备 | |
CN111381992B (zh) | 一种崩溃日志处理方法、装置、电子设备及存储介质 | |
CN111752826A (zh) | 一种接口测试方法、装置、电子设备及存储介质 | |
CN110928797B (zh) | 一种代码耦合检测方法、装置、终端设备及存储介质 | |
CN112650498B (zh) | 静态库集成方法、装置、电子设备及存储介质 | |
CN108228357B (zh) | 一种内存清理方法及移动终端 | |
CN107844318B (zh) | 一种操作系统的升级方法及移动终端和服务器 | |
CN111966373A (zh) | Apn的重置方法、终端设备及存储介质 | |
CN110879709A (zh) | 无用代码的检测方法、装置、终端设备及存储介质 | |
CN109040457B (zh) | 一种屏幕亮度调节方法及移动终端 | |
CN108596600B (zh) | 一种信息处理方法、终端 | |
CN111078312A (zh) | 一种加载mbn的方法及电子设备 | |
CN111026454A (zh) | 功能启动方法及终端设备 | |
CN106357513B (zh) | 一种消息处理方法、设备、服务器及消息处理系统 | |
CN111601035B (zh) | 一种图像处理方法及电子设备 | |
CN112433721B (zh) | 一种应用组件化处理方法、装置、电子设备及存储介质 | |
CN109783379B (zh) | 脚本执行异常确定方法和装置 | |
CN113076201B (zh) | 一种任务指令的互斥校验方法及电子设备 | |
CN109918340B (zh) | 一种文件处理方法及终端设备 | |
CN109976854B (zh) | 一种应用程序处理方法及终端设备 | |
CN112230980A (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 |