数据评测方法、相关设备、存储介质及程序产品与流程
未命名
09-23
阅读:82
评论:0
1.本技术涉及计算机技术领域,尤其涉及一种数据评测方法、相关设备、存储介质及程序产品。
背景技术:
2.随着互联网技术的蓬勃发展,形形色色的互联网产品(如:应用程序)出现在人们日常生活的方方面面。优质的应用程序进入互联网市场后能够为相应的程序开发商带来可观的收益。因此,为了确保发布的应用程序具备较高的质量,程序开发商通常会在应用程序发布之前对该应用程序的各个业务功能进行评测,以基于评测结果对目标业务功能进行优化处理,从而尽可能地提升应用程序的使用价值。
3.在对业务功能进行评测时,通常会对实现该业务功能的代码数据进行评测,以基于代码数据的评测结果得到业务功能的风险评测结果,风险评测结果可以用于反映该业务功能是否需要被优化。当前的数据评测方法在对代码数据进行评测时,通常因为代码分析不够全面而导致评测结果无法准确地反映出各个风险影响因素,从而出现了评测结果的整体准确度不够理想的问题。因此,如何对代码数据进行全面的分析以确定出准确的评测结果成了当下的研究热点
技术实现要素:
4.本技术实施例提供了一种数据评测方法、相关设备、存储介质及程序产品,可提升对代码数据进行评测时得到的评测结果的准确度。
5.一方面,本技术实施例提供了一种数据评测方法,包括:
6.获取用于实现目标业务功能的代码数据及所述代码数据中各代码函数的结构复杂度;其中,结构复杂度用于指示相应代码函数在运行过程中发生异常的概率;
7.运行所述代码数据,并获取所述各代码函数在运行过程中产生的调用信息和代码覆盖率;其中,所述调用信息用于反映相应代码函数对于实现所述目标业务功能的重要程度或者相应代码函数是否被调用,所述代码覆盖率用于指示相应代码函数中无需被优化处理的代码量;
8.根据所述代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率,确定所述目标代码函数的优化等级,所述优化等级用于指示所述目标代码函数存在优化需求的需求程度;
9.生成所述代码数据的评测结果,所述评测结果包括所述目标代码函数的优化等级,所述评测结果用于指示优化设备基于所述优化等级对相应目标代码函数进行优化处理。
10.再一方面,本技术实施例提供了一种数据评测装置,包括:
11.获取单元,用于获取用于实现目标业务功能的代码数据及所述代码数据中各代码函数的结构复杂度;其中,结构复杂度用于指示相应代码函数在运行过程中发生异常的概
率;
12.运行单元,用于运行所述代码数据,并获取所述各代码函数在运行过程中产生的调用信息和代码覆盖率;其中,所述调用信息用于反映相应代码函数对于实现所述目标业务功能的重要程度或者相应代码函数是否被调用,所述代码覆盖率用于指示相应代码函数中无需被优化处理的代码量;
13.确定单元,用于根据所述代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率,确定所述目标代码函数的优化等级,所述优化等级用于指示所述目标代码函数存在优化需求的需求程度;
14.生成单元,用于生成所述代码数据的评测结果,所述评测结果包括所述目标代码函数的优化等级,所述评测结果用于指示优化设备基于所述优化等级对相应目标代码函数进行优化处理。
15.再一方面,本技术实施例还提供了一种计算机设备,包括:
16.处理器,所述处理器用于实现一条或多条计算机程序;
17.计算机存储介质,所述计算机存储介质存储有一条或多条计算机程序,所述一条或多条计算机程序适于由所述处理器加载并执行如第一方面所述的数据评测方法。
18.再一方面,本技术实施例还提供了一种计算机存储介质,所述计算机存储介质存储有一条或多条计算机程序,所述一条或多条计算机程序适于由所述处理器加载并执行如第一方面所述的数据评测方法。
19.再一方面,本技术实施例提供了一种计算机产品,所述计算机产品包括计算机程序,所述计算机程序适于由处理器加载并执行如第一方面所述的数据评测方法。
20.在本技术实施例中,计算机设备在对代码数据进行数据测试时,可以获取代码数据中各代码函数的结构复杂度,其用于表示该代码函数因为自身结构原因而造成运行错误的概率,是一种函数静态特征。此外,计算机设备还运行了代码数据,并在代码数据的运行过程中获取了代码函数的函数动态特征,如:调用信息以及代码覆盖率;调用信息可以表示代码函数对于实现目标业务功能的重要程度,而代码覆盖率则可以表示该代码函数中无需优化的代码量,在一定程度上可以反映代码函数的质量。计算机设备基于获取到的静态特征和动态特征综合进行分析,可以较为准确地确定出相应代码函数的优化等级,进而使得计算机设备生成的评测结果(包括代码函数的优化等级)具有更高的准确性。
附图说明
21.为了更清楚地说明本技术实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
22.图1是本技术实施例提供的一种数据评测系统的结构示意图;
23.图2是本技术实施例提供的一种数据评测方法的流程示意图;
24.图3a是本技术实施例提供的一种代码函数之间调用关系的展示结果的示意图;
25.图3b是本技术实施例提供的又一种代码函数之间调用关系的展示结果的示意图;
26.图3c是本技术实施例提供的一种静态调用关系图的示意图;
27.图3d是本技术实施例提供的一种动态调用关系图的示意图;
network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器等。可以理解的是,本技术实施例中对执行数据评测方法时采用的计算机设备不作具体限制,具体应用时可以根据应用场景对上述提及的相关设备进行灵活组合及运用。
39.基于上述描述,以下结合采用计算机设备对用于实现目标业务功能的代码数据进行数据评测的场景,来对本技术实施例提供的数据评测方法的大致原理进行阐述,以使得相关人员可以更清楚地了解本技术实施例的相关实现方式。在本技术实施例中,用于实现目标业务功能的代码数据中可以存在一个或多个代码函数。代码函数可以理解为:用于实现目标业务功能的某一子功能的一段代码,这段代码可以包括一个或多个代码语句。也就是说,本技术实施例中的目标业务功能可以由一个或多个子功能组成,而用于实现一个子功能的代码可以组成一个代码函数,从而使得用于实现目标业务功能的代码数据中可以存在一个或多个代码函数。举例来说,目标业务功能可以是音频展示功能,在此情况下,目标业务功能的子功能可以是:音频切换功能、暂停展示功能以及音频选择功能等。此外,还可以理解的是,本技术实施例中,代码数据中的代码函数之间可以互相调用。具体来说,一个代码函数可以调用一个或多个其他的代码函数,也可以调用自身这个代码函数;如:代码函数a可以调用代码函数b,代码函数a也可以调用代码函数a自己。
40.基于上述关于代码数据及代码函数的描述,本技术实施例中数据评测方法的大致原理如下:计算机设备先获取用于实现目标业务功能的代码数据,然后,计算机设备可以对代码数据中的代码函数进行分析,以确定出代码函数的结构复杂度,以及代码函数在代码数据运行过程中所产生的调用信息和代码覆盖率。其中,结构复杂度可以用于指示代码函数在运行过程中发生异常的概率;调用信息可以用于反映代码函数对于实现目标业务功能的重要程度,或者调用信息可以用于指示代码函数是否被调用;代码覆盖率可以用于指示代码函数中无需被优化处理的代码量。因此,计算机设备可以基于获取到的结构复杂度、调用信息以及代码覆盖率,来确定代码函数存在优化需求的需求程度(或称:代码函数被优化的必要性)。需求程度越大,则说明该代码函数越需要被进行优化处理。在本技术实施例中,代码函数存在优化需求的需求程度可以用优化等级来表示。那么,也就是说,计算机设备可以基于获取到的结构复杂度、调用信息以及代码覆盖率,确定相应代码函数的优化等级,在此情况下,计算机设备在生成代码数据的评测结果时,可以生成包括有代码函数的优化等级的评测结果。
41.基于上述关于方法原理的描述中不难看出,由于评测结果包括了代码函数的优化等级,而优化等级是计算机设备结合相关代码函数的结构复杂度、调用信息以及代码覆盖率这多个衡量方面综合确定出来的,因此,不难理解,本技术实施例的评测结果的准确度具有较高的可靠性。此外,还可以理解,在计算机设备确定出代码数据的评测结果之后,可以采用优化设备基于评测结果对代码数据进行优化处理,具体来说,优化设备可以基于代码函数的优化等级对相应的代码函数进行优化处理,如优先处理优化等级高的代码函数(即:被优化的必要性高的代码函数)。不难理解,对优化等级越高的代码函数进行优化处理,则可以为代码数据的质量提升带来的提升效果越明显。因此,基于本技术实施例的评测结果对代码数据进行优化,在一定程度上可以使得代码数据在较短时间内得到较大提升,也就可以使得代码数据的整体优化效率得到提升。
42.在实际应用中,本技术实施例提供的数据评测方法还可以应用于如图1所示的数
据评测系统中,由数据评测系统中的各设备协同执行。如图1所示,数据评测系统可以包括优化设备101以及评测设备102。其中,优化设备101可以用于获取目标业务功能的代码数据,并将获取到的代码数据发送至评测设备102,使得评测设备102可以对代码数据进行评测,得到评测结果。进一步地,当评测设备得到评测结果之后,可以将评测结果反馈至优化设备101,以使得优化设备101可以基于评测结果对代码数据进行优化处理。可以理解的是,在此种实现方式下,由于数据评测方法中的数据评测过程主要由评测设备102来完成,对代码数据的优化过程主要由优化设备101来完成,因此,采用此种方式可以使得数据评测的各个重要过程在都被分配到较多的计算资源的同时,不影响其他过程的处理效果,也就实现了设备之间的分工合作,可以提升整个数据评测过程的速率。需要说明的是,此处提及的优化设备101和评测设备102,都可以是上述提及的计算机设备中的任意一种或任意多种的组合。
43.基于上述关于数据评测方法的原理的描述,本技术实施例提供了如图2所示的数据评测方法。以下上述提及的计算机设备执行图2所示的数据评测方法为例进行说明。如图2所示,该数据评测方法可以包括步骤s201-s204:
44.s201,获取用于实现目标业务功能的代码数据及代码数据中各代码函数的结构复杂度。
45.在本技术实施例中,目标业务功能可以为任意程序产品(如:应用程序)中的功能,也可以为硬件设备中的功能,为了便于说明,以下均以目标业务功能为应用程序中的功能为例进行说明。在实际应用中,一个目标业务功能可以由多个业务子功能组成,各个业务子功能之间可以存在关联关系,也可以互相独立。可以理解,在实际的应用程序开发过程中,通常需要通过编写代码语句来实现目标业务功能,那么,在本技术实施例中,这些用于实现目标业务功能的代码语句的合集就可以看作是用于实现目标业务功能的代码数据。其中,代码数据通常包括一个或多个代码函数,一个代码函数可以用于实现目标业务功能的一个业务子功能。那么,业务子功能之间若存在关联关系,则说明对应的代码函数之间存在引用关系(或称:调用关系)。在一种实现方式中,代码函数之间的调用关系在一定程度上可以用于反映相应代码函数的结构复杂度,如:代码函数(假设为代码函数a)调用的代码函数的数量越多,则代码函数a的结构复杂度可能就会越高,本技术实施例对此不作详述。
46.在本技术实施例中,代码函数的结构复杂度可以用于指示该代码函数在运行过程中发生异常的概率。通常来说,结构复杂度越高的代码函数,其发生异常的概率越高。示例性地,本技术实施例中的结构复杂度可以用圈复杂度表示。所谓的圈复杂度指的是:一种代码复杂度的衡量标准,可以用来衡量一个代码函数的复杂程度。那么,可以理解,代码函数的圈复杂度大可以说明代码函数的复杂程度较高,难于测试和维护,因此该代码函数的质量可能低下。其中,代码函数的圈复杂度在数量上表现为代码函数中线性无关的路径条数,或称:在对代码函数进行测试时,为合理地预防代码异常所需测试的最少路径条数。举例来说,假设对于用于实现音频暂停的代码函数中存在一条判断语句,且当函数参数满足判断条件时该代码函数执行操作a,当函数参数不满足判断条件时该代码函数执行操作b;那么,在此情况下,代码函数中线性无关的路径条数为2,因此,该代码函数的圈复杂度可以为2。
47.s202,运行代码数据,并获取各代码函数在运行过程中产生的调用信息和代码覆盖率。
48.在本技术实施例中,计算机设备运行代码数据可以理解为在计算机设备中执行目标业务功能。代码覆盖率可以指:在代码数据运行过程中,被运行的代码语句占全部代码语句的比例。那么,代码函数的代码覆盖率可以指:该代码函数的所有代码语句中,被运行的代码语句在所有代码语句中所占的比例。在无特殊说明的情况下,以下提及的代码覆盖率都是指的代码函数的代码覆盖率。在此情况下,不难理解,代码覆盖率可以用于指示代码函数中无需被优化处理的代码量,代码量可以理解为代码的行数,或者代码行数所占总代码行数的比值。在本技术实施例中,未被调用的代码函数的代码覆盖率为0。当代码覆盖率为0时,计算机设备可以认为该代码函数中的所有代码数据都值得被优化。那么,不难看出,在实际应用中,计算机设备可以基于代码函数的代码覆盖率来间接度量业务子功能的质量。示例性地,计算机设备确定出的代码函数a的代码覆盖率越高,计算机设备判定出的代码函数a所实现的业务子功能的质量就可以越高,进而计算机设备确定出的该代码函数需要被优化的必要性就可以更低。
49.其中,关于代码函数,基于前述关于本技术实施例的数据评测方法的原理的相关描述可知,本技术实施例中的代码函数是指一段可以直接被引用的程序(或代码),并且具体来说,代码函数可以被其他代码函数引用,也可以被自身引用。其中,代码函数a引用代码函数b,也可以理解为代码函数a调用代码函数b。因此不难理解,代码数据的各个代码函数之间可以存在调用关系,各个代码函数也可以存在调用信息。具体地,调用信息可以是在代码数据的运行过程中获取的,代码函数的调用信息可以用于反映该代码函数是否被调用,或者用于反映该代码函数对于实现目标业务功能的重要程度。
50.其中,当调用信息用于反映代码函数是否被调用时,调用信息可以包括但不限于以下任一种:已调用状态、未调用状态。其中,代码函数为已调用状态,则说明该代码函数在代码数据的运行过程中被调用过,也就是说,该代码函数所实现的业务子功能在计算机设备执行目标业务功能的过程中被执行过;那么,对应地,代码函数为未调用状态,则说明代码函数在代码函数的运行过程中未被调用过,也就是说,该代码函数所实现的业务子功能在计算机设备执行目标业务功能的过程中从未被执行过。以下结合具体示例进行说明:假设目标业务功能为音频展示功能,音频展示功能包括音频暂停展示子功能,那么,若在计算机设备执行音频展示功能的过程中,音频a被暂停展示过,则说明音频暂停展示子功能被执行过,也就说明用于实现该音频暂停展示子功能的代码函数被调用过,因此,该代码函数的调用信息为已调用状态。同理,可以理解代码函数的未调用状态,本技术实施例对此不作详述。
51.当调用信息用于反映代码函数对于实现目标业务的重要程度时,示例性地,调用信息可以包括但不限于以下任意一种或多种:调用次数、调用出度、调用入度以及调用时长等。以下主要对本技术实施例中的调用次数、调用出度以及调用入度的定义进行详细说明。
52.(1)调用次数。调用次数指的是:在代码数据的运行过程中代码函数被调用的次数。也可以理解为:在代码数据的运行过程中,该代码函数所实现的业务子功能被调用的次数。举例来说,假设代码数据用于实现音频展示功能,音频展示功能包括音频暂停展示子功能和音频切换子功能,且音频暂停展示子功能由代码函数a实现,音频切换子功能由代码函数b实现。那么,可以理解,计算机设备运行该代码数据,其本质上就是在计算机设备上执行音频展示业务功能。在此情况下,在计算机设备执行音频展示功能的过程中,若音频a被暂
停展示了两次,将音频a切换为音频b一次,则可以认为代码函数a的调用次数为2,代码函数b的调用次数为1。
53.(2)调用出度。调用出度指的是代码数据中可以被某一代码函数调用的代码函数的数量。例如:代码函数a的调用出度为2,则表示在代码数据中存在2个代码函数可以被代码函数a调用。
54.(3)调用入度。调用入度指的是代码数据中可以调用某一代码函数的代码函数的数量。例如:代码函数a的调用入度为3,则表示在代码数据中存在3个代码函数可以调用代码函数a。
55.可以理解,基于代码函数的调用出度和调用入度,可以确定出与该代码函数存在静态调用关系的代码函数的数量,那么,反过来也就可以理解,计算机设备可以通过获取代码函数之间的静态调用关系来确定代码函数的调用出度和调用入度。其中,静态调用关系指的是代码数据中建立了的调用关系,与在代码数据运行过程中是否被调用无关,也就是说,只要代码数据中建立了两个代码函数之间的调用关系,就认为这两个代码函数之间存在静态调用关系。如:对于代码数据中的代码函数a,若代码函数a中存在一条用于实现调用代码函数b的代码语句,则认为代码函数a和代码函数b之间存在静态调用关系。在实际应用中,计算机设备还可以获取代码函数之间的动态调用关系,动态调用关系指的是在代码数据的运行过程中被使用过的静态调用关系,也就是说,只有在运行过程中发生了调用行为的两个代码函数之间才会存在动态调用关系。举例来说,在代码数据中,代码函数a与代码函数b存在静态调用关系,且在代码数据的运行过程中,代码函数a调用了代码函数b,则代码函数a和代码函数b之间还存在动态调用关系;若在代码数据的运行过程中,代码函数a未调用代码函数b,则代码函数a和代码函数b之间存在静态调用关系但不存在动态调用关系。
56.在本技术实施例的实际应用过程中,计算机设备可以通过在运行代码数据的过程中对代码数据进行分析(称为:动态分析),以获取各个代码函数的调用信息(如:调用出度、调用入度以及调用次数等)以及获取各个代码函数之间的调用关系(包括静态调用关系和动态调用关系中的一种或两种)。具体地,计算机设备对代码数据进行动态分析的方式可以是:计算机设备在代码数据中进行插桩,然后计算机设备在运行代码数据,在此情况下,计算机设备可以在代码数据的运行过程中通过插桩代码获取各代码函数的调用信息和各代码函数之间的调用关系,如:计算机设备可以使用hook函数(即:钩子函数)获取代码函数的调用次数和动态调用关系。当然,计算机设备也可以在未运行代码数据时对代码数据进行分析(称为:静态分析),以获取各个代码函数的调用信息(如:调用出度、调用入度以及调用次数等)以及获取各个代码函数之间的调用关系(包括静态调用关系)。具体地,计算机设备可以采用与代码数据所用代码语言匹配的代码语言分析工具对该代码数据进行分析和推导,从而得到该代码数据中各个代码函数之间的静态调用关系。
57.示例性地,采用c语言(一种编程语言)编写的代码数据,计算机设备可以采用cflow工具执行cflow-t-m xxx》xx命令对该代码数据进行代码解析,cflow工具可以在解析得到各代码函数之间的调用关系之后,基于解析到的调用关系生成如图3a所示的用ascii码表示的调用关系链;进一步地,计算机设备可以在此基础上采用tree2dotx工具以及graphviz工具生成如图3b所示的用调用关系图表示的调用关系链。在图3b中,一个图节点即可以表示为一个代码函数,若代码函数之间存在有向连线,则表示相应两个代码函数之
间存在调用关系。其中,计算机设备在生成各代码函数之间的调用关系图时,可以分别基于获取到的静态调用关系和动态调用关系,生成静态调用关系图和动态调用关系图。不难理解,静态调用关系图中的图节点数量可以高于动态调用关系图中图节点的数量,但任何调用关系图中的图节点数量均小于代码数据中代码函数的数量。示例性地,计算机设备基于代码数据生成的静态调用关系图可以如图3c所示,生成的动态调用关系图可以如图3d所示。可见,静态调用关系图中存在的代码函数不一定在动态调用关系图中也存在。那么,在一个实施例中,计算机设备可以基于静态调用关系图和动态调用关系图生成动静态调用关系对比结果图,示例性地,基于图3c的静态调用关系图和图3d的动态调用关系图生成的动静态调用关系对比结果图可以如图3e所示。可见,计算机设备在生成动静态调用关系对比结果图时,可以将未被调用的函数进行突出显示(如图3e中的代码函数f),以使得计算机设备在将动静态调用关系对比结果图添加到代码数据的评测结果中后可以使得相关人员能够更直观地查看代码函数之间的调用关系以及调用状态,从而提升后续基于评测结果对代码数据进行优化处理的速率。示例性地,突出显示可以包括但不限于以下任意一种或多种:放大显示、缩小显示以及高亮显示等。
58.s203,根据代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率,确定目标代码函数的优化等级。
59.其中,目标代码函数可以是代码数据包括的所有代码函数中任意一个或多个。在实际应用场景中,计算机设备可以根据目标业务功能中需要评测的业务子功能来确定目标代码函数,也可以根据其他方式确定目标代码函数,本技术实施例对此不作限制。那么,可以理解,在本技术实施例中,计算机设备在对代码数据进行评测的过程中,可以确定目标代码函数的优化等级,目标代码函数的优化等级可以用于指示目标代码函数存在优化需求的需求程度,也可以理解为用于指示目标代码函数被执行优化处理的必要性。示例性地,一个优化等级可以对应质量分值的一个或多个取值区间(本技术实施例以一个取值区间为例)。那么,也就是说,当代码函数的优化等级为某一等级时,该代码函数的质量分值可以是位于该优化等级所对应的质量分值的取值区间内的任一取值。反过来也可以理解,若代码函数的质量分值为某一分值,则计算机设备可以根据该质量分值所对应的优化等级来确定该代码函数的优化等级。
60.基于上述描述,可以理解,在本技术实施例中,计算机设备在确定目标代码函数的优化等级时,可以是计算机设备通过目标代码函数的结构复杂度、调用信息和代码覆盖率,确定出代码函数的质量分值后再进行确定的,也可以是计算机设备直接通过目标代码函数的结构复杂度、调用信息和代码覆盖率确定的。需要说明的是,相关的实施方式将在后续图4相关的实施例中进行详细说明,本技术实施例在此不做详述。
61.s204,生成代码数据的评测结果,评测结果包括目标代码函数的优化等级。
62.在具体实施例中,当计算机设备确定出目标代码函数的优化等级之后,计算机设备可以生成代码数据的评测结果。其中,评测结果可以包括目标代码函数的优化等级,以使得优化设备可以基于评测结果中的优化等级对相应目标代码函数进行优化处理,从而实现对代码数据的优化处理以及对目标业务功能的优化处理。当然,还可以理解的是,评测结果还可以包括除目标代码函数的优化等级之外的其他评测数据,其他评测数据包括但不限于以下任意一种或多种:目标代码函数的调用信息、目标代码函数的代码覆盖率、目标代码函
数的质量评分,以及代码数据中各代码函数之间的静态调用关系、动态调用关系等。
63.其中,计算机设备在确定出每个代码函数的优化等级之后,计算机设备可以按照优化等级由高到低的顺序对相应的代码函数的评测数据进行排序,也就使得评测结果中各个代码函数的评测数据是具有排列顺序的,更加便于相关人员进行代码数据的优化处理。可以理解,由于优化等级可以是基于质量分值确定的,那么,也就是说,在一种可行的实现方式中,质量分值就可以用于表示优化等级,因此,计算机设备在对代码函数的评测数据进行排序时,可以直接基于质量分值进行排序。此外,还需要说明的是,上述提及的优化设备可以就是执行数据评测的计算机设备,也可以是不同于执行数据评测的计算机设备的其他设备,本技术实施例对此不作限制。
64.在本技术实施例中,计算机设备在对代码数据进行数据测试时,可以获取代码数据中各代码函数的结构复杂度,其用于表示该代码函数因为自身结构原因而造成运行错误的概率,是一种函数静态特征。此外,计算机设备还运行了代码数据,并在代码数据的运行过程中获取了代码函数的函数动态特征,如:调用信息以及代码覆盖率;调用信息可以表示代码函数对于实现目标业务功能的重要程度,而代码覆盖率则可以表示该代码函数中无需优化的代码量,在一定程度上可以反映代码函数的质量。计算机设备基于获取到的静态特征和动态特征综合进行分析,可以较为准确地确定出相应代码函数的优化等级,进而使得计算机设备生成的评测结果(包括代码函数的优化等级)具有更高的准确性。
65.请参见图4,图4是本技术实施例基于上述图2描述的数据评测方法提出的又一种数据评测方法。那么,该数据评测方法也可以由上述提及的计算机设备执行。如图4所示,该数据评测方法可以包括步骤s401-s406:
66.s401,获取用于实现目标业务功能的代码数据及代码数据中各代码函数的结构复杂度。
67.s402,运行代码数据,并获取各代码函数在运行过程中产生的调用信息和代码覆盖率,该调用信息用于反映相应代码函数对于实现所述目标业务功能的重要程度。
68.在一个实施例中,步骤s401至步骤s402的具体实现方式可以参见上述关于步骤s201-s202的相关实施例,本技术实施例在此不再赘述。
69.s403,对代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率进行加权运算,得到风险评测结果。
70.在具体实施例中,风险评测结果可以用于指示目标代码函数对实现目标业务功能所造成的负面影响的大小,或者理解为:目标代码函数使得目标业务功能在实现过程中出现异常的概率。那么,示例性地,风险评测结果可以包括一个风险系数值,该风险系数值可以是计算机设备对目标代码函数的结构复杂度及其权重、调用信息及其权重,还有代码覆盖率及其权重进行加权运算后得到的。那么,计算机设备在对代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率进行加权运算,以得到风险评测结果中的风险系数值时,计算机设备可以先获取结构复杂度的权重、调用信息的权重以及代码覆盖率的权重。在本技术实施例中,风险评测结果包括的风险系数值越大,则说明相应目标代码函数对计算机设备实现目标业务功能所造成的负面影响越大,因此,计算机设备对该目标代码函数进行优化的必要性就越高,也就使得该目标代码函数的优化等级越高。当然,可以理解,在实际应用过程中的风险评测结果还可以包括其他评测数据,如:相应目标代码函数的质量评
价信息(可以是文本信息,也可以是图像信息等);但是为了后续便于说明,从而使得相关人员可以更加清楚地了解本技术实施例的相关实施方式,以下提及的风险评测结果可以直接认为是风险系数值,风险评测结果的差异大小即为相应风险系数值之间的差异大小。
71.在一个实施例中,结构复杂度的权重可以与结构复杂度的取值相关,调用信息的权重可以与调用信息的取值相关,代码覆盖率的权重可以与代码覆盖率的取值相关。那么,在此情况下,计算机设备可以基于目标业务功能的历史评测数据来获取各个权重。其中,历史评测数据中可以存在多条函数评测数据,每条函数评测数据对应一个代码函数,也就是说,每条函数评测数据都是对相应的一个代码函数进行评测后得到的。计算机设备对代码函数进行评测的方式和上述计算机设备对代码数据进行评测的方式的原理可以相同,因此,函数评测数据还可以包括相应代码函数的风险评测结果以及三个维度的优化影响因子。三个维度的优化影响因子可以分别为:结构复杂度、调用信息、代码覆盖率。那么,在此情况下,计算机设备获取这些权重的方式可以如下:
72.计算机设备可以先遍历三个维度的优化影响因子,遍历就是依次处理的意思。那么,对于当前正在被处理的维度的优化影响因子,或者说,对于当前遍历的目标维度的优化影响因子,计算机设备可以从历史评测数据包括的所有目标维度的优化影响因子中确定出至少一个优化影响因子组,每个优化影响因子组可以对应相关维度的优化影响因子的一个取值区间,取值区间可以包括一个或多个数值,也就是说,一个优化影响因子组可以只对应一个数值,也可以对应多个数值(如:1至30以内的所有整数值,或0至5内的所有实数值等)。可以理解,优化影响因子组中任一优化影响因子的取值可以是处于该取值区间内的取值。需要说明的是,优化影响因子组可以是由多个代码函数的优化影响因子组成的。例如,当目标维度的优化影响因子为结构复杂度时,优化影响因子组可以是由多个结构复杂度组成的,每个结构复杂度对应一个代码函数。此外,还需要说明的是,在确定目标维度的优化影响因子组时,相应的多个代码函数中每个代码函数的其他维度的优化影响因子的取值是相同的,这是为了保证后续计算机设备在确定目标维度的优化影响因子的权重时,可以排除其他维度的优化影响因子的干扰,从而使得计算机设备可以确定出目标维度的优化影响因子的更准确的权重。接着以上述示例对:在确定目标维度的优化影响因子组时,相应的多个代码函数中每个代码函数的其他维度的优化影响因子的取值是相同的进行说明。若目标维度的优化影响因子是结构复杂度,那么,计算机设备在确定用于组成优化影响因子组的多个结构复杂度时,这多个结构复杂度所对应的多个代码函数中(一个结构复杂度对应一个代码函数),每个代码函数的代码覆盖率相同,调用信息也相同,只有结构复杂度可以不同。
73.那么,当计算机设备获取到至少一个优化影响因子组之后,对于至少一个优化影响因子组中的任一优化影响因子组,计算机设备可以获取该任一优化影响因子组所包括的各个优化影响因子对应的代码函数的风险评测结果,为了便于说明,以下称至少一个优化影响因子组中的任一优化影响因子组为目标优化影响因子组。由于目标优化影响因子组中可以存在多个优化影响因子,那么,计算机设备也就可以获取到多个风险评测结果。进一步地,计算机设备可以根据获取到的各个风险评测结果之间的差异大小,来确定该目标优化影响因子组对应的权重大小。具体来说,计算机设备可以通过结合优化影响因子的取值变化大小与相应的风险评测结果之间的差异大小,来确定该目标优化影响因子组对应的权重。其中,权重与差异大小正相关。具体来说,若该优化影响因子组中各优化影响因子对应
的风险评测结果之间差异越大,该优化影响因子组的权重越大。
74.以下结合具体示例对计算机设备确定优化影响因子组对应的权重的方式,以及对权重与风险评测结果的差异大小正相关的原因进行详细说明。在本示例中,假设优化影响因子组是由结构复杂度组成的,且该优化影响因子组包括3个结构复杂度,其取值分别为1、2、5。在此情况下,若取值为1和2的结构复杂度对应的风险评测结果中风险系数值均为10,取值为5的结构复杂度对应的风险评测结果中风险系数值为11;那么,可见,当结构复杂度的取值差异为1(即:取值分别为1和2)时,相应两个风险评测结果的无差异(风险系数值均为10),当结构复杂度的取值差异为1(即:取值分别为1和5)时,相应两个风险评测结果的差异仅为1,因此,此时计算机设备可以示例性地认为结构复杂度在[1,5]这一范围内时,其对于风险评测结果的影响较小,从而可以为该取值区间的结构复杂度分配较小的权重,如:0.1。同理地,若优化影响因子组中各优化影响因子的取值分别为6、7、11,且取值为6的结构复杂度对应的风险评测结果中风险系数值为11,取值为7的结构复杂度对应的风险评测结果中风险系数值为25,取值为9的结构复杂度对应的风险评测结果中风险系数值为70,则由于结构复杂度发生较小变化时相应风险系数值的变化较大,那么,计算机设备可以示例性地认为结构复杂度在[6,9]这一范围内时,其对于风险评测结果的影响较大,从而可以为该取值区间的结构复杂度分配较大的权重,如:0.5。
[0075]
可以理解,基于上述方式,计算机设备可以确定出每个维度的各个优化影响因子组的相关权重。那么,进一步地,计算机设备也就可以将目标代码函数的结构复杂度所属的优化影响因子组对应的权重,作为该目标代码函数的结构复杂度的权重。具体来说,计算机设备可以确定结构复杂度的取值,然后确定该取值所属的取值区间,从而根据取值区间确定该结构复杂度所属的优化影响因子组,进而也就可以获取到优化影响因子组对应的权重。同理地,计算机设备可以将目标代码函数的调用信息所属的优化影响因子组对应的权重,确定为该目标代码函数的调用信息的权重;将目标代码函数的代码覆盖率所属的优化影响因子组对应的权重,确定为该目标代码函数的代码覆盖率的权重。
[0076]
需要说明的是,在其他实施例中,权重也可以是计算机设备预先根据数据评测经验进行设定的,在此情况下,目标代码函数的优化影响因子的权重只和该优化影响因子的维度有关,与该目标代码函数的优化影响因子的取值无关。也就是说,计算机设备可以直接指定结构复杂度的权重(如:0.5),调用信息的权重(如:0.3)以及代码覆盖率的权重(如0.2)。此外,还需要特别说明的是,此处提及的加权运算只是表明本技术实施例中,运用到了优化影响因子的取值以及优化影响因子的权重来进行一系列数学运算,其不代表本技术实施例只能采用某一具体计算公式进行计算。
[0077]
s404,基于风险评测结果,确定目标代码函数的优化等级。
[0078]
在本技术实施例中,目标代码函数的优化等级可以是计算机设备采用优化后的数据评测模型确定出来的。那么,计算机设备还可以用于对数据评测模型进行优化处理,其具体实现方式可以如下:计算机设备先获取代码函数样本以及代码函数样本的参考结构复杂度、参考调用信息、参考代码覆盖率以及参考优化等级;然后,计算机设备可以采用数据评测模型对参考结构复杂度、参考调用信息和参考代码覆盖率进行加权运算,以确定代码函数样本的预测优化等级,其中,加权运算方式可以参见上述步骤s403中的相关实施例。在计算机设备得到参考优化等级之后,计算机设备可以基于参考优化等级以及预测优化等级,
对数据评测模型中的参考结构复杂度的权重、参考调用信息的权重以及参考代码覆盖率的权重进行优化调整,得到优化后的数据评测模型。可以理解,优化后的数据评测模型中存在各个维度下的优化影响因子的权重信息,权重信息用于指示不同取值的优化影响因子所对应的权重信息,从而使得计算机设备可以采用优化后的数据评测模型确定目标代码函数的优化等级。
[0079]
其中,代码数据中可以存在多个优化等级相同的目标代码函数。那么,为了提升评测结果的细腻度,使得相关设备在基于评测结果对代码数据进行优化处理时,能够从多个优化等级相同的目标代码函数中进一步确定出需要优先执行优化处理的代码函数,计算机设备可以获取每个目标代码函数的调用状态,进而基于获取到的调用状态进一步确定这多个目标代码函数中每个目标代码函数的风险等级(如:风险等级i,i为正整数),其中,调用状态包括已调用状态或未调用状态;风险等级用于指示相应目标代码函数造成目标业务功能的实现存在异常的风险大小。那么,也就可以理解,风险等级越高的目标代码函数越容易造成目标业务功能出现异常。在此情况下,计算机设备在生成代码数据的评测结果时,可以参考代码函数的风险等级。具体来说,就是计算机设备生成的评测结果除了包括代码函数的优化等级外,还可以包括相同优化等级下的各个代码函数的风险等级。在本技术实施例中为了便于说明,示例性地,以风险等级i低于风险等级i+1为例对相关实现方式进行阐述。实际应用中,计算机设备确定目标代码函数的风险等级的方式可以包括如下3种中的任一种:
[0080]
(1)如果目标代码函数的调用状态为已调用状态,且该目标代码函数的结构复杂度大于复杂度阈值(复杂度阈值可以是根据评测经验设定的任意值),则计算机设备可以根据代码覆盖率与风险等级之间的对应关系,将该目标代码函数的代码覆盖率对应的风险等级作为该目标代码函数的风险等级。其中,一个代码覆盖率对应一个风险等级,但一个风险等级可以对应一个或多个代码覆盖率。举例来说,在一个实施例中,当代码覆盖率为0至30%内任一数值时,相应目标代码函数的风险等级都可以为风险等级10,此时,可以认为一个风险等级对应多个代码覆盖率。在又一个实施例中,当代码覆盖率不同时,其对应的风险等级也可以不同。举例来说,当代码覆盖率为10%时,相应目标代码函数的风险等级也可以为风险等级10;当代码覆盖率为11%时,相应目标代码函数的风险等级也可以为风险等级9,此时,可以认为一个风险等级对应一个代码覆盖率。为了便于说明,以下实施例中以一个风险等级对应多个代码覆盖率为例进行说明,且示例性地,当代码覆盖率属于[0,30%]这一取值区间时,相应目标代码函数的风险等级为风险等级3;当代码覆盖率属于[30%,70%]这一取值区间时,相应目标代码函数的风险等级为风险等级2;当代码覆盖率属于[70%,100%]这一取值区间时,相应目标代码函数的风险等级为风险等级1;其中,风险等级大小排序为:风险等级3》风险等级2》风险等级1。
[0081]
(2)如果目标代码函数的调用状态为已调用状态,且该目标代码函数的结构复杂度小于或等于复杂度阈值,则计算机设备可以将该目标代码函数的风险等级确定为第一风险等级,第一风险等级为所有代码覆盖率对应的风险等级中的最小风险等级(如:风险等级1)。
[0082]
(3)如果目标代码函数的调用信状态为未调用状态,则计算机设备可以将该目标代码函数的风险等级确定为第二风险等级。需要说明的是,在所有代码覆盖率对应的风险
等级中存在第二风险等级,且第二风险等级高于前述第一风险等级。那么,基于上述关于方式(1)的相关描述,可知,本技术实施例中所有代码覆盖率对应的风险等级示例性地为3个,即:风险等级3、风险等级2和风险等级1。那么,此时,第二风险等级可以是风险等级2。当然,可以理解的是,若本技术实施例中所有代码覆盖率对应的风险等级为其他数量个,则第二风险等级可以是任一个高于第一风险等级的风险等级。如:若本技术实施例中所有代码覆盖率对应的风险等级示例性地为4个,由高到低排列后分别为:风险等级4、风险等级3、风险等级2和风险等级1。那么,在此情况下,第二风险等级可以是风险等级3和风险等级2中任意一个。
[0083]
s406,生成代码数据的评测结果,评测结果包括目标代码函数的优化等级。
[0084]
在具体实现中,评测结果还可以包括计算机设备对代码数据进行数据评测的过程中所产生的相关评测数据,如:基于函数静态调用关系生成的静态调用关系链(如图3c所示)、基于函数动态调用关系生成的动态调用关系链(如图3d所示)、静态调用关系链和动态调用关系链的对比结果、函数动态调用数据(其包括各个代码函数的调用时长、函数名以及代码函数可调用的其他代码函数等),以及各个代码函数的圈复杂度的中间结果图(图中可包括圈复杂度、函数名、调用出度、调用入度、函数所在文件等)。示例性地,静态调用关系链和动态调用关系链的对比结果可以如图3e所示,函数动态调用数据可以如图5a所示,圈复杂度的中间结果图可以如图5b所示。需要说明的是,步骤s406的其他实现方式可以参见步骤s204的相关实施例,本技术实施例在此不做赘述。
[0085]
在本技术实施例的具体应用中,当计算机设备获取到的调用信息用于反映相应代码函数是否被调用时,计算机设备根据代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率,确定目标代码函数的优化等级方式,还可以如下:若计算机设备根据目标代码函数的调用信息确定出该目标代码函数被调用,且目标代码函数的结构复杂度大于复杂度阈值,则计算机设备可以根据代码覆盖率和优化等级的对应关系,将目标代码函数的代码覆盖率对应的优化等级确定为目标代码函数的优化等级。若计算机设备根据目标代码函数的调用信息确定出目标代码函数未被调用,则计算机设备可以将目标代码函数的优化等级确定为目标优化等级,其中,在所有代码覆盖率对应的优化等级中存在目标优化等级。一个代码覆盖率对应一个优化等级,一个优化等级可以对应一个或多个代码覆盖率。若计算机设备根据目标代码函数的调用信息确定出目标代码函数被调用,且结构复杂度小于或等于复杂度阈值,则计算机设备可以将目标代码函数的优化等级确定为最小优化等级;其中,最小优化等级为所有代码覆盖率对应的优化等级中的最小的优化等级,目标优化等级为高于最小优化等级的优化等级,在实际应用中,目标优化等级可以是任一个高于最小优化等级的优化等级,也可以是仅高于最小优化等级的优化等级(即:所有优化等级中倒数第二小的优化等级)。可以理解,关于本实施例的具体实现原理可以参见步骤s404中关于计算机设备确定代码函数的风险等级的方式,本技术实施例在此不再赘述。
[0086]
其中,本技术实施例中计算机设备还可以基于评测结果得到目标业务功能的质量评估结果。为了便于更加清楚地理解本技术实施例中代码函数的优化等级的实际应用,以下结合图6对数据评测的具体方式进行再次说明。在本示例中,假设计算机设备最终生成的评测结果包括函数静态调用关系链、函数动态调用关系链以及代码函数的优化等级。那么,在此情况下,基于图6可见,计算机设备可以先确定需要进行质量评估的目标业务功能,然
后获取该目标业务功能的代码数据。当计算机设备获取到代码数据之后,可以采用相关的代码数据分析工具,对未处于运行状态的代码数据进行静态分析,以得到各个代码函数之间的函数静态调用关系和代码函数的圈复杂度。此外,计算机设备可以运行代码数据以对目标业务功能的实际使用效果进行测试,在代码数据的运行过程中,计算机设备可以基于对目标业务功能进行测试过程中用到的业务子功能,获取计算机设备实现该业务子功能的过程中,实际用到的与该业务子功能对应的代码函数相关的调用关系,从而可以生成多个代码函数之间的动态调用关系;在代码数据的运行过程中,计算机设备还可以获取代码函数的调用信息(如:调用次数、调用时间等等)。基于计算机设备获取到的动态调用关系和静态调用关系,计算机设备就可以确定出代码数据中被调用的代码函数有哪些,未被调用的代码函数有哪些,从而可以基于代码函数是否被调用、代码函数的代码覆盖率以及代码函数的圈复杂度,来确定相应代码函数的优化等级。进一步地,计算机设备就可以基于这些代码函数的优化等级以及在数据评测过程中获取到的其他相关信息,来综合对目标业务功能进行质量评估,进而得到目标业务功能的质量评估报告,示例性地,目标业务功能的质量评估报告可以包含于评测结果中,也可以是单独的质量评估报告,本技术实施例对此不作具体限定。
[0087]
基于上述关于图6的相关描述,不难理解,计算机设备可以确定某一应用程序中各个业务功能模块(即:各个业务功能)的评测结果。当计算机设备确定出一个业务功能模块的评测结果之后,计算机设备可以基于评测结果中的相关数据确定该业务功能模块的风险总评分,其流程可以参见图7。基于图7可见,计算机设备可以在运行代码数据过程中获取代码函数的调用状态,然后计算机设备可以参照上述关于计算机设备根据代码函数的代码覆盖率、结构复杂度以及调用状态确定相应代码函数的优化等级的方式,来确定各个代码函数的风险评分。也就是说,计算机设备可以不确定优化等级,转而确定风险评分。那么,在此情况下,代码函数的评测结果就包括了多个代码函数的风险评分,则业务模块的风险总分可以是该业务功能模块下所有代码函数的风险评分的分值的加权求和运算结果,也可以是计算机设备基于各个代码函数的风险评分的分值进行其他类型的运算后确定出来的总风险评分分值。那么,计算机设备可以基于这种方式确定出每个业务功能模块的风险总评分,然后计算机设备可以生成包括各个业务功能模块的风险总评分与风险评测报告。在风险评测报告中,计算机设备可以将各个业务功能模块的风险评测结果按照风险总评分的大小进行排序。如:风险总评分最大的业务功能模块的风险评测结果排在整个风险评测报告的最前面。
[0088]
在本技术实施例中,计算机设备通过在获取到用于实现目标业务功能的代码数据后,对代码数据中的代码函数进行分析,以确定出代码函数的结构复杂度,以及代码函数在代码数据运行过程中所产生的调用信息和代码覆盖率,进而根据获取到的这些数据确定代码函数的优化等级,使得计算机设备可以生成包括优化等级的评测结果。其中,结构复杂度可以用于指示代码函数在运行过程中发生异常的概率;调用信息可以用于反映代码函数对于实现目标业务功能的重要程度,或者调用信息可以用于指示代码函数是否被调用;代码覆盖率可以用于指示代码函数中无需被优化处理的代码量。计算机设备确定出的优化等级可以用于反映代码函数存在优化需求的需求程度(或称:代码函数被优化的必要性)。需求程度越大,则说明该代码函数越需要被进行优化处理。那么,也就可以理解,通过此种方式
生成的评测结果可以使得相关人员或相关设备在对代码数据进行优化处理时有更准确的优化目标,从而在一定程度上可以提升数据优化处理的速率。
[0089]
基于上述关于数据评测方法的相关描述,本技术实施例还公开了一种数据评测装置,该数据评测装置可以是运行与上述所提及的计算机设备(或目标业务设备)中的一个计算机程序(包括程序代码)。在具体实施例中,该数据评测装置可以用于执行如图2或图4所示的数据评测方法。请参见图8,该数据评测装置可以包括:获取单元801,运行单元802,确定单元803以及生成单元804。
[0090]
获取单元801,用于获取用于实现目标业务功能的代码数据及所述代码数据中各代码函数的结构复杂度;其中,结构复杂度用于指示相应代码函数在运行过程中发生异常的概率;
[0091]
运行单元802,用于运行所述代码数据,并获取所述各代码函数在运行过程中产生的调用信息和代码覆盖率;其中,所述调用信息用于反映相应代码函数对于实现所述目标业务功能的重要程度或者相应代码函数是否被调用,所述代码覆盖率用于指示相应代码函数中无需被优化处理的代码量;
[0092]
确定单元803,用于根据所述代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率,确定所述目标代码函数的优化等级,所述优化等级用于指示所述目标代码函数存在优化需求的需求程度;
[0093]
生成单元804,用于生成所述代码数据的评测结果,所述评测结果包括所述目标代码函数的优化等级,所述评测结果用于指示优化设备基于所述优化等级对相应目标代码函数进行优化处理。
[0094]
在一种实施方式中,所述调用信息用于反映相应代码函数对于实现所述目标业务功能的重要程度;所述确定单元803可以用于执行:
[0095]
对所述代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率进行加权运算,得到风险评测结果;
[0096]
基于所述风险评测结果,确定所述目标代码函数的优化等级,所述优化等级与所述风险评测结果正相关。
[0097]
在又一种实施方式中,所述代码数据中存在多个优化等级相同的目标代码函数;对于所述多个优化等级相同的目标代码函数中的每个目标代码函数,所述运行单元802可以用于执行:
[0098]
获取所述每个目标代码函数的调用状态,所述调用状态包括已调用状态或未调用状态;
[0099]
若所述每个目标代码函数的调用状态为已调用状态,且所述每个目标代码函数的结构复杂度大于复杂度阈值,则根据代码覆盖率与风险等级的对应关系,将所述每个目标代码函数的代码覆盖率所对应的风险等级确定为所述每个目标代码函数的风险等级;
[0100]
若所述每个目标代码函数的调用状态为已调用状态,且所述每个目标代码函数的结构复杂度小于或等于所述复杂度阈值,则将所述每个目标代码函数的风险等级确定为第一风险等级,所述第一风险等级为所有代码覆盖率对应的风险等级中的最小风险等级;
[0101]
若所述每个目标代码函数的调用信状态为未调用状态,则将所述每个目标代码函数的风险等级确定为第二风险等级,在所有代码覆盖率对应的风险等级中存在所述第二风
险等级,且所述第二风险等级高于所述第一风险等级;
[0102]
生成所述代码数据的评测结果,所述评测结果包括所述每个目标代码函数的风险等级,所述风险等级用于指示相应目标代码函数造成目标业务功能的实现存在异常的风险大小。
[0103]
在又一种实施方式中,所述获取单元801还可以用于执行:
[0104]
获取所述目标业务功能的历史评测数据,所述历史评测数据包括多条函数评测数据,每条函数评测数据对应一个代码函数,且所述每条函数评测数据包括相应代码函数的风险评测结果以及三个维度的优化影响因子,任一维度的优化影响因子包括所述结构复杂度、调用信息或者代码覆盖率;
[0105]
遍历所述三个维度的优化影响因子,从所述历史评测数据包括的所有当前遍历的目标维度的优化影响因子中确定至少一个优化影响因子组,不同优化影响因子组包括的优化影响因子的取值位于不同区间内;
[0106]
获取目标优化影响因子组包括的各个优化影响因子对应代码函数的风险评测结果,所述目标优化影响因子组为所述至少一个优化影响因子组中的任一优化影响因子组;
[0107]
根据获取到的各个风险评测结果之间的差异大小,确定所述目标优化影响因子组对应的权重,所述权重与所述差异大小正相关;
[0108]
将所述目标代码函数的结构复杂度所属的优化影响因子组对应的权重,确定为所述结构复杂度的权重;
[0109]
将所述目标代码函数的调用信息所属的优化影响因子组对应的权重,确定为所述调用信息的权重;
[0110]
将所述目标代码函数的代码覆盖率所属的优化影响因子组对应的权重,确定为所述代码覆盖率的权重;
[0111]
所述对所述代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率进行加权运算,得到风险评测结果,包括:
[0112]
基于所述结构复杂度的权重、所述调用信息的权重以及所述代码覆盖率的权重对所述代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率进行加权运算,得到所述风险评测结果。
[0113]
在又一种实施方式中,所述目标代码函数的优化等级是采用优化后的数据评测模型确定出来的;所述获取单元801还可以用于执行:
[0114]
获取代码函数样本以及所述代码函数样本的参考结构复杂度、参考调用信息、参考代码覆盖率以及参考优化等级;
[0115]
采用数据评测模型对所述参考结构复杂度、所述参考调用信息和所述参考代码覆盖率进行加权运算,以确定所述代码函数样本的预测优化等级;
[0116]
基于所述参考优化等级以及所述预测优化等级,对所述数据评测模型中的参考结构复杂度的权重、参考调用信息的权重以及参考代码覆盖率的权重进行优化调整,得到所述优化后的数据评测模型。
[0117]
在又一种实施方式中,所述调用信息用于反映相应代码函数是否被调用;所述确定单元803可以用于执行:
[0118]
若根据所述目标代码函数的调用信息确定出所述目标代码函数被调用,且所述目
标代码函数的结构复杂度大于复杂度阈值,则根据代码覆盖率和优化等级的对应关系,将所述目标代码函数的代码覆盖率对应的优化等级确定为所述目标代码函数的优化等级。
[0119]
在又一种实施方式中,所述确定单元803还可以用于执行:
[0120]
若根据所述目标代码函数的调用信息确定出所述目标代码函数未被调用,则将所述目标代码函数的优化等级确定为目标优化等级,在所有代码覆盖率对应的优化等级中存在所述目标优化等级;
[0121]
若根据所述目标代码函数的调用信息确定出所述目标代码函数被调用,且所述结构复杂度小于或等于所述复杂度阈值,则将所述目标代码函数的优化等级确定为最小优化等级;其中,所述最小优化等级为所有代码覆盖率对应的优化等级中的最小的优化等级,所述目标优化等级高于所述最小优化等级。
[0122]
根据本技术的一个实施例,图2及图4所示的方法所涉及的各个步骤可以由图8所示的数据评测装置中的各个单元来执行。例如,图2所示的步骤s201可以由图8所示的数据评测装置中的获取单元801来执行;步骤s202可以由图8所示的数据评测装置中的运行单元802来执行;步骤s203可以由图8所示的数据评测装置中的确定单元803来执行;步骤s204可以由图8所示的数据评测装置中的生成单元804来执行。再如,图4中的步骤s401可以由图8所示的数据评测装置中的获取单元801来执行;步骤s402可以由图8所示的数据评测装置中的运行单元802来执行;步骤s403-步骤s404均可以由图8所示的数据评测装置中的确定单元803来执行;步骤s405可以由图8所示的数据评测装置中的生成单元804来执行。
[0123]
根据本技术的另一个实施例,图8所示的数据评测装置中的各个单元是基于逻辑功能划分的,上述各个单元可以分别或全部合并为一个或若干个另外的单元来构成,或者,其中的某个(某些)单元还可以再拆分为功能上更小的多个单元来构成,这可以实现同样的操作,而不影响本技术实施例的技术效果的实现。在本技术的其他实施例中,上述数据评测装置也可以包括其他单元,在实际应用中,这些功能也可以由其他单元协助实现,并且可以由多个单元协助实现。
[0124]
根据本技术的另一个实施例,可以通过在包括中央处理单元(cpu)、随机存取存储介质(ram)、只读存储介质(rom)等处理元件和存储元件的例如域名管理设备的通用计算设备上,运行能够执行如图2和图4所示的方法所涉及的各步骤的计算机程序(包括程序代码),来构造如图8所示的数据评测装置,以及来实现本技术实施例的数据评测方法。计算机程序可以记载于例如计算机存储介质上,并通过计算机存储介质装载于上述计算设备中,并在其中运行。
[0125]
在本技术实施例中,数据评测装置在对代码数据进行数据测试时,可以获取代码数据中各代码函数的结构复杂度,其用于表示该代码函数因为自身结构原因而造成运行错误的概率,是一种函数静态特征。此外,数据评测装置还运行了代码数据,并在代码数据的运行过程中获取了代码函数的函数动态特征,如:调用信息以及代码覆盖率;调用信息可以表示代码函数对于实现目标业务功能的重要程度,而代码覆盖率则可以表示该代码函数中无需优化的代码量,在一定程度上可以反映代码函数的质量。数据评测装置基于获取到的静态特征和动态特征综合进行分析,可以较为准确地确定出相应代码函数的优化等级,进而使得数据评测装置生成的评测结果(包括代码函数的优化等级)具有更高的准确性。
[0126]
基于上述方法实施例以及装置实施例的相关描述,本技术实施例还提供了一种计
算机设备,请参见图9。该计算机设备至少包括处理器901以及计算机存储介质902,且计算机设备的处理器901和计算机存储介质902可以通过总线或其他方式连接。其中,上述提及的计算机存储介质902是计算机设备中的记忆设备,用于存放程序和数据。可以理解的是,此处的计算机存储介质902既可以包括计算机设备中的内置存储介质,当然也可以包括计算机设备所支持的扩展存储介质。计算机存储介质902提供存储空间,该存储空间存储了计算机设备的操作系统。并且,在该存储空间中还存放了适于被处理器901加载并执行的一条或多条的计算机程序,这些计算机程序可以是一个或一个以上的程序代码。需要说明的是,此处的计算机存储介质可以是高速ram存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器;可选的还可以是至少一个位于远离前述处理器的存储介质。处理器901(或称cpu(central processing unit,中央处理器))是计算机设备的计算核心以及控制核心,其适于实现一条或多条计算机程序,具体适于加载并执行一条或多条计算机程序从而实现相应方法流程或相应功能。
[0127]
在一种实施方式中,所述调用信息用于反映相应代码函数对于实现所述目标业务功能的重要程度;所述处理器901还可以用于加载并执行:
[0128]
对所述代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率进行加权运算,得到风险评测结果;
[0129]
基于所述风险评测结果,确定所述目标代码函数的优化等级,所述优化等级与所述风险评测结果正相关。
[0130]
在又一种实施方式中,所述代码数据中存在多个优化等级相同的目标代码函数;对于所述多个优化等级相同的目标代码函数中的每个目标代码函数,所述处理器901还可以用于加载并执行:
[0131]
获取所述每个目标代码函数的调用状态,所述调用状态包括已调用状态或未调用状态;
[0132]
若所述每个目标代码函数的调用状态为已调用状态,且所述每个目标代码函数的结构复杂度大于复杂度阈值,则根据代码覆盖率与风险等级的对应关系,将所述每个目标代码函数的代码覆盖率所对应的风险等级确定为所述每个目标代码函数的风险等级;
[0133]
若所述每个目标代码函数的调用状态为已调用状态,且所述每个目标代码函数的结构复杂度小于或等于所述复杂度阈值,则将所述每个目标代码函数的风险等级确定为第一风险等级,所述第一风险等级为所有代码覆盖率对应的风险等级中的最小风险等级;
[0134]
若所述每个目标代码函数的调用信状态为未调用状态,则将所述每个目标代码函数的风险等级确定为第二风险等级,在所有代码覆盖率对应的风险等级中存在所述第二风险等级,且所述第二风险等级高于所述第一风险等级;
[0135]
生成所述代码数据的评测结果,所述评测结果包括所述每个目标代码函数的风险等级,所述风险等级用于指示相应目标代码函数造成目标业务功能的实现存在异常的风险大小。
[0136]
在又一种实施方式中,所述处理器901还可以用于加载并执行:
[0137]
获取所述目标业务功能的历史评测数据,所述历史评测数据包括多条函数评测数据,每条函数评测数据对应一个代码函数,且所述每条函数评测数据包括相应代码函数的风险评测结果以及三个维度的优化影响因子,任一维度的优化影响因子包括所述结构复杂
度、调用信息或者代码覆盖率;
[0138]
遍历所述三个维度的优化影响因子,从所述历史评测数据包括的所有当前遍历的目标维度的优化影响因子中确定至少一个优化影响因子组,不同优化影响因子组包括的优化影响因子的取值位于不同区间内;
[0139]
获取目标优化影响因子组包括的各个优化影响因子对应代码函数的风险评测结果,所述目标优化影响因子组为所述至少一个优化影响因子组中的任一优化影响因子组;
[0140]
根据获取到的各个风险评测结果之间的差异大小,确定所述目标优化影响因子组对应的权重,所述权重与所述差异大小正相关;
[0141]
将所述目标代码函数的结构复杂度所属的优化影响因子组对应的权重,确定为所述结构复杂度的权重;
[0142]
将所述目标代码函数的调用信息所属的优化影响因子组对应的权重,确定为所述调用信息的权重;
[0143]
将所述目标代码函数的代码覆盖率所属的优化影响因子组对应的权重,确定为所述代码覆盖率的权重;
[0144]
所述对所述代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率进行加权运算,得到风险评测结果,包括:
[0145]
基于所述结构复杂度的权重、所述调用信息的权重以及所述代码覆盖率的权重对所述代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率进行加权运算,得到所述风险评测结果。
[0146]
在又一种实施方式中,所述目标代码函数的优化等级是采用优化后的数据评测模型确定出来的;所述处理器901还可以用于加载并执行:
[0147]
获取代码函数样本以及所述代码函数样本的参考结构复杂度、参考调用信息、参考代码覆盖率以及参考优化等级;
[0148]
采用数据评测模型对所述参考结构复杂度、所述参考调用信息和所述参考代码覆盖率进行加权运算,以确定所述代码函数样本的预测优化等级;
[0149]
基于所述参考优化等级以及所述预测优化等级,对所述数据评测模型中的参考结构复杂度的权重、参考调用信息的权重以及参考代码覆盖率的权重进行优化调整,得到所述优化后的数据评测模型。
[0150]
在又一种实施方式中,所述调用信息用于反映相应代码函数是否被调用;所述处理器901还可以用于加载并执行:
[0151]
若根据所述目标代码函数的调用信息确定出所述目标代码函数被调用,且所述目标代码函数的结构复杂度大于复杂度阈值,则根据代码覆盖率和优化等级的对应关系,将所述目标代码函数的代码覆盖率对应的优化等级确定为所述目标代码函数的优化等级。
[0152]
在又一种实施方式中,所述处理器901还可以用于加载并执行:
[0153]
若根据所述目标代码函数的调用信息确定出所述目标代码函数未被调用,则将所述目标代码函数的优化等级确定为目标优化等级,在所有代码覆盖率对应的优化等级中存在所述目标优化等级;
[0154]
若根据所述目标代码函数的调用信息确定出所述目标代码函数被调用,且所述结构复杂度小于或等于所述复杂度阈值,则将所述目标代码函数的优化等级确定为最小优化
等级;其中,所述最小优化等级为所有代码覆盖率对应的优化等级中的最小的优化等级,所述目标优化等级高于所述最小优化等级。
[0155]
在本技术实施例中,计算机设备在对代码数据进行数据测试时,可以获取代码数据中各代码函数的结构复杂度,其用于表示该代码函数因为自身结构原因而造成运行错误的概率,是一种函数静态特征。此外,计算机设备还运行了代码数据,并在代码数据的运行过程中获取了代码函数的函数动态特征,如:调用信息以及代码覆盖率;调用信息可以表示代码函数对于实现目标业务功能的重要程度,而代码覆盖率则可以表示该代码函数中无需优化的代码量,在一定程度上可以反映代码函数的质量。计算机设备基于获取到的静态特征和动态特征综合进行分析,可以较为准确地确定出相应代码函数的优化等级,进而使得计算机设备生成的评测结果(包括代码函数的优化等级)具有更高的准确性。
[0156]
本技术还提供了一种计算机存储介质,该计算机存储介质中存储了上述数据评测方法对应的一条或多条计算机程序,当一个或多个处理器加载并执行该一条或多条计算机程序,可以实现实施例中对数据评测方法的描述,在此不再赘述。对采用相同方法的有益效果的描述,在此不再赘述。可以理解的是,计算机程序可以被部署在一个或多个能够相互通信的设备上执行。
[0157]
需要说明的是,根据本技术的一个方面,还提供了一种计算机程序产品或计算机程序,该计算机程序产品包括计算机程序,该计算机程序存储在计算机存储介质中。计算机设备中的处理器从计算机存储介质读取该计算机程序,然后执行该计算机程序,进而使得该计算机设备能够执行上述图2以及图4所示的数据评测方法实施例方面的各种可选方式中提供的方法。
[0158]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于计算机取存储介质中,该计算机程序在执行时,可包括如上述数据评测方法的实施例的流程。其中,计算机存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,rom)或随机存储记忆体(random access memory,ram)等。
[0159]
可以理解的是,以上所揭露的仅为本技术的局部实施例而已,当然不能以此来限定本技术之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或局部流程,并依本技术权利要求所作的等同变化,仍属于发明所涵盖的范围。
技术特征:
1.一种数据评测方法,其特征在于,包括:获取用于实现目标业务功能的代码数据及所述代码数据中各代码函数的结构复杂度;其中,结构复杂度用于指示相应代码函数在运行过程中发生异常的概率;运行所述代码数据,并获取所述各代码函数在运行过程中产生的调用信息和代码覆盖率;其中,所述调用信息用于反映相应代码函数对于实现所述目标业务功能的重要程度或者相应代码函数是否被调用,所述代码覆盖率用于指示相应代码函数中无需被优化处理的代码量;根据所述代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率,确定所述目标代码函数的优化等级,所述优化等级用于指示所述目标代码函数存在优化需求的需求程度;生成所述代码数据的评测结果,所述评测结果包括所述目标代码函数的优化等级,所述评测结果用于指示优化设备基于所述优化等级对相应目标代码函数进行优化处理。2.根据权利要求1所述的方法,其特征在于,所述调用信息用于反映相应代码函数对于实现所述目标业务功能的重要程度;所述根据所述代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率,确定所述目标代码函数的优化等级,包括:对所述代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率进行加权运算,得到风险评测结果;基于所述风险评测结果,确定所述目标代码函数的优化等级,所述优化等级与所述风险评测结果正相关。3.根据权利要求2所述的方法,其特征在于,所述代码数据中存在多个优化等级相同的目标代码函数;对于所述多个优化等级相同的目标代码函数中的每个目标代码函数,所述方法还包括:获取所述每个目标代码函数的调用状态,所述调用状态包括已调用状态或未调用状态;若所述每个目标代码函数的调用状态为已调用状态,且所述每个目标代码函数的结构复杂度大于复杂度阈值,则根据代码覆盖率与风险等级的对应关系,将所述每个目标代码函数的代码覆盖率所对应的风险等级确定为所述每个目标代码函数的风险等级;若所述每个目标代码函数的调用状态为已调用状态,且所述每个目标代码函数的结构复杂度小于或等于所述复杂度阈值,则将所述每个目标代码函数的风险等级确定为第一风险等级,所述第一风险等级为所有代码覆盖率对应的风险等级中的最小风险等级;若所述每个目标代码函数的调用信状态为未调用状态,则将所述每个目标代码函数的风险等级确定为第二风险等级,在所有代码覆盖率对应的风险等级中存在所述第二风险等级,且所述第二风险等级高于所述第一风险等级;生成所述代码数据的评测结果,所述评测结果包括所述每个目标代码函数的风险等级,所述风险等级用于指示相应目标代码函数造成目标业务功能的实现存在异常的风险大小。4.根据权利要求2所述的方法,其特征在于,所述方法还包括:获取所述目标业务功能的历史评测数据,所述历史评测数据包括多条函数评测数据,
每条函数评测数据对应一个代码函数,且所述每条函数评测数据包括相应代码函数的风险评测结果以及三个维度的优化影响因子,任一维度的优化影响因子包括所述结构复杂度、调用信息或者代码覆盖率;遍历所述三个维度的优化影响因子,从所述历史评测数据包括的所有当前遍历的目标维度的优化影响因子中确定至少一个优化影响因子组,不同优化影响因子组包括的优化影响因子的取值位于不同区间内;获取目标优化影响因子组包括的各个优化影响因子对应代码函数的风险评测结果,所述目标优化影响因子组为所述至少一个优化影响因子组中的任一优化影响因子组;根据获取到的各个风险评测结果之间的差异大小,确定所述目标优化影响因子组对应的权重,所述权重与所述差异大小正相关;将所述目标代码函数的结构复杂度所属的优化影响因子组对应的权重,确定为所述结构复杂度的权重;将所述目标代码函数的调用信息所属的优化影响因子组对应的权重,确定为所述调用信息的权重;将所述目标代码函数的代码覆盖率所属的优化影响因子组对应的权重,确定为所述代码覆盖率的权重;所述对所述代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率进行加权运算,得到风险评测结果,包括:基于所述结构复杂度的权重、所述调用信息的权重以及所述代码覆盖率的权重对所述代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率进行加权运算,得到所述风险评测结果。5.根据权利要求2所述的方法,其特征在于,所述目标代码函数的优化等级是采用优化后的数据评测模型确定出来的;所述优化后的数据评测模型的获取方式包括:获取代码函数样本以及所述代码函数样本的参考结构复杂度、参考调用信息、参考代码覆盖率以及参考优化等级;采用数据评测模型对所述参考结构复杂度、所述参考调用信息和所述参考代码覆盖率进行加权运算,以确定所述代码函数样本的预测优化等级;基于所述参考优化等级以及所述预测优化等级,对所述数据评测模型中的参考结构复杂度的权重、参考调用信息的权重以及参考代码覆盖率的权重进行优化调整,得到所述优化后的数据评测模型。6.根据权利要求1所述的方法,其特征在于,所述调用信息用于反映相应代码函数是否被调用;所述根据所述代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率,确定所述目标代码函数的优化等级,包括:若根据所述目标代码函数的调用信息确定出所述目标代码函数被调用,且所述目标代码函数的结构复杂度大于复杂度阈值,则根据代码覆盖率和优化等级的对应关系,将所述目标代码函数的代码覆盖率对应的优化等级确定为所述目标代码函数的优化等级。7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
若根据所述目标代码函数的调用信息确定出所述目标代码函数未被调用,则将所述目标代码函数的优化等级确定为目标优化等级,在所有代码覆盖率对应的优化等级中存在所述目标优化等级;若根据所述目标代码函数的调用信息确定出所述目标代码函数被调用,且所述结构复杂度小于或等于所述复杂度阈值,则将所述目标代码函数的优化等级确定为最小优化等级;其中,所述最小优化等级为所有代码覆盖率对应的优化等级中的最小的优化等级,所述目标优化等级高于所述最小优化等级。8.一种数据评测装置,其特征在于,包括:获取单元,用于获取用于实现目标业务功能的代码数据及所述代码数据中各代码函数的结构复杂度;其中,结构复杂度用于指示相应代码函数在运行过程中发生异常的概率;运行单元,用于运行所述代码数据,并获取所述各代码函数在运行过程中产生的调用信息和代码覆盖率;其中,所述调用信息用于反映相应代码函数对于实现所述目标业务功能的重要程度或者相应代码函数是否被调用,所述代码覆盖率用于指示相应代码函数中无需被优化处理的代码量;确定单元,用于根据所述代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率,确定所述目标代码函数的优化等级,所述优化等级用于指示所述目标代码函数存在优化需求的需求程度;生成单元,用于生成所述代码数据的评测结果,所述评测结果包括所述目标代码函数的优化等级,所述评测结果用于指示优化设备基于所述优化等级对相应目标代码函数进行优化处理。9.一种计算机设备,其特征在于,包括:处理器,所述处理器用于实现一条或多条计算机程序;计算机存储介质,所述计算机存储介质存储有一条或多条计算机程序,所述一条或多条计算机程序适于由所述处理器加载并执行如权利要求1-7任一项所述的数据评测方法。10.一种计算机存储介质,其特征在于,所述计算机存储介质存储有一条或多条计算机程序,所述一条或多条计算机程序适于由处理器加载并执行如权利要求1-7任一项所述的数据评测方法。11.一种计算机产品,其特征在于,所述计算机产品包括计算机程序,所述计算机程序适于由处理器加载并执行如权利要求1-7任一项所述的数据评测方法。
技术总结
本申请实施例公开了一种数据评测方法、相关设备、存储介质及程序产品,方法包括:获取用于实现目标业务功能的代码数据及代码数据中各代码函数的结构复杂度;运行代码数据,并获取各代码函数在运行过程中产生的调用信息和代码覆盖率;调用信息用于反映相应代码函数对于实现目标业务功能的重要程度或相应代码函数是否被调用;根据代码数据中目标代码函数的结构复杂度、调用信息和代码覆盖率,确定目标代码函数的优化等级,优化等级用于指示目标代码函数存在优化需求的需求程度;生成代码数据的评测结果,评测结果包括目标代码函数的优化等级,评测结果用于指示优化设备基于优化等级对相应目标代码函数进行优化处理,可提升评测结果的准确度。结果的准确度。结果的准确度。
技术研发人员:施泽洋 鲍志强 姚帆
受保护的技术使用者:腾讯科技(深圳)有限公司
技术研发日:2022.03.14
技术公布日:2023/9/22
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/