首页 / 专利库 / 林业机械与工程 / 森林健康 / 软件代码健康度的检测方法、处理方法、装置及电子设备

软件代码健康度的检测方法、处理方法、装置及电子设备

阅读:763发布:2020-05-15

专利汇可以提供软件代码健康度的检测方法、处理方法、装置及电子设备专利检索,专利查询,专利分析的服务。并且本 发明 实施例 提供了一种 软件 代码健康度的检测方法、处理方法、装置以及 电子 设备,其中, 软件代码 健康度的检测方法包括:获取待评估软件代码的多个维度的原始度量值;根据各个维度对应的第一权重值,对所述多个维度的原始度量值进行加权求和,获得待评估软件代码的健康度,其中,所述第一权重值为通过 机器学习 而获得的权重值。本发明实施例能够使软件代码健康度的检测过程更具综合性,其检测结果也更为全面和准确。,下面是软件代码健康度的检测方法、处理方法、装置及电子设备专利的具体信息内容。

1.一种软件代码健康度的检测方法,其特征在于,包括:
获取待评估软件代码的多个维度的原始度量值;
根据各个维度对应的第一权重值,对所述多个维度的原始度量值进行加权求和,获得待评估软件代码的健康度,其中,所述第一权重值为通过机器学习而获得的权重值。
2.根据权利要求1所述的方法,其特征在于,所述多个维度的原始度量值,包括:
动态维度和\或静态维度的原始度量值,
其中,所述动态维度进一步包括:代码测试bug率、代码线上故障率、代码运行时资源使用率中的任意一个或任意多个的组合;
所述静态维度进一步包括规约符合度、软件代码复杂度、代码面向对象性、代码重复率中的任意一个或任意多个的组合。
3.根据权利要求1所述的方法,其特征在于,还包括:
训练随机森林模型,获取所述各个维度对应的第一权重值。
4.根据权利要求3所述的方法,其特征在于,所述训练随机森林模型,获取所述各个维度对应的第一权重值包括:
获取多个作为训练样本的训练软件代码;
获取各个训练软件代码的多个维度的原始度量值作为各个训练样本的训练特征,以及获取各个训练软件代码对应的健康评价结果作为各个训练样本的结果标签;
使用所述多个训练样本对原始的随机森林模型进行训练,生成训练后的随机森林模型;
获取训练后的随机森林模型中,与各个训练特征对应的第二权重值作为所述第一权重值。
5.根据权利要求1所述的方法,其特征在于,所述对所述多个维度的原始度量值进行加权求和,获得待评估软件代码的健康度,包括:
根据如下公式计算所述健康度:
其中,y为所述健康度,wk为所述各个维度对应的第一权重值,fk为所述各个维度的原始度量值,l为所述维度的总数。
6.根据权利要求2所述的方法,其特征在于,所述软件代码复杂度通过如下方式获得:
获取待评估软件代码的多个代码片段的代码复杂度指标;
对所述多个代码片段的代码复杂度指标进行逐级纵向聚合,得到第一聚合得分;
对所述第一聚合得分横向聚合,得到第二聚合得分,将所述第二聚合得分作为所述软件代码复杂度输出。
7.一种软件代码健康度的检测装置,其特征在于,包括:
原始度量值获取模,用于获取待评估软件代码的多个维度的原始度量值;
代码健康度计算模块,用于根据各个维度对应的第一权重值,对所述多个维度的原始度量值进行加权求和,获得待评估软件代码的健康度,其中,所述第一权重值为通过机器学习而获得的权重值。
8.一种电子设备,其特征在于,包括:
存储器,用于存储程序;
处理器,耦合至所述存储器,用于执行所述程序,以用于:
获取待评估软件代码的多个维度的原始度量值;
根据各个维度对应的第一权重值,对所述多个维度的原始度量值进行加权求和,获得待评估软件代码的健康度,其中,所述第一权重值为通过机器学习而获得的权重值。
9.一种软件代码健康度的处理方法,其特征在于,包括:
获取多个作为训练样本的训练软件代码;
获取各个训练软件代码的多个维度的原始度量值作为各个训练样本的训练特征,以及获取各个训练软件代码对应的健康评价结果作为各个训练样本的结果标签;
使用所述多个训练样本对原始的随机森林模型进行训练,生成训练后的随机森林模型;
获取训练后的随机森林模型中,与各个训练特征对应的第二权重值作为在计算待评估软件代码的健康度的处理中,各个待评估软件代码的对应维度的第一权重值。
10.一种电子设备,其特征在于,包括:
存储器,用于存储程序;
处理器,耦合至所述存储器,用于执行所述程序,以用于:
获取多个作为训练样本的训练软件代码;
获取各个训练软件代码的多个维度的原始度量值作为各个训练样本的训练特征,以及获取各个训练软件代码对应的健康评价结果作为各个训练样本的结果标签;
使用所述多个训练样本对原始的随机森林模型进行训练,生成训练后的随机森林模型;
获取训练后的随机森林模型中,与各个训练特征对应的第二权重值作为在计算待评估软件代码的健康度的处理中,各个待评估软件代码的对应维度的第一权重值。

说明书全文

软件代码健康度的检测方法、处理方法、装置及电子设备

技术领域

[0001] 本申请涉及计算机技术领域,尤其涉及一种软件代码健康度的检测方法、处理方法、装置及电子设备。

背景技术

