代码检测方法及装置制造方法及图纸

技术编号:13894504 阅读:36 留言:0更新日期:2016-10-24 21:11
本申请公开了一种代码检测方法及装置,所述方法包括:获取待检测的源代码文件中的模块Bundle所包含的配置文件;读取所述配置文件中的第一声明值,其中,所述第一声明值是第一属性的声明;逐一读取所述配置文件中的与所述第一声明值相对应的第二声明值,其中,所述第二声明值是第二属性的声明;判断所述第二声明值是否唯一,若否,则判定所述源代码文件存在错误。本申请实施例能够在线下准确检测到源代码文件中存在的所有错误,从而确保代码上线后的代码质量,提升代码开发效率。

【技术实现步骤摘要】

本申请涉及计算机
,尤其涉及一种代码检测方法及装置
技术介绍
通常,源代码文件由开发人员完成并提交给文件发布系统,并由文件发布系统进行发布。在发布系统发布源代码文件之前,需对源代码文件进行测试,以确保源代码文件的可用性。对于基于诸如sofa或spring等框架的系统而言,其是以各个实现特定功能的模块进行划分的,各模块内的方法能相互引用,不同模块之间通过发布服务或者添加依赖的方式来实现相互访问。现有技术中,在如上框架的源代码的开发过程中,经常会出现如下错误:其一,组件bean的ID的声明相同,而该组件bean的ID的声明所对应的类class或父类parent的声明不同,在启动时,以上情况会导致类class或父类parent的定义丢失;其二,对于同一个服务接口,实现不同的功能是以服务标识uniqueId的形式加以区分的,在服务接口的声明相同时,若出现实现不同的功能而服务标识uniqueId却相同的情况,此时其他模块引用该模块的服务时,则无法确定所引用的是哪个服务;其三,模块所引用的服务的ID的声明相同,且服务接口相同,而所引用的服务标识uniqueId却不同,则启动时也会导致错误。以上代码错误在线下代码编译阶段很难被完全发现,从而导致代码上线后出现问题,现有技术中缺少能够线下检测以上代码错误,以提升代码质量及代码开发效率的方法及工具。
技术实现思路
本申请实施例提供代码检测方法及装置,用以解决现有技术无法在线下准确检测出代码所存在的错误,导致代码上线后出现问题并进而影响代码开发效率的问题。本申请实施例所提供的代码检测方法,包括:获取待检测的源代码文件中的模块Bundle的配置文件;读取所述配置文件中的第一声明值,其中,所述第一声明值是第一属性的声明;逐一读取所述配置文件中的与所述第一声明值相对应的第二声明值,其中,所述第二声明值是第二属性的声明;判断所述第二声明值是否唯一,若否,则判定所述源代码文件存在错误。本申请实施例所提供的代码检测装置,包括:获取模块,用于获取待检测的源代码文件中的模块Bundle的配置文件;第一读取模块,用于读取所述配置文件中的第一声明值,其中,所述第一声明值是第一属性的声明;第二读取模块,用于逐一读取所述配置文件中的与所述第一声明值相对应的第二声明值,其中,所述第二声明值是第二属性的声明;判断模块,用于判断所述第二声明值是否唯一,若否,则判定所述源代码文件存在错误。本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:本申请实施例所提供的代码检测方法通过获取待检测的源代码文件中的模块Bundle的配置文件,并基于所述配置文件,分别读取第一声明值及第二声明值,并判断在第一声明值所对应的第二声明值是否是唯一的,在第二声明不唯一时判定代码出现错误,从而实现所述源代码文件中存在的错误的线下检测功能。本申请实施例能够在线下准确检测到源代码文件中存在的所有错误,从而确保代码上线后的代码质量,提升代码开发效率。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用以解释本申请,并不构成对本申请的不当限定。在附图中:图1为本申请实施例提供的代码检测方法的过程;图2为本申请实施例提供的代码检测方法中获取源代码文件中的模块Bundle的配置文件的过程;图3为本申请实施例提供的代码检测方法中删除配置文件中干扰内容的具体过程;图4为本申请实施例提供的代码检测方法的具体过程;图5为本申请实施例提供的代码检测装置的结构示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。本文将以sofa框架的系统为例来叙述本申请的技术方案,本申请各实施例中,所述方法的执行主体是计算机。图1为本申请实施例提供的代码检测方法的过程,包括如下步骤:S1:获取待检测的源代码文件中的模块Bundle的配置文件。本申请实施例中,源代码文件是分支流的代码,并通过开放源代码的版本控制系统(Subversion,SVN)进行管理。则获取待检测的源代码文件的方式包括:从版本控制系统的服务器中下载源代码文件到本地终端上,其中,通过SVN的checkout命令实现源代码文件的下载。在本申请其他实施例中,若所需检测的源代码文件存在本地终端上,则可以通过扫描本地代码路径或者系统名的方式获取到源代码文件。sofa框架的系统是以实现特定功能的模块Bundle进行划分的,每个模块有自己独立的spring上下文,各模块spring上下文相互隔离,各模块Bundle内的方法能相互引用,不同模块之间需通过发布服务或者添加依赖(引用服务)的方式来实现互相访问。本申请实施例所需检测的是同一个模块Bundle中所存在的错误问题,故首先需要获取到待检测的源代码文件中所包含的各个模块Bundle所在的目录。本申请实施例中,sofa框架的配置文件包括xml文件(文件名后缀为.xml),本申请基于各个模块Bundle的目录中的xml文件来实现错误检测。图2为本申请实施例提供的代码检测方法中获取源代码文件中的模块Bundle的配置文件的过程,包括如下步骤:S11:确定源代码文件所在的目录。本申请实施例中,若源代码文件所在本地终端上的目录是A,则判断目录A的子目录中是否存在名为“app”的目录,若存在目录app,则以目录A/app为起始目录进行扫描;若不存在目录app,则以目录A/系统名为起始路径进行扫描。S12:判断源代码文件所在的目录的子目录中是否存在特定文件。在以上实例中,基于所确定的目录A/app或者目录A/系统名,逐一扫描子目录中是否存在后缀是.MF的特定文件,若存在,则表明该子目录是一个模块Bundle的目录;若不存在,则表明该子目录不是一个模块Bundle的目录。例如:在子目录A/app/B/C下扫描到特定文件,则将其确定为一个模块Bundle的目录。S13:若是,则获取该子目录中包含的配置文件。在以上实例中,通过以上扫描手段,可确定待检测的源代码文件中所有模块Bundle的目录,并采用正则表达式获取到各个模块Bundle的目录下的各个xml文件。在实际的应用中,因为xml文件中通常包含干扰测试结果的准确性的内容,如,#if与#end之间的内容:#if(${core_test本文档来自技高网...

