一种代码管理方法、系统、计算设备及可读存储介质与流程

    专利2022-07-08  69


    本发明涉及软件代码管理领域,尤其涉及一种代码管理方法、系统、计算设备及可读存储介质。



    背景技术:

    当前主流应用软件开发程序均采用分层的方式进行架构设计,在底层实现公共库,偏向于更基础的通用功能,上层偏向于具体化的业务实现,这种分层的设计方式具有便捷、解耦、复用等优势,但由于公共库开发与业务开发隔离,公共库的升级需要做业务层面的兼容,对于不兼容的功能部分,需要做全业务回归测试,由于涉及多种平台的代码,包括安卓(android)、ios、js等,目前也只是针对不同平台利用现有工具进行语法分析,获得相应的影响范围。对于android平台一般采用android平台的静态代码分析工具androidlint对源代码进行扫描,可以生成源代码的抽象语法树,但是该工具只适用于android源代码,且输出的xml文件可读性差,而oclint则只适用于ios平台,acorn.js则只适合js平台,均不具备多平台通用性和移植性,输出的不同平台抽象语法树结果不一致,调用关系结果数据输出结果可读性差,不具备数据分析和扩展的能力,因此需要公共平台开发部门和业务部门对调用关系输出结果进行统一解读,在公共平台代码发生变化时,需要相关部门共同走查所有受影响的业务,增加了部门间的沟通成本,降低了开发效率。

    因此,急需要一种统一管理各个平台代码的管理方法来实现跨平台的代码管理。



    技术实现要素:

    为此,本发明提供了一种代码管理方法、计算设备和可读存储介质,以力图解决或者至少缓解上面存在的问题。

    根据本发明的一个方面,提供一种代码管理方法,适于在计算设备中执行,其中,方法包括:获取原始代码和修改后的代码;将修改后的代码与原始代码进行对比,获得修改列表,修改列表中包括至少一条修改记录,修改记录包括修改的文件、类和方法的名称;根据修改列表查询调用关系数据库,获得修改列表包含的文件、类和方法的调用位置,调用关系数据库包括应用程序代码对原始代码的调用关系;根据调用位置生成影响范围报告。

    可选的,在根据本发明的代码管理方法中,将修改后的代码与原始代码进行比对,获得修改列表包括:通过代码比对工具对修改后的代码和原始代码进行比对,生成差异比对结果;从差异比对结果中提取出文件名、类名和方法名生成修改列表。

    可选的,在根据本发明的代码管理方法中,应用程序的运行平台包括安卓平台、ios平台和js平台,原始代码为运行平台上的公共库代码,调用关系数据库为应用程序对公共库代码的调用关系,根据修改列表查询调用关系数据库,获得修改列表中文件、类和方法的调用位置包括:获取调用关系数据库;根据修改列表中的文件、类和方法,以及调用关系数据库获取修改列表中每条修改记录的调用位置。

    可选的,在根据本发明的代码管理方法中,调用关系数据库的创建过程包括:获取应用程序的源代码以及源代码对应的运行平台;通过运行平台的代码分析工具对源代码进行分析,生成源代码的初始调用关系数据;对初始调用关系进行标准化处理,获得标准调用关系数据;将标准调用关系数据存储到调用关系数据库中。

    可选的,在根据本发明的代码管理方法中,运行平台包括安卓平台,通过运行平台的代码分析工具对源代码进行分析,生成源代码的初始调用关系数据包括:当运行平台为安卓平台时,调用安卓平台的代码分析工具;获取安卓平台的代码分析工具的配置文件,配置文件中包括错误级别的定义和排除的检查内容;通过代码分析工具根据配置文件对源代码进行分析;生成安卓平台源代码的初始调用关系数据。

    可选的,在根据本发明的代码管理方法中,安卓平台的代码分析工具为lint工具。

    可选的,在根据本发明的代码管理方法中,其中,运行平台还包括ios平台,通过运行平台的代码分析工具对源代码进行分析,生成源代码的初始调用关系数据包括:当运行平台为ios平台,调用ios平台的代码分析工具对源代码进行分析;生成ios平台源代码的初始调用关系数据。

    可选的,在根据本发明的代码管理方法中,ios平台的代码分析工具为clang工具。

    可选的,在根据本发明的代码管理方法中,运行平台还包括js语法平台,通过运行平台的代码分析工具对源代码进行语法分析,生成源代码的初始调用关系数据包括:当运行平台为js语法平台时,调用js语法平台的代码分析工具对源代码进行分析;生成js语法平台的初始调用关系数据。

    可选的,在根据本发明的代码管理方法中,js语法平台的代码分析工具为babylon.js或acorn.js。

    可选的,在根据本发明的代码管理方法中,安卓平台源代码的初始调用关系数据为xml格式,对初始调用关系数据进行标准化处理,获得标准调用关系数据包括:将xml格式的安卓平台源代码的初始调用关系数据转换为可解析的xml格式;遍历转换后的初始调用关系数据,获取调用关系相关字段存储为标准的json文件。

    可选的,在根据本发明的代码管理方法中,将xml格式的安卓平台源代码的初始调用关系数据转换为可解析的xml格式包括:通过java读取xml格式的安卓平台源代码的初始调用关系数据,获得可解析的xml格式的初始调用关系数据。

    可选的,在根据本发明的代码管理方法中,对初始调用关系数据进行标准化处理,获得标准调用关系数据还包括:使用oclint工具对ios平台源代码的初始调用关系数据进行处理;遍历ios平台源代码的初始调用关系数据,获取调用关系相关字段存储为标准的json文件。

    可选的,在根据本发明的代码管理方法中,对初始调用关系数据进行标准化处理,获得标准调用关系数据包括:遍历js语法平台的初始调用关系数据,获取调用关系相关字段存储为标准的json文件,调用关系相关字段包括:插件名称、版本、类名称、文件名称、调用类名称、调用函数名称、调用位置信息。

    可选的,在根据本发明的代码管理方法中,根据调用位置生成影响范围报告包括:根据修改列表中的文件、类和方法在调用关系数据库中的初始调用位置向上遍历,获得相应的插件名称,并添加到影响范围报告中;在影响范围报告中添加插件所对应的业务组信息、修改后的代码的上线时间、版本号和调用位置。

    可选的,在根据本发明的代码管理方法中,方法还包括:根据影响范围报告,通过邮件通知相关业务组,以便相关业务组根据影响范围报告完成相应的测试。

    根据本发明的另一个方面,提供一种代码发布管理系统,包括:代码获取单元,适于获取原始代码和修改后的代码;异比对单元,适于将修改后的代码与原始代码进行对比,获得修改列表,修改列表中包括至少一条修改记录,修改记录包括修改的文件、类和方法的名称;调用关系数据库,适于存储应用程序代码对原始代码的调用关系;影响范围报告单元,适于根据修改列表查询调用关系数据库,获得修改列表包含的文件、类和方法的调用位置,还适于根据调用位置生成影响范围报告。

    可选的,在根据本发明的代码发布管理系统中,差异比对单元在将原始代码和修改后的代码进行比对时适于:通过代码比对工具对修改后的代码和原始代码进行比对,生成差异比对结果;对差异比对结果进行信息提取生成修改列表。

    可选的,在根据本发明的代码发布管理系统中,应用程序的运行平台包括安卓平台、ios平台和js平台,原始代码为运行平台上的公共库代码,调用关系数据库为应用程序对公共库代码的调用关系,影响范围报告单元在根据修改列表查询调用关系数据库,获得修改列表中文件、类和方法的调用位置时适于:获取调用关系数据库;根据修改列表中的文件、类和方法,以及调用关系数据库获取修改列表中每条修改记录的调用位置。

    可选的,在根据本发明的代码发布管理系统中,还包括:影响通告单元,适于根据影响范围报告,通过邮件通知相关业务组,以便相关业务组根据影响范围报告完成相应的测试。

    根据本发明的又一个方面,提供一种计算设备,包括:至少一个处理器;以及存储器,存储有程序指令,其中,程序指令被配置为适于由至少一个处理器执行,程序指令包括用于执行上述代码管理方法的指令。

    根据本发明的又一个方面,提供一种存储有程序指令的可读存储介质,当程序指令被计算设备读取并执行时,使得计算设备执行上述代码管理方法。

    根据本发明的代码管理方法,对来自不同平台的代码,通过统一的入口,完成差异比对分析,获得修改列表,并通过查询调用关系数据库获得修改代码的调用位置,输出结果具有一致性,易于完成进一步的功能扩展和数据分析,生成影响范围报告,通过本发明的代码管理方法对各个平台的代码进行统一管理,实现了跨平台的代码管理,同时根据本发明的代码管理方法,对于代码差异比对、调用位置分析、影响范围报告等实现了自动化分析,在开发过程中,减少了部门间的沟通成本。

    在应用程序开发过程中,ios平台、安卓平台和js平台中任意平台公共库升级,根据本发明的代码管理方法,都可以根据调用关系数据库生成影响范围报告,并能够根据影响范围报告进一步扩展,实现自动向影响范围内的相关业务部门发送邮件通知,使得公共库管理部门和业务开发部门之间的沟通成本大大降低。

    附图说明

    为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。

    图1示出了根据本发明一个实施例的代码管理系统100的框图;

    图2示出了根据本发明一个实施例的计算设备200的框图;

    图3示出了根据本发明一个实施例的代码管理方法300的流程图;

    图4示出了根据本发明一个实施例的调用关系数据库的生成方法400的流程图;

    图5示出了根据本发明一个实施例的通过web端查看影响范围报告的效果图。

    具体实施方式

    下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

    图1示出了根据本发明一个实施例的代码管理系统100的框图。如图1所示,代码管理系统100包括代码获取单元110、差异比对单元120、调用关系数据库130、影响范围报告单元140和影响通告单元150。应当理解,图1所示的代码管理系统100仅为示例性的。

    代码获取单元110,用于在代码修改完成后,从后台获取原始代码(修改前的代码)和修改后的代码,并传递给差异比对单元120。也可以根据代码修改提交请求触发代码获取单元110获取原始代码和修改后的代码。

    差异比对单元120,在接收到代码获取单元110发送的原始代码和修改后的代码后,通过代码比对工具对代码进行对比,获得差异比对结果,并生成修改列表。根据本发明一个实施例,差异比对单元120可以通过gitdiff进行代码比对,比对结果中包含修改行号,修改内容等详细信息,从中提取出修改内容对应的方法名称、类名称和文件名称生成修改列表。

    调用关系数据库130,用于存储应用程序的源代码对原始代码的调用关系。根据本发明一个实施例,原始代码可以是平台公共库代码,包括ios平台公共库代码、安卓平台公共库代码和js平台公共库代码,调用关系数据库中包含了不同平台的应用程序源代码对对应平台公共库的调用关系,例如,安卓平台应用程序对安卓平台公共库的调用关系。

    影响范围报告单元140,根据差异比对单元120生成的修改列表和调用关系数据库130生成影响范围报告。

    根据本发明的一个实施例,修改列表中包含多个修改记录,每一个记录包含提取出的文件名、类名和方法名,根据修改列表中涉及的文件、类、方法查询关系调用数据库,可以通过链式查询,向上遍历查到所有的调用位置,根据调用位置获取被影响的插件,根据被影响的插件获得相关业务组信息,通过上述修改列表中每个记录中的方法名称、类名称和文件名称,以及对应的调用位置和调用位置所属的插件、插件对应的业务组等信息生成影响范围报告。

    影响通告单元150,可以通过邮件或其他即时通讯工具,将影响范围报告自动通知到相关业务组。

    图1所示的系统可以通过计算设备实现。图2示出了根据本发明一个实施例的计算设备200的示意图。需要说明的是,图2所示的计算设备200仅为一个示例,在实践中,用于实施本发明的代码管理方法的计算设备可以是任意型号的设备,其硬件配置情况可以与图2所示的计算设备200相同,也可以与图2所示的计算设备200不同。实践中用于实施本发明的代码管理方法的计算设备可以对图2所示的计算设备200的硬件组件进行增加或删减,本发明对计算设备的具体硬件配置情况不做限制。

    如图2所示,在基本的配置202中,计算设备200典型地包括系统存储器206和一个或者多个处理器204。存储器总线208可以用于在处理器204和系统存储器206之间的通信。

    取决于期望的配置,处理器204可以是任何类型的处理,包括但不限于:微处理器(μp)、微控制器(μc)、数字信息处理器(dsp)或者它们的任何组合。处理器204可以包括诸如一级高速缓存210和二级高速缓存212之类的一个或者多个级别的高速缓存、处理器核心214和寄存器216。示例的处理器核心214可以包括运算逻辑单元(alu)、浮点数单元(fpu)、数字信号处理核心(dsp核心)或者它们的任何组合。示例的存储器控制器218可以与处理器204一起使用,或者在一些实现中,存储器控制器218可以是处理器204的一个内部部分。

    取决于期望的配置,系统存储器206可以是任意类型的存储器,包括但不限于:易失性存储器(诸如ram)、非易失性存储器(诸如rom、闪存等)或者它们的任何组合。计算设备中的物理内存通常指的是易失性存储器ram,磁盘中的数据需要加载至物理内存中才能够被处理器204读取。系统存储器206可以包括操作系统220、一个或者多个应用222以及程序数据224。在一些实施方式中,应用222可以布置为在操作系统上由一个或多个处理器204利用程序数据224执行指令。操作系统220例如可以是linux、windows等,其包括用于处理基本系统服务以及执行依赖于硬件的任务的程序指令。应用222包括用于实现各种用户期望的功能的程序指令,应用222例如可以是浏览器、即时通讯软件、软件开发工具(例如集成开发环境ide、编译器等)等,但不限于此。当应用222被安装到计算设备200中时,可以向操作系统220添加驱动模块。

    在计算设备200启动运行时,处理器204会从存储器206中读取操作系统220的程序指令并执行。应用222运行在操作系统220之上,利用操作系统220以及底层硬件提供的接口来实现各种用户期望的功能。当用户启动应用222时,应用222会加载至存储器206中,处理器204从存储器206中读取并执行应用222的程序指令。

    计算设备200还可以包括有助于从各种接口设备(例如,输出设备242、外设接口244和通信设备246)到基本配置202经由总线/接口控制器230的通信的接口总线240。示例的输出设备242包括图形处理单元248和音频处理单元250。它们可以被配置为有助于经由一个或者多个a/v端口252与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口244可以包括串行接口控制器254和并行接口控制器256,它们可以被配置为有助于经由一个或者多个i/o端口258和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备246可以包括网络控制器260,其可以被布置为便于经由一个或者多个通信端口264与一个或者多个其他计算设备262通过网络通信链路的通信。

    网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(rf)、微波、红外(ir)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。

    在根据本发明的计算设备200中,应用222包括用于执行本发明的代码管理方法300的指令,该指令可以指示处理器204执行本发明的作业分类模型的代码管理方法300。

    图3示出了根据本发明一个实施例的代码管理方法300的流程图,适于在计算设备(例如图2所示的计算设备)中执行。

    如图3所示,方法始于步骤s310,获取修改的原始代码和修改后的代码。

    在程序开发过程中,当有代码提交修改时,可以触发方法300的执行,并在步骤s310获取原始代码和修改后的代码。根据本发明的一个实施例,当平台公共库升级时,会触发拉取公共库的原始代码和修改后的代码。公共库代码为不同系统平台的公共库代码,包括ios平台公共库代码、安卓平台公共库代码、js平台公共库代码。

    随后进入步骤s320,对原始代码和修改后的代码进行比对,获取差异比对结果,并生成修改列表。

    根据本发明的一个实施例,通过代码差异比对工具gitdiff对平台公共库的原始代码和修改后的代码进行比对,生成差异比对结果,其中包括代码的修改内容和修改的行号,从中提取出文件名、类名和方法名,并作为修改记录存储到修改列表中,根据本发明的一个实施例,修改记录的格式可以表示为下列各式。

    在生成修改记录列表后,进入步骤s330,根据修改列表和调用关系数据库获得修改的方法、类、方法的调用位置。

    根据本发明的一个实施例,调用关系数据库为应用程序的源代码的调用关系数据。应用程序的运行平台包括安卓平台、ios平台和js平台,调用关系数据中包含了应用程序调用对平台的公共库的调用关系,例如,ios平台的应用程序对ios平台公共库的调用关系。在平台的公共库发生代码修改时,根据修改列表和调用关系数据库,可以获得修改内容在对应该平台的应用程序中的调用位置。

    随后,在步骤s340中,根据调用位置生成公共库修改影响范围报告。根据修改记录在调用关系数据库中的初始调用位置向上遍历,可以获得被影响的插件信息,从而获得相应的业务组信息,生成影响范围报告,影响范围报告中还包括修改列表中每个记录中的方法名称、类名称和文件名称,以及影响的方法名称、影响的类名称、影响的插件名称等信息。图5示出了根据本发明一个实施例的影响范围报告通过web端进行可视化展示的效果图。影响范围报告中还包括修改代码的上线版本、上线时间、需要通知到的影响范围人员等信息。

    最后通过步骤s350将影响范围报告通知相关业务组,根据本发明的一个实施例,可以将影响范围报告以邮件的形式发送给相关业务组负责人。

    图4示出了根据本发明一个实施例的代码调用关系生成方法400的流程图。方法始于步骤s410,接收待检测的源代码,接收到的应用程序源代码可以来自不同的运行平台,包括安卓(android)平台、ios平台、js语法平台等,检测应用程序源代码中对多平台公共库的调用关系。

    当接收到源代码后,进入步骤s420,获取源代码所属的平台,如果判断为android平台,则进入步骤s430,根据android平台的代码分析方法对源代码进行分析,生成android平台源代码的初始调用关系。

    android平台的代码分析需要借用lint工具完成,lint工具拥有一个配置文件lint.xml,配置文件中定义了代码扫描中的检测规则,主要包括对问题错误级别的定义,错误级别包括fatal、error、warning、ignore。根据本发明一个实施例,其定义格式如下所示。

    <issueid="hardcodedtext"severity="error"/>

    根据本发明的又一个实施例,如下规则的定义说明在指定的path中该issue的定义不会起作用。

    <issueid="uselessleaf">

    <ignorepath="res/layout/main.xml"/>

    </issue>

    运行该配置文件,源代码将按照该配置文件中定义的规则进行扫描,获得的初始调用关系数据并以xml文件形式输出,其中包括了源代码对公共库平台的调用信息。

    接下来需要对该输出结果进行标准化处理,进入步骤s440,因为android平台的初始调用关系数据xml文件不能被解析,首先通过java读取该xml文件,将其转换为可解析的xml文件,然后遍历可解析的xml文件中的调用关系数据,获取其中的涉及公共库调用关系的相关字段存储为json文件,其中的数据格式如下:

    上述一组数据记录了一条公共库调用函数的详细数据。其中,“pluginname”字段为插件名称,唯一标识当前扫描的xml的归属插件名称,“branch”中存储插件分支,“version”为插件版本,剩余6个字段为公共库调用关系存储字段,“classname”表示当前解析的类名,“methodname”为方法名称描述,这两个字段唯一标识了对外提供的调用关系类名和方法名,“func_override”标识该方法是否为重载子类,“func_line_pos”记录了该方法名的起始行号,“func_endline_pos”记录了该方法名的结束行号,“filename”标记扫描的文件名称。

    如果步骤s420的判断结果为ios平台,则进入步骤s350,通过ios平台的代码分析工具进行分析。根据本发明的一个实施例,借用clang工具进行语法解析,生成初始调用关系。

    随后进入步骤s460,进行ios平台初始调用关系的标准化处理,需要借助oclint工具,遍历ios平台源代码的初始调用关系数据,获取其中公共库调用关系的相关字段输出到json文件。其中,pluginname字段记录ios插件名称,branch字段记录插件分支,version为插件版本,file_path为该条记录对应的文件名称完整路径,classname为调用关系扫描的类名,class_type记录该类类型,extends_relationship记录该类的继承关系,父类名称,front_space记录该类定义前缀空格文件,用于正则匹配。start_line_pos记录方法开始行,end_line_pos记录方法结束行,methodname记录该方法名,func_override标识该方法是否复写,func_line_pos记录方法定义的开始行,func_column_pos记录方法定义的开始列,func_describe标识方法类型描述,call_func就调用方法名,call_class记录调用类名,call_row记录方法调用行,call_file记录方法调用文件。

    如果步骤s420的判断结果为js语法平台,则进入步骤s470,借助js语法解析工具对源码进行解析,js语法解析工具包括很多种,包括babylonjs、acorn、esprima等,步骤s450可以采用任意js语法解析工具,本发明对此不做限制。本实施例以解析工具babylonjs为例进行说明。

    js语法解析结果中,“callexpression”节点标识为一个调用关系根节点,在此根节点下,记录类型type为“callexpression”,记录起始结束行号在loc节点,调用关系详细数据存储于“callee”子节点中,“callee”节点下“object”字段记录调用数据类名,存储于“identifier”的同级节点“name”,即存储了该条调用关系的类名name数据。“object”的同级节点“property”中存储了调用方法名,读取“property”节点下的“type”节点,对应type值为“identifier”的同级节点“name”即存储了调用的方法名name数据。

    随后进入步骤s480进行标准化处理,使用java上述分析结果中的callee数据,即可遍历得到所有的js方法的调用关系数据,获取pluginname,branch,version,classname,filename,call_classname,call_func,start_line_pos,end_line_pos字段,重新拼接生成对json文件。

    在步骤s490中,将上述三个平台各自生成标准化的公共库调用关系json文件,提取其中的字段信息进行整合统一,最终将调用关系数据存储在mysql数据库中,共计23个字段,详细记录了查询一条调用关系唯一定位的必须数据。其中,id为数据库自增字段,classname表示扫描文件的类名,methodname表示扫描文件的方法名,call_classname表示调用的类名,call_func表示调用的方法名,reference_description表示该条调用关系的调用描述,reference_file_name表示调用关系的引用文件名称,line_pos表示该条方法调用在当前扫描文件中的行号,colume_pos表示该条方法调用在当前扫描文件中的起始列号,pluginname表示当前扫描文件的插件名称,branch表示当前扫描文件的插件分支,version表示当前扫描文件的插件版本号,createtime记录存入数据库表中的创建时间,class_type记录当前扫描类的类型,是否为公有public或私有private,extend_relationship表示扫描类的继承关系名称,front_space记录当前方法的前缀空格数,用来做正则匹配,start_line_pos记录扫描文件中方法名的起始行号,end_line_pos记录扫描文件中方法名的结束行号,func_override记录该方法是否重载子类,func_line_pos记录了该条调用关系在原始文件中的行号,func_colume_pos记录了该条调用关系在原始文件中的列号,file_path记录了原始文件的完整文件目录。通过上述字段,唯一标识了一条调用关系数据。

    根据本发明的代码管理方法,对来自不同平台的代码,通过统一的入口,完成差异比对分析,获得修改列表,并通过查询调用关系数据库获得修改代码的调用位置,对输出结果进行了统一,并通过进一步的功能扩展和数据分析,生成影响范围报告,通过本发明的代码管理方法对各个平台的代码进行统一管理,实现了跨平台的代码管理,同时根据本发明的代码管理方法,对于代码差异比对、调用位置分析、影响范围报告等实现了自动化分析,在开发过程中,减少了部门间的沟通成本。

    在应用程序开发过程中,ios平台、安卓平台和js平台中任意平台公共库升级,根据本发明的代码管理方法,都可以根据调用关系数据库生成影响范围报告,并能够根据影响范围报告进一步扩展,实现自动向影响范围内的相关业务部门发送邮件通知,使得公共库管理部门和业务开发部门之间的沟通成本大大降低。

    这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、u盘、软盘、cd-rom或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。

    在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的代码管理方法。

    以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。

    在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

    在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

    应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

    本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。

    本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

    此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

    本发明还包括:

    a8、如a7所述的方法,其中,所述ios平台的代码分析工具为clang工具。

    a9、如a4-a8中任意一项所述的方法,所述运行平台还包括js语法平台,所述通过所述运行平台的代码分析工具对所述源代码进行语法分析,生成所述源代码的初始调用关系数据包括:

    当所述运行平台为js语法平台时,调用js语法平台的代码分析工具对源代码进行分析;

    生成js语法平台的初始调用关系数据。

    a10、如a9所述的方法,其中,所述js语法平台的代码分析工具为babylon.js或acorn.js。

    a11、如a4-a10中任意一项所述的方法,其中,所述安卓平台源代码的初始调用关系数据为xml格式,所述对所述初始调用关系数据进行标准化处理,获得标准调用关系数据包括:

    将所述xml格式的安卓平台源代码的初始调用关系数据转换为可解析的xml格式;

    遍历转换后的初始调用关系数据,获取调用关系相关字段存储为标准的json文件。

    a12、如a11所述的方法,其中,所述将所述xml格式的安卓平台源代码的初始调用关系数据转换为可解析的xml格式包括:

    通过java读取xml格式的安卓平台源代码的初始调用关系数据,获得可解析的xml格式的初始调用关系数据。

    a13、如a4-a12中任意一项所述的方法,其中,所述对所述初始调用关系数据进行标准化处理,获得标准调用关系数据还包括:

    使用oclint工具对所述ios平台源代码的初始调用关系数据进行处理;

    遍历所述ios平台源代码的初始调用关系数据,获取调用关系相关字段存储为标准的json文件。

    a14、如a4-a13中任意一项所述的方法,其中,所述对所述初始调用关系数据进行标准化处理,获得标准调用关系数据包括:

    遍历所述js语法平台的初始调用关系数据,获取调用关系相关字段存储为标准的json文件,所述调用关系相关字段包括:插件名称、版本、类名称、文件名称、调用类名称、调用函数名称、调用位置信息。

    a15、如a1-a14中任意一项所述的方法,其中,所述根据所述调用位置生成影响范围报告包括:

    根据所述修改列表中的文件、类和方法在所述调用关系数据库中的初始调用位置向上遍历,获得相应的插件名称,并添加到影响范围报告中;

    在所述影响范围报告中添加插件所对应的业务组信息、修改后的代码的上线时间、版本号和调用位置。

    a16、如a1-a15中任意一项所述的方法,其中,所述方法还包括:

    根据所述影响范围报告,通过邮件通知相关业务组,以便相关业务组根据影响范围报告完成相应的测试。

    b18、如b17所述的系统,其中,所述差异比对单元在将原始代码和修改后的代码进行比对时适于:

    通过代码比对工具对所述修改后的代码和原始代码进行比对,生成差异比对结果;

    对所述差异比对结果进行信息提取生成修改列表。

    b19、如b17或b18所述的系统,其中,所述应用程序的运行平台包括安卓平台、ios平台和js平台,所述原始代码为所述运行平台上的公共库代码,所述调用关系数据库为所述应用程序对所述公共库代码的调用关系,所述影响范围报告单元在根据修改列表查询调用关系数据库,获得所述修改列表中文件、类和方法的调用位置时适于:

    获取调用关系数据库;

    根据所述修改列表中的文件、类和方法,以及所述调用关系数据库获取修改列表中每条修改记录的调用位置。

    b20、如b17-b19中任意一项所述的系统,还包括:

    影响通告单元,适于根据所述影响范围报告,通过邮件通知相关业务组,以便相关业务组根据影响范围报告完成相应的测试。

    此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。

    如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。

    尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。


    技术特征:

    1.一种代码管理方法,适于在计算设备中执行,其中,所述方法包括:

    获取原始代码和修改后的代码;

    将修改后的代码与原始代码进行对比,获得修改列表,所述修改列表中包括至少一条修改记录,所述修改记录包括修改的文件、类和方法的名称;

    根据修改列表查询调用关系数据库,获得所述修改列表包含的文件、类和方法的调用位置,所述调用关系数据库包括应用程序代码对原始代码的调用关系;

    根据所述调用位置生成影响范围报告。

    2.如权利要求1所述方法,其中,所述将修改后的代码与原始代码进行比对,获得修改列表包括:

    通过代码比对工具对所述修改后的代码和原始代码进行比对,生成差异比对结果;

    从所述差异比对结果中提取出文件名、类名和方法名生成修改列表。

    3.如权利要求1或2所述的方法,其中,所述应用程序的运行平台包括安卓平台、ios平台和js平台,所述原始代码为所述运行平台上的公共库代码,所述调用关系数据库为所述应用程序对所述公共库代码的调用关系,所述根据修改列表查询调用关系数据库,获得所述修改列表中文件、类和方法的调用位置包括:

    获取调用关系数据库;

    根据所述修改列表中的文件、类和方法,以及所述调用关系数据库获取修改列表中每条修改记录的调用位置。

    4.如权利要求1-3中任意一项所述的方法,其中,所述调用关系数据库的创建过程包括:

    获取应用程序的源代码以及所述源代码对应的运行平台;

    通过所述运行平台的代码分析工具对所述源代码进行分析,生成所述源代码的初始调用关系数据;

    对所述初始调用关系进行标准化处理,获得标准调用关系数据;

    将所述标准调用关系数据存储到调用关系数据库中。

    5.如权利要求4所述的方法,其中,所述运行平台包括安卓平台,所述通过所述运行平台的代码分析工具对所述源代码进行分析,生成所述源代码的初始调用关系数据包括:

    当运行平台为安卓平台时,调用安卓平台的代码分析工具;

    获取所述安卓平台的代码分析工具的配置文件,所述配置文件中包括错误级别的定义和排除的检查内容;

    通过所述代码分析工具根据配置文件对所述源代码进行分析;

    生成安卓平台源代码的初始调用关系数据。

    6.如权利要求5所述的方法,其中,所述安卓平台的代码分析工具为lint工具。

    7.如权利要求4-6中任意一项所述的方法,其中,所述运行平台还包括ios平台,所述通过所述运行平台的代码分析工具对所述源代码进行分析,生成所述源代码的初始调用关系数据包括:

    当所述运行平台为ios平台,调用ios平台的代码分析工具对源代码进行分析;

    生成ios平台源代码的初始调用关系数据。

    8.一种代码发布管理系统,包括:

    代码获取单元,适于获取原始代码和修改后的代码;

    差异比对单元,适于将修改后的代码与原始代码进行对比,获得修改列表,所述修改列表中包括至少一条修改记录,所述修改记录包括修改的文件、类和方法的名称;

    调用关系数据库,适于存储应用程序代码对原始代码的调用关系;

    影响范围报告单元,适于根据修改列表查询调用关系数据库,获得所述修改列表包含的文件、类和方法的调用位置,还适于根据所述调用位置生成影响范围报告。

    9.一种计算设备,包括:

    至少一个处理器;以及

    存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如权利要求1-7中任一项所述方法的指令。

    10.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-7中任一项所述方法。

    技术总结
    本发明公开了一种代码管理方法,适于在计算设备中执行,其中,方法包括:获取原始代码和修改后的代码;将修改后的代码与原始代码进行对比,获得修改列表,修改列表中包括至少一条修改记录,修改记录包括修改的文件、类和方法的名称;根据修改列表查询调用关系数据库,获得修改列表包含的文件、类和方法的调用位置,调用关系数据库包括应用程序代码对原始代码的调用关系;根据调用位置生成影响范围报告。本发明还公开了相应的代码管理系统、计算设备及可读存储介质。

    技术研发人员:管锴;董石雄
    受保护的技术使用者:车智互联(北京)科技有限公司
    技术研发日:2020.12.02
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-23229.html

    最新回复(0)