[0002] 随着计算机科学技术的发展,软件的应用范围和规模也随之不断扩大。在软件应用场景更为广阔的大背景下,软件质量成为专业技术人员更为关心的问题。在软件质量评估中,代码质量是软件质量的重要部分,其紧密关系到各大互联网企业项目线上运行的稳定性,也进一步影响着用户体验和企业的效益。在代码质量的评估中,代码健康度可综合反映软件代码的整体质量。目前,由于各大企业业务需求不尽相同,因此软件代码的类型和格日趋多样化,这对代码健康度的衡量带来了进一步的挑战。在现有的代码健康度评估技术中,一般仅侧重于对代码的某一个或少数几个维度进行评估,评估所依赖的基础数据单一且评估过程较为简单,因此评估结果往往不能准确、全面地反映真实的代码质量。发明内容
[0003] 本发明实施例提供一种软件代码健康度的检测方法、处理方法、装置及电子设备,能够使软件代码健康度的检测过程更具综合性,其检测结果也更为全面和准确。
[0004] 本发明实施例提供了一种软件代码健康度的检测方法,包括:
[0005] 获取待评估软件代码的多个维度的原始度量值;
[0006] 根据各个维度对应的第一权重值,对所述多个维度的原始度量值进行加权求和,获得待评估软件代码的健康度,其中,所述第一权重值为通过机器学习而获得的权重值。
[0007] 本发明实施例还提供了一种软件代码健康度的检测装置,包括:
[0008] 原始度量值获取模,用于获取待评估软件代码的多个维度的原始度量值;
[0009] 代码健康度计算模块,用于根据各个维度对应的第一权重值,对所述多个维度的原始度量值进行加权求和,获得待评估软件代码的健康度,其中,所述第一权重值为通过机器学习而获得的权重值。
[0010] 本发明实施例还提供了一种电子设备,包括:
[0011] 存储器,用于存储程序;
[0012] 处理器,耦合至所述存储器,用于执行所述程序,以用于:
[0013] 获取待评估软件代码的多个维度的原始度量值;
[0014] 根据各个维度对应的第一权重值,对所述多个维度的原始度量值进行加权求和,获得待评估软件代码的健康度,其中,所述第一权重值为通过机器学习而获得的权重值。
[0015] 本发明实施例还提供了一种软件代码健康度的处理方法,包括:
[0016] 获取多个作为训练样本的训练软件代码;
[0017] 获取各个训练软件代码的多个维度的原始度量值作为各个训练样本的训练特征,以及获取各个训练软件代码对应的健康评价结果作为各个训练样本的结果标签;
[0018] 使用所述多个训练样本对原始的随机森林模型进行训练,生成训练后的随机森林模型;
[0019] 获取训练后的随机森林模型中,与各个训练特征对应的第二权重值作为在计算待评估软件代码的健康度的处理中,各个待评估软件代码的对应维度的第一权重值。
[0020] 本发明实施例还提供了一种电子设备,包括:
[0021] 存储器,用于存储程序;
[0022] 处理器,耦合至所述存储器,用于执行所述程序,以用于:
[0023] 获取多个作为训练样本的训练软件代码;
[0024] 获取各个训练软件代码的多个维度的原始度量值作为各个训练样本的训练特征,以及获取各个训练软件代码对应的健康评价结果作为各个训练样本的结果标签;
[0025] 使用所述多个训练样本对原始的随机森林模型进行训练,生成训练后的随机森林模型;
[0026] 获取训练后的随机森林模型中,与各个训练特征对应的第二权重值作为在计算待评估软件代码的健康度的处理中,各个待评估软件代码的对应维度的第一权重值。
[0027] 本发明实施例提供一种代码健康度的检测方法、处理方法、装置及电子设备,采用了多个维度的数据全面、深入地评估软件代码健康度,如此使得软件代码健康度的检测过程更具综合性,并且通过机器学习的方法对多个维度的数据确定不同的权重值,该权重值的确定能够使最终结果更符合真实的代码质量,从而获得更为全面和准确的代码健康度检测结果。
[0028] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。附图说明
[0029] 图1为本发明实施例的软件代码健康度的检测的逻辑示意图;
[0030] 图2为本发明实施例一的软件代码健康度的检测方法的流程示意图;
[0031] 图3为本发明实施例二的随机森林模型训练方法的流程示意图;
[0032] 图4为本发明实施例三的软件代码健康度的检测装置的结构示意图一;
[0033] 图5为本发明实施例三的软件代码健康度的检测装置的结构示意图二;
[0034] 图6为本发明实施例提供的电子设备的结构示意图一;
[0035] 图7为本发明实施例的软件代码复杂度的检测的逻辑示意图;
[0036] 图8为本发明实施例五的软件代码复杂度的检测方法的流程示意图;
[0037] 图9为本发明实施例六的软件代码复杂度的检测方法的流程示意图;
[0038] 图10为本发明实施例的软件代码复杂度的检测装置的结构示意图;
[0039] 图11为本发明实施例提供的电子设备的结构示意图二。

具体实施方式