【技术保护点】
一种代码检测方法,其特征在于,包括:获取待检测的源代码文件中的模块Bundle的配置文件;读取所述配置文件中的第一声明值,其中,所述第一声明值是第一属性的声明;逐一读取所述配置文件中的与所述第一声明值相对应的第二声明值,其中,所述第二声明值是第二属性的声明;判断所述第二声明值是否唯一,若否,则判定所述源代码文件存在错误。

【技术特征摘要】
1.一种代码检测方法,其特征在于,包括:获取待检测的源代码文件中的模块Bundle的配置文件;读取所述配置文件中的第一声明值,其中,所述第一声明值是第一属性的声明;逐一读取所述配置文件中的与所述第一声明值相对应的第二声明值,其中,所述第二声明值是第二属性的声明;判断所述第二声明值是否唯一,若否,则判定所述源代码文件存在错误。2.根据权利要求1所述的方法,其特征在于,逐一读取所述配置文件中的与所述第一声明值相对应的第二声明值,具体包括:从所述配置文件中读取一个与所述第一声明值相对应的第二声明值;判断测试容器中是否存在所述第一声明值;若是,则从所述测试容器中读取与所述第一声明值相对应的第二声明值;若否,则将从所述配置文件中读取到的第一声明值及第二声明值插入到所述测试容器中;则,判断所述第二声明值是否唯一,若否,则判定所述源代码文件存在错误,具体包括:若所述测试容器中存在所述第一声明值,且从所述测试容器中读取到的第二声明值不等于从所述配置文件中读取到的第二声明值,则判定所述源代码文件存在错误。3.根据权利要求2所述的方法,其特征在于,所述方法还包括:将存在错误的第二声明值及与存在错误的第二声明值相对应的第一声明值进行展示。4.根据权利要求1所述的方法,其特征在于,获取待检测的源代码文件中的模块Bundle的配置文件,具体包括:确定所述源代码文件所在的目录;判断所述目录的子目录中是否存在特定文件;若是,则获取所述子目录中包含的配置文件。5.根据权利要求1所述的方法,其特征在于,获取待检测的源代码文件中的模块Bundle的配置文件之后,读取所述配置文件中的第一声明值之前,所述方法还包括:读取所述配置文件,并将所述配置文件的格式转换成字符串格式;删除所述字符串格式的文件中的干扰内容;将删除所述干扰内容后的字符串格式转换成所述配置文件的格式。6.根据权利要求1所述的方法,其特征在于,所述第一属性是组件Bean的标识,所述第二属性是组件Bean所定义的类Class、或者组件Bean所定义的父类Parent。7.根据权利要求1所述的方法,其特征在于,所述第一属性是模块Bundle引用的服务,所述第二属性是模块Bundle引用的服务的引用接口refInterface、或者模块Bundle引用的服务所定义的引用标识refUniqueid。8.根据权利要求1所述的方法,其特征在于,所述第二属性是模块Bundle发布的服务所定义的服务类serviceClass,所述第一属性包括模块Bundle发布的服务的发布接口serviceInterface及模块Bundle发布的服务所定义的发布标识serviceUniqu...

【专利技术属性】
技术研发人员:张艳华
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛;KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1