代码质量检测、代码检测质量的评估方法、装置及设备
技术领域
本说明书涉及计算机技术领域,尤其涉及代码质量检测、代码检测质量的评估方法、装置及设备。
背景技术
代码是指程序员利用开发工具所支持的语言编写出来的源文件,可以是一组由字符、符号或信号码元等以离散形式表示信息的明确的规则体系。随着编程技术的发展,大多数功能都可以通过代码实现。通常,典型的软件项目研发投产流程包括分析、开发、测试和发布四个步骤。为保证软件开发的质量,软件开发人员或者测试人员可以在开发阶段编写单元测试和集成测试验证代码逻辑处理正确性。然而,由于每个软件开发人员编码风格各异,可能引入安全隐患,又或者,可能存在功能逻辑本身理解出错,基于错误理解而编写不合适的测试代码,可能会造成逻辑错误在产品上线后才发现。引入人员对软件代码进行复查,是目前较为通用的做法。而实际应用中,代码检测质量可以直接影响到代码质量,高质量的代码检测可以获得准确率高的代码。鉴于此,提供一种能评估代码检测的质量的方案显得尤为重要。
发明内容
为克服相关技术中存在的问题,本说明书提供了代码质量检测、代码检测质量的评估方法、装置及设备。
根据本说明书实施例的第一方面,提供一种代码检测质量的评估方法,所述方法包括:
获取待检测源代码文件;
按预设的代码注入策略在所述待检测源代码文件中注入异常代码,获得待检测更新代码文件和还原信息,所述还原信息用于辅助将所述待检测更新代码文件中的异常代码还原为所述待检测源代码文件的源代码;
获取待评估代码文件及其还原信息,所述待评估代码文件是对所述待检测更新代码文件进行检测后获得的文件;
基于所述还原信息判断所述待评估代码文件中被注入的异常代码是否被修复,并根据判断结果获得代码检测质量的评估信息。
在一个实施例中,所述预设的代码注入策略包括:代码规范更改策略和/或逻辑更改策略,所述代码规范更改策略用于将待检测源代码文件中指定类型的规范代码更改为非规范代码;所述逻辑更改策略用于更改待检测源代码文件中指定类型的逻辑语句。
在一个实施例中,所述方法还包括:
在所述待检测源代码文件中注入异常代码后,将注入异常代码后的代码文件进行编译,将编译成功的注入异常代码后的代码文件确定为所述待检测更新代码文件。
在一个实施例中,所述基于所述还原信息判断所述待评估代码文件中被注入的异常代码是否被修复,包括:
若所述待评估代码文件中被注入的异常代码保持不变,则判定异常代码未被修复;
若所述待评估代码文件中被注入的异常代码发生变更,则判定异常代码被修复。
在一个实施例中,所述方法还包括:
基于所述还原信息将所述待评估代码文件中,未发生变更的被注入的异常代码还原为相应的源代码。
根据本说明书实施例的第二方面,提供一种代码质量检测方法,所述方法包括:
获取待检测源代码文件;
按预设的代码注入策略在所述待检测源代码文件中注入异常代码,获得待检测更新代码文件和还原信息,所述还原信息用于辅助将所述待检测更新代码文件中的异常代码还原为所述待检测源代码文件的源代码;
获取待评估代码文件及其还原信息,所述待评估代码文件是对所述待检测更新代码文件进行检测后获得的文件;
基于所述还原信息判断所述待评估代码文件中被注入的异常代码是否被修复,并根据判断结果获得代码检测质量的评估信息,并基于所述评估信息检测待评估代码文件的质量。
在一个实施例中,所述预设的代码注入策略包括:代码规范更改策略和/或逻辑更改策略,所述代码规范更改策略用于将待检测源代码文件中指定类型的规范代码更改为非规范代码;所述逻辑更改策略用于更改待检测源代码文件中指定类型的逻辑语句。
在一个实施例中,所述方法还包括:
在所述待检测源代码文件中注入异常代码后,将注入异常代码后的代码文件进行编译,将编译成功的注入异常代码后的代码文件确定为所述待检测更新代码文件。
在一个实施例中,所述基于所述还原信息判断所述待评估代码文件中被注入的异常代码是否被修复,包括:
若所述待评估代码文件中被注入的异常代码保持不变,则判定异常代码未被修复;
若所述待评估代码文件中被注入的异常代码发生变更,则判定异常代码被修复。
在一个实施例中,所述方法还包括:
基于所述还原信息将所述待评估代码文件中,未发生变更的被注入的异常代码还原为相应的源代码。
根据本说明书实施例的第三方面,提供一种代码检测质量的评估装置,所述装置包括:
信息获取模块,用于:获取待检测源代码文件;
代码注入模块,用于:按预设的代码注入策略在所述待检测源代码文件中注入异常代码,获得待检测更新代码文件和还原信息,所述还原信息用于辅助将所述待检测更新代码文件中的异常代码还原为所述待检测源代码文件的源代码;
信息获取模块,还用于:获取待评估代码文件及其还原信息,所述待评估代码文件是对所述待检测更新代码文件进行检测后获得的文件;
质量评估模块,用于:基于所述还原信息判断所述待评估代码文件中被注入的异常代码是否被修复,并根据判断结果获得代码检测质量的评估信息。
在一个实施例中,所述预设的代码注入策略包括:代码规范更改策略和/或逻辑更改策略,所述代码规范更改策略用于将待检测源代码文件中指定类型的规范代码更改为非规范代码;所述逻辑更改策略用于更改待检测源代码文件中指定类型的逻辑语句。
在一个实施例中,所述代码注入模块,还用于:
在所述待检测源代码文件中注入异常代码后,将注入异常代码后的代码文件进行编译,将编译成功的注入异常代码后的代码文件确定为所述待检测更新代码文件。
在一个实施例中,所述质量评估模块具体用于:
若所述待评估代码文件中被注入的异常代码保持不变,则判定异常代码未被修复;
若所述待评估代码文件中被注入的异常代码发生变更,则判定异常代码被修复。
在一个实施例中,所述装置还包括代码还原模块,用于:
基于所述还原信息将所述待评估代码文件中,未发生变更的被注入的异常代码还原为相应的源代码。
根据本说明书实施例的第四方面,提供一种代码质量检测装置,所述装置包括:
信息获取模块,用于:获取待检测源代码文件;
代码注入模块,用于:按预设的代码注入策略在所述待检测源代码文件中注入异常代码,获得待检测更新代码文件和还原信息,所述还原信息用于辅助将所述待检测更新代码文件中的异常代码还原为所述待检测源代码文件的源代码;
信息获取模块,还用于:获取待评估代码文件及其还原信息,所述待评估代码文件是对所述待检测更新代码文件进行检测后获得的文件;
质量检测模块,用于:基于所述还原信息判断所述待评估代码文件中被注入的异常代码是否被修复,并根据判断结果获得代码检测质量的评估信息,并基于所述评估信息检测待评估代码文件的质量。
在一个实施例中,所述预设的代码注入策略包括:代码规范更改策略和/或逻辑更改策略,所述代码规范更改策略用于将待检测源代码文件中指定类型的规范代码更改为非规范代码;所述逻辑更改策略用于更改待检测源代码文件中指定类型的逻辑语句。
在一个实施例中,所述代码注入模块,还用于:
在所述待检测源代码文件中注入异常代码后,将注入异常代码后的代码文件进行编译,将编译成功的注入异常代码后的代码文件确定为所述待检测更新代码文件。
在一个实施例中,所述质量检测模块具体用于:
若所述待评估代码文件中被注入的异常代码保持不变,则判定异常代码未被修复;
若所述待评估代码文件中被注入的异常代码发生变更,则判定异常代码被修复。
在一个实施例中,所述装置还包括代码还原模块,用于:
基于所述还原信息将所述待评估代码文件中,未发生变更的被注入的异常代码还原为相应的源代码。
根据本说明书实施例的第五方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现上述任一项方法。
本说明书的实施例提供的技术方案可以包括以下有益效果:
本实施例按预设的代码注入策略在待检测源代码文件中注入异常代码,获得待检测更新代码文件和还原信息,在待检测更新代码文件被检测后,获得待评估代码文件。由于还原信息用于辅助将待检测更新代码文件中的异常代码还原为待检测源代码文件的源代码;因此,可以基于还原信息判断待评估代码文件中被注入的异常代码是否被修复,并根据判断结果获得代码检测质量的评估信息。通过在待检测源代码文件中预先注入异常代码,通过异常代码被发现和修复的结果来判定代码检测质量,实现对代码检测质量的评估。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。
图1是本说明书根据一示例性实施例示出的一种代码检测质量的评估方法的流程图。
图2是本说明书根据一示例性实施例示出的另一种代码检测质量的评估方法的流程图。
图3是本说明书根据一示例性实施例示出的一种代码质量检测方法的流程图。
图4是本说明书代码质量检测装置/代码检测质量的评估装置所在计算机设备的一种硬件结构图。
图5是本说明书根据一示例性实施例示出的一种代码检测质量的评估装置的框图。
图6是本说明书根据一示例性实施例示出的一种代码质量检测装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
通常,源代码文件由开发人员完成并提交给文件发布系统,并由文件发布系统进行发布。在发布系统发布源代码文件之前,需对源代码文件进行测试,以确保源代码文件的可用性。针对源代码文件进行测试的方式,可以是利用编译的代码进行检测或人工检查,也可以先利用编译的代码进行检测,再人工进行复查。例如,在开发阶段编写单元测试和集成测试验证代码逻辑处理正确性。软件可以是由一个个分散的代码单元组成,单元测试是指构造输入数据校验输出数据对代码单元进行测试,集成测试是以业务单元的视角,对业务处理的所有代码单元集成进行整体处理逻辑。人工检查,可以是引入代码第一作者以外的其他项目人员对软件代码进行代码规范、业务逻辑和非功能性等方面的逐行审查。功能性问题通常指业务处理逻辑错误引发的影响功能使用的问题,非功能性问题即非业务处理类问题,例如可用性问题、稳定性问题和资金安全问题等。
实际应用中,不管是利用编译的代码对源代码文件进行检测,还是人工对源代码文件或已检测代码文件进行检测,检测的质量直接影响代码的质量。例如,一个软件开发人员发生遗漏问题的概率为x,代码(功能性和非功能性)正确率为1-x,引入n(n>1)个相同水平的软件开发人员,代码正确率可以提升到1-xn,假设x=10%,两种情况下代码正确率分别为90%和99%,可见在理想情况下,通过代码复查可以有效提升代码质量。然而,受限于代码复查人员的经验水平,水平低的复查人员较难发现高水平的软件开发人员的代码中存在的问题。又或者,代码复查人员不重视代码复查,可能是投入产出比较低(投入大量的时间,发现少量的问题),或者非量化结果把控的流程节点。
鉴于此,本说明书实施例提供一种代码检测质量的评估方案,在待检测源代码文件中预先注入异常代码,通过异常代码被发现和修复的结果来判定代码检测质量,有效地量化代码检测质量。
以下结合附图对本说明书实施例进行示例说明。
如图1所示,是本说明书根据一示例性实施例示出的一种代码检测质量的评估方法的流程图,所述方法包括:
在步骤102中,获取待检测源代码文件;
在步骤104中,按预设的代码注入策略在所述待检测源代码文件中注入异常代码,获得待检测更新代码文件和还原信息,所述还原信息用于辅助将所述待检测更新代码文件中的异常代码还原为所述待检测源代码文件的源代码;
在步骤106中,获取待评估代码文件及其还原信息,所述待评估代码文件是对所述待检测更新代码文件进行检测后获得的文件;
在步骤108中,基于所述还原信息判断所述待评估代码文件中被注入的异常代码是否被修复,并根据判断结果获得代码检测质量的评估信息。
本实施例可以应用在电子设备中,电子设备可以是个人计算机(personalcomputer,PC)、服务器等设备。电子设备可以是开发人员开发代码的设备,也可以是对代码进行检测的检测设备,还可以是区别于前述设备的独立设备。
关于待检测源代码文件,待检测源代码文件可以是由开发人员开发的待检测的源代码文件,代码文件可以用于实现一个或多个功能。而针对待检测源代码文件的获取方式,可以从源代码服务器中获取,也可以从开发人员的电子设备中获取等。
关于注入异常代码的时机,注入异常代码的时机可以作为前置校验。前置校验可以结合项目时间安排,以及代码版本管理服务代码提交日志进行判定。
在一个可选的实施例中,可以是在预设的异常代码注入条件满足时,进行异常代码的注入。异常代码注入条件可以将代码文件存续阶段划分为允许注入异常代码阶段和不允许注入异常代码阶段。在一个实施例中,如果代码开发还未完成,可能存在异常注入的代码被开发人员发现并修复,如果代码检测(检查或复查)已经开始或完成,可能发生注入的异常代码的部分已经检测完成,从而导致代码检测质量判定不准确的问题。鉴于此,异常代码注入条件可以是用于判定当前待检测源代码文件处于代码开发完成、且代码检测之前的阶段。例如,可以利用一个指定标识表示代码文件所处状态。例如,当源代码文件开发完成且冻结修改时,开发人员可以通过标注预设的注入标识,以表示该源代码文件处于允许注入异常代码阶段,当获取到待检测源代码文件时,发现该源代码文件标注有预设的注入标识,则执行步骤104,并在注入完成后删除该预设的注入标识。
然而,实际应用中,通过增加标识的方式可能于代码而言会有一些明显的侵入,而且鉴于一个工程里代码文件较多,标注成本高,提供另一种注入异常代码的时机,例如,可以在接收到用户触发指令时,执行异常代码注入操作。用户可以选择在代码开发完成并冻结修改后、代码检测开始前触发该指令。该实施例可以实现注入时机的可控性,便于用户操控。在另一个实施例中,上述代码检测质量的评估方法可以应用在代码检测设备中,因此,在对源代码进行检测前,可以执行异常代码注入操作。
可以理解的是,异常代码的注入时机可以根据需求进行配置,在此不一一赘述。
关于按预设的代码注入策略在待检测源代码文件中注入异常代码,可以是变更待检查源代码中的代码,以使更改后的代码文件中出现异常代码。换言之,按预设的代码注入策略将待检测源代码文件转换为包含异常代码的待检测更新代码文件。注入策略所执行的变更操作可以包括添加操作、删除操作、修改操作等。获得待检测源代码文件后,可以对结合待检测代码文件所属代码语言,对所述待检测代码文件进行分析,例如,进行词法、语法和语义分析,进而根据代码注入策略在待检测源代码文件中注入异常代码。
其中,预设的代码注入策略是预先配置的用于更改待检查源代码中的部分代码的策略。基于不同代码语言的代码文件可以配置不同的代码注入策略,基于不同项目的代码文件可以配置相同或不同的代码注入策略。注入异常代码的目的是为了通过异常代码是否被发现和修复来评判代码检测质量,因此,预测的代码注入策略可以根据需求进行设置。
例如,在一个实施例中,可以破坏代码的规范,相应的,预设的代码注入策略可以包括代码规范更改策略,所述代码规范更改策略用于将待检测源代码文件中指定类型的规范代码更改为非规范代码。每个项目都可以有相应的代码规范,代码规范可以包含对于代码编写风格和规则要求,可以认为是对代码编写的质量要求。例如,代码规范中指示在函数前需要有注释,相应的,代码规范更改策略可以包括:将函数前的注释删除。又如,代码规范对缩进、换行有要求,相应的,代码规范更改策略可以包括:将缩进和换行更改为与代码规范所指示的不一致等。可以理解的是,这里仅列举出几种可以更改的几种类型规范代码,还可以是其他类型,例如,将要求的小写字母更改为大写字母等,在此不一一列举。该实施例通过更改代码规范的方式在待检测源代码文件中注入异常代码,实现注入初级异常代码,以便用于评估检测过程中的仔细程度。
在另一个实施例中,还可以破坏代码的执行逻辑,通过改变代码逻辑以达到注入异常代码的目的。例如,预测的代码注入策略可以包括逻辑更改策略,该逻辑更改策略用于更改待检测源代码文件中指定类型的逻辑语句。例如,将||修改成&&等。该实施例通过更改代码逻辑的方式在待检测源代码文件中注入异常代码,实现注入高级异常代码,以便用于评估检测过程中的检测水平。
以下以一个具体的实施例进行示例说明:
待检测源代码如下:
待检测更新代码如下:
在该示例中,代码注入策略包括:将待检测源代码文件中的注释删除,将b替换成为B,以及将else if的||修改成为&&。
可以理解的是,预设的代码注入策略还可以是其他生成异常代码的策略,可以根据需求进行配置。而针对一份待检测源代码文件中同类型的规范代码,可以全部进行转换,也可以仅转换部分。例如,可以仅删除首次出现的注释、仅将第一次出现的某个变量从小写字母更改为大小字母等。相应的,而针对一份待检测源代码文件中同类型的逻辑语句,可以全部进行转换,也可以仅转换部分。例如,将第二次出现的与更改为非。
为了后续能够还原,在注入异常代码后,还需要确定还原信息。还原信息可以用于辅助将待检测更新代码文件中的异常代码还原为所述待检测源代码文件的源代码,以避免注入的异常代码影响源代码文件的准确性。
在一个实施例中,还原信息可以是待检测源代码文件,以便后续进行质量评估后,直接将待检测更新代码文件替换为待检测源代码文件。
然而,实际应用中,检测过程往往会修复待检测更新代码文件中的问题,如果采用源代码文件替换更新代码文件的方式,虽然替换效率快,但在确定评估信息后还需对待检测源代码文件执行检测操作,为了避免重复检测,在另一个实施例中,还原信息包括被转换的源代码位置信息(也可以称为还原点)以及还原内容,以便能通过还原信息知道在哪里改变了什么内容。还原内容可以包括注入(转换)前代码内容,甚至还可以包括注入后代码内容。例如,以上述代码文件为例,还原信息可以是:
第0行被删除内容为:
/**
*对比字符串是否相等,当两个字符串同时为null时候相等
*
*@param a第一个字符串
*@param b第二个字符串
*@return boolean字符串是否相等
*/
第xx行将b更改为B,第xx行的||修改成为&&。
或者,直接记录该段修改前的源代码,如,当前第2行至第9行所对应源代码为:
可见,通过记录还原点和还原内容,在后续还原过程中,可以将异常代码还原为源代码,以避免在采用整体文件替换时,将检测过程中已被修复的代码而恢复成错误代码,或者重复检测带来的资源浪费。
进一步的,在后续还原过程中,还可以基于还原信息将待评估代码文件中,未发生变更的被注入的异常代码还原为相应的源代码,由于发生改变的被注入的异常代码可能是被发现以及修复,因此,仅复原未发生变更的被注入异常代码,可以提高代码准确性。
待检测更新代码文件是带异常代码的代码文件。在一个实施例中,可以将注入异常代码后的代码文件作为待检测更新代码文件。而某些场景中,注入异常代码后,可能导致注入异常代码后的代码文件编译失败,因此,在一个实施例中,可以通过限定代码注入策略以确保注入异常代码后的待检测更新代码文件能被编译成功。为了能进一步确保待检测更新代码文件能被编译成功,还可以在所述待检测源代码文件中注入异常代码后,将注入异常代码后的代码文件进行编译,所述待检测更新代码文件为编译成功的注入异常代码后的代码文件。
该实施例中,通过将注入异常代码后的代码文件进行编译,在确定待检测源代码文件编译成功时,才将注入异常代码后的代码文件确认为待检测更新代码文件,而编译失败时,可以采取还原,或者还原后采用其他注入策略进行异常代码注入,或者输出报警信息提醒人工接入等手段来保证待检测更新代码文件是能编译成功的代码文件。可见,将待检测更新代码文件限定为能编译成功的代码文件,可以避免由于无法编译成功导致无法进行后续代码检测操作。
在获得待检测更新代码文件后,若执行质量评估的设备具有代码检测服务,可以对待检测更新代码文件进行检测;若执行质量评估的设备不具有代码检测服务,可以将待检测更新代码文件输出到检测设备中,以便检测设备对待检测更新代码文件进行检测。可以理解的是,待检测更新代码文件的检测时机可以由需求设定,在此不做限制。待检测更新代码文件的检测方法可以参考相关技术中的代码检测方法,在此也不做限制。
在待检测更新代码文件进行检测后,为了区别于源代码文件,可以将检测后的代码文件称为待评估代码文件。获取待评估代码文件及其还原信息的时机,可以是收到质量评估指令后,也可以是其他时机等。由于还原信息是可以用于将待检测更新代码文件中的异常代码还原为待检测源代码文件的源代码的信息,而待评估代码文件是被检测后的代码文件,因此,可以基于还原信息判断待评估代码文件中被注入的异常代码是否被修复,并根据判断结果获得代码检测质量的评估信息。
异常代码修复可能存在三种情况,异常代码保持不变;异常代码修复结果和还代码完全一致;异常代码修复结果和代码不一致。由于异常代码发生变更、且变更后的代码与源代码不一致,可能是修复成功了,也可能是修复失败了,但至少可以确保该问题被发现了,因此,在一个实施例中,若所述待评估代码文件中被注入的异常代码保持不变,则判定异常代码未被修复;若所述待评估代码文件中被注入的异常代码发生变更,则判定异常代码被修复。可见,直接分两种情况判断异常代码是否被修复,提高判断效率。
关于根据判断结果获得代码检测质量的评估信息,在一个例子中,可以根据未被修复的次数与预设次数阈值作比较,从而获得代码检测质量的评估信息。在另一个例子中,可以根据未被修复的次数与异常代码的总数相除,从而获得代码检测质量的评估信息。
作为其中一种应用场景,可以将评估信息作为代码质量检测的指标之一,即利用所述评估信息评估代码质量,以实现利用代码检测质量来侧面反映检测后代码的质量。
以上实施方式中的各种技术特征可以任意进行组合,只要特征之间的组合不存在冲突或矛盾,但是限于篇幅,未进行一一描述,因此上述实施方式中的各种技术特征的任意进行组合也属于本说明书公开的范围。
以其中一种组合进行示例说明。
如图2所示,是本说明书根据一示例性实施例示出的另一种代码检测质量的评估方法的流程图,该方法可以用于评估代码复查质量。在该实施例中,在前置校验过程中,可以判断当前阶段是否允许执行异常代码注入,即异常代码注入时机判断。异常代码注入的最佳时机可以是代码开发完成冻结修改和代码复查开始之间。在前置校验通过后,可以选择需要执行异常代码注入的代码。具体的,结合代码语言的词法、语法和语意分析,保存注入前代码块以及待注入位置,根据不同的注入模式(例如破坏代码的规范、代码的执行逻辑)注入异常代码,保存注入后的异常代码块,并且执行后置校验保证异常代码块符合最低交付标准,如至少满足:注入异常代码后的代码能编译成功。关于质量评估过程,遍历异常代码,判断注入的异常代码是否被修复,评定代码复查质量。如果异常代码块保持不变,评定代码复查遗漏(如标识为复查遗漏);如果异常代码块修复结果和还原点完全一致,评定代码复查成功;如果异常代码块修复结果和还原点不一致,这种情况下可能是还原点本身存在问题,可以评定代码复查成功。针对代码复查成功的情况,可以标识为复查成功。统计异常代码块复查遗漏和成功的数量,从而确定代码复查质量指标,即得到代码复查质量的量化结果。在注入还原过程中,遍历异常代码块,若复查失败,则根据注入前代码块、待注入位置以及异常代码块,将复查遗漏的代码还原到异常注入前的代码,以实现代码复原,保证异常注入不会影响业务验证。若针对所有复查失败的异常代码块复原完成或所有异常代码块复查成功,则输出代码复查质量指标。作为其中一种应用,可以利用该指标进行代码质量的评估。
S+R=D是代码复查流程的简单抽象,S表示原始代码体系,R表示代码复查和问题代码修复,D表示交付代码体系,虽然R的质量可以通过D的质量来论证,但具有较强的滞后性(可能已经在生产环境引发故障),本说明书实施例通过对S增加可识别的标记,通过旁路来间接推导R的质量,解决代码复查质量无法量化的问题。并且,通过软件代码的词法、语法和语意分析,实现异常代码的注入、检测和还原的全流程自动化,输出的代码复查质量结果可量化,可以输出为软件项目研发投产流程的关键节点进行强管控。
相应的,本说明书实施例还结合其中一种应用场景进行示例说明。如图3所示,是本说明书根据一示例性实施例示出的一种代码质量检测方法的流程图,所述方法包括:
在步骤302中,获取待检测源代码文件;
在步骤304中,按预设的代码注入策略在所述待检测源代码文件中注入异常代码,获得待检测更新代码文件和还原信息,所述还原信息用于辅助将所述待检测更新代码文件中的异常代码还原为所述待检测源代码文件的源代码;
在步骤306中,获取待评估代码文件及其还原信息,所述待评估代码文件是对所述待检测更新代码文件进行检测后获得的文件;
在步骤308中,基于所述还原信息判断所述待评估代码文件中被注入的异常代码是否被修复,并根据判断结果获得代码检测质量的评估信息,并基于所述评估信息检测待评估代码文件的质量。
该实施例将评估信息作为用于评价代码质量的指标之一,实现利用代码检测质量来侧面反映检测后代码的质量,实现从检测质量的维度评判代码质量,增加对代码质量的判断。
在一个实施例中,所述预设的代码注入策略包括:代码规范更改策略和/或逻辑更改策略,所述代码规范更改策略用于将待检测源代码文件中指定类型的规范代码更改为非规范代码;所述逻辑更改策略用于更改待检测源代码文件中指定类型的逻辑语句。
在一个实施例中,所述方法还包括:在所述待检测源代码文件中注入异常代码后,将注入异常代码后的代码文件进行编译,将编译成功的注入异常代码后的代码文件确定为所述待检测更新代码文件。
在一个实施例中,所述基于所述还原信息判断所述待评估代码文件中被注入的异常代码是否被修复,包括:
若所述待评估代码文件中被注入的异常代码保持不变,则判定异常代码未被修复;
若所述待评估代码文件中被注入的异常代码发生变更,则判定异常代码被修复。
在一个实施例中,所述方法还包括:
基于所述还原信息将所述待评估代码文件中,未发生变更的被注入的异常代码还原为相应的源代码。
与前述代码质量检测、代码检测质量的评估方法的实施例相对应,本说明书还提供了代码质量检测、代码检测质量的评估装置及其所应用的电子设备的实施例。
本说明书代码质量检测装置/代码检测质量的评估装置的实施例可以应用在计算机设备。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在计算机设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,为本说明书代码质量检测装置/代码检测质量的评估装置所在计算机设备的一种硬件结构图,除了图4所示的处理器410、网络接口420、内存430、以及非易失性存储器440之外,实施例中代码质量检测装置/代码检测质量的评估装置431所在的计算机设备通常根据该设备的实际功能,还可以包括其他硬件,对此不再赘述。
如图5所示,是本说明书根据一示例性实施例示出的一种代码检测质量的评估装置的框图,所述装置包括:
信息获取模块52,用于:获取待检测源代码文件;
代码注入模块54,用于:按预设的代码注入策略在所述待检测源代码文件中注入异常代码,获得待检测更新代码文件和还原信息,所述还原信息用于辅助将所述待检测更新代码文件中的异常代码还原为所述待检测源代码文件的源代码;
所述信息获取模块52,还用于:获取待评估代码文件及其还原信息,所述待评估代码文件是对所述待检测更新代码文件进行检测后获得的文件;
质量评估模块56,用于:基于所述还原信息判断所述待评估代码文件中被注入的异常代码是否被修复,并根据判断结果获得代码检测质量的评估信息。
在一个实施例中,所述预设的代码注入策略包括:代码规范更改策略和/或逻辑更改策略,所述代码规范更改策略用于将待检测源代码文件中指定类型的规范代码更改为非规范代码;所述逻辑更改策略用于更改待检测源代码文件中指定类型的逻辑语句。
在一个实施例中,所述代码注入模块54,还用于:
在所述待检测源代码文件中注入异常代码后,将注入异常代码后的代码文件进行编译,将编译成功的注入异常代码后的代码文件确定为所述待检测更新代码文件。
在一个实施例中,所述质量评估模块56具体用于:
若所述待评估代码文件中被注入的异常代码保持不变,则判定异常代码未被修复;
若所述待评估代码文件中被注入的异常代码发生变更,则判定异常代码被修复。
在一个实施例中,所述装置还包括代码还原模块(图5未示出),用于:
基于所述还原信息将所述待评估代码文件中,未发生变更的被注入的异常代码还原为相应的源代码。
如图6所示,是本说明书根据一示例性实施例示出的一种代码质量检测装置的框图,所述装置包括:
信息获取模块62,用于:获取待检测源代码文件;
代码注入模块64,用于:按预设的代码注入策略在所述待检测源代码文件中注入异常代码,获得待检测更新代码文件和还原信息,所述还原信息用于辅助将所述待检测更新代码文件中的异常代码还原为所述待检测源代码文件的源代码;
所述信息获取模块62,还用于:获取待评估代码文件及其还原信息,所述待评估代码文件是对所述待检测更新代码文件进行检测后获得的文件;
质量检测模块66,用于:基于所述还原信息判断所述待评估代码文件中被注入的异常代码是否被修复,并根据判断结果获得代码检测质量的评估信息,并基于所述评估信息检测待评估代码文件的质量。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
相应的,本说明书实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如下方法:
获取待检测源代码文件;
按预设的代码注入策略在所述待检测源代码文件中注入异常代码,获得待检测更新代码文件和还原信息,所述还原信息用于辅助将所述待检测更新代码文件中的异常代码还原为所述待检测源代码文件的源代码;
获取待评估代码文件及其还原信息,所述待评估代码文件是对所述待检测更新代码文件进行检测后获得的文件;
基于所述还原信息判断所述待评估代码文件中被注入的异常代码是否被修复,并根据判断结果获得代码检测质量的评估信息。
相应的,本说明书实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如下方法:
获取待检测源代码文件;
按预设的代码注入策略在所述待检测源代码文件中注入异常代码,获得待检测更新代码文件和还原信息,所述还原信息用于辅助将所述待检测更新代码文件中的异常代码还原为所述待检测源代码文件的源代码;
获取待评估代码文件及其还原信息,所述待评估代码文件是对所述待检测更新代码文件进行检测后获得的文件;
基于所述还原信息判断所述待评估代码文件中被注入的异常代码是否被修复,并根据判断结果获得代码检测质量的评估信息,并基于所述评估信息检测待评估代码文件的质量。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
相应的,本说明书实施例还提供一种计算机存储介质,所述存储介质中存储有程序指令,所述程序指令包括:
获取待检测源代码文件;
按预设的代码注入策略在所述待检测源代码文件中注入异常代码,获得待检测更新代码文件和还原信息,所述还原信息用于辅助将所述待检测更新代码文件中的异常代码还原为所述待检测源代码文件的源代码;
获取待评估代码文件及其还原信息,所述待评估代码文件是对所述待检测更新代码文件进行检测后获得的文件;
基于所述还原信息判断所述待评估代码文件中被注入的异常代码是否被修复,并根据判断结果获得代码检测质量的评估信息。
相应的,本说明书实施例还提供一种计算机存储介质,所述存储介质中存储有程序指令,所述程序指令包括:
获取待检测源代码文件;
按预设的代码注入策略在所述待检测源代码文件中注入异常代码,获得待检测更新代码文件和还原信息,所述还原信息用于辅助将所述待检测更新代码文件中的异常代码还原为所述待检测源代码文件的源代码;
获取待评估代码文件及其还原信息,所述待评估代码文件是对所述待检测更新代码文件进行检测后获得的文件;
基于所述还原信息判断所述待评估代码文件中被注入的异常代码是否被修复,并根据判断结果获得代码检测质量的评估信息,并基于所述评估信息检测待评估代码文件的质量。
本说明书实施例可采用在一个或多个其中包含有程序代码的存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。计算机可用存储介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括但不限于:相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
本领域技术人员在考虑说明书及实践这里申请的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。