CN111984531B - 一种代码耦合检测的方法及装置 - Google Patents
一种代码耦合检测的方法及装置 Download PDFInfo
- Publication number
- CN111984531B CN111984531B CN202010761994.4A CN202010761994A CN111984531B CN 111984531 B CN111984531 B CN 111984531B CN 202010761994 A CN202010761994 A CN 202010761994A CN 111984531 B CN111984531 B CN 111984531B
- Authority
- CN
- China
- Prior art keywords
- file
- white list
- service middleware
- middleware
- header file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- 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
Abstract
本申请示出了一种代码耦合检测的方法及装置。根据引用头文件在业务中间件中的引用形式检测引用头文件是否为耦合工程文件,当是时,确定业务中间件中存在代码耦合。耦合工程文件包括除头文件列表中的文件、公共白名单中的文件以及私有白名单中的文件以外的文件;本申请不受运行环境限制,从而提高了代码耦合检测的适用性。不涉及对业务中间件的编译,从而避免编译本身带来的干扰,可以有效提高代码耦合检测结果的准确性。由于本申请针对业务中间件中的每一个引用头文件分别进行检测,可以直接定位出耦合的引用头文件,可以提高代码耦合定位的准确性,且代码耦合定位不需要人工参与,因此可以降低人工成本以及提高耦合定位的效率。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种代码耦合检测的方法及装置。
背景技术
在开发应用程序的过程中,为了使得一些基础服务能在多个应用程序中复用,可以将这些基础服务创建为业务中间件。业务中间件包括应用程序架构中处于上层业务下方的,为上层业务提供通用服务的基础组件,属于通用业务。
例如,上层业务包括用户可以直接交互的业务,例如,买房业务、租车业务以及招聘业务等,为了使得用户能够享用这些业务,在这些业务的详情页中有时候需要设置相册、列表以及聊天框等,这些诸如为了支持上层业务提供通用相册服务、通用列表服务、IM服务以及信息推送服务等可以看做通用业务,其与上层业务不是强相关。
但是,在维护应用程序中的业务中间件的过程中,有时候开发人员为了方便,可能会将业务中间件不经过解耦而直接引用了其它工程代码,这样虽然应用程序的功能和编译都不会受影响,但是后续将难以维护业务中间件,也很难将其复用到其它应用程序中,也不能单独编译生成业务中间件的静态库。
在相关技术中,为了对业务中间件进行代码耦合检测,可以对每个业务中间件单独编译,如果编译失败,则认为业务中间件很可能存在代码耦合。
但是,对业务中间件编译的过程比较耗时,而且需要依赖xcode环境。
另外,对耦合的代码的定位比较困难,需要对xcode的编译结果进行分析,当前需要依靠人工分析,然而,人工分析不仅耗时长且会提高人工成本。
其次,业务中间件编译失败也可能并不是代码耦合造成的,也可能是编译本身有问题而导致的。
由此可见,相关技术中的代码耦合检测方案存在适用性弱,对耦合的代码的定位教困难以及检测结果的准确性低等问题。
发明内容
为了提高代码耦合检测方案的适用性,降低耦合的代码的定位困难度以及提高检测结果的准确性等,本申请示出了一种代码耦合检测的方法及装置。
第一方面,本申请示出了一种代码耦合检测的方法,所述方法包括:
获取第一业务中间件中的引用头文件,以及,获取所述引用头文件在所述第一业务中间件中的引用形式;
根据所述引用形式,检测所述引用头文件是否为耦合工程文件,其中,所述耦合工程文件包括除头文件列表中的文件、公共白名单中的文件以及私有白名单中的文件以外的文件,所述公共白名单是至少基于所述第一业务中间件在非耦合状态下依赖的系统库、三方库以及标准中间件生成的,所述私有白名单是至少基于所述第一业务中间件在非耦合状态下依赖的第二业务中间件生成的,所述头文件列表中是至少根据所述第一业务中间件自身包括的文件生成的;
在至少一个所述引用头文件为所述耦合工程文件的情况下,确定所述第一业务中间件中存在代码耦合。
在一个可选的实现方式中,所述根据所述引用形式,检测所述引用头文件是否为耦合工程文件,包括:
根据所述引用形式,确定用于检测所述引用头文件是否为耦合工程文件的检测路径,所述检测路径包括以下至少一者:在所述公共白名单中检测、在所述私有白名单中检测以及在所述头文件列表中检测;
根据所述检测路径,检测所述引用头文件是否为耦合工程文件。
在一个可选的实现方式中,所述根据所述引用形式,检测所述引用头文件是否为耦合工程文件之前,还包括:
至少获取所述第一业务中间件在非耦合状态下依赖的系统库、三方库和标准中间件,至少根据所述系统库、所述三方库以及所述标准中间件,构建所述公共白名单;
至少获取根据所述第一业务中间件自身包括的文件,至少根据所述第一业务中间件自身包括的文件,构建所述头文件列表;
至少获取所述第一业务中间件在非耦合状态下依赖的第二业务中间件,至少根据所述第二业务中间件,构建所述私有白名单。
在一个可选的实现方式中,所述至少获取所述第一业务中间件在非耦合状态下依赖的第二业务中间件,包括:
获取所述第一业务中间件的代码文件中的引用文件的文件标识;
在所述公共白名单和所述头文件列表中查找所述文件标识;
在所述公共白名单和所述头文件列表中未查找到所述文件标识的情况下,将所述引用文件确定为所述第二业务中间件。
在一个可选的实现方式中,所述根据所述引用形式,确定用于检测所述引用头文件是否为耦合工程文件的检测路径,包括:
在所述引用形式为包括所述引用头文件的文件标识的引用形式情况下,确定所述检测路径包括所述头文件列表、所述公共白名单以及所述私有白名单;
或者,
在所述引用形式为包括库标识的引用形式情况下,确定所述检测路径包括所述公共白名单以及所述私有白名单。
在一个可选的实现方式中,所述根据所述检测路径,检测所述引用头文件是否为耦合工程文件,包括:
在所述检测路径包括所述头文件列表、所述公共白名单以及所述私有白名单的情况下,在所述头文件列表、所述公共白名单以及所述私有白名单中分别查找所述引用头文件的文件标识;
如果在所述头文件列表、所述公共白名单以及所述私有白名单中均未查找到所述文件标识,确定所述引用头文件为耦合工程文件。
在一个可选的实现方式中,所述根据所述检测路径,检测所述引用头文件是否为耦合工程文件,包括:
在所述检测路径包括所述公共白名单以及所述私有白名单的情况下,获取所述库标识,在所述公共白名单以及所述私有白名单中查找所述库标识;
如果在所述公共白名单以及所述私有白名单中均未查找到所述库标识,确定所述引用头文件为耦合工程文件。
在一个可选的实现方式中,所述确定所述第一业务中间件中存在代码耦合之后,还包括:
在预设异常文件中记录所述引用头文件的文件信息;
其中,所述文件信息包括所述引用头文件的文件路径和/或所述引用头文件在所述第一业务中间件中的引用信息。
第二方面,本申请示出了一种代码耦合检测装置,所述装置包括:
获取模块,用于获取第一业务中间件中的引用头文件,以及,获取所述引用头文件在所述第一业务中间件中的引用形式;
检测模块,用于根据所述引用形式,检测所述引用头文件是否为耦合工程文件,其中,所述耦合工程文件包括除头文件列表中的文件、公共白名单中的文件以及私有白名单中的文件以外的文件,所述公共白名单是至少基于所述第一业务中间件在非耦合状态下依赖的系统库、三方库以及标准中间件生成的,所述私有白名单是至少基于所述第一业务中间件在非耦合状态下依赖的第二业务中间件生成的,所述头文件列表中是至少根据所述第一业务中间件自身包括的文件生成的;
确定模块,用于在至少一个所述引用头文件为所述耦合工程文件的情况下,确定所述第一业务中间件中存在代码耦合。
在一个可选的实现方式中,所述检测模块包括:
确定单元,用于根据所述引用形式,确定用于检测所述引用头文件是否为耦合工程文件的检测路径,所述检测路径包括以下至少一者:在所述公共白名单中检测、在所述私有白名单中检测以及在所述头文件列表中检测;
检测单元,用于根据所述检测路径,检测所述引用头文件是否为耦合工程文件。
在一个可选的实现方式中,所述检测模块还包括:
第一获取单元,用于至少获取所述第一业务中间件在非耦合状态下依赖的系统库、三方库和标准中间件,第一构建单元,用于至少根据所述系统库、所述三方库以及所述标准中间件,构建所述公共白名单;
第二获取单元,用于至少获取根据所述第一业务中间件自身包括的文件,第二构建单元,用于至少根据所述第一业务中间件自身包括的文件,构建所述头文件列表;
第三获取单元,用于至少获取所述第一业务中间件在非耦合状态下依赖的第二业务中间件,第三构建单元,用于至少根据所述第二业务中间件,构建所述私有白名单。
在一个可选的实现方式中,所述第三获取单元包括:
获取子单元,用于获取所述第一业务中间件的代码文件中的引用文件的文件标识;
第一查找子单元,用于在所述公共白名单和所述头文件列表中查找所述文件标识;
第一确定子单元,用于在所述公共白名单和所述头文件列表中未查找到所述文件标识的情况下,将所述引用文件确定为所述第二业务中间件。
在一个可选的实现方式中,所述确定单元包括:
第二确定子单元,用于在所述引用形式为包括所述引用头文件的文件标识的引用形式情况下,确定所述检测路径包括所述头文件列表、所述公共白名单以及所述私有白名单;
或者,
第三确定子单元,用于在所述引用形式为包括库标识的引用形式情况下,确定所述检测路径包括所述公共白名单以及所述私有白名单。
在一个可选的实现方式中,所述检测单元包括:
第二查找子单元,用于在所述检测路径包括所述头文件列表、所述公共白名单以及所述私有白名单的情况下,在所述头文件列表、所述公共白名单以及所述私有白名单中分别查找所述引用头文件的文件标识;
第四确定子单元,用于如果在所述头文件列表、所述公共白名单以及所述私有白名单中均未查找到所述文件标识,确定所述引用头文件为耦合工程文件。
在一个可选的实现方式中,所述检测单元包括:
第三查找子单元,用于在所述检测路径包括所述公共白名单以及所述私有白名单的情况下,获取所述库标识,在所述公共白名单以及所述私有白名单中查找所述库标识;
第五确定子单元,用于如果在所述公共白名单以及所述私有白名单中均未查找到所述库标识,确定所述引用头文件为耦合工程文件。
在一个可选的实现方式中,所述装置还包括:
记录模块,用于在预设异常文件中记录所述引用头文件的文件信息;
其中,所述文件信息包括所述引用头文件的文件路径和/或所述引用头文件在所述第一业务中间件中的引用信息。
第三方面,本申请示出了一种电子设备,所述电子设备包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行如第一方面所述的代码耦合检测的方法。
第四方面,本申请示出了一种非临时性计算机可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如第一方面所述的代码耦合检测的方法。
第五方面,本申请示出了一种计算机程序产品,当所述计算机程序产品中的指令由电子设备的处理器执行时,使得电子设备能够执行如第一方面所述的代码耦合检测的方法。
本申请提供的技术方案可以包括以下有益效果:
如果第一业务中间件中存在至少一个引用头文件为耦合工程文件,则会影响包括第一业务中间件的工程的编译结果,使得包括第一业务中间件的工程本身可能会因为找不到引用的代码而导致编译失败,且很难将第一业务中间件复用到其它应用程序中。
在本申请中,获取第一业务中间件中的引用头文件,以及获取引用头文件在第一业务中间件中的引用形式;根据引用形式,检测引用头文件是否为耦合工程文件,耦合工程文件包括除头文件列表中的文件、公共白名单中的文件以及私有白名单中的文件以外的文件;公共白名单是至少基于第一业务中间件在非耦合状态下依赖的系统库、三方库以及标准中间件生成的,私有白名单是至少基于第一业务中间件在非耦合状态下依赖的第二业务中间件生成的,头文件列表中是至少根据第一业务中间件自身包括的文件生成的;在第一业务中间件中的至少一个引用头文件为耦合工程文件的情况下,确定第一业务中间件中存在代码耦合。
通过本申请,可以及时检测出第一业务中间件中是否存在代码耦合,在第一业务中间件中存在代码耦合的情况下,以方便开发人员及时对其解耦合,以使解耦合后的第一业务中间件可以复用到其它应用程序中,且使得包括解耦合后的第一业务中间件的工程可以编译成功。
以及,本申请的方案不受运行环境限制,从而提高了代码耦合检测的适用性。
其次,本申请的方案不涉及对第一业务中间件的编译,从而可以避免编译本身带来的干扰,进而可以有效提高代码耦合检测结果的准确性。
另外,由于本申请的方案可以针对第一业务中间件中的每一个引用头文件分别进行检测,从而可以直接定位出耦合的引用头文件,因此可以提高代码耦合定位的准确性,且代码耦合定位不需要人工参与,因此可以降低人工成本以及提高耦合定位的效率。
由于引用形式不同,具体可以参照的内容也有所不同。例如,在引用形式为包括引用头文件的文件标识的引用形式情况下,可以在头文件列表、公共白名单以及私有白名单中检测。在引用形式为包括库标识的引用形式情况下,可以在公共白名单以及私有白名单中检测。因此,在本申请实施例中,在代码耦合检测过程中,针对第一业务中间件中的引用头文件,可以先根据第一业务中间件针对引用头文件的引用形式,确定用于检测引用头文件是否为耦合工程文件的检测路径,然后根据检测路径,检测引用头文件是否为耦合工程文件,避免在什么情况下都在头文件列表、公共白名单以及私有白名单中检测,从而可以有效提高代码耦合的检测效率。
例如,在本申请中,针对包括库标识的引用形式,只需在公共白名单以及私有白名单中进行检测,不需要在头文件列表中检测,因此,相比于在头文件列表、公共白名单以及私有白名单中检测,针对包括库标识的引用形式可以有效提高检测效率。
附图说明
图1是本申请的一种代码耦合检测的方法的步骤流程图。
图2是本申请的一种代码耦合检测的方法的步骤流程图。
图3是本申请的一种构建头文件列表的方法的步骤流程图。
图4是本申请的一种构建公共白名单的方法的步骤流程图。
图5是本申请的一种构建私有白名单的方法的步骤流程图。
图6是本申请的一种检测耦合工程文件的方法的步骤流程图。
图7是本申请的一种检测耦合工程文件的方法的步骤流程图。
图8是本申请的一种代码耦合检测的方法的步骤流程图。
图9是本申请的一种代码耦合检测的装置的结构框图。
图10是本申请示出的一种电子设备的框图。
图11是本申请示出的一种电子设备的框图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
参照图1,示出了本申请的一种代码耦合检测的方法的步骤流程图,该方法具体可以包括如下步骤:
在步骤S101中,获取第一业务中间件中的引用头文件,以及获取引用头文件在第一业务中间件中的引用形式;
在本申请中,通常情况下,第一业务中间件在非耦合的状态下可以依赖系统库、三方库、标准中间件以及其他业务中间件,因此第一业务中间件是能单独运行生成静态库的,在本申请实施例中,代码耦合可以理解为第一业务中间件的代码被修改,并依赖了除系统库、三方库、标准中间件以及其他业务中间件以外的其它代码。
在本申请中,系统库可以理解为第一业务中间件所在操作系统中的文件库。
三方库可以理解为由第三方平台公开的可随意使用的文件库,例如UIKit以及TencentOpen API等等。
标准中间件包括APP(应用程序)架构中处于业务层下方的,为业务层的业务提供服务的基础组件,其与具体业务无关,标准中间件可以提供诸如网络服务、路由服务、缓存服务以及计算服务等。
业务中间件包括APP架构中处于业务层,但是处于业务层中的靠下层位置,例如,比业务层的上层业务靠下方,是为上层业务提供通用服务的基础组件,属于通用业务,与上层业务不是强相关,如通用列表服务、通用详情服务、IM服务以及推送服务等。
如果第一业务中间件存在代码耦合,则包括第一业务中间件的工程本身会因为找不到耦合的代码引用而导致编译失败。
由于编译失败也不一定是代码耦合造成的,也可能是编译本身问题。因此基于编译方式的代码耦合的检测结果并以一定准确。
所以,在本申请实施例中,为了提高代码耦合检测结果的准确性,可以针对第一业务中间件中引用的每一个头文件,检测其是否为耦合工程文件,耦合工程文件包括除头文件列表中的文件、公共白名单中的文件以及私有白名单中的文件以外的文件,从而可以实现代码耦合的检测。
而且,由于第一业务中间件可以针对不同的引用头文件采用不同的引用形式,而且不同引用形式中包括的可以用以进行判断引用头文件是否为耦合工程文件的参照内容也可以有所不同。因此,可以先扫描第一业务中间件中的每一个文件,然后获取第一业务中间件中的每一个引用头文件,以及获取每一个引用头文件在第一业务中间件中的引用形式;例如,可以通过对第一业务中间件的每一个文件进行分析,分析每一个文件的import(引用)情况。
其中的引用头文件可以理解为第一业务中间件所引用的头文件。
例如,一般而言,在第一业务中间件中的import形式可以至少包括以下三种:例如“A.h”、<XXX/A.h>以及<A.h>等。
其中,“.h”表示头文件的文件后缀名,“XXX”表示库标识、“A”表示文件标识。
系统库和三方库可能涉及到三种引用形式,而如果是对外部的其他工程引用则通常只会用<A.h>、<XXX/A.h>两种引用形式,但不排除异常使用情况。
在步骤S102中,根据引用形式,检测引用头文件是否为耦合工程文件,耦合工程文件包括除头文件列表中的文件、公共白名单中的文件以及私有白名单中的文件以外的文件;
公共白名单是至少基于第一业务中间件在非耦合状态下依赖的系统库、三方库以及标准中间件生成的,私有白名单是至少基于第一业务中间件在非耦合状态下依赖的第二业务中间件生成的,头文件列表中是至少根据第一业务中间件自身包括的文件生成的。
如前述,不同引用形式中包括的可以用以进行判断引用头文件是否为耦合工程文件的参照内容也可以有所不同,而且不同引用形式对引用头文件的格式要求也会有所不同。
因此,在本申请实施例中,可以根据引用头文件在第一业务中间件中的引用形式,检测引用头文件是否为耦合工程文件。
例如,在一个例子中,如前述,在中间件中的import形式可以包括以下三种,即“A.h”、<XXX/A.h>、<A.h>,则可以通过“A.h”、<XXX/A.h>、<A.h>三种形式,检测引用头文件是否为耦合工程文件,从而判断出第一业务中间件中是否存在代码耦合。
具体地,如果引用形式为<A.h>或“A.h”,此时仅仅可以获取得到引用头文件的文件标识,因此只能基于引用头文件的文件标识进行检测。而如果引用形式为<XXX/A.h>,此时可以获取得到库标识以及引用头文件的文件标识,因此可以基于库标识以及引用头文件的文件标识进行检测。
当然,在本申请实施例中,不同引用形式的引用头文件的具体检测方式可以根据需求进行自定义设置,对此本申请实施例不加以限定。
其中,可以通过任何可用方式获取第一业务中间件的头文件列表,以及第一业务中间件在非耦合状态下依赖的系统库、三方库以及标准中间件,本申请对具体的获取方式不加以限定。例如,可以通过分析第一业务中间件的代码文件,获取其中包括的头文件。
由于第一业务中间件在最初始的时候都是可以编译成功的,也即在最初始的时候第一业务中间件中不存在引用外部工程代码的情况,也就不存在代码耦合,产生代码耦合往往是在后续的业务版本迭代中发生的。因此,可以在最初始时(第一业务中间件可以编译成功时)获取第一业务中间件依赖的系统库、三方库、标准中间件以及第一业务中间件依赖的其他业务中间件等。
其中,本步骤具体可以参见图2所示的实施例,在此不做详述。
在第一业务中间件中的至少一个引用头文件为耦合工程文件的情况下,在步骤S103中,确定第一业务中间件中存在代码耦合;
在第一业务中间件中的每一个引用头文件均不为耦合工程文件的情况下,在步骤S104中,确定第一业务中间件中不存在代码耦合。
如果第一业务中间件中存在至少一个引用头文件为耦合工程文件,则会影响包括第一业务中间件的工程的编译结果,使得包括第一业务中间件的工程本身可能会因为找不到引用的代码而导致编译失败,且很难将第一业务中间件复用到其它应用程序中。
在本申请中,获取第一业务中间件中的引用头文件,以及获取引用头文件在第一业务中间件中的引用形式;根据引用形式,检测引用头文件是否为耦合工程文件,耦合工程文件包括除头文件列表中的文件、公共白名单中的文件以及私有白名单中的文件以外的文件;公共白名单是至少基于第一业务中间件在非耦合状态下依赖的系统库、三方库以及标准中间件生成的,私有白名单是至少基于第一业务中间件在非耦合状态下依赖的第二业务中间件生成的,头文件列表中是至少根据第一业务中间件自身包括的文件生成的;在第一业务中间件中的至少一个引用头文件为耦合工程文件的情况下,确定第一业务中间件中存在代码耦合。
通过本申请,可以及时检测出第一业务中间件中是否存在代码耦合,在第一业务中间件中存在代码耦合的情况下,以方便开发人员及时对其解耦合,以使解耦合后的第一业务中间件可以复用到其它应用程序中,且使得包括解耦合后的第一业务中间件的工程可以编译成功。
以及,本申请的方案不受运行环境限制,从而提高了代码耦合检测的适用性。
其次,本申请的方案不涉及对第一业务中间件的编译,从而可以避免编译本身带来的干扰,进而可以有效提高代码耦合检测结果的准确性。
另外,由于本申请的方案可以针对第一业务中间件中的每一个引用头文件分别进行检测,从而可以直接定位出耦合的引用头文件,因此可以提高代码耦合定位的准确性,且代码耦合定位不需要人工参与,因此可以降低人工成本以及提高耦合定位的效率。
在本申请另一个实施例中,参见图2,步骤S102包括:
在步骤S201中,根据引用形式,确定用于检测引用头文件是否为耦合工程文件的检测路径,检测路径包括以下至少一者:在公共白名单中检测、在私有白名单中检测以及在头文件列表中检测;
本步骤具体可以参见之后的实施例,在此不做详述。
在步骤S202中,根据检测路径,检测引用头文件是否为耦合工程文件。
如前述,在本申请实施例中,可以根据第一业务中间件在非耦合状态下依赖的系统库、三方库、标准中间件、允许依赖的第二业务中间件以及第一业务中间件本身,构建第一业务中间件的公共白名单、私有白名单以及头文件列表等。
而且,由于引用形式不同,具体可以参照的内容也有所不同。例如,在引用形式为包括引用头文件的文件标识的引用形式情况下,可以在头文件列表、公共白名单以及私有白名单中检测。在引用形式为包括库标识的引用形式情况下,可以在公共白名单以及私有白名单中检测。
因此,在本申请实施例中,在代码耦合检测过程中,针对第一业务中间件中的任意一个引用头文件,可以先根据第一业务中间件针对该引用头文件的引用形式,确定用于检测引用头文件是否为耦合工程文件的检测路径,然后根据检测路径,检测引用头文件是否为耦合工程文件,避免在什么情况下都在头文件列表、公共白名单以及私有白名单中检测,从而可以有效提高代码耦合的检测效率。
在本申请实施例中,为了方便对第一业务中间件进行代码耦合检测,可以预先提供第一业务中间件的公共白名单,公共白名单可以适时更新,以及,还可以提供第一业务中间件的私有白名单,私有白名单中的业务中间件的中间件标识包括第一业务中间件在非耦合状态下允许引用的业务中间件的中间件标识等。
如果引用头文件在公共白名单中、或者在私有白名单中,或者在第一业务中间件的头文件列表中,则可以确定第一业务中间件不存在代码耦合,否则,可以确定第一业务中间件存在代码耦合。
而且如前述,正常情况下第一业务中间件只依赖系统库、三方库、标准中间件以及允许依赖的其他业务中间件,那么则可以基于第一业务中间件在非耦合状态下依赖的系统库、三方库、标准中间件、允许依赖的其他业务中间件以及第一业务中间件自身包括的文件,构建第一业务中间件的公共白名单、私有白名单以及头文件列表等。
其中,可以通过任何可用方式获取中间件在非耦合状态下依赖的系统库、三方库、标准中间件、允许依赖的其他业务中间件以及第一业务中间件自身包括的文件,对此本申请实施例不加以限定。
由于第一业务中间件在最初始的时候都是可以编译成功的,也即在最初始的时候第一业务中间件中不存在引用外部工程代码的情况,也就不存在代码耦合,产生代码耦合往往是在后续的业务版本迭代中发生的。因此,可以在最初始时(第一业务中间件可以编译成功时)获取第一业务中间件依赖的系统库、三方库、标准中间件以及第一业务中间件依赖的其他业务中间件等。
通过扫描第一业务中间件中的<XXX/A.h>、<A.h>、“A.h”以及“A.H”等引用形式来获取到第一业务中间件所依赖的系统库、三方库、标准中间件以及其他业务中间件等。
而且,后续对于系统库、三方库和标准中间件而言,可以在原来的基础上进行追加新的可依赖的系统库、三方库和标准中间件。
在本申请实施例中,如果不对系统库、三方库、标准中间件、第一业务中间件依赖的其他业务中间件以及第一业务中间件内部的头文件进行重新拆分组合,那么此时针对不同引用形式中包括的内容,都需要在系统库、三方库、标准中间件、第一业务中间件依赖的其他业务中间件以及第一业务中间件内部的头文件分别检测。
例如,如果引用形式为包括文件标识的引用形式,则需要在系统库、三方库、标准中间件、第一业务中间件依赖的其他业务中间件以及第一业务中间件内部的头文件检测是否有文件标识。以及,如果引用形式为包括库标识的引用形式,那么也需要在系统库、三方库、标准中间件、第一业务中间件依赖的其他业务中间件以及第一业务中间件内部的头文件检测是否有库标识。从而使得代码耦合检测过程耗时较长,导致检测的效率较低。
因此,在本申请实施例中,为了进一步提高对第一业务中间件代码进行耦合检测的效率,则可以根据系统库、三方库、标准中间件、第一业务中间件依赖的其他业务中间件以及第一业务中间件内部的头文件,构建中间件的公共白名单、私有白名单以及头文件列表等,以将检测路径划分为多种,从而提高每个引用头文件的检测效率,进而进一步提高对第一业务中间件代码进行耦合检测的效率。
其中,头文件列表可以包括头文件的文件标识,公共白名单和私有白名单既可以包括文件标识,也可以包括库标识。
具体地,可以设置公共白名单中包括可以获取到的第一业务中间件在非耦合状态下依赖的系统库的库标识,三方库的库标识以及标准中间件的中间件标识。可以设置私有白名单中包括可以获取到的第一业务中间件中在非耦合状态下依赖的其他业务中间件的中间件标识。而在头文件列表中则可以包括第一业务中间件自身包括的文件的文件标识。
或者,也可以设置公共白名单中包括可以获取到的中间件在非耦合状态下依赖的系统库的库标识,三方库的库标识,系统库中包括的全部文件的文件标识、三方库中包括的全部文件的文件标识、标准中间件的中间件标识以及标准中间件中包括的头文件的文件标识。可以私有白名单中包括可以获取到的第一业务中间件中在非耦合状态下依赖的其他业务中间件的中间件标识以及其他中间件中的头文件的文件标识。而在头文件列表中可以包括第一业务中间件自身包括的文件的文件标识。
具体的,公共白名单、私有白名单和头文件列表中包括的内容也可以根据需求进行自定义,对此本申请实施例不加以限定。
另外,为了提高检测第一业务中间件中的引用头文件是否为耦合工程文件的结果准确性,可以预先构建第一业务中间件的头文件列表、第一业务中间件的公共白名单以及第一业务中间件的私有白名单等。
具体地,参见图3,可以通过如下方式构建第一业务中间件的头文件列表,具体流程包括:
在步骤S301中,至少获取第一业务中间件自身包括的文件;
在步骤S302中,至少根据第一业务中间件自身包括的文件,构建头文件列表。
在本申请一个实施例中,可以获取第一业务中间件中包括的全部头文件,然后根据第一业务中间件中包括的全部头文件构建头文件列表。
例如,将第一业务中间件中包括的全部头文件的文件标识组合为头文件列表。
在另一个实施例中,除了获取第一业务述中间件中包括的全部头文件以外,还可以获取以“.a”为文件后缀名的三方库中包括的头文件,然后根据第一业务述中间件中包括的全部头文件以及以“.a”为文件后缀名的三方库中包括的头文件构建第一业务中间件的头文件列表。
例如,将第一业务中间件中包括的全部头文件的文件标识、以“.a”为文件后缀名的三方库的库标识以及以“.a”为文件后缀名的三方库中包括的全部文件的文件标识组合为头文件列表。
具体地,参见图4,可以通过如下方式构建第一业务中间件的公共白名单,具体流程包括:
在步骤S401中,至少获取第一业务中间件在非耦合状态下依赖的系统库、三方库和标准中间件;
其中,三方库可以包括以“.framework”为文件后缀名的三方库。
在步骤S402中,至少根据系统库、三方库以及标准中间件,构建公共白名单。
其中,可以根据系统库、以“.framework”为文件后缀名的三方库以及标准中间件,构建第一业务中间件的公共白名单。
例如,将系统库的库标识、系统库中包括的全部文件的文件标识、以“.framework”为文件后缀名的三方库的库标识、以“.framework”为文件后缀名的三方库中包括的全部文件的文件标识、标准中间件的中间件标识以及标准中间件中包括的头文件的文件标识组合为头文件列表。
具体地,参见图5,可以通过如下方式构建第一业务中间件的私有白名单,具体流程包括:
在步骤S501中,至少获取第一业务中间件在非耦合状态下依赖的第二业务中间件;
在本申请中,可以获取第一业务中间件的代码文件中的引用文件的文件标识;在公共白名单和头文件列表中查找该文件标识;在公共白名单和头文件列表中未查找到该文件标识的情况下,则说明该引用文件不属于公共白名单和头文件列表,但是由于该引用文件是第一业务中间件在非耦合状态下依赖的,因此,该引用文件可以是允许第一业务中间件引用,第一业务中间件与该引用文件之间不存在耦合关系,因此,可以将该引用文件确定为第二业务中间件。
在步骤S502中,至少根据第二业务中间件,构建私有白名单。
在本申请中,可以为第一业务中间件的创建一个空的私有白名单,然后可以将第二业务中间件的中间件标识存储在私有白名单中。
在本申请另一个实施例中,在引用形式为包括引用头文件的文件标识的引用形式情况下,确定检测路径包括头文件列表、公共白名单以及私有白名单。
在引用形式为包括库标识的引用形式情况下,确定检测路径包括公共白名单以及私有白名单。
针对第一业务中间件中的任意一个引用头文件,如果在第一业务中间件中针对引用头文件的引用形式为包括引用头文件的文件标识的引用形式,例如上述的“A.h”以及<A.h>等,则可以确定用于检测引用头文件的检测路径包括:头文件列表、公共白名单以及私有白名单,也即,需要在头文件列表、公共白名单以及私有白名单中依次检测引用头文件。
而如果在第一业务中间件中针对引用头文件的引用形式为包括库标识的引用形式,例如上述的<XXX/A.h>等,则可以确定用于检测引用头文件的检测路径包括公共白名单以及私有白名单,也即,需要在公共白名单以及私有白名单中依次检测引用头文件。
在本申请中,针对包括库标识的引用形式,只需在公共白名单以及私有白名单中进行检测,不需要在头文件列表中进行检测,因此,相比于在头文件列表、公共白名单以及私有白名单中均进行检测,针对包括库标识的引用形式可以有效提高检测效率。
在本申请一个实施例中,参见图6,步骤S202包括:
在步骤S601中,在检测路径包括头文件列表、公共白名单以及私有白名单的情况下,在头文件列表、公共白名单以及私有白名单中分别查找引用头文件的文件标识;
如果在头文件列表、公共白名单以及私有白名单中均未查找到文件标识,在步骤S602中,确定引用头文件为耦合工程文件。
如果在头文件列表、公共白名单或私有白名单中查找到文件标识,在步骤S603中,确定引用头文件不为耦合工程文件。
其中,步骤S601包括:
6011、在头文件列表中查找引用头文件的文件标识;
如果在头文件列表中查找到引用头文件的文件标识,则可以确定引用头文件不为耦合工程文件,继续对第一业务中间件中的其他的引用头文件进行检测。
例如,对于前述的“A.h”的例子,可以在头文件列表中查找“A.h”或者是文件标识为“A”的文件。
其中,上述提及的文件标识可以为任意一种可以表征文件身份的标识信息,例如可以为文件的名称或文件的编码等。
具体的文件标识的内容可以根据需求进行自定义设置,对此本申请实施例不加以限定。
6012、如果在头文件列表中未查找到引用头文件的文件标识,在公共白名单中查找引用头文件的文件标识;
如果在公共白名单中查找到引用头文件的文件标识,则可以确定引用头文件不为耦合工程文件,继续对第一业务中间件中的其他的引用头文件进行检测。
6013、如果在公共白名单中未查找到引用头文件的文件标识,在私有白名单中查找引用头文件的文件标识;
如果在私有白名单中查找到引用头文件的文件标识,则可以确定引用头文件不为耦合工程文件,继续对第一业务中间件中的其他的引用头文件进行检测。
6014、如果在私有白名单中未查找到引用头文件的文件标识,确认引用头文件为耦合工程文件。
进而还可以记录或者标记相应的引用头文件为耦合工程文件。
对确认为耦合工程文件的引用头文件执行的操作可以根据需求进行自定义设置,对此本申请实施例不加以限定。
同样地,还可以继续查找新的引用头文件并检测,直至对第一业务中间件中每个引用头文件都检测完成。
在本申请一个实施例中,参见图7,步骤S202包括:
在步骤S701中,在检测路径包括公共白名单以及私有白名单的情况下,获取库标识,在公共白名单以及私有白名单中查找库标识;
如果在公共白名单以及私有白名单中均未查找到库标识,在步骤S702中,确定引用头文件为耦合工程文件。
如果在公共白名单或私有白名单中查找到库标识,在步骤S703中,确定引用头文件不为耦合工程文件。
其中,步骤S701包括:
7011、获取库标识,在公共白名单中查找该库标识;
如果在公共白名单中查找到该库标识,则可以确定引用头文件不为耦合工程文件,继续对第一业务中间件中的其他的引用头文件进行检测。
例如,对于上述的<XXX/A.h>的例子,则可以取其中表征库标识的“XXX”,在公共白名单中查找“XXX”。
其中,上述提及的库标识也可以为任意一种可以表征库身份的标识信息,例如可以为库的名称或库的编码等。
具体的库标识的内容可以根据需求进行自定义设置,对此本申请实施例不加以限定。
7012、如果在公共白名单中未查找到库标识,在私有白名单中查找库标识;
如果在私有白名单中查找到库标识,则可以确定引用头文件不为耦合工程文件,继续对第一业务中间件中的其他的引用头文件进行检测。
7013、如果在私有白名单中未查找到库标识,确认引用头文件包括耦合工程文件。
进而还可以记录或者标记相应的引用头文件为耦合工程文件。
对确认为耦合工程文件的引用头文件执行的操作可以根据需求进行自定义设置,对此本申请实施例不加以限定。
同样地,还可以继续查找新的引用头文件并检测,直至对第一业务中间件中每个引用头文件都检测完成。
参照图8,在本申请实施例中,在步骤S103之后,还可以包括:
在第一业务中间件中存在代码耦合的情况下,在步骤S105中,在预设异常文件中记录引用头文件的文件信息;其中,文件信息包括引用头文件的文件路径和/或引用头文件在第一业务中间件中的引用信息等。
在本申请实施例中,后续为了方便技术人员准确定位第一业务中间件中的耦合部分,以进行解耦合等操作,可以在确定出第一业务中间件中的任意引用头文件为耦合工程文件的情况下,可以在预设异常文件中记录记录确认为耦合工程文件的引用头文件的文件信息。
其中,引用头文件的文件路径包括用于获取引用头文件的物理路径等。
例如,如果确认为耦合工程文件的引用头文件在第一业务中间件中的引用形式为“A.h”,则可以在预设异常文件中记录引用头文件的A.h的文件路径、引用头文件在第一业务中间件中的引用信息的A.h以及引用头文件的文件标识。
如果确认为耦合工程文件的引用头文件在第一业务中间件中的引用形式为<XXX/A.h>,则可以在预设异常文件中记录引用头文件的文件路径以及引用头文件在第一业务中间件中的引用信息的XXX/A.h。
另外,在对第一业务中间件检测完成后,还可以将预设异常文件中的内容通过邮件等任何可用方式发送给技术人员,以供技术人员查看对其解耦合。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作并不一定是本申请所必须的。
参照图9,示出了本申请的一种代码耦合检测的装置的结构框图,该装置具体可以包括如下模块:
获取模块11,用于获取第一业务中间件中的引用头文件,以及,获取所述引用头文件在所述第一业务中间件中的引用形式;
检测模块12,用于根据所述引用形式,检测所述引用头文件是否为耦合工程文件,其中,所述耦合工程文件包括除头文件列表中的文件、公共白名单中的文件以及私有白名单中的文件以外的文件,所述公共白名单是至少基于所述第一业务中间件在非耦合状态下依赖的系统库、三方库以及标准中间件生成的,所述私有白名单是至少基于所述第一业务中间件在非耦合状态下依赖的第二业务中间件生成的,所述头文件列表中是至少根据所述第一业务中间件自身包括的文件生成的;
确定模块13,用于在至少一个所述引用头文件为所述耦合工程文件的情况下,确定所述第一业务中间件中存在代码耦合。
在一个可选的实现方式中,所述检测模块包括:
确定单元,用于根据所述引用形式,确定用于检测所述引用头文件是否为耦合工程文件的检测路径,所述检测路径包括以下至少一者:在所述公共白名单中检测、在所述私有白名单中检测以及在所述头文件列表中检测;
检测单元,用于根据所述检测路径,检测所述引用头文件是否为耦合工程文件。
在一个可选的实现方式中,所述检测模块还包括:
第一获取单元,用于至少获取所述第一业务中间件在非耦合状态下依赖的系统库、三方库和标准中间件,第一构建单元,用于至少根据所述系统库、所述三方库以及所述标准中间件,构建所述公共白名单;
第二获取单元,用于至少获取根据所述第一业务中间件自身包括的文件,第二构建单元,用于至少根据所述第一业务中间件自身包括的文件,构建所述头文件列表;
第三获取单元,用于至少获取所述第一业务中间件在非耦合状态下依赖的第二业务中间件,第三构建单元,用于至少根据所述第二业务中间件,构建所述私有白名单。
在一个可选的实现方式中,所述第三获取单元包括:
获取子单元,用于获取所述第一业务中间件的代码文件中的引用文件的文件标识;
第一查找子单元,用于在所述公共白名单和所述头文件列表中查找所述文件标识;
第一确定子单元,用于在所述公共白名单和所述头文件列表中未查找到所述文件标识的情况下,将所述引用文件确定为所述第二业务中间件。
在一个可选的实现方式中,所述确定单元包括:
第二确定子单元,用于在所述引用形式为包括所述引用头文件的文件标识的引用形式情况下,确定所述检测路径包括所述头文件列表、所述公共白名单以及所述私有白名单;
或者,
第三确定子单元,用于在所述引用形式为包括库标识的引用形式情况下,确定所述检测路径包括所述公共白名单以及所述私有白名单。
在一个可选的实现方式中,所述检测单元包括:
第二查找子单元,用于在所述检测路径包括所述头文件列表、所述公共白名单以及所述私有白名单的情况下,在所述头文件列表、所述公共白名单以及所述私有白名单中分别查找所述引用头文件的文件标识;
第四确定子单元,用于如果在所述头文件列表、所述公共白名单以及所述私有白名单中均未查找到所述文件标识,确定所述引用头文件为耦合工程文件。
在一个可选的实现方式中,所述检测单元包括:
第三查找子单元,用于在所述检测路径包括所述公共白名单以及所述私有白名单的情况下,获取所述库标识,在所述公共白名单以及所述私有白名单中查找所述库标识;
第五确定子单元,用于如果在所述公共白名单以及所述私有白名单中均未查找到所述库标识,确定所述引用头文件为耦合工程文件。
在一个可选的实现方式中,所述装置还包括:
记录模块,用于在预设异常文件中记录所述引用头文件的文件信息;
其中,所述文件信息包括所述引用头文件的文件路径和/或所述引用头文件在所述第一业务中间件中的引用信息。
如果第一业务中间件中存在至少一个引用头文件为耦合工程文件,则会影响包括第一业务中间件的工程的编译结果,使得包括第一业务中间件的工程本身可能会因为找不到引用的代码而导致编译失败,且很难将第一业务中间件复用到其它应用程序中。
在本申请中,获取第一业务中间件中的引用头文件,以及获取引用头文件在第一业务中间件中的引用形式;根据引用形式,检测引用头文件是否为耦合工程文件,耦合工程文件包括除头文件列表中的文件、公共白名单中的文件以及私有白名单中的文件以外的文件;公共白名单是至少基于第一业务中间件在非耦合状态下依赖的系统库、三方库以及标准中间件生成的,私有白名单是至少基于第一业务中间件在非耦合状态下依赖的第二业务中间件生成的,头文件列表中是至少根据第一业务中间件自身包括的文件生成的;在第一业务中间件中的至少一个引用头文件为耦合工程文件的情况下,确定第一业务中间件中存在代码耦合。
通过本申请,可以及时检测出第一业务中间件中是否存在代码耦合,在第一业务中间件中存在代码耦合的情况下,以方便开发人员及时对其解耦合,以使解耦合后的第一业务中间件可以复用到其它应用程序中,且使得包括解耦合后的第一业务中间件的工程可以编译成功。
以及,本申请的方案不受运行环境限制,从而提高了代码耦合检测的适用性。
其次,本申请的方案不涉及对第一业务中间件的编译,从而可以避免编译本身带来的干扰,进而可以有效提高代码耦合检测结果的准确性。
另外,由于本申请的方案可以针对第一业务中间件中的每一个引用头文件分别进行检测,从而可以直接定位出耦合的引用头文件,因此可以提高代码耦合定位的准确性,且代码耦合定位不需要人工参与,因此可以降低人工成本以及提高耦合定位的效率。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
图10是本申请示出的一种电子设备800的框图。例如,电子设备800可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
参照图10,电子设备800可以包括以下一个或多个组件:处理组件802,存储器804,电力组件806,多媒体组件808,音频组件810,输入/输出(I/O)的接口812,传感器组件814,以及通信组件816。
处理组件802通常控制电子设备800的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件802可以包括一个或多个处理器820来执行指令,以完成上述方法的全部或部分步骤。此外,处理组件802可以包括一个或多个模块,便于处理组件802和其他组件之间的交互。例如,处理组件802可以包括多媒体模块,以方便多媒体组件808和处理组件802之间的交互。
存储器804被配置为存储各种类型的数据以支持在设备800的操作。这些数据的示例包括用于在电子设备800上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图像,视频等。存储器804可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电源组件806为电子设备800的各种组件提供电力。电源组件806可以包括电源管理系统,一个或多个电源,及其他与为电子设备800生成、管理和分配电力相关联的组件。
多媒体组件808包括在所述电子设备800和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件808包括一个前置摄像头和/或后置摄像头。当设备800处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件810被配置为输出和/或输入音频信号。例如,音频组件810包括一个麦克风(MIC),当电子设备800处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器804或经由通信组件816发送。在一些实施例中,音频组件810还包括一个扬声器,用于输出音频信号。
I/O接口812为处理组件802和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件814包括一个或多个传感器,用于为电子设备800提供每一个方面的状态评估。例如,传感器组件814可以检测到设备800的打开/关闭状态,组件的相对定位,例如所述组件为电子设备800的显示器和小键盘,传感器组件814还可以检测电子设备800或电子设备800一个组件的位置改变,用户与电子设备800接触的存在或不存在,电子设备800方位或加速/减速和电子设备800的温度变化。传感器组件814可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件814还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件814还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件816被配置为便于电子设备800和其他设备之间有线或无线方式的通信。电子设备800可以接入基于通信标准的无线网络,如WiFi,运营商网络(如2G、3G、4G或5G),或它们的组合。在一个示例性实施例中,通信组件816经由广播信道接收来自外部广播管理系统的广播信号或广播操作信息。在一个示例性实施例中,所述通信组件816还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,电子设备800可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器804,上述指令可由电子设备800的处理器820执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
图11是本申请示出的一种电子设备1900的框图。例如,电子设备1900可以被提供为一服务器。
参照图11,电子设备1900包括处理组件1922,其进一步包括一个或多个处理器,以及由存储器1932所代表的存储器资源,用于存储可由处理组件1922的执行的指令,例如应用程序。存储器1932中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1922被配置为执行指令,以执行上述方法。
电子设备1900还可以包括一个电源组件1926被配置为执行电子设备1900的电源管理,一个有线或无线网络接口1950被配置为将电子设备1900连接到网络,和一个输入输出(I/O)接口1958。电子设备1900可以操作基于存储在存储器1932的操作系统,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
本说明书中的每一个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,每一个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本申请的实施例可提供为方法、装置、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包括有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程生成测试用例终端设备的处理器以产生一个机器,使得通过计算机或其他可编程生成测试用例终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程生成测试用例终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程生成测试用例终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包括”或者其任何其他变体意在涵盖非排他性的包括,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的一种代码耦合检测的方法及装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (18)
1.一种代码耦合检测方法,其特征在于,所述方法包括:
获取第一业务中间件中的引用头文件,以及,获取所述引用头文件在所述第一业务中间件中的引用形式;
至少获取所述第一业务中间件在非耦合状态下依赖的第二业务中间件,至少根据所述第二业务中间件,构建私有白名单;
根据所述引用形式,检测所述引用头文件是否为耦合工程文件,其中,所述耦合工程文件包括除头文件列表中的文件、公共白名单中的文件以及私有白名单中的文件以外的文件,所述公共白名单是至少基于所述第一业务中间件在非耦合状态下依赖的系统库、三方库以及标准中间件生成的,所述私有白名单是至少基于所述第一业务中间件在非耦合状态下依赖的第二业务中间件生成的,所述头文件列表中是至少根据所述第一业务中间件自身包括的文件生成的,其中,所述第二业务中间件为:在所述第一业务中间件中不存在引用外部工程代码的情况即可编译成功的状态时,所述第一业务中间件依赖的其他业务中间件;
在至少一个所述引用头文件为所述耦合工程文件的情况下,确定所述第一业务中间件中存在代码耦合。
2.根据权利要求1所述的方法,其特征在于,所述根据所述引用形式,检测所述引用头文件是否为耦合工程文件,包括:
根据所述引用形式,确定用于检测所述引用头文件是否为耦合工程文件的检测路径,所述检测路径包括以下至少一者:在所述公共白名单中检测、在所述私有白名单中检测以及在所述头文件列表中检测;
根据所述检测路径,检测所述引用头文件是否为耦合工程文件。
3.根据权利要求2所述的方法,其特征在于,所述根据所述引用形式,检测所述引用头文件是否为耦合工程文件之前,还包括:
至少获取所述第一业务中间件在非耦合状态下依赖的系统库、三方库和标准中间件,至少根据所述系统库、所述三方库以及所述标准中间件,构建所述公共白名单;
至少获取根据所述第一业务中间件自身包括的文件,至少根据所述第一业务中间件自身包括的文件,构建所述头文件列表。
4.根据权利要求3所述的方法,其特征在于,所述至少获取所述第一业务中间件在非耦合状态下依赖的第二业务中间件,包括:
获取所述第一业务中间件的代码文件中的引用文件的文件标识;
在所述公共白名单和所述头文件列表中查找所述文件标识;
在所述公共白名单和所述头文件列表中未查找到所述文件标识的情况下,将所述引用文件确定为所述第二业务中间件。
5.根据权利要求3所述的方法,其特征在于,所述根据所述引用形式,确定用于检测所述引用头文件是否为耦合工程文件的检测路径,包括:
在所述引用形式为包括所述引用头文件的文件标识的引用形式情况下,确定所述检测路径包括所述头文件列表、所述公共白名单以及所述私有白名单;
或者,
在所述引用形式为包括库标识的引用形式情况下,确定所述检测路径包括所述公共白名单以及所述私有白名单。
6.根据权利要求5所述的方法,其特征在于,所述根据所述检测路径,检测所述引用头文件是否为耦合工程文件,包括:
在所述检测路径包括所述头文件列表、所述公共白名单以及所述私有白名单的情况下,在所述头文件列表、所述公共白名单以及所述私有白名单中分别查找所述引用头文件的文件标识;
如果在所述头文件列表、所述公共白名单以及所述私有白名单中均未查找到所述文件标识,确定所述引用头文件为耦合工程文件。
7.根据权利要求5所述的方法,其特征在于,所述根据所述检测路径,检测所述引用头文件是否为耦合工程文件,包括:
在所述检测路径包括所述公共白名单以及所述私有白名单的情况下,获取所述库标识,在所述公共白名单以及所述私有白名单中查找所述库标识;
如果在所述公共白名单以及所述私有白名单中均未查找到所述库标识,确定所述引用头文件为耦合工程文件。
8.根据权利要求1-7中任一项所述的方法,其特征在于,所述确定所述第一业务中间件中存在代码耦合之后,还包括:
在预设异常文件中记录所述引用头文件的文件信息;
其中,所述文件信息包括所述引用头文件的文件路径和/或所述引用头文件在所述第一业务中间件中的引用信息。
9.一种代码耦合检测装置,其特征在于,所述装置包括:
获取模块,用于获取第一业务中间件中的引用头文件,以及,获取所述引用头文件在所述第一业务中间件中的引用形式;
至少获取所述第一业务中间件在非耦合状态下依赖的第二业务中间件,至少根据所述第二业务中间件,构建私有白名单;
检测模块,用于根据所述引用形式,检测所述引用头文件是否为耦合工程文件,其中,所述耦合工程文件包括除头文件列表中的文件、公共白名单中的文件以及私有白名单中的文件以外的文件,所述公共白名单是至少基于所述第一业务中间件在非耦合状态下依赖的系统库、三方库以及标准中间件生成的,所述私有白名单是至少基于所述第一业务中间件在非耦合状态下依赖的第二业务中间件生成的,所述头文件列表中是至少根据所述第一业务中间件自身包括的文件生成的,其中,所述第二业务中间件为:在所述第一业务中间件中不存在引用外部工程代码的情况即可编译成功的状态时,所述第一业务中间件依赖的其他业务中间件;
确定模块,用于在至少一个所述引用头文件为所述耦合工程文件的情况下,确定所述第一业务中间件中存在代码耦合。
10.根据权利要求9所述的装置,其特征在于,所述检测模块包括:
确定单元,用于根据所述引用形式,确定用于检测所述引用头文件是否为耦合工程文件的检测路径,所述检测路径包括以下至少一者:在所述公共白名单中检测、在所述私有白名单中检测以及在所述头文件列表中检测;
检测单元,用于根据所述检测路径,检测所述引用头文件是否为耦合工程文件。
11.根据权利要求10所述的装置,其特征在于,所述检测模块还包括:
第一获取单元,用于至少获取所述第一业务中间件在非耦合状态下依赖的系统库、三方库和标准中间件,第一构建单元,用于至少根据所述系统库、所述三方库以及所述标准中间件,构建所述公共白名单;
第二获取单元,用于至少获取根据所述第一业务中间件自身包括的文件,第二构建单元,用于至少根据所述第一业务中间件自身包括的文件,构建所述头文件列表;
第三获取单元,用于至少获取所述第一业务中间件在非耦合状态下依赖的第二业务中间件,第三构建单元,用于至少根据所述第二业务中间件,构建所述私有白名单。
12.根据权利要求11所述的装置,其特征在于,所述第三获取单元包括:
获取子单元,用于获取所述第一业务中间件的代码文件中的引用文件的文件标识;
第一查找子单元,用于在所述公共白名单和所述头文件列表中查找所述文件标识;
第一确定子单元,用于在所述公共白名单和所述头文件列表中未查找到所述文件标识的情况下,将所述引用文件确定为所述第二业务中间件。
13.根据权利要求11所述的装置,其特征在于,所述确定单元包括:
第二确定子单元,用于在所述引用形式为包括所述引用头文件的文件标识的引用形式情况下,确定所述检测路径包括所述头文件列表、所述公共白名单以及所述私有白名单;
或者,
第三确定子单元,用于在所述引用形式为包括库标识的引用形式情况下,确定所述检测路径包括所述公共白名单以及所述私有白名单。
14.根据权利要求13所述的装置,其特征在于,所述检测单元包括:
第二查找子单元,用于在所述检测路径包括所述头文件列表、所述公共白名单以及所述私有白名单的情况下,在所述头文件列表、所述公共白名单以及所述私有白名单中分别查找所述引用头文件的文件标识;
第四确定子单元,用于如果在所述头文件列表、所述公共白名单以及所述私有白名单中均未查找到所述文件标识,确定所述引用头文件为耦合工程文件。
15.根据权利要求13所述的装置,其特征在于,所述检测单元包括:
第三查找子单元,用于在所述检测路径包括所述公共白名单以及所述私有白名单的情况下,获取所述库标识,在所述公共白名单以及所述私有白名单中查找所述库标识;
第五确定子单元,用于如果在所述公共白名单以及所述私有白名单中均未查找到所述库标识,确定所述引用头文件为耦合工程文件。
16.根据权利要求9-15中任一项所述的装置,其特征在于,所述装置还包括:
记录模块,用于在预设异常文件中记录所述引用头文件的文件信息;
其中,所述文件信息包括所述引用头文件的文件路径和/或所述引用头文件在所述第一业务中间件中的引用信息。
17.一种电子设备,其特征在于,所述电子设备包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行如权利要求1-8任一项所述的代码耦合检测的方法。
18.一种非临时性计算机可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如权利要求1-8任一项所述的代码耦合检测的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010761994.4A CN111984531B (zh) | 2020-07-31 | 2020-07-31 | 一种代码耦合检测的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010761994.4A CN111984531B (zh) | 2020-07-31 | 2020-07-31 | 一种代码耦合检测的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111984531A CN111984531A (zh) | 2020-11-24 |
CN111984531B true CN111984531B (zh) | 2022-01-28 |
Family
ID=73445007
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010761994.4A Active CN111984531B (zh) | 2020-07-31 | 2020-07-31 | 一种代码耦合检测的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111984531B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113190450A (zh) * | 2021-05-08 | 2021-07-30 | 航天中认软件测评科技(北京)有限责任公司 | 一种自动化软件测试系统及其测试方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107643893A (zh) * | 2016-07-22 | 2018-01-30 | 腾讯科技(深圳)有限公司 | 一种程序检测方法及装置 |
CN110096280A (zh) * | 2019-03-18 | 2019-08-06 | 中国平安人寿保险股份有限公司 | 代码工程的创建方法、装置、计算机装置及存储介质 |
CN110569063A (zh) * | 2019-08-30 | 2019-12-13 | 五八有限公司 | 一种子应用程序app生成方法和生成装置 |
CN110704298A (zh) * | 2019-08-23 | 2020-01-17 | 北京奇艺世纪科技有限公司 | 一种代码验证的方法、装置、终端设备及存储介质 |
CN110825448A (zh) * | 2019-09-18 | 2020-02-21 | 五八有限公司 | 实现多业务模块相互调用的方法、装置、电子设备和存储介质 |
CN110928797A (zh) * | 2019-11-29 | 2020-03-27 | 五八有限公司 | 一种代码耦合检测方法、装置、终端设备及存储介质 |
CN111061638A (zh) * | 2019-12-16 | 2020-04-24 | 上海钧正网络科技有限公司 | 一种iOS系统调试的方法、装置及服务器 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9021091B2 (en) * | 2012-10-15 | 2015-04-28 | International Business Machines Corporation | Transaction middleware based application level transaction instance tracking across a composite application |
CN103064678B (zh) * | 2012-12-24 | 2016-04-20 | 广州广电运通金融电子股份有限公司 | 一种硬件指令调用控制方法和装置 |
US9892029B2 (en) * | 2015-09-29 | 2018-02-13 | International Business Machines Corporation | Apparatus and method for expanding the scope of systems management applications by runtime independence |
CN106326128B (zh) * | 2016-09-06 | 2018-09-18 | 网易(杭州)网络有限公司 | 配置文件的检测方法及装置 |
CN107273226B (zh) * | 2017-06-30 | 2021-01-08 | 百度在线网络技术(北京)有限公司 | 在安卓系统中集成组件及调用被集成组件的方法和装置 |
-
2020
- 2020-07-31 CN CN202010761994.4A patent/CN111984531B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107643893A (zh) * | 2016-07-22 | 2018-01-30 | 腾讯科技(深圳)有限公司 | 一种程序检测方法及装置 |
CN110096280A (zh) * | 2019-03-18 | 2019-08-06 | 中国平安人寿保险股份有限公司 | 代码工程的创建方法、装置、计算机装置及存储介质 |
CN110704298A (zh) * | 2019-08-23 | 2020-01-17 | 北京奇艺世纪科技有限公司 | 一种代码验证的方法、装置、终端设备及存储介质 |
CN110569063A (zh) * | 2019-08-30 | 2019-12-13 | 五八有限公司 | 一种子应用程序app生成方法和生成装置 |
CN110825448A (zh) * | 2019-09-18 | 2020-02-21 | 五八有限公司 | 实现多业务模块相互调用的方法、装置、电子设备和存储介质 |
CN110928797A (zh) * | 2019-11-29 | 2020-03-27 | 五八有限公司 | 一种代码耦合检测方法、装置、终端设备及存储介质 |
CN111061638A (zh) * | 2019-12-16 | 2020-04-24 | 上海钧正网络科技有限公司 | 一种iOS系统调试的方法、装置及服务器 |
Also Published As
Publication number | Publication date |
---|---|
CN111984531A (zh) | 2020-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101770931B1 (ko) | 통신 모듈 펌웨어와 플러그인 생성 방법, 장치, 프로그램 및 컴퓨터 판독가능한 기록매체 | |
CN109359056B (zh) | 一种应用程序测试方法及装置 | |
CN106790895B (zh) | 一种故障处理方法和装置 | |
CN106547547B (zh) | 数据采集方法及装置 | |
CN106990989B (zh) | 控制应用程序安装的方法及装置 | |
CN108989062B (zh) | 更新群成员数据的方法、装置、终端、系统及存储介质 | |
CN111984531B (zh) | 一种代码耦合检测的方法及装置 | |
CN109684112B (zh) | 程序文件运行方法、装置、终端及存储介质 | |
CN110928425A (zh) | 信息监控方法及装置 | |
CN113157256A (zh) | 接口代码的生成方法、装置、电子设备、存储介质及产品 | |
CN110213062B (zh) | 处理消息的方法及装置 | |
CN109842688B (zh) | 一种内容推荐方法、装置、电子设备及存储介质 | |
CN111221593A (zh) | 一种动态加载方法及装置 | |
CN111209195A (zh) | 一种生成测试用例的方法及装置 | |
CN107070816B (zh) | 应用的识别方法、装置和移动终端 | |
CN110457084B (zh) | 一种加载方法及装置 | |
CN112486617B (zh) | 密文数据处理架构、方法、装置及机器可读介质 | |
CN107193622B (zh) | 代码编译的处理方法、装置及终端 | |
CN112732734A (zh) | 一种信息处理方法及装置 | |
CN111241134A (zh) | 一种数据处理方法及装置 | |
CN110989987A (zh) | 一种门户网页的生成方法、装置、客户端、服务器及存储介质 | |
CN114020504B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN110311968B (zh) | 流式加载文件的方法、装置及智能设备 | |
CN113946346B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN111221559B (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 |