[0040] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0041] 为了便于说明本发明实施例的技术方案,在描述的过程中定义了如下的名称:
[0042] 代码的健康度,指综合评价软件代码项目健康性的指标。
[0043] 动态维度,指和软件代码动态运行时属性相关的质量评估特性。在动态维度中还可以包括多个子维度,例如代码测试bug率、代码线上故障率、代码运行时资源使用率。
[0044] 静态维度,指和软件代码的静态属性相关的质量评估特性。在静态维度中还可以包括多个子维度,例如代码与集团规约符合程度(规约符合度)、软件代码复杂度、代码面向对象性、代码重复率。
[0045] 第一权重值,指通过机器学习获得的权重值,对应软件代码中各个维度的原始度量值的权重。
[0046] 第二权重值,指通过训练随机森林模型获得的权重值,与随机森林模型训练中各个训练特征相对应。
[0047] 代码片段,指软件中包括了方法函数和\或数据结构类的代码集。
[0048] 第一聚合得分,指对待评估软件的代码片段的代码复杂度指标逐级纵向聚合后在最高层级的代码复杂度得分。例如,对待评估软件的代码片段在类层、模块层、文件层和项目层进行逐级纵向聚合,则在项目层的代码复杂度得分即为第一聚合得分。
[0049] 第二聚合得分,指对待评估软件的代码片段的代码复杂度指标横向聚合后的代码复杂度得分,也即待评估软件最终的软件代码复杂度检测结果。
[0050] 弱项集约式聚合函数,指能够在不改变值域的同时赋予较小值更大权重的聚合函数。
[0051] 本发明实施例的技术原理在于:通过采用多个维度的数据全面、深入地评估软件代码健康度,使得软件代码健康度的检测过程更具综合性,并且通过机器学习的方法对多个维度的数据确定不同的权重值,该权重值的确定能够使最终结果更符合真实的代码质量,从而获得更为全面和准确的代码健康度检测结果。
[0052] 如图1所示,其为本发明实施例的软件代码健康度的检测的逻辑示意图,如图所示,在本实施例中,软件代码健康度的检测主要包括两个方面:获取原始度量值和计算软件代码的健康度。以下将针对上述两个方面进行详细阐述。
[0053] 首先,为了检测软件代码的健康度,需要获取待评估软件代码的各个维度的原始度量值。在本实施例中,待评估软件代码的健康度主要从两个方面考虑,即动态维度和静态维度。此外,动态维度和静态维度中还包括了多个子维度。动态维度主要包括三个子维度,即代码线下测试bug率、代码线上运行故障率和代码运行时资源使用率。静态维度主要包括四个子维度,即代码与集团规约规则符合程度(规约符合度)、软件代码复杂度、代码面向对象性以及代码重复程度。
[0054] 在实际应用场景中,上述各个维度原始度量值的获取可根据其维度类型的不同而选择采用不同的方式。例如,上述静态维度中,各个子维度的原始度量值可来源于开源工具对待评估软件代码的静态测量值;上述动态维度中,各个子维度的原始度量值可来源于对待评估软件代码的测试和运行数据的监测,具体可以包括失败的测试用例、检测到的线上异常、实时的CPU和内存使用率。
[0055] 然后,通过上述原始度量值,并结合通过机器学习获得的各个维度的权重值,即第一权重值,对各个维度的原始度量值进行加权求和,即可获得最终软件代码的健康度。在实际应用过程中,第一权重值可以通过训练随机森林模型获得,该随机森林模型以训练软件代码作为训练样本,以训练软件代码的多个维度的原始度量值作为训练特征,以各个训练软件代码对应的健康评价结果作为各个训练样本的结果标签,该健康评价结果可表示为0或1,其中0可表征不健康,1可表征健康。使用多个训练样本经过多次训练后生成训练后的随机森林模型。在本实施例中,可获取随机森林模型中各个训练特征对应的权重值,即第二权重值,作为本实施例中的上述第一权重值,并用于对各个维度的原始度量值进行加权求和的计算中,获得待评估软件代码的健康度。
[0056] 需要说明的是,上述待评估软件代码的健康度检测结果对应整个软件代码项目,而非对应软件代码项目中模块、文件或类。
[0057] 此外,待评估软件代码的健康度检测结果为一个数值型的综合评分结果,该评分结果值越高,则代表该软件代码越健康,反之,该评分结果值越低,则代表该软件代码越不健康。
[0058] 下面通过多个实施例来进一步说明本申请的技术方案。
[0059] 实施例一
[0060] 基于上述软件代码健康度的检测的方案思想,如图2所示,为本发明实施例一的软件代码健康度的检测方法的流程示意图,该方法的执行主体为软件代码健康度的检测装置,该方法可以包括:
[0061] S210,获取待评估软件代码的多个维度的原始度量值。
[0062] S220,根据各个维度对应的第一权重值,对多个维度的原始度量值进行加权求和,获得待评估软件代码的健康度,其中,第一权重值为通过机器学习而获得的权重值。
[0063] 进一步地,上述多个维度的原始度量值,可以包括:
[0064] 动态维度和\或静态维度的原始度量值。具体地,动态维度和静态维度中还可包括多个子维度。如上述提及的,动态维度包括但不限于代码线下测试bug率、代码线上运行故障率和代码运行时资源使用率。静态维度包括但不限于代码与集团规约规则符合程度(规约符合度)、软件代码复杂度、代码面向对象性以及代码重复程度。
[0065] 在实际应用场景中,动态维度与静态维度的原始度量值的获取方法不尽相同。例如,在静态维度中,各个子维度的原始度量值可来源于开源工具对待评估软件代码的静态测量值;而在动态维度中,各个子维度的原始度量值可来源于对待评估软件代码的测试和运行数据的监测,具体可以包括失败的测试用例、检测到的线上异常、实时的CPU和内存使用率。
[0066] 进一步地,上述对多个维度的原始度量值进行加权求和,获得待评估软件代码的健康度,可以包括:
[0067] 根据如下公式计算健康度:
[0068]
[0069] 其中,y为上述健康度,wk为上述各个维度对应的第一权重值,fk为上述各个维度的原始度量值,l为上述维度的总数。
[0070] 具体地,通过对多个维度的原始度量值加权求和,获得软件代码的健康度y,该健康度y为一个数值型的综合评分结果,即待评估软件代码的健康度检测结果,此外,该检测结果对应整个软件代码项目,表示整个软件代码项目的整体健康性,而非对应软件代码项目中模块、文件或类。
[0071] 本发明实施例提供的代码健康度的检测方法,采用了多个维度的数据全面、深入地评估软件代码健康度,如此使得软件代码健康度的检测过程更具综合性,并且通过机器学习的方法对多个维度的数据确定不同的权重值,该权重值的确定能够使最终结果更符合真实的代码质量,从而获得更为全面和准确的代码健康度检测结果。
[0072] 实施例二
[0073] 基于实施例一所述的软件代码健康度的检测方法的整体思想,本实施例将对第一权重值的获取进行进一步细化。在上述实施例一所述的软件代码健康度的检测方法的基础上,还可以通过训练随机森林模型,获取各个维度对应的第一权重值。
[0074] 具体地,如上述提及的,第一权重值可以通过训练随机森林模型获得,该随机森林模型可以以训练软件代码作为训练样本,以训练软件代码的多个维度的原始度量值作为训练特征,以各个训练软件代码对应的健康评价结果作为各个训练样本的结果标签。使用多个训练样本经过多次训练后生成训练后的随机森林模型。
[0075] 进一步地,如图3所示,其为本发明实施例二的随机森林模型训练方法的流程示意图,上述训练随机森林模型,获取各个维度对应的第一权重值可以包括:
[0076] S310,获取多个作为训练样本的训练软件代码。具体地,该训练软件代码即为用于作为训练样本的软件代码集。
[0077] S320,获取各个训练软件代码的多个维度的原始度量值作为各个训练样本的训练特征,以及获取各个训练软件代码对应的健康评价结果作为各个训练样本的结果标签。
[0078] 具体地,上述各个训练软件代码的多个维度的原始度量值的获取方式与上述提及的待评估软件代码的多个维度的原始度量值的获取方式相同,即可获取训练软件代码的动态维度和\或静态维度的多个子维度的原始度量值。其中,静态维度中各个子维度的原始度量值可来源于开源工具对待评估软件代码的静态测量值,动态维度中的各个子维度的原始度量值可来源于对待评估软件代码的测试和运行数据的监测,具体可以包括失败的测试用例、检测到的线上异常、实时的CPU和内存使用率。
[0079] 此外,上述各个训练软件代码对应的健康评价结果可以人为标定,该人为标定结果可表示为0或1,其中0可表示不健康,1可表示健康。
[0080] S330,使用多个训练样本对原始的随机森林模型进行训练,生成训练后的随机森林模型。
[0081] 具体地,采用训练软件代码的多个维度的原始度量值和与各个软件代码对应的健康评价结果分别作为训练特征和结果标签,并且使用多个样本对随机森林模型进行多次训练。
[0082] S340,获取训练后的随机森林模型中,与各个训练特征对应的第二权重值作为第一权重值。即将各个训练特征对应的第二权重值作为在计算待评估软件代码的健康度的处理中,各个待评估软件代码的对应维度的第一权重值。
[0083] 在随机森林模型训练过程中,可以获得训练样本中各个维度的原始度量值对应的权重值,即第二权重值,该权重值可作为第一权重值用于待评估软件代码健康度的检测中。
[0084] 本发明实施例提供的代码健康度的检测方法,采用了多个维度的数据全面、深入地评估软件代码健康度,如此使得软件代码健康度的检测过程更具综合性,并且通过训练随机森林模型的方法对多个维度的数据确定不同的权重值,该权重值的确定能够使最终结果更符合真实的代码质量,从而获得更为全面和准确的代码健康度检测结果。
[0085] 实施例三
[0086] 图4为本发明实施例的软件代码健康度的检测装置的结构示意图一,该装置主要用于执行图2所示的方法步骤,如图4所示,该装置可以包括:
[0087] 原始度量值获取模块410,用于获取待评估软件代码的多个维度的原始度量值;
[0088] 代码健康度计算模块420,用于根据各个维度对应的第一权重值,对多个维度的原始度量值进行加权求和,获得待评估软件代码的健康度,其中,第一权重值为通过机器学习而获得的权重值。
[0089] 进一步地,上述多个维度的原始度量值,可以包括:
[0090] 动态维度和\或静态维度的原始度量值。
[0091] 进一步地,图5为本发明实施例的软件代码健康度的检测装置的结构示意图二,如图5所示,该装置还可以包括:
[0092] 第一权重值获取模块510,用于训练随机森林模型,获取各个维度对应的第一权重值。
[0093] 进一步地,训练随机森林模型,获取各个维度对应的第一权重值可以包括:
[0094] 获取多个作为训练样本的训练软件代码;
[0095] 获取各个训练软件代码的多个维度的原始度量值作为各个训练样本的训练特征,以及获取各个训练软件代码对应的健康评价结果作为各个训练样本的结果标签;
[0096] 使用多个训练样本对原始的随机森林模型进行训练,生成训练后的随机森林模型;
[0097] 获取训练后的随机森林模型中,与各个训练特征对应的第二权重值作为第一权重值。
[0098] 进一步地,对多个维度的原始度量值进行加权求和,获得待评估软件代码的健康度,可以包括:
[0099] 根据上述的式(1)计算健康度。
[0100] 本发明实施例提供的代码健康度的检测装置,采用了多个维度的数据全面、深入地评估软件代码健康度,如此使得软件代码健康度的检测过程更具综合性,并且通过机器学习的方法对多个维度的数据确定不同的权重值,该权重值的确定能够使最终结果更符合真实的代码质量,从而获得更为全面和准确的代码健康度检测结果。
[0101] 实施例四
[0102] 前面实施例三描述了软件代码健康度的检测装置的整体架构,该装置的功能可借助一种电子设备实现完成,如图6所示,其为本发明实施例的电子设备的结构示意图一,具体包括:存储器610和处理器620。
[0103] 存储器610,用于存储程序。
[0104] 除上述程序之外,存储器610还可被配置为存储其它各种数据以支持在电子设备上的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。
[0105] 存储器610可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
[0106] 处理器620,耦合至存储器610,用于执行存储器610中的程序,以用于:
[0107] 获取待评估软件代码的多个维度的原始度量值;
[0108] 根据各个维度对应的第一权重值,对多个维度的原始度量值进行加权求和,获得待评估软件代码的健康度,其中,第一权重值为通过机器学习而获得的权重值。
[0109] 作为另外一种实施方式,处理器620,耦合至存储器610,用于执行存储器610中的程序,以用于:
[0110] 获取多个作为训练样本的训练软件代码;
[0111] 获取各个训练软件代码的多个维度的原始度量值作为各个训练样本的训练特征,以及获取各个训练软件代码对应的健康评价结果作为各个训练样本的结果标签;
[0112] 使用所述多个训练样本对原始的随机森林模型进行训练,生成训练后的随机森林模型;
[0113] 获取训练后的随机森林模型中,与各个训练特征对应的第二权重值作为在计算待评估软件代码的健康度的处理中,各个待评估软件代码的对应维度的第一权重值。
[0114] 上述的具体处理操作已经在前面实施例中进行了详细说明,在此不再赘述。
[0115] 进一步,如图6所示,电子设备还可以包括:通信组件630、电源组件640、音频组件650、显示器660等其它组件。图6中仅示意性给出部分组件,并不意味着电子设备只包括图6所示组件。
[0116] 通信组件630被配置为便于电子设备和其他设备之间有线或无线方式的通信。电子设备可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件630经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,通信组件630还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
[0117] 电源组件640,为电子设备的各种组件提供电。电源组件640可以包括电源管理系统,一个或多个电源,及其他与为电子设备生成、管理和分配电力相关联的组件。
[0118] 音频组件650被配置为输出和/或输入音频信号。例如,音频组件650包括一个麦克风(MIC),当电子设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器610或经由通信组件630发送。在一些实施例中,音频组件650还包括一个扬声器,用于输出音频信号。
[0119] 显示器660包括屏幕,其屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与触摸或滑动操作相关的持续时间和压力。
[0120] 上述实施例中提及的软件代码复杂度可通过以下实施例提供的检测方法、装置及电子设备获得。其技术原理在于:通过采用逐级纵向聚合的方式来对待评估软件的软件代码复杂度进行检测评估,从最底层的多个代码片段的代码复杂度指标开始逐级向上聚合,能够充分采集各个维度以及各个层级的软件代码复杂度情况,从而形成全面深入的软件代码复杂度检测结果。另外,通过回溯逐级聚合的复杂度检测过程,还能够便于开发人员定位出在软件代码复杂度方面存在问题的代码片段。
[0121] 如图7所示,其为本发明实施例的软件代码复杂度的检测的逻辑示意图,如图所示,软件代码复杂度的检测主要包括获取代码复杂度指标、逐级分层纵向聚合以及横向聚合三个步骤,详述如下:
[0122] 首先,为检测软件代码复杂度,需获取待评估软件的代码片段的代码复杂度指标,为了达到全方位、多维度检测软件代码复杂度的目的,可采集多个维度的代码复杂度指标,主要可包括Method类型指标和Type类型指标。其中,Method类型指标包括但不限于待评估软件的代码片段的圈复杂度(CC)、方法的有效行数(LOCM)、方法的参数数量(NOP)以及方法的最大嵌套层数(MND);Type类型指标包括但不限于待评估软件的代码片段的成员方法数量(NOM)、成员变量数量(NOF)以及加权方法数量(WMC)。
[0123] 在实际应用场景中,代码复杂度指标可通过采集代码片段的原始度量数据,并依据预置阈值区间将原始度量数据通过映射获得。具体地,可以调用指标计算器采集多个维度的代码复杂度指标的原始度量数据,为不同类型的代码复杂度指标预置不同的阈值区间,根据原始度量数据所在阈值区间的不同,将原始度量数据映射为预置范围内的离散值,从而得到代码复杂度指标。
[0124] 需要说明的是,上述代码复杂度指标的值均为数值型数据。此外,基于领域内的知识经验,代码复杂度指标的原始度量数据常呈现长尾分布,为了减小因长尾分布效应所造成的代码复杂度指标的误差,从而使其更符合真实场景,可以为原始度量数据的阈值区间预置百分位数做出调整,例如对应于原始度量数据的某一个阈值区间的预置百分位数为90%,则取该阈值区间内某一点作为百分位点,使得该阈值区间内90%的原始度量数据均比该百分位点所对应的原始度量数据的值小,如此有助于减小软件代码复杂度的检测结果因长尾分布效应所带来的误差。
[0125] 然后,基于上述步骤所获取的代码复杂度指标,对每一类型代码复杂度指标的值,按照类层、文件层、模块层以及项目层中的任意多个层的层级顺序进行纵向聚合。如图1所示,针对获取的Method类型指标和Type类型指标,首先按照聚合函数对其在类层级进行聚合,从而得到文件层级的聚合得分;然后,按照聚合函数对文件层级的聚合得分在文件层级进行聚合,从而得到模块层级的聚合得分;最后,按照聚合函数对模块层级的聚合得分在模块层级进行聚合,从而得到项目层级的聚合得分,即第一聚合得分。
[0126] 需要说明的是,Method类型指标和Type类型指标为并列的两种类型指标,但是在原始度量数据的获取过程中,Type类型指标可能需要使用Method类型指标的原始度量数据或代码复杂度指标。例如,Type类型指标中加权方法数量(WMC)指标的计算方式为类中代码方法的圈复杂度(CC)之和,该圈复杂度(CC)即为Method类型指标之一。
[0127] 此外,上述聚合函数可采用弱项集约式聚合函数,例如聚合函数其中,f(x)为纵向聚合所针对的层级的整体的聚合得分,xi为纵向聚合所针对层级的各个被聚合单位的聚合得分或者代码复杂度指标。问题代码所对应的聚合得分往往较小,而弱项集约式函数能够在不改变值域的同时赋予较小值更大的权重,如此通过弱项集约式聚合函数,能够达到突出问题代码的目的。并且,当软件代码复杂度检测结果分值较低,还可以以项目层、模块层、文件层、类层的顺序从上至下逐层回溯,从而帮助开发人员定位出在软件代码复杂度方面存在问题的代码片段。
[0128] 需要说明的是,基于上述代码复杂度指标以及各层级聚合得分可能呈现长尾分布,为了减小软件代码复杂度检测结果的误差,从而使其更符合真实场景,可以对各层级对应的聚合得分进行调整,具体调整方法可采用上述根据基准数据确定百分位数的方法,此处不再赘述。
[0129] 最后,基于上述步骤获取的第一聚合得分,通过横向聚合,例如计算多个代码片段的第一聚合得分的平均值,即可获得第二聚合得分,也即待评估软件代码的代码片段的软件代码复杂度输出。
[0130] 需要说明的是,待评估软件的代码片段中代码越复杂,例如代码行数越多或者方法数量越多,则代码复杂度指标越高,同时第一聚合得分就越低,相应地,第二聚合得分也越低,即待评估软件的代码片段的软件代码复杂度输出值越低。如此可见,代码片段中的代码越复杂评分就越低,往往评分较低的代码片段中存在问题代码。
[0131] 实施例五
[0132] 基于上述软件代码复杂度的检测的方案思想,如图8所示,为本发明实施例五的软件代码复杂度的检测方法的流程示意图,该方法的执行主体为软件代码复杂度的检测装置,该方法包括:
[0133] S810,获取待评估软件代码的多个代码片段的代码复杂度指标。
[0134] 其中,如前面所说明的,代码复杂度指标可通过采集代码片段的原始度量数据,并依据预置阈值区间将原始度量数据通过映射获得。
[0135] 在实际应用场景中,可以通过调用指标计算器采集多个维度的代码复杂度指标的原始度量数据,并为不同类型的代码复杂度指标预置不同的阈值区间{t1,t2...tn},根据原始度量数据所在阈值区间{t1,t2...tn}的不同,将原始度量数据映射为0至n范围内的整数离散值,将经映射后的离散值作为代码复杂度指标。并且,原始度量数据较小的阈值区间映射为较大的代码复杂度指标。例如,当n的值取4时,原始度量数据所在阈值区间与经映射后的代码复杂度指标的对应关系是:(0,t1]区间的代码复杂度指标为4,(t1,t2]区间的代码复杂度指标为3,(t2,t3]区间的代码复杂度指标为2,(t3,t4]区间的代码复杂度指标为1,(t4,∞)区间的代码复杂度指标为0。上述代码复杂度指标的值均为数值型数据。
[0136] S820,对多个代码片段的代码复杂度指标进行逐级纵向聚合,得到第一聚合得分。
[0137] 具体地,可以按照多个代码片段的代码复杂度指标的多个层级,从下至上进行逐级纵向聚合,这里所述的从下至上是指从代码片段最底层逐级向其上一层聚合,如此不仅能够充分采集各个层级的软件代码复杂度情况,还可以当软件代码复杂度较高、多个代码片段中可能存在问题代码时,根据已经采集得到的软件代码复杂度检测输出结果,按照从上至下的顺序逐级回溯,从而定位到可能存在问题的代码片段。
[0138] S830,对第一聚合得分横向聚合,得到第二聚合得分,将第二聚合得分作为软件代码复杂度输出。
[0139] 进一步地,上述代码复杂度指标包括:多个维度的Method类型指标和/或多个维度的Type类型指标。其中,Method类型指标包括但不限于待评估软件的代码片段的圈复杂度(CC)、方法的有效行数(LOCM)、方法的参数数量(NOP)以及方法的最大嵌套层数(MND);Type类型指标包括但不限于待评估软件的代码片段的成员方法数量(NOM)、成员变量数量(NOF)以及加权方法数量(WMC)。通过综合衡量代码片段的多维度下的多个指标的数据,能够全面、深入、准确地检测软件代码复杂度。
[0140] 本发明实施例提供一种软件代码复杂度的检测方法,采用了逐级纵向聚合的方式来对待评估软件的软件代码复杂度进行检测评估,从最底层的多个代码片段的代码复杂度指标开始逐级向上聚合,能够充分采集各个层级的软件代码复杂度情况,从而形成全面深入的复杂度检测结果,另外,通过回溯逐级聚合的复杂度检测过程,还能够便于开发人员定位出在软件代码复杂度方面存在问题的代码片段。
[0141] 实施例六
[0142] 基于上一实施例中所述的软件代码复杂度的检测方法,本实施例将对该方法进行进一步细化。图9为本发明实施例六的软件代码复杂度的检测方法的流程示意图,如图9所示,该方法包括:
[0143] S910,获取待评估软件代码的多个代码片段的代码复杂度指标。该步骤S910的内容与上述步骤S810的内容相同。
[0144] S920,对多个代码片段的代码复杂度指标按照类层、文件层、模块层以及项目层中的任意多个层的层级顺序,进行纵向聚合,得到第一聚合得分。
[0145] 进一步地,上述对多个代码片段的代码复杂度指标进行逐级纵向聚合包括:使用弱项集约式聚合函数对多个代码片段的代码复杂度指标进行逐级纵向聚合。其中,上述弱项集约式聚合函数是能够在不改变值域的同时赋予较小值更大权重的聚合函数。
[0146] 进一步地,上述弱项集约式聚合函数可以为:
[0147]
[0148] 其中,f(x)为纵向聚合所针对的层级的整体的聚合得分,xi为纵向聚合所针对层级的各个被聚合单位的聚合得分或者代码复杂度指标。具体地,该被聚合单位是指在逐级纵向聚合过程中,当前纵向聚合所针对的层级的下一层级。例如,当f(x)为纵向聚合所针对的模块层级的整体的聚合得分时,xi则可取值为纵向聚合所针对的各个文件层级的聚合得分。
[0149] 在实际应用场景中,如上述提及的,通过指标计算器可获取多个维度的Method类型和Type类型指标的原始度量数据,并且该原始度量数据可通过映射获得代码复杂度指标。为了便于待评估软件中多个代码片段各层级的定位和索引,该代码复杂度指标的数据集合可表示为data={p1,p2...pi,m1,m2...mj},其中,pi为待评估软件的代码片段的方法、类或文件的位置信息,该位置信息包括但不限于项目名、模块名、文件名、类名和\或方法名。mj为待评估软件的代码片段的方法、类或文件的代码复杂度指标。上述逐级纵向聚合可具体包括如下步骤:
[0150] 步骤一,以位置信息pi中包含的项目名、模块名、文件名、类名等位置信息为索引,找到同一索引下Method类型指标和Type类型指标对应的代码复杂度指标,并将该两个维度下的多个代码复杂度指标按照上述弱项集约式聚合函数纵向聚合,从而得到类层级的聚合得分;
[0151] 步骤二,以项目名、模块名、文件名等位置信息为索引,找到同一索引下类层级的不同指标对应的代码复杂度指标,并对多个类的同一指标类型的代码复杂度指标按照上述弱项集约式聚合函数纵向聚合,从而得到文件层级的聚合得分;
[0152] 步骤三,以项目名、模块名等位置信息为索引,找到同一索引下文件层级的不同指标对应的代码复杂度指标,并对多个文件的同一指标类型的代码复杂度指标按照上述弱项集约式聚合函数纵向聚合,从而得到模块层级的聚合得分;
[0153] 步骤四,以项目名等位置信息为索引,找到同一索引下模块层级的不同指标对应的代码复杂度指标,并对多个模块的同一指标类型的代码复杂度指标按照上述弱项集约式聚合函数纵向聚合,从而得到项目层级的聚合得分,即第一聚合得分。
[0154] 进一步地,在上述逐级纵向聚合的过程中,可对各层级对应的聚合得分进行调整,以对抗长尾分布效应。
[0155] 具体地,如上述提及的,基于本领域内的知识经验,代码复杂度指标的原始度量数据常呈现长尾分布,为了减小因长尾分布效应所造成的代码复杂度指标的误差,从而使其更符合真实场景,可以为原始度量数据和\或各层级对应的聚合得分预置百分位数做出调整。例如,对应于类层级的聚合得分的所有可能取值设为0、1、2、3、4,则基于本领域内的知识经验,可预置各区间[0,1)、[1,2)、[2,3)和[3,4]相对应的百分位数为95%、99%、99.5%和99.9%。以区间[0,1)对应百分位数95%为例,取该阈值区间内某一点作为百分位点,使得该阈值区间内95%的聚合得分均比该百分位点所对应的聚合得分的值小,如此有助于减小软件代码复杂度的检测结果因长尾分布效应所带来的误差。
[0156] S930,对第一聚合得分横向聚合,得到第二聚合得分,将第二聚合得分作为软件代码复杂度输出。该步骤S930的内容与上述步骤S830的内容相同。
[0157] 进一步地,上述对第二聚合得分横向聚合,得到第二聚合得分,包括:计算第一聚合得分的平均值,得到第二聚合得分。
[0158] 具体地,通过计算多个代码片段的第一聚合得分的平均值,则可以得到综合多个代码片段的多个维度的代码复杂度指标的软件代码复杂度检测结果,即第二聚合得分。
[0159] 本发明实施例提供一种软件代码复杂度的检测方法,采用了逐级纵向聚合的方式来对待评估软件的软件代码复杂度进行检测评估,从最底层的多个代码片段的代码复杂度指标开始逐级向上聚合,能够充分采集各个层级的软件代码复杂度情况,从而形成全面深入的软件代码复杂度检测结果,另外,通过回溯逐级聚合的软件代码复杂度检测过程,还能够便于开发人员定位出在软件代码复杂度方面存在问题的代码片段。
[0160] 实施例七
[0161] 图10为本发明实施例的软件代码复杂度的检测装置的结构示意图,该装置主要用于执行图8所示的方法步骤,如图10所示,该装置包括:
[0162] 代码复杂度指标获取模块101,用于获取待评估软件代码的多个代码片段的代码复杂度指标;
[0163] 纵向聚合模块102,用于对多个代码片段的代码复杂度指标进行逐级纵向聚合,得到第一聚合得分;
[0164] 横向聚合模块103,用于对第一聚合得分横向聚合,得到第二聚合得分,将第二聚合得分作为软件代码复杂度输出。
[0165] 进一步地,上述代码复杂度指标包括:
[0166] 多个维度的method类型指标和/或多个维度的type类型指标。
[0167] 进一步地,上述逐级纵向聚合包括:
[0168] 按照类层、文件层、模块层以及项目层中的任意多个层的层级顺序,进行纵向聚合,得到第一聚合得分。
[0169] 进一步地,上述对多个代码片段的代码复杂度指标进行逐级纵向聚合包括:
[0170] 使用弱项集约式聚合函数对多个代码片段的代码复杂度指标进行逐级纵向聚合。
[0171] 进一步地,上述弱项集约式聚合函数为:
[0172]
[0173] 其中,f(x)为纵向聚合所针对的层级的整体的聚合得分,xi为纵向聚合所针对层级的各个被聚合单位的聚合得分或者代码复杂度指标。
[0174] 进一步地,上述对第二聚合得分横向聚合,得到第二聚合得分,包括:
[0175] 计算第一聚合得分的平均值,得到第二聚合得分。
[0176] 进一步地,在上述逐级纵向聚合的过程中,对各层级对应的聚合得分进行调整,以对抗长尾分布效应。
[0177] 本发明实施例提供一种软件代码复杂度的检测装置,采用了逐级纵向聚合的方式来对待评估软件的软件代码复杂度进行检测评估,从最底层的多个代码片段的代码复杂度指标开始逐级向上聚合,能够充分采集各个层级的软件代码复杂度情况,从而形成全面深入的复杂度检测结果,另外,通过回溯逐级聚合的复杂度检测过程,还能够便于开发人员定位出在软件代码复杂度方面存在问题的代码片段。
[0178] 实施例八
[0179] 前面实施例七描述了软件代码复杂度的检测装置的整体架构,该装置的功能可借助一种电子设备实现完成,如图11所示,其为本发明实施例的电子设备的结构示意图二,具体包括:存储器111和处理器112。
[0180] 存储器111,用于存储程序。
[0181] 除上述程序之外,存储器111还可被配置为存储其它各种数据以支持在电子设备上的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。
[0182] 存储器111可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
[0183] 处理器112,耦合至存储器111,用于执行存储器111中的程序,以用于:
[0184] 获取待评估软件代码的多个代码片段的代码复杂度指标;
[0185] 对多个代码片段的代码复杂度指标进行逐级纵向聚合,得到第一聚合得分;
[0186] 对第一聚合得分横向聚合,得到第二聚合得分,将第二聚合得分作为软件代码复杂度输出。
[0187] 上述的具体处理操作已经在前面实施例中进行了详细说明,在此不再赘述。
[0188] 进一步,如图11所示,电子设备还可以包括:通信组件113、电源组件114、音频组件115、显示器116等其它组件。图11中仅示意性给出部分组件,并不意味着电子设备只包括图
11所示组件。
[0189] 通信组件113被配置为便于电子设备和其他设备之间有线或无线方式的通信。电子设备可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件113经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,通信组件113还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
[0190] 电源组件114,为电子设备的各种组件提供电力。电源组件114可以包括电源管理系统,一个或多个电源,及其他与为电子设备生成、管理和分配电力相关联的组件。
[0191] 音频组件115被配置为输出和/或输入音频信号。例如,音频组件115包括一个麦克风(MIC),当电子设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器111或经由通信组件113发送。在一些实施例中,音频组件115还包括一个扬声器,用于输出音频信号。
[0192] 显示器116包括屏幕,其屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与触摸或滑动操作相关的持续时间和压力。
[0193] 本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0194] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