买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:深圳前海微众银行股份有限公司
摘要:本发明公开了一种覆盖信息获取方法及装置,其中方法为:获取第一覆盖信息;所述第一覆盖信息用于指示行号为1至K对应的每行代码是否被执行,其中,当行号i对应的一行代码,在N个版本代码中均被执行,则表示行号i对应的一行代码被执行,否则,表示行号i对应的一行代码未被执行;K为第一版本代码包括的代码的行数;根据所述第一版本代码与第二版本代码,确定所述第一版本代码中,与所述第二版本代码存在差异的差异代码;根据所述差异代码以及所述第一覆盖信息,确定第二覆盖信息;所述第二覆盖信息用于指示所述差异代码中每行代码在所述第一版本代码中是否被执行,该方法可应用于金融科技Fintech。
主权项:1.一种覆盖信息获取方法,其特征在于,包括:获取第一覆盖信息;所述第一覆盖信息用于指示行号为1至K对应的每行代码是否被执行,其中,当行号i对应的一行代码,在N个版本代码中均被执行,则表示行号i对应的一行代码被执行,否则,表示行号i对应的一行代码未被执行;K为第一版本代码包括的代码的行数;i为大于或等于1且小于或等于K的整数;所述第一版本代码为所述N个版本代码中最后一次提交的代码;根据所述第一版本代码与第二版本代码,确定所述第一版本代码中,与所述第二版本代码存在差异的差异代码;所述第二版本代码为所述N个版本代码中首次提交的代码;根据所述差异代码以及所述第一覆盖信息,确定第二覆盖信息;所述第二覆盖信息用于指示所述差异代码中每行代码在所述第一版本代码中是否被执行;其中,所述获取第一覆盖信息,包括:获取N组第三覆盖信息;其中,所述N组第三覆盖信息的每组第三覆盖信息,与所述N个版本代码中的一个版本代码唯一对应,该组第三覆盖信息用于指示该版本代码中每行代码是否被执行;将所述N组第三覆盖信息合并为所述第一覆盖信息。
全文数据:一种覆盖信息获取方法及装置技术领域本发明涉及金融科技Fintech的计算机技术领域,尤其涉及一种覆盖信息获取方法及装置。背景技术随着计算机技术的发展,越来越多的技术大数据、分布式、区块链Blockchain、人工智能等应用在金融领域,传统金融业正在逐步向金融科技Fintech转变。目前,金融科技领域中,一个软件项目在一个开发周期内,代码会进行频繁的修改,因此一个软件项目在一个开发周期内会产生多个版本,为了表征不同版本代码间的变动情况、以及代码变动后的优化情况,常常需要获取两个不同版本之间差异代码的覆盖信息,也就是较新版本的代码在运行过程中,差异代码中代码的执行情况,如运行过程中差异代码执行的行数、差异代码执行的行数占差异代码总行数的比例等。现有技术中,在需要获取软件项目在一个开发周期内的两个不同版本之间差异代码的覆盖信息时,依次获取两个不同版本之间所有版本中,每两个相邻版本代码之间差异代码的覆盖信息、代码变动信息,再一个一个版本推导下去,直至得出两个不同版本之间差异代码的覆盖信息。显然,现有技术中的方法需要频繁拉取各个版本代码,计算量巨大,容易出错,而且会导致整个流程较长,两个不同版本间差异代码的覆盖信息的获取效率较低,这是一个亟待解决的问题。发明内容本申请实施例提供一种覆盖信息获取方法及装置,解决了现有技术中,覆盖信息获取时计算量巨大,容易出错,而且会导致整个流程较长,版本间差异代码的覆盖信息的获取效率较低的问题。本申请实施例提供一种覆盖信息获取方法,包括:获取第一覆盖信息;所述第一覆盖信息用于指示行号为1至K对应的每行代码是否被执行,其中,当行号i对应的一行代码,在N个版本代码中均被执行,则表示行号i对应的一行代码被执行,否则,表示行号i对应的一行代码未被执行;K为第一版本代码包括的代码的行数;i为大于或等于1且小于或等于K的整数;所述第一版本代码为所述N个版本代码中最后一次提交的代码;根据所述第一版本代码与第二版本代码,确定所述第一版本代码中,与所述第二版本代码存在差异的差异代码;所述第二版本代码为所述N个版本代码中首次提交的代码;根据所述差异代码以及所述第一覆盖信息,确定第二覆盖信息;所述第二覆盖信息用于指示所述差异代码中每行代码在所述第一版本代码中是否被执行。上述方法中,获取了第一覆盖信息,第一覆盖信息指示了行号为1至K对应的每行代码是否被执行,该方法并不需要频繁拉取N个版本代码中各个版本代码确定每次提交版本代码后的差异代码,直接根据所述第一版本代码与所述第二版本代码,便能确定所述第二版本代码中,与所述第一版本代码存在差异的差异代码,从而大幅度降低了计算量和错误率,从而降低了整个流程时间,再根据所述差异代码以及所述第一覆盖信息,获取所述第二覆盖信息,即差异代码中每行代码在所述第二版本代码运行时是否被执行的标记信息,因此该方法提升了版本间差异代码的覆盖信息的获取效率。一种可选实施方式中,所述获取第一覆盖信息,包括:获取N组第三覆盖信息;其中,所述N组第三覆盖信息的每组第三覆盖信息,与所述N个版本代码中的一个版本代码唯一对应,该组第三覆盖信息用于指示该版本代码中每行代码是否被执行;将所述N组第三覆盖信息合并为所述第一覆盖信息。一种可选实施方式中,所述N组第三覆盖信息的每组第三覆盖信息、所述第一覆盖信息均为一个数组,对于该数组任一下标的取值,若该取值为第一预设值,则指示该下标对应的代码已在该组覆盖信息对应的版本代码中被执行,若该取值为第二预设值,则指示该下标对应的代码未在该组覆盖信息对应的版本代码中被执行;所述将所述N组第三覆盖信息合并为所述第一覆盖信息,包括:按照所述第一覆盖信息的数组中每个下标,对所述N组第三覆盖信息的N个数组中该下标的取值按预设运算规则做运算,将该运算结果作为所述第一覆盖信息的数组中该下标的取值。一种可选实施方式中,所述根据所述第一版本代码与第二版本代码,确定所述第一版本代码中,与所述第二版本代码存在差异的差异代码,包括:若所述第一版本代码存在相对所述第二版本代码的新增代码,则将所述新增代码作为第一代码集合;若所述第一版本代码存在相对所述第二版本代码删除的代码块,则将在所述第二版本代码中,删除的代码块首行之前的一行代码和末尾行之后的一行代码,作为第二代码集合;若所述第一版本代码中存在相对所述第二版本代码注解发生变化的代码块,则将所述注解发生变化的代码块,作为第三代码集合;将所述第一代码集合、所述第三代码集合以及所述第三代码集合中所有代码,作为所述差异代码。一种可选实施方式中,所述根据所述差异代码以及所述第一覆盖信息,确定第二覆盖信息,包括:针对所述差异代码中每一行代码,若在所述第一覆盖信息中指示了该行代码被执行,则确定该行代码在所述第一版本代码中被执行;否则,确定该行代码在所述第一版本代码中未被执行;根据所述差异代码中每一行代码在所述第一版本代码中是否被执行,确定所述第二覆盖信息。本申请实施例提供一种覆盖信息获取装置,包括:获取模块,用于获取第一覆盖信息;所述第一覆盖信息用于指示行号为1至K对应的每行代码是否被执行,其中,当行号i对应的一行代码,在N个版本代码中均被执行,则表示行号i对应的一行代码被执行,否则,表示行号i对应的一行代码未被执行;K为第一版本代码包括的代码的行数;i为大于或等于1且小于或等于K的整数;所述第一版本代码为所述N个版本代码中最后一次提交的代码;处理模块,用于根据所述第一版本代码与第二版本代码,确定所述第一版本代码中,与所述第二版本代码存在差异的差异代码;所述第二版本代码为所述N个版本代码中首次提交的代码;根据所述差异代码以及所述第一覆盖信息,确定第二覆盖信息;所述第二覆盖信息用于指示所述差异代码中每行代码在所述第一版本代码中是否被执行。一种可选实施方式中,所述获取模块具体用于:获取N组第三覆盖信息;其中,所述N组第三覆盖信息的每组第三覆盖信息,与所述N个版本代码中的一个版本代码唯一对应,该组第三覆盖信息用于指示该版本代码中每行代码是否被执行;将所述N组第三覆盖信息合并为所述第一覆盖信息。一种可选实施方式中,所述N组第三覆盖信息的每组第三覆盖信息、所述第一覆盖信息均为一个数组,对于该数组任一下标的取值,若该取值为第一预设值,则指示该下标对应的代码已在该组覆盖信息对应的版本代码中被执行,若该取值为第二预设值,则指示该下标对应的代码未在该组覆盖信息对应的版本代码中被执行;所述获取模块具体用于:按照所述第一覆盖信息的数组中每个下标,对所述N组第三覆盖信息的N个数组中该下标的取值按预设运算规则做运算,将该运算结果作为所述第一覆盖信息的数组中该下标的取值。一种可选实施方式中,所述处理模块具体用于:若所述第一版本代码存在相对所述第二版本代码的新增代码,则将所述新增代码作为第一代码集合;若所述第一版本代码存在相对所述第二版本代码删除的代码块,则将在所述第二版本代码中,删除的代码块首行之前的一行代码和末尾行之后的一行代码,作为第二代码集合;若所述第一版本代码中存在相对所述第二版本代码注解发生变化的代码块,则将所述注解发生变化的代码块,作为第三代码集合;将所述第一代码集合、所述第三代码集合以及所述第三代码集合中所有代码,作为所述差异代码。一种可选实施方式中,所述处理模块具体用于:针对所述差异代码中每一行代码,若在所述第一覆盖信息中指示了该行代码被执行,则确定该行代码在所述第一版本代码中被执行;否则,确定该行代码在所述第一版本代码中未被执行;根据所述差异代码中每一行代码在所述第一版本代码中是否被执行,确定所述第二覆盖信息。本申请实施例提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,如本申请实施例提供的一种覆盖信息获取方法及可选方法被执行。本申请实施例提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,如本申请实施例提供的一种覆盖信息获取方法及可选方法被执行。附图说明图1为本申请实施例中一种覆盖信息获取方法的步骤流程示意图;图2为本申请实施例中一种覆盖信息获取方法可应用的系统架构图;图3为本申请实施例中一种覆盖信息获取方法可应用的系统架构图中自动注入覆盖信息代理的步骤流程图;图4为本申请实施例中一种覆盖信息获取装置的结构示意图。具体实施方式为了更好的理解上述技术方案,下面将结合说明书附图及具体的实施方式对上述技术方案进行详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互结合。随着计算机技术的发展,越来越多的技术大数据、分布式、区块链Blockchain、人工智能等应用在金融领域,传统金融业正在逐步向金融科技Fintech转变。目前,金融科技领域中,经常需要开发软件项目,一个软件项目在一个开发周期内,会对代码进行频繁的修改,可以将每次修改的代码提交到一个开源分布式版本控制系统中存储起来。举例来说,Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。git为一个开源分布式版本控制系统,git旨在快速高效地处理从小型到大型项目的所有事务。由于一个软件项目代码会进行频繁的修改,因此一个软件项目在一个开发周期内会产生多个版本,为了表征不同版本代码间的变动情况、以及代码变动后的优化情况,常常需要获取两个不同版本之间差异代码的覆盖信息,也就是较新版本的代码在运行过程中,差异代码中代码的执行情况,如运行过程中差异代码执行的行数、差异代码执行的行数占差异代码总行数的比例等。现有技术中,在金融机构银行机构、保险机构或证券机构在进行业务如银行的贷款业务、存款业务等开发过程中,需要获取软件项目在一个开发周期内的两个不同版本之间差异代码的覆盖信息时,依次获取两个不同版本之间所有版本中,每两个相邻版本代码之间差异代码的覆盖信息、代码变动信息,再一个一个版本推导下去,直至得出两个不同版本之间差异代码的覆盖信息。显然,现有技术中的方法需要频繁拉取各个版本代码,计算量巨大,容易出错,而且会导致整个流程较长,两个不同版本间差异代码的覆盖信息的获取效率较低,这种情况不符合银行等金融机构的需求,无法保证各项业务的高效运行。为此,本申请实施例提供获取第一覆盖信息的方法,该方法的步骤流程图如图1所示。步骤101:获取第一覆盖信息。需要说明的是,覆盖信息指运行时程序文件中的代码被执行的信息。一个程序文件在执行过程中,程序文件中每一行代码可能从程序文件执行开始到执行结束过程中,被执行过,也可能从未被执行过。如果一行代码被执行了就称这行代码被覆盖了,否则,就称这行代码未被覆盖。覆盖信息可以为程序文件中被覆盖的代码的比例信息、行数信息等,本申请实施例不做限定。另外,在一些编程环境中,对程序文件中代码进行编辑时,程序文件中有一些没有代码的空行,这些空行删除或不删除并不影响程序运行,在获取覆盖信息时并不考虑这些空行。所述第一覆盖信息用于指示行号为1至K对应的每行代码是否被执行,其中,当行号i对应的一行代码,在N个版本代码中均被执行,则表示行号i对应的一行代码被执行,否则,表示行号i对应的一行代码未被执行;K为第一版本代码包括的代码的行数;i为大于或等于1且小于或等于K的整数,所述第一版本代码为所述N个版本代码中最后一次提交的代码。所述N个版本代码为,一个开发周期中按预设顺序提交的代码中连续N次提交的代码,举例来说,一个软件项目,按照时间先后顺序提交了10次代码,N个版本代码为第4~8次提交的代码,此时N=5。步骤102:根据所述第一版本代码与第二版本代码,确定所述第一版本代码中,与所述第二版本代码存在差异的差异代码。所述第二版本代码为所述N个版本代码中首次提交的代码。步骤103:根据所述差异代码以及所述第一覆盖信息,确定第二覆盖信息。所述第二覆盖信息用于指示所述差异代码中每行代码在所述第一版本代码中是否被执行。步骤101中,获取第一覆盖信息的一种可选实施方式如下:获取N组第三覆盖信息;其中,所述N组第三覆盖信息的每组第三覆盖信息,与所述N个版本代码中的一个版本代码唯一对应,该组第三覆盖信息用于指示该版本代码中每行代码是否被执行;将所述N组第三覆盖信息合并为所述第一覆盖信息。在该可选实施方式中,对N组第三覆盖信息以及所述第一覆盖信息的形式不做限定,举例来说,所述N组第三覆盖信息的每组第三覆盖信息、所述第一覆盖信息均为一个数组,对于该数组任一下标的取值,若该取值为第一预设值,则指示该下标对应的代码已在该组覆盖信息对应的版本代码中被执行,若该取值为第二预设值,则指示该下标对应的代码未在该组覆盖信息对应的版本代码中被执行,基于此,可按照以下方式将所述N组第三覆盖信息合并为所述第一覆盖信息:按照所述第一覆盖信息的数组中每个下标,对所述N组第三覆盖信息的N个数组中该下标的取值按预设运算规则做运算,将该运算结果作为所述第一覆盖信息的数组中该下标的取值。举例来说,N个数组的每个数组均为布尔型数组,第一预设值为0,第二预设值为1,预设运算规则为与运算。对N个布尔型数组做与运算的结果,也是一个布尔型数组,将这个布尔型数组作为所述第一覆盖信息。步骤102中,差异代码指版本之间存在差异的代码,本申请实施例仅举例说明差异代码的判定规则,可根据具体实施场景来调整差异代码的判定规则,对此不做限定,具体判定规则如下:差异代码分为文件差异和文件内容差异,文件差异:如果文件路径或者文件名发生了改变,就指存在文件差异;文件内容差异:文件路径和文件名没有发送改变,但是文件内容发送了改变。在以下叙述中,文件指程序文件。可以通过增加或者减少一系列文件,以及对一个文件增加或者减少某些行内容,从而变更代码的内容,表现为:1第一版本代码相比第二版本代码新增了文件,对于新增的文件,将整个文件的所有代码行纳入差异代码中。对于第一版本代码相比第二版本代码减少的文件,不将减少的代码纳入差异代码。需要说明的是,代码行指文件中为代码的编辑行,如空行,并不作为代码行。2第一版本代码相比第二版本代码,文件名和文件的存储路径相同,但是文件内容不同的,分为以下情形:第一种情形:新增了某些代码行。对于新增的代码行,直接纳入差异代码中。第二种情形:但减少的文件行,由于可能会影响上下代码行功能,所以这里将删除的代码块上下两行纳入差异代码中。对于删除的代码块,代码块指一组连续行数的代码行,将删除的代码块首行之前的一行和末尾行之后的一行纳入差异代码中。举例来说,第二版本代码的程序文件一中共有第1~10行,第一版本代码的程序文件一中共有第1~8行,其中第一版本代码的程序文件一的第1~6行与第二版本代码的程序文件一的第1~6行相同,第一版本代码的程序文件一的第7~8行与第二版本代码的程序文件一的第9~10行相同,也就是说,第一版本代码的程序文件一相对于第二版本代码的程序文件一,删除了第二版本代码的程序文件一中的第7~8行,即为删除的代码块,因此将删除的代码块首行之前的一行,也就是第一版本代码的程序文件一中的第6行,以及删除的代码块末尾行之后的一行,也就是第一版本代码的程序文件一中的第7行对应第二版本代码的程序文件一中的第9行,纳入差异代码。第三种情形,对于文件中的代码注解,由于注解本身没有覆盖信息,但是注解却有可能影响注解的代码块的执行,所以这里对于相同文件中的相同代码块,如果代码块的注解发生了修改,可以将整个代码块设置的代码行纳入差异代码中。需要说明的是,注解为Java编程语言中提供的一种机制,这种机制允许程序员在编写代码的同时可以直接编写元数据。被注解的代码并不会直接被注解影响,这只会向第三系统提供关于自己的信息以用于不同的需求。综合以上情形,步骤102中确定差异代码一种可选实施方式如下:若所述第一版本代码存在相对所述第二版本代码的新增代码,则将所述新增代码作为第一代码集合;若所述第一版本代码存在相对所述第二版本代码删除的代码块,则将在所述第二版本代码中,删除的代码块首行之前的一行代码和末尾行之后的一行代码,作为第二代码集合;若所述第一版本代码中存在相对所述第二版本代码注解发生变化的代码块,则将所述注解发生变化的代码块,作为第三代码集合;将所述第一代码集合、所述第三代码集合以及所述第三代码集合中所有代码,作为所述差异代码。另外,需要说明的是,程序文件中的空行不计入差异代码,举例来说,程序文件A中第一行为1,第二行为2,第三行为3,程序文件B中第一行为1,第二行为空,第三行为2,第四行为3,认为程序文件A和程序文件B没有差异。步骤102获取了第一版本代码中与所述第二版本代码存在差异的差异代码,步骤103即根据步骤102获取的所述差异代码,进一步获取第二覆盖信息。第二覆盖信息也就是,第一版本代码在执行过程中,差异代码中每行代码是否被执行的信息。步骤103中,获取第二覆盖信息的一种可选实施方式如下:针对所述差异代码中每一行代码,若在所述第一覆盖信息中指示了该行代码被执行,则确定该行代码在所述第一版本代码中被执行;否则,确定该行代码在所述第一版本代码中未被执行;根据所述差异代码中每一行代码在所述第一版本代码中是否被执行,确定所述第二覆盖信息。上述实施方式也就是,将在差异代码中,且在第一覆盖信息中记录的被执行的代码行,作为第二覆盖信息中被覆盖的代码行。下面以Jenkins和git结合为例,根据图2进一步说明本申请实施例提出的一种覆盖信息获取方法,如图2所示,为本申请实施例提出的一种覆盖信息获取方法可应用的系统架构图。在图2示出的系统架构图中,通过Jenkins和git结合,可自动收集git的提交信息,提前将N个版本代码的覆盖信息进行合并,获取第一覆盖信息,并结合第一版本代码与第二版本代码的差异代码,从而快速的获取所述第二覆盖信息。其中,Jenkins部署在应用机器,git部署在服务器。应用机器即进行项目开发的机器,应用机器将每次修改的代码提交至服务器。git中有几个常用工具标记如下:gitcommit,为git中的某次修改提交;gittag,是git版本库的一个快照,指向某次修改提交的指针;gitcommitid,为git中用于标识每一次提交修改的唯一字符串。可通过gitcommit记录Jenkins的每次修改提交之间文件差异,并用gittag指向Jenkins的每次提交修改,以及用gitcommitid标识Jenkins的每一次提交修改。下面分别介绍各个模块:commitid信息收集模块:commitid信息收集模块为应用机器中的模块,commitid信息收集模块将自动采集当前版本代码的commitid,将结果输出到应用的发布物料包中,应用即为编写程序时的软件应用。应用的发布物料包是一个软件包,用于运用插桩技术instrumentation插桩时进行加载,从而进行额外功能的添加。该系统架构中,发布物料包为Jenkins,在版本编译后,将版本信息输出到应用包下的指定目录和指定文件名中。版本信息包括:git分支名,构建发布物料包时对应的gitcommitid。覆盖信息代理注入模块:覆盖信息代理注入模块将自动接入覆盖信息代理,避免人工接入导致的误操作以及操作延迟。该模块会在应用运行的机器上监听当前应用的应用名及其对应的进程标识符processidentification,pid关系,通过判断应用的pid是否存在,确定应用是否已经接入了覆盖信息代理,从而自动将覆盖信息代理接入应用。其中,pid在操作系统里指进程识别号,也就是进程标识符,操作系统里每打开一个程序都会创建一个pid。该模块还会结合commitid信息收集模块的输出结果,在接入覆盖信息代理后,通过网络给覆盖信息收集模块发送心跳以进行数据同步,也会给覆盖信息收集模块发送应用从启动到当前这段时间内的覆盖信息。覆盖信息收集模块:覆盖信息收集模块用于定时接收覆盖率代理的心跳信息,判断覆盖信息代理的在线情况,同时也会定时或者手动给在线的覆盖信息代理发送采集覆盖信息的指令,采集应用的覆盖信息。采集到覆盖信息会同之前已经存在的覆盖信息进行合并,举例来说,将N组第三覆盖信息进行合并,得到一段时间内累积的第一覆盖信息,并将其存储在本地磁盘。如图3所示,为本申请实施例提供的覆盖信息代理注入模块自动注入覆盖信息代理的步骤流程图,以应用A举例说明。步骤301:通过一个称为过程状态ProcessStatus,ps的命令获取应用A的pid_1。需要说明的是,ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程。步骤302:请求覆盖信息采集模块获取应用A上报的pid_2。步骤303:确定是否应用A的pid1不存在或pid_1与pid_2不相等。若是,则执行步骤304。若应用A没有上报过pid1或者查询回来的pid2同当前的pid1不一致,则确定应用未接入覆盖信息代理。步骤304:注入覆盖信息代理。步骤304使用java提供的instrumentation的应用程序接口,注入覆盖率代理。步骤305:上报pid_1。在应用A成功注入覆盖率代理后,会将应用A自身的pid_1上报给覆盖信息收集模块,更新其之前存储的值。差异代码比较模块:在收到生成覆盖信息的指令时,差异代码比较模块会通过网络从git获取最近一次tag以及当前commitid对应的版本代码,比较获取两者之间的差异文件和文件之间的差异行,输出对应的代码行差异结果。触发源码比较的指令可以是自动触发也可以是手动触发。覆盖信息输出模块:覆盖信息输出模块用于将结合第一覆盖信息以及差异代码,生成第二覆盖信息。上述方法中,获取了第一覆盖信息,第一覆盖信息指示了行号为1至K对应的每行代码是否被执行,该方法并不需要频繁拉取N个版本代码中各个版本代码确定每次提交版本代码后的差异代码,直接根据所述第一版本代码与所述第二版本代码,便能确定所述第二版本代码中,与所述第一版本代码存在差异的差异代码,从而大幅度降低了计算量和错误率,从而降低了整个流程时间,再根据所述差异代码以及所述第一覆盖信息,获取所述第二覆盖信息,即差异代码中每行代码在所述第二版本代码运行时是否被执行的标记信息,因此该方法提升了版本间差异代码的覆盖信息的获取效率。如图4所示,为本申请实施例中一种覆盖信息获取装置的结构示意图。本申请实施例提供一种覆盖信息获取装置,包括:获取模块401,用于获取第一覆盖信息;所述第一覆盖信息用于指示行号为1至K对应的每行代码是否被执行,其中,当行号i对应的一行代码,在N个版本代码中均被执行,则表示行号i对应的一行代码被执行,否则,表示行号i对应的一行代码未被执行;K为第一版本代码包括的代码的行数;i为大于或等于1且小于或等于K的整数;所述第一版本代码为所述N个版本代码中最后一次提交的代码;处理模块402,用于根据所述第一版本代码与第二版本代码,确定所述第一版本代码中,与所述第二版本代码存在差异的差异代码;所述第二版本代码为所述N个版本代码中首次提交的代码;根据所述差异代码以及所述第一覆盖信息,确定第二覆盖信息;所述第二覆盖信息用于指示所述差异代码中每行代码在所述第一版本代码中是否被执行。一种可选实施方式中,所述获取模块401具体用于:获取N组第三覆盖信息;其中,所述N组第三覆盖信息的每组第三覆盖信息,与所述N个版本代码中的一个版本代码唯一对应,该组第三覆盖信息用于指示该版本代码中每行代码是否被执行;将所述N组第三覆盖信息合并为所述第一覆盖信息。一种可选实施方式中,所述N组第三覆盖信息的每组第三覆盖信息、所述第一覆盖信息均为一个数组,对于该数组任一下标的取值,若该取值为第一预设值,则指示该下标对应的代码已在该组覆盖信息对应的版本代码中被执行,若该取值为第二预设值,则指示该下标对应的代码未在该组覆盖信息对应的版本代码中被执行;所述获取模块401具体用于:按照所述第一覆盖信息的数组中每个下标,对所述N组第三覆盖信息的N个数组中该下标的取值按预设运算规则做运算,将该运算结果作为所述第一覆盖信息的数组中该下标的取值。一种可选实施方式中,所述处理模块402具体用于:若所述第一版本代码存在相对所述第二版本代码的新增代码,则将所述新增代码作为第一代码集合;若所述第一版本代码存在相对所述第二版本代码删除的代码块,则将在所述第二版本代码中,删除的代码块首行之前的一行代码和末尾行之后的一行代码,作为第二代码集合;若所述第一版本代码中存在相对所述第二版本代码注解发生变化的代码块,则将所述注解发生变化的代码块,作为第三代码集合;将所述第一代码集合、所述第三代码集合以及所述第三代码集合中所有代码,作为所述差异代码。一种可选实施方式中,所述处理模块402具体用于:针对所述差异代码中每一行代码,若在所述第一覆盖信息中指示了该行代码被执行,则确定该行代码在所述第一版本代码中被执行;否则,确定该行代码在所述第一版本代码中未被执行;根据所述差异代码中每一行代码在所述第一版本代码中是否被执行,确定所述第二覆盖信息。最后应说明的是:本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质包括但不限于磁盘存储器、光学存储器等上实施的计算机程序产品的形式。本申请是参照根据本申请的方法、设备系统、和计算机程序产品的流程图和或方框图来描述的。应理解可由计算机程序指令实现流程图和或方框图中的每一流程和或方框、以及流程图和或方框图中的流程和或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个和或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和或方框图一个方框或多个方框中指定的功能。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
权利要求:1.一种覆盖信息获取方法,其特征在于,包括:获取第一覆盖信息;所述第一覆盖信息用于指示行号为1至K对应的每行代码是否被执行,其中,当行号i对应的一行代码,在N个版本代码中均被执行,则表示行号i对应的一行代码被执行,否则,表示行号i对应的一行代码未被执行;K为第一版本代码包括的代码的行数;i为大于或等于1且小于或等于K的整数;所述第一版本代码为所述N个版本代码中最后一次提交的代码;根据所述第一版本代码与第二版本代码,确定所述第一版本代码中,与所述第二版本代码存在差异的差异代码;所述第二版本代码为所述N个版本代码中首次提交的代码;根据所述差异代码以及所述第一覆盖信息,确定第二覆盖信息;所述第二覆盖信息用于指示所述差异代码中每行代码在所述第一版本代码中是否被执行。2.如权利要求1所述的方法,其特征在于,所述获取第一覆盖信息,包括:获取N组第三覆盖信息;其中,所述N组第三覆盖信息的每组第三覆盖信息,与所述N个版本代码中的一个版本代码唯一对应,该组第三覆盖信息用于指示该版本代码中每行代码是否被执行;将所述N组第三覆盖信息合并为所述第一覆盖信息。3.如权利要求2所述的方法,其特征在于,所述N组第三覆盖信息的每组第三覆盖信息、所述第一覆盖信息均为一个数组,对于该数组任一下标的取值,若该取值为第一预设值,则指示该下标对应的代码已在该组覆盖信息对应的版本代码中被执行,若该取值为第二预设值,则指示该下标对应的代码未在该组覆盖信息对应的版本代码中被执行;所述将所述N组第三覆盖信息合并为所述第一覆盖信息,包括:按照所述第一覆盖信息的数组中每个下标,对所述N组第三覆盖信息的N个数组中该下标的取值按预设运算规则做运算,将该运算结果作为所述第一覆盖信息的数组中该下标的取值。4.如权利要求1-3任一所述的方法,其特征在于,所述根据所述第一版本代码与第二版本代码,确定所述第一版本代码中,与所述第二版本代码存在差异的差异代码,包括:若所述第一版本代码存在相对所述第二版本代码的新增代码,则将所述新增代码作为第一代码集合;若所述第一版本代码存在相对所述第二版本代码删除的代码块,则将在所述第二版本代码中,删除的代码块首行之前的一行代码和末尾行之后的一行代码,作为第二代码集合;若所述第一版本代码中存在相对所述第二版本代码注解发生变化的代码块,则将所述注解发生变化的代码块,作为第三代码集合;将所述第一代码集合、所述第三代码集合以及所述第三代码集合中所有代码,作为所述差异代码。5.如权利要求1-3任一所述的方法,其特征在于,所述根据所述差异代码以及所述第一覆盖信息,确定第二覆盖信息,包括:针对所述差异代码中每一行代码,若在所述第一覆盖信息中指示了该行代码被执行,则确定该行代码在所述第一版本代码中被执行;否则,确定该行代码在所述第一版本代码中未被执行;根据所述差异代码中每一行代码在所述第一版本代码中是否被执行,确定所述第二覆盖信息。6.一种覆盖信息获取装置,其特征在于,包括:获取模块,用于获取第一覆盖信息;所述第一覆盖信息用于指示行号为1至K对应的每行代码是否被执行,其中,当行号i对应的一行代码,在N个版本代码中均被执行,则表示行号i对应的一行代码被执行,否则,表示行号i对应的一行代码未被执行;K为第一版本代码包括的代码的行数;i为大于或等于1且小于或等于K的整数;所述第一版本代码为所述N个版本代码中最后一次提交的代码;处理模块,用于根据所述第一版本代码与第二版本代码,确定所述第一版本代码中,与所述第二版本代码存在差异的差异代码;所述第二版本代码为所述N个版本代码中首次提交的代码;根据所述差异代码以及所述第一覆盖信息,确定第二覆盖信息;所述第二覆盖信息用于指示所述差异代码中每行代码在所述第一版本代码中是否被执行。7.如权利要求6所述的装置,其特征在于,所述获取模块具体用于:获取N组第三覆盖信息;其中,所述N组第三覆盖信息的每组第三覆盖信息,与所述N个版本代码中的一个版本代码唯一对应,该组第三覆盖信息用于指示该版本代码中每行代码是否被执行;将所述N组第三覆盖信息合并为所述第一覆盖信息。8.如权利要求7所述的装置,其特征在于,所述N组第三覆盖信息的每组第三覆盖信息、所述第一覆盖信息均为一个数组,对于该数组任一下标的取值,若该取值为第一预设值,则指示该下标对应的代码已在该组覆盖信息对应的版本代码中被执行,若该取值为第二预设值,则指示该下标对应的代码未在该组覆盖信息对应的版本代码中被执行;所述获取模块具体用于:按照所述第一覆盖信息的数组中每个下标,对所述N组第三覆盖信息的N个数组中该下标的取值按预设运算规则做运算,将该运算结果作为所述第一覆盖信息的数组中该下标的取值。9.如权利要求6-8任一所述的装置,其特征在于,所述处理模块具体用于:若所述第一版本代码存在相对所述第二版本代码的新增代码,则将所述新增代码作为第一代码集合;若所述第一版本代码存在相对所述第二版本代码删除的代码块,则将在所述第二版本代码中,删除的代码块首行之前的一行代码和末尾行之后的一行代码,作为第二代码集合;若所述第一版本代码中存在相对所述第二版本代码注解发生变化的代码块,则将所述注解发生变化的代码块,作为第三代码集合;将所述第一代码集合、所述第三代码集合以及所述第三代码集合中所有代码,作为所述差异代码。10.如权利要求6-8任一所述的装置,其特征在于,所述处理模块具体用于:针对所述差异代码中每一行代码,若在所述第一覆盖信息中指示了该行代码被执行,则确定该行代码在所述第一版本代码中被执行;否则,确定该行代码在所述第一版本代码中未被执行;根据所述差异代码中每一行代码在所述第一版本代码中是否被执行,确定所述第二覆盖信息。11.一种计算机设备,其特征在于,包括程序或指令,当所述程序或指令被执行时,如权利要求1至5中任意一项所述的方法被执行。12.一种存储介质,其特征在于,包括程序或指令,当所述程序或指令被执行时,如权利要求1至5中任意一项所述的方法被执行。
百度查询: 深圳前海微众银行股份有限公司 一种覆盖信息获取方法及装置
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。