CN106155897A - 一种业务处理方法及装置 - Google Patents
一种业务处理方法及装置 Download PDFInfo
- Publication number
- CN106155897A CN106155897A CN201510180527.1A CN201510180527A CN106155897A CN 106155897 A CN106155897 A CN 106155897A CN 201510180527 A CN201510180527 A CN 201510180527A CN 106155897 A CN106155897 A CN 106155897A
- Authority
- CN
- China
- Prior art keywords
- function
- code
- business
- source code
- unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Debugging And Monitoring (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明实施例提供一种业务处理方法及装置,其中的方法可包括:对待处理业务的源代码进行解析,获得所述源代码所包含的至少一个函数的关键信息;根据所述至少一个函数的关键信息对所述源代码进行插桩处理,获得目标代码;运行所述目标代码,并采集所述目标代码在运行过程中的函数调用信息;根据所述函数调用信息,计算所述业务的覆盖参数。本发明能够基于函数计算业务的覆盖参数,提升业务的覆盖参数的计算精度,提升对业务的完整性评判的准确度。
Description
技术领域
本发明涉及互联网技术领域,具体涉及互联网业务技术领域,尤其涉及一种业务处理方法及装置。
背景技术
覆盖参数是衡量互联网业务的完整性的一个重要指标,现有技术中通常采用代码覆盖率来表示业务的覆盖参数,例如:互联网软件的测试业务中,通常需要计算测试业务的代码覆盖率,以了解测试业务的方案完整性;一般地,可采用GCov/LCov(代码覆盖率测试工具)、或EMMA(一种代码覆盖率测试工具)等统计工具来计算业务的代码覆盖率;然而,上述的统计工具采用的是“基于行的代码覆盖率”的计算方式,即根据各代码行的调用情况获得代码覆盖率,其代码覆盖率精确到业务的源代码中的各代码行,由于业务迭代需求,业务的源代码的代码行经常发生变化,从而降低了现有技术中“基于行的代码覆盖率”的计算精度,影响业务的完整性评判。
发明内容
本发明实施例提供一种业务处理方法及装置,能够基于函数计算业务的覆盖参数,提升业务的覆盖参数的计算精度,提升对业务的完整性评判的准确度。
本发明实施例第一方面提供一种业务处理方法,可包括:
对待处理业务的源代码进行解析,获得所述源代码所包含的至少一个函数的关键信息;
根据所述至少一个函数的关键信息对所述源代码进行插桩处理,获得目标代码;
运行所述目标代码,并采集所述目标代码在运行过程中的函数调用信息;
根据所述函数调用信息,计算所述业务的覆盖参数。
本发明实施例第二方面提供一种业务处理装置,可包括:
解析单元,用于对待处理业务的源代码进行解析,获得所述源代码所包含的至少一个函数的关键信息;
插桩处理单元,用于根据所述至少一个函数的关键信息对所述源代码进行插桩处理,获得目标代码;
运行单元,用于运行所述目标代码;
采集单元,用于采集所述目标代码在运行过程中的函数调用信息;
计算单元,用于根据所述函数调用信息,计算所述业务的覆盖参数。
实施本发明实施例,具有如下有益效果:
本发明实施例中,可以根据业务的源代码所包含的至少一个函数的关键信息,对业务的源代码进行插桩处理获得目标代码,采集目标代码运行过程中的函数调用信息,并基于函数调用信息计算业务的覆盖参数,这使得业务的覆盖参数能够精确到源代码中的函数而不受限于代码行的变更,提升了业务的覆盖参数的计算精度,提升对业务的完整性评判的准确度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种业务处理方法的流程图;
图2为本发明实施例提供的另一种业务处理方法的流程图;
图3为图2所示实施例的步骤S210的具体细化步骤;
图4为本发明实施例提供的一种业务处理装置的结构示意图;
图5为本发明实施例提供的一种解析单元的结构示意图;
图6为本发明实施例提供的一种插桩处理单元的结构示意图;
图7为本发明实施例提供的一种采集单元的结构示意图;
图8为本发明实施例提供的一种计算单元105的结构示意图;
图9为图8所示的覆盖率计算单元的实施例的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面将结合附图1-附图3,对本发明实施例提供的业务处理方法进行详细介绍。
请参见图1,为本发明实施例提供的一种业务处理方法的流程图;该方法可包括以下步骤S101-步骤S105。
S101,对待处理业务的源代码进行解析,获得所述源代码所包含的至少一个函数的关键信息。
本发明实施例的业务指互联网业务,可包括但不限于:互联网软件的测试业务、应用程序的检测业务等等,业务通过源代码实现相应的业务功能,例如:互联网软件的测试业务的源代码能够实现对互联网软件的测试功能。通常,源代码中包括至少一个函数,源代码在运行过程中按照需求选择调用其所包含的至少一个函数来实现相应的业务功能。
本发明实施例中,一个函数的关键信息包括:函数的全局唯一名称和函数的起始位置,所述函数的起始位置包括所述函数的起始代码行和起始代码列。其中,函数的全局唯一名称是指采用全局唯一命名规则对函数进行命名所获得的、能够用于标识该函数的唯一名称;具体实现中,对面向对象语言的函数的全局唯一命名规则可包含四部分内容,包括:包名、类名、函数名和函数参数类型名,例如:某面向对象语言编译的函数的全局唯一名称为com.sample.class1.func1(int,int),按照全局唯一命名规则该全局唯一名称包括4部分内容,第一部分内容为包名com.sample,第二部分内容为类名class1,第三部分内容为函数名func1,第四部分内容为函数参数类型名(int,int)。对非面向对象语言的函数的全局唯一命名规则可包含三部分内容,包括:文件路径、文件名和函数名。本步骤中,可对待处理业务的源代码进行解析,包括对源代码的词法和/或语法分析,获得所述源代码所包含的每一个函数的关键信息。
S102,根据所述至少一个函数的关键信息对所述源代码进行插桩处理,获得目标代码。
对所述源代码进行插桩处理是指在所述源代码中插入桩代码,通过桩代码的执行来获得源代码在运行过程中的控制流、数据流等运行信息。插桩处理的关键在于确定桩代码的插入位置,本步骤中可以将每一个函数的起始位置确定为桩代码的插入位置,从而对所述源代码进行插桩处理,完成插桩处理后的源代码可被称为目标代码。
S103,运行所述目标代码。本步骤需要运行所述目标代码,即运行带有桩代码的源代码。
S104,采集所述目标代码在运行过程中的函数调用信息。
所述目标代码即为带有桩代码的源代码,所述目标代码在运行过程中每调用一个函数,则该函数起始位置的桩代码被执行从而输出该函数的调用信息,本步骤中,可采集并统计所述目标代码在运行过程中所调用的所有函数的调用信息;函数调用信息优选包括被调用函数的全局唯一名称,进一步,函数调用信息还可包括被调用函数的用例标识、被调用次数、被调用时间等其他信息。
S105,根据所述函数调用信息,计算所述业务的覆盖参数。
覆盖参数是衡量互联网业务的完整性的一个重要指标,现有技术中采用代码覆盖率表示业务的覆盖参数;本发明实施例可采用函数覆盖率表示业务的覆盖参数。所述函数调用信息优选包括被调用函数的全局唯一名称,即本实施例在计算业务的覆盖参数过程中,仅关注于被调用函数的全局唯一名称,而不再关注于被调用函数中的代码行,因此使得业务的覆盖参数能够精确到函数而可不受限代码行的变更,提升业务的覆盖参数的计算精度。
本发明实施例中,可以根据业务的源代码所包含的至少一个函数的关键信息,对业务的源代码进行插桩处理获得目标代码,采集目标代码运行过程中的函数调用信息,并基于函数调用信息计算业务的覆盖参数,这使得业务的覆盖参数能够精确到源代码中的函数而不受限于代码行的变更,提升了业务的覆盖参数的计算精度,提升对业务的完整性评判的准确度。
请参见图2,为本发明实施例提供的另一种业务处理方法的流程图;该方法可包括以下步骤S201-步骤S210。
S201,获取待处理业务的源代码。
本发明实施例的业务指互联网业务,可包括但不限于:互联网软件的测试业务、应用程序的检测业务等等,业务通过源代码实现相应的业务功能,例如:互联网软件的测试业务的源代码能够实现对互联网软件的测试功能。本步骤需要获取待处理业务的源代码,具体实现中,可以从待处理业务的业务配置文件中获得所述业务的源代码。
S202,对所述源代码进行静态解析,获得所述源代码所包含的至少一个函数。
通常,源代码中包括至少一个函数,源代码在运行过程中按照需求选择调用其所包含的至少一个函数来实现相应的业务功能。本步骤中,可对待处理业务的源代码进行静态解析,包括对源代码的词法和/或语法分析,获得所述源代码所包含的至少一个函数。
S203,读取所述至少一个函数的关键信息。
一个函数的关键信息包括:函数的全局唯一名称和函数的起始位置,所述函数的起始位置包括所述函数的起始代码行和起始代码列。其中,函数的全局唯一名称是指采用全局唯一命名规则对函数进行命名所获得的、能够用于标识该函数的唯一名称;具体实现中,对面向对象语言的函数的全局唯一命名规则可包含四部分内容,包括:包名、类名、函数名和函数参数类型名,例如:某面向对象语言编译的函数的全局唯一名称为com.sample.class1.func1(int,int),按照全局唯一命名规则该全局唯一名称包括4部分内容,第一部分内容为包名com.sample,第二部分内容为类名class1,第三部分内容为函数名func1,第四部分内容为函数参数类型名(int,int)。对非面向对象语言的函数的全局唯一命名规则可包含三部分内容,包括:文件路径、文件名和函数名。本步骤中,依据步骤S202解析获得的至少一个函数,可以读取到每一个函数的关键信息。
本实施例的步骤S201-步骤S203可以为图1所示实施例的步骤S101的具体细化步骤。
S204,按照所述至少一个函数中各函数的全局唯一名称,在所述各函数的起始位置分别插入桩代码。
一个全局唯一名称可用于唯一标识一个函数;本步骤中,可以按照所述至少一个函数中各函数的全局唯一名称,在每个函数的起始位置插入一个桩代码,即一个函数对应一个桩代码。其中,桩代码的具体形式可以根据实际情况确定,例如:桩代码可以为log(funcname),其具体形式可以与源代码的具体形式相同,等等。
S205,将包含所述桩代码的源代码确定为目标代码。
在所述源代码中插入桩代码,可通过桩代码的执行来获得源代码在运行过程中的控制流、数据流等运行信息。本步骤中将完成插桩处理后的源代码称为目标代码。
本实施例的步骤S204-步骤S205可以为图1所示实施例的步骤S102的具体细化步骤。
S206,运行所述目标代码。本步骤需要运行所述目标代码,即运行带有桩代码的源代码。
S207,在所述目标代码的运行过程中输出所述目标代码所调用的目标函数的全局唯一名称。
所述目标代码即为带有桩代码的源代码,所述目标代码在运行过程中每调用一个函数,则该函数起始位置的桩代码被执行从而输出该函数的调用信息,本步骤中可输出所述目标代码所调用的每一个目标函数的全局唯一名称。
S208,按照所述目标函数的全局唯一名称,生成调用函数集合。
按照每一个目标函数的全局唯一名称,可生成调用函数集合,例如:假设步骤S207共输出全局唯一名称a1、a2和a3,本步骤可生成调用函数集合A,该调用函数集合A中包含a1、a2和a3,表明所述目标代码被调用的目标函数包括a1所标识的函数、a2所标识的函数和a3所标识的函数。
S209,按照所述源代码中所包含的至少一个函数的全局唯一名称,生成原函数集合。
按照所述源代码中所包含每一个函数的全局唯一名称,可生成原函数集合,例如:假设所述源代码中包含全局唯一名称分别为a1、a2、a3和b1的四个函数,本步骤可生成原函数集合B,该调用函数集合B中包含a1、a2、a3和b1,表明所述源代码中包含的函数包括a1所标识的函数、a2所标识的函数、a3所标识的函数和b1所标识的函数。
S210,根据所述调用函数集合及所述原函数集合,采用预设的覆盖率计算规则计算所述业务的函数覆盖率。
覆盖参数是衡量互联网业务的完整性的一个重要指标,现有技术中采用代码覆盖率表示业务的覆盖参数;本发明实施例可采用函数覆盖率表示业务的覆盖参数。
请一并参见图3,为图2所示实施例的步骤S210的具体细化步骤;该步骤S210具体可包括以下步骤s11-步骤s13。
s11,求取所述调用函数集合及所述原函数集合的交集。
按照步骤S208-步骤S209所示例子,假设所述调用函数集合为A,所述原函数集合为B,本步骤s11需要求取所述调用函数集合A和原函数集合B的交集A&B,其中,&代表求交集运算。
s12,计算所述交集相对于所述原函数集合的函数百分比。
按照步骤s11的例子,本步骤s12计算获得的所述交集A&B相对于所述原函数集合B的函数百分比可表示为((A&B)/B)*100%。
s13,将计算获得的所述函数百分比确定为所述业务的函数覆盖率。本步骤s13可确定所述业务的函数覆盖率为((A&B)/B)*100%。
本发明实施例中,可以根据业务的源代码所包含的至少一个函数的关键信息,对业务的源代码进行插桩处理获得目标代码,采集目标代码运行过程中的函数调用信息,并基于函数调用信息计算业务的覆盖参数,这使得业务的覆盖参数能够精确到源代码中的函数而不受限于代码行的变更,提升了业务的覆盖参数的计算精度,提升对业务的完整性评判的准确度。
下面将结合附图4-附图9,对本发明实施例提供的业务处理装置的结构和功能进行详细介绍。需要说明的是,下述的业务处理装置可以应用于执行上述附图1-附图3所示的方法。
请参见图4,为本发明实施例提供的一种业务处理装置的结构示意图;该装置可包括:解析单元101、插桩处理单元102、运行单元103、采集单元104和计算单元105。
解析单元101,用于对待处理业务的源代码进行解析,获得所述源代码所包含的至少一个函数的关键信息。
本发明实施例的业务指互联网业务,可包括但不限于:互联网软件的测试业务、应用程序的检测业务等等,业务通过源代码实现相应的业务功能,例如:互联网软件的测试业务的源代码能够实现对互联网软件的测试功能。通常,源代码中包括至少一个函数,源代码在运行过程中按照需求选择调用其所包含的至少一个函数来实现相应的业务功能。
本发明实施例中,一个函数的关键信息包括:函数的全局唯一名称和函数的起始位置,所述函数的起始位置包括所述函数的起始代码行和起始代码列。其中,函数的全局唯一名称是指采用全局唯一命名规则对函数进行命名所获得的、能够用于标识该函数的唯一名称;具体实现中,对面向对象语言的函数的全局唯一命名规则可包含四部分内容,包括:包名、类名、函数名和函数参数类型名,例如:某面向对象语言编译的函数的全局唯一名称为com.sample.class1.func1(int,int),按照全局唯一命名规则该全局唯一名称包括4部分内容,第一部分内容为包名com.sample,第二部分内容为类名class1,第三部分内容为函数名func1,第四部分内容为函数参数类型名(int,int)。对非面向对象语言的函数的全局唯一命名规则可包含三部分内容,包括:文件路径、文件名和函数名。所述解析单元101可对待处理业务的源代码进行解析,包括对源代码的词法和/或语法分析,获得所述源代码所包含的每一个函数的关键信息。
插桩处理单元102,用于根据所述至少一个函数的关键信息对所述源代码进行插桩处理,获得目标代码。
对所述源代码进行插桩处理是指在所述源代码中插入桩代码,通过桩代码的执行来获得源代码在运行过程中的控制流、数据流等运行信息。插桩处理的关键在于确定桩代码的插入位置,所述插桩处理单元102可以将每一个函数的起始位置确定为桩代码的插入位置,从而对所述源代码进行插桩处理,完成插桩处理后的源代码可被称为目标代码。
运行单元103,用于运行所述目标代码。所述运行单元103需要运行所述目标代码,即运行带有桩代码的源代码。
采集单元104,用于采集所述目标代码在运行过程中的函数调用信息。
所述目标代码即为带有桩代码的源代码,所述目标代码在运行过程中每调用一个函数,则该函数起始位置的桩代码被执行从而输出该函数的调用信息,所述采集单元104可采集并统计所述目标代码在运行过程中所调用的所有函数的调用信息;函数调用信息优选包括被调用函数的全局唯一名称,进一步,函数调用信息还可包括被调用函数的用例标识、被调用次数、被调用时间等其他信息。
计算单元105,用于根据所述函数调用信息,计算所述业务的覆盖参数。
覆盖参数是衡量互联网业务的完整性的一个重要指标,现有技术中采用代码覆盖率表示业务的覆盖参数;本发明实施例可采用函数覆盖率表示业务的覆盖参数。所述函数调用信息优选包括被调用函数的全局唯一名称,即本实施例在计算业务的覆盖参数过程中,仅关注于被调用函数的全局唯一名称,而不再关注于被调用函数中的代码行,因此使得业务的覆盖参数能够精确到函数而可不受限代码行的变更,提升业务的覆盖参数的计算精度。
本发明实施例中,可以根据业务的源代码所包含的至少一个函数的关键信息,对业务的源代码进行插桩处理获得目标代码,采集目标代码运行过程中的函数调用信息,并基于函数调用信息计算业务的覆盖参数,这使得业务的覆盖参数能够精确到源代码中的函数而不受限于代码行的变更,提升了业务的覆盖参数的计算精度,提升对业务的完整性评判的准确度。
请参见图5,为本发明实施例提供的一种解析单元的结构示意图;该解析单元101可包括:源代码获取单元1001、静态解析单元1002和关键信息读取单元1003。
源代码获取单元1001,用于获取待处理业务的源代码。
本发明实施例的业务指互联网业务,可包括但不限于:互联网软件的测试业务、应用程序的检测业务等等,业务通过源代码实现相应的业务功能,例如:互联网软件的测试业务的源代码能够实现对互联网软件的测试功能。所述源代码获取单元1001需要获取待处理业务的源代码,具体实现中,可以从待处理业务的业务配置文件中获得所述业务的源代码。
静态解析单元1002,用于对所述源代码进行静态解析,获得所述源代码所包含的至少一个函数。
通常,源代码中包括至少一个函数,源代码在运行过程中按照需求选择调用其所包含的至少一个函数来实现相应的业务功能。所述静态解析单元1002可对待处理业务的源代码进行静态解析,包括对源代码的词法和/或语法分析,获得所述源代码所包含的至少一个函数。
关键信息读取单元1003,用于读取所述至少一个函数的关键信息。
一个函数的关键信息包括:函数的全局唯一名称和函数的起始位置,所述函数的起始位置包括所述函数的起始代码行和起始代码列。其中,函数的全局唯一名称是指采用全局唯一命名规则对函数进行命名所获得的、能够用于标识该函数的唯一名称;具体实现中,对面向对象语言的函数的全局唯一命名规则可包含四部分内容,包括:包名、类名、函数名和函数参数类型名,例如:某面向对象语言编译的函数的全局唯一名称为com.sample.class1.func1(int,int),按照全局唯一命名规则该全局唯一名称包括4部分内容,第一部分内容为包名com.sample,第二部分内容为类名class1,第三部分内容为函数名func1,第四部分内容为函数参数类型名(int,int)。对非面向对象语言的函数的全局唯一命名规则可包含三部分内容,包括:文件路径、文件名和函数名。关键信息读取单元1003依据解析获得的至少一个函数,可以读取到每一个函数的关键信息。
本发明实施例中,可以根据业务的源代码所包含的至少一个函数的关键信息,对业务的源代码进行插桩处理获得目标代码,采集目标代码运行过程中的函数调用信息,并基于函数调用信息计算业务的覆盖参数,这使得业务的覆盖参数能够精确到源代码中的函数而不受限于代码行的变更,提升了业务的覆盖参数的计算精度,提升对业务的完整性评判的准确度。
请参见图6,为本发明实施例提供的一种插桩处理单元的结构示意图;该插桩处理单元102可包括:桩代码插入单元2001和目标代码确定单元2002。
桩代码插入单元2001,用于按照所述至少一个函数中各函数的全局唯一名称,在所述各函数的起始位置分别插入桩代码。
一个全局唯一名称可用于唯一标识一个函数;所述桩代码插入单元2001可以按照所述至少一个函数中各函数的全局唯一名称,在每个函数的起始位置插入一个桩代码,即一个函数对应一个桩代码。其中,桩代码的具体形式可以根据实际情况确定,例如:桩代码可以为log(funcname),其具体形式可以与源代码的具体形式相同,等等。
目标代码确定单元2002,用于将包含所述桩代码的源代码确定为目标代码。
在所述源代码中插入桩代码,可通过桩代码的执行来获得源代码在运行过程中的控制流、数据流等运行信息。所述目标代码确定单元2002将完成插桩处理后的源代码称为目标代码。
本发明实施例中,可以根据业务的源代码所包含的至少一个函数的关键信息,对业务的源代码进行插桩处理获得目标代码,采集目标代码运行过程中的函数调用信息,并基于函数调用信息计算业务的覆盖参数,这使得业务的覆盖参数能够精确到源代码中的函数而不受限于代码行的变更,提升了业务的覆盖参数的计算精度,提升对业务的完整性评判的准确度。
请参见图7,为本发明实施例提供的一种采集单元的结构示意图;该采集单元104可包括:输出单元3001和调用函数集合生成单元3002。
输出单元3001,用于在所述目标代码的运行过程中输出所述目标代码所调用的目标函数的全局唯一名称。
所述目标代码即为带有桩代码的源代码,所述目标代码在运行过程中每调用一个函数,则该函数起始位置的桩代码被执行从而输出该函数的调用信息,所述输出单元3001可输出所述目标代码所调用的每一个目标函数的全局唯一名称。
调用函数集合生成单元3002,用于按照所述目标函数的全局唯一名称,生成调用函数集合。
按照每一个目标函数的全局唯一名称,可生成调用函数集合,例如:假设共输出全局唯一名称a1、a2和a3,所述调用函数集合生成单元3002可生成调用函数集合A,该调用函数集合A中包含a1、a2和a3,表明所述目标代码被调用的目标函数包括a1所标识的函数、a2所标识的函数和a3所标识的函数。
本发明实施例中,可以根据业务的源代码所包含的至少一个函数的关键信息,对业务的源代码进行插桩处理获得目标代码,采集目标代码运行过程中的函数调用信息,并基于函数调用信息计算业务的覆盖参数,这使得业务的覆盖参数能够精确到源代码中的函数而不受限于代码行的变更,提升了业务的覆盖参数的计算精度,提升对业务的完整性评判的准确度。
请参见图8,为本发明实施例提供的一种计算单元105的结构示意图;该计算单元105可包括:原函数集合生成单元4001和覆盖率计算单元4002。
原函数集合生成单元4004,用于按照所述源代码中所包含的至少一个函数的全局唯一名称,生成原函数集合。
按照所述源代码中所包含每一个函数的全局唯一名称,可生成原函数集合,例如:假设所述源代码中包含全局唯一名称分别为a1、a2、a3和b1的四个函数,所述原函数集合生成单元4004可生成原函数集合B,该调用函数集合B中包含a1、a2、a3和b1,表明所述源代码中包含的函数包括a1所标识的函数、a2所标识的函数、a3所标识的函数和b1所标识的函数。
覆盖率计算单元4002,用于根据所述调用函数集合及所述原函数集合,采用预设的覆盖率计算规则计算所述业务的函数覆盖率。
覆盖参数是衡量互联网业务的完整性的一个重要指标,现有技术中采用代码覆盖率表示业务的覆盖参数;本发明实施例可采用函数覆盖率表示业务的覆盖参数。
请一并参见图9,为图8所示的覆盖率计算单元的实施例的结构示意图;所述覆盖率计算单元4002包括:交集求取单元5001、百分比计算单元5002和覆盖率计算单元5003。
交集求取单元5001,用于求取所述调用函数集合及所述原函数集合的交集。
按照图8所示实施例中的例子,假设所述调用函数集合为A,所述原函数集合为B,所述交集求取单元5001需要求取所述调用函数集合A和原函数集合B的交集A&B,其中,&代表求交集运算。
百分比计算单元5002,用于计算所述交集相对于所述原函数集合的函数百分比。
按照本实施例所示例子,所述百分比计算单元5002计算获得的所述交集A&B相对于所述原函数集合B的函数百分比可表示为((A&B)/B)*100%。
覆盖率确定单元5003,用于将计算获得的所述函数百分比确定为所述业务的函数覆盖率。所述覆盖率确定单元5003可确定所述业务的函数覆盖率为((A&B)/B)*100%。
本发明实施例中,可以根据业务的源代码所包含的至少一个函数的关键信息,对业务的源代码进行插桩处理获得目标代码,采集目标代码运行过程中的函数调用信息,并基于函数调用信息计算业务的覆盖参数,这使得业务的覆盖参数能够精确到源代码中的函数而不受限于代码行的变更,提升了业务的覆盖参数的计算精度,提升对业务的完整性评判的准确度。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (12)
1.一种业务处理方法,其特征在于,包括:
对待处理业务的源代码进行解析,获得所述源代码所包含的至少一个函数的关键信息;
根据所述至少一个函数的关键信息对所述源代码进行插桩处理,获得目标代码;
运行所述目标代码,并采集所述目标代码在运行过程中的函数调用信息;
根据所述函数调用信息,计算所述业务的覆盖参数。
2.如权利要求1所述的方法,其特征在于,所述对待处理业务的源代码进行解析,获得所述源代码所包含的至少一个函数的关键信息,包括:
获取待处理业务的源代码;
对所述源代码进行静态解析,获得所述源代码所包含的至少一个函数;
读取所述至少一个函数的关键信息,其中,一个函数的关键信息包括:函数的全局唯一名称和函数的起始位置,所述函数的起始位置包括所述函数的起始代码行和起始代码列。
3.如权利要求2所述的方法,其特征在于,所述根据所述至少一个函数的关键信息对所述源代码进行插桩处理,获得目标代码,包括:
按照所述至少一个函数中各函数的全局唯一名称,在所述各函数的起始位置分别插入桩代码;
将包含所述桩代码的源代码确定为目标代码。
4.如权利要求1-3任一项所述的方法,其特征在于,所述采集所述目标代码在运行过程中的函数调用信息,包括:
在所述目标代码的运行过程中输出所述目标代码所调用的目标函数的全局唯一名称;
按照所述目标函数的全局唯一名称,生成调用函数集合。
5.如权利要求4所述的方法,其特征在于,所述根据所述函数调用信息,计算所述业务的覆盖参数,包括:
按照所述源代码中所包含的至少一个函数的全局唯一名称,生成原函数集合;
根据所述调用函数集合及所述原函数集合,采用预设的覆盖率计算规则计算所述业务的函数覆盖率。
6.如权利要求5所述的方法,其特征在于,所述根据所述调用函数集合及所述原函数集合,采用预设的覆盖率计算规则计算所述业务的函数覆盖率,包括:
求取所述调用函数集合及所述原函数集合的交集;
计算所述交集相对于所述原函数集合的函数百分比;
将计算获得的所述函数百分比确定为所述业务的函数覆盖率。
7.一种业务处理装置,其特征在于,包括:
解析单元,用于对待处理业务的源代码进行解析,获得所述源代码所包含的至少一个函数的关键信息;
插桩处理单元,用于根据所述至少一个函数的关键信息对所述源代码进行插桩处理,获得目标代码;
运行单元,用于运行所述目标代码;
采集单元,用于采集所述目标代码在运行过程中的函数调用信息;
计算单元,用于根据所述函数调用信息,计算所述业务的覆盖参数。
8.如权利要求7所述的装置,其特征在于,所述解析单元包括:
源代码获取单元,用于获取待处理业务的源代码;
静态解析单元,用于对所述源代码进行静态解析,获得所述源代码所包含的至少一个函数;
关键信息读取单元,用于读取所述至少一个函数的关键信息,其中,一个函数的关键信息包括:函数的全局唯一名称和函数的起始位置,所述函数的起始位置包括所述函数的起始代码行和起始代码列。
9.如权利要求8所述的装置,其特征在于,所述插桩处理单元包括:
桩代码插入单元,用于按照所述至少一个函数中各函数的全局唯一名称,在所述各函数的起始位置分别插入桩代码;
目标代码确定单元,用于将包含所述桩代码的源代码确定为目标代码。
10.如权利要求7-9任一项所述的装置,其特征在于,所述采集单元包括:
输出单元,用于在所述目标代码的运行过程中输出所述目标代码所调用的目标函数的全局唯一名称;
调用函数集合生成单元,用于按照所述目标函数的全局唯一名称,生成调用函数集合。
11.如权利要求10所述的装置,其特征在于,所述计算单元包括:
原函数集合生成单元,用于按照所述源代码中所包含的至少一个函数的全局唯一名称,生成原函数集合;
覆盖率计算单元,用于根据所述调用函数集合及所述原函数集合,采用预设的覆盖率计算规则计算所述业务的函数覆盖率。
12.如权利要求11所述的装置,其特征在于,所述覆盖率计算单元包括:
交集求取单元,用于求取所述调用函数集合及所述原函数集合的交集;
百分比计算单元,用于计算所述交集相对于所述原函数集合的函数百分比;
覆盖率确定单元,用于将计算获得的所述函数百分比确定为所述业务的函数覆盖率。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510180527.1A CN106155897B (zh) | 2015-04-16 | 2015-04-16 | 一种业务处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510180527.1A CN106155897B (zh) | 2015-04-16 | 2015-04-16 | 一种业务处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106155897A true CN106155897A (zh) | 2016-11-23 |
CN106155897B CN106155897B (zh) | 2020-12-08 |
Family
ID=58058698
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510180527.1A Active CN106155897B (zh) | 2015-04-16 | 2015-04-16 | 一种业务处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106155897B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108073513A (zh) * | 2017-04-21 | 2018-05-25 | 富士通株式会社 | 对基于区块链的智能合约进行测试的装置和方法 |
CN109325900A (zh) * | 2018-09-19 | 2019-02-12 | 北京润科通用技术有限公司 | 一种算法的部署方法和系统 |
CN110196801A (zh) * | 2018-02-24 | 2019-09-03 | 武汉斗鱼网络科技有限公司 | 一种基于代码覆盖率的测试方法及装置 |
CN110705715A (zh) * | 2019-09-27 | 2020-01-17 | 北京迈格威科技有限公司 | 超参数管理方法、装置及电子设备 |
CN112667245A (zh) * | 2021-01-15 | 2021-04-16 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种代码处理方法、装置、电子设备及存储介质 |
WO2023116003A1 (zh) * | 2021-12-24 | 2023-06-29 | 北京百度网讯科技有限公司 | 数据处理方法、装置、设备、存储介质及计算机程序产品 |
CN116991751A (zh) * | 2023-09-28 | 2023-11-03 | 英诺达(成都)电子科技有限公司 | 代码测试方法、装置、电子设备及存储介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0767430A2 (en) * | 1995-09-11 | 1997-04-09 | Applied Microsystems, Inc. | Method and apparatus for analyzing software executed in embedded systems |
CN101464829A (zh) * | 2007-12-18 | 2009-06-24 | 珠海金山软件股份有限公司 | 确定代码覆盖率的方法、测试装置 |
CN101561777A (zh) * | 2008-04-14 | 2009-10-21 | 中兴通讯股份有限公司 | 一种实现覆盖率测试的系统和方法 |
CN101833500A (zh) * | 2010-04-07 | 2010-09-15 | 南京航空航天大学 | 一种基于Agent的嵌入式软件智能测试方法 |
CN102346710A (zh) * | 2011-10-13 | 2012-02-08 | 北京航空航天大学 | 一种基于动态插桩技术的数据包处理时延分析方法 |
CN102419728A (zh) * | 2011-11-01 | 2012-04-18 | 北京邮电大学 | 基于覆盖率量化指标确定软件测试过程充分性的方法 |
US20120167059A1 (en) * | 2010-12-24 | 2012-06-28 | International Business Machines Corporation | Evaluating Coverage of a Software Test |
CN103473171A (zh) * | 2013-08-28 | 2013-12-25 | 北京信息科技大学 | 一种基于函数调用路径的覆盖率动态跟踪方法及装置 |
CN103617120A (zh) * | 2013-12-05 | 2014-03-05 | 北京奇虎科技有限公司 | 一种单元测试方法和装置 |
CN103699476A (zh) * | 2012-09-27 | 2014-04-02 | 腾讯科技(深圳)有限公司 | 覆盖率测试方法及系统 |
CN104199773A (zh) * | 2014-09-03 | 2014-12-10 | 腾讯科技(深圳)有限公司 | 获取代码覆盖信息的方法及装置 |
CN104317723A (zh) * | 2014-11-14 | 2015-01-28 | 清华大学 | 一种驱动程序运行信息的跟踪方法及系统 |
-
2015
- 2015-04-16 CN CN201510180527.1A patent/CN106155897B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0767430A2 (en) * | 1995-09-11 | 1997-04-09 | Applied Microsystems, Inc. | Method and apparatus for analyzing software executed in embedded systems |
CN101464829A (zh) * | 2007-12-18 | 2009-06-24 | 珠海金山软件股份有限公司 | 确定代码覆盖率的方法、测试装置 |
CN101561777A (zh) * | 2008-04-14 | 2009-10-21 | 中兴通讯股份有限公司 | 一种实现覆盖率测试的系统和方法 |
CN101833500A (zh) * | 2010-04-07 | 2010-09-15 | 南京航空航天大学 | 一种基于Agent的嵌入式软件智能测试方法 |
US20120167059A1 (en) * | 2010-12-24 | 2012-06-28 | International Business Machines Corporation | Evaluating Coverage of a Software Test |
CN102346710A (zh) * | 2011-10-13 | 2012-02-08 | 北京航空航天大学 | 一种基于动态插桩技术的数据包处理时延分析方法 |
CN102419728A (zh) * | 2011-11-01 | 2012-04-18 | 北京邮电大学 | 基于覆盖率量化指标确定软件测试过程充分性的方法 |
CN103699476A (zh) * | 2012-09-27 | 2014-04-02 | 腾讯科技(深圳)有限公司 | 覆盖率测试方法及系统 |
CN103473171A (zh) * | 2013-08-28 | 2013-12-25 | 北京信息科技大学 | 一种基于函数调用路径的覆盖率动态跟踪方法及装置 |
CN103617120A (zh) * | 2013-12-05 | 2014-03-05 | 北京奇虎科技有限公司 | 一种单元测试方法和装置 |
CN104199773A (zh) * | 2014-09-03 | 2014-12-10 | 腾讯科技(深圳)有限公司 | 获取代码覆盖信息的方法及装置 |
CN104317723A (zh) * | 2014-11-14 | 2015-01-28 | 清华大学 | 一种驱动程序运行信息的跟踪方法及系统 |
Non-Patent Citations (3)
Title |
---|
孙陇平: "嵌入式软件覆盖率测试的研究与应用", 《现代电子技术 计算机应用技术》 * |
边耐政等: "一种基于Selenium的Web自动化测试低耦合框架", 《计算机应用与软件 软件技术与研究》 * |
韦涛: "基于http服务器的嵌入式软件自动化测试框架的设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108073513A (zh) * | 2017-04-21 | 2018-05-25 | 富士通株式会社 | 对基于区块链的智能合约进行测试的装置和方法 |
CN110196801A (zh) * | 2018-02-24 | 2019-09-03 | 武汉斗鱼网络科技有限公司 | 一种基于代码覆盖率的测试方法及装置 |
CN109325900A (zh) * | 2018-09-19 | 2019-02-12 | 北京润科通用技术有限公司 | 一种算法的部署方法和系统 |
CN110705715A (zh) * | 2019-09-27 | 2020-01-17 | 北京迈格威科技有限公司 | 超参数管理方法、装置及电子设备 |
CN110705715B (zh) * | 2019-09-27 | 2023-04-18 | 北京迈格威科技有限公司 | 超参数管理方法、装置及电子设备 |
CN112667245A (zh) * | 2021-01-15 | 2021-04-16 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种代码处理方法、装置、电子设备及存储介质 |
WO2023116003A1 (zh) * | 2021-12-24 | 2023-06-29 | 北京百度网讯科技有限公司 | 数据处理方法、装置、设备、存储介质及计算机程序产品 |
CN116991751A (zh) * | 2023-09-28 | 2023-11-03 | 英诺达(成都)电子科技有限公司 | 代码测试方法、装置、电子设备及存储介质 |
CN116991751B (zh) * | 2023-09-28 | 2023-12-22 | 英诺达(成都)电子科技有限公司 | 代码测试方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106155897B (zh) | 2020-12-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106155897A (zh) | 一种业务处理方法及装置 | |
CN101261604B (zh) | 一种软件质量评价装置及软件质量评价的定量分析方法 | |
CN109542789B (zh) | 一种代码覆盖率统计方法及装置 | |
CN111241214B (zh) | 用于水利工程的水质远程在线检测方法、装置及电子设备 | |
JP2019512126A (ja) | 機械学習システムをトレーニングする方法及びシステム | |
CN102043720A (zh) | 利用sql语句自动生成测试数据的方法和装置 | |
CN108830554A (zh) | 基于任务模型的数据成果信息质量智能检测方法和系统 | |
CN110874702A (zh) | 物流分拣场景下的模型训练方法、装置以及电子设备 | |
CN103235757B (zh) | 基于自动化造数对输入域测试对象进行测试的装置和方法 | |
CN111414619A (zh) | 一种数据安全检测方法、装置、设备及可读存储介质 | |
CN109165857A (zh) | 基于多因素递进叠合的页岩气选区评价方法及系统 | |
CN111986552B (zh) | 地图数据质量鲜度获取方法、装置及存储介质 | |
CN108267613B (zh) | 一种测风数据处理方法及相关设备 | |
CN105302691A (zh) | 一种元数据性能监控方法及系统 | |
CN112559313A (zh) | 测试用例的设置方法及装置、存储介质、电子设备 | |
CN116468436A (zh) | 一种计费规则生成方法及装置 | |
CN104408316B (zh) | 中美岩土工程土壤分类标准转换装置及方法 | |
CN109542775A (zh) | 一种测试脚本的生成和执行方法及装置 | |
CN114817209A (zh) | 监控规则的处理方法和装置、处理器及电子设备 | |
CN107861725B (zh) | 一种iOS数据反向自动解析策略 | |
CN105844176A (zh) | 安全策略生成方法及设备 | |
CN118035688B (zh) | 一种基于水利数据的多维运算分析方法及装置 | |
CN116756388B (zh) | 一种电网资产数据普查系统及方法及装置及介质 | |
CN115687158B (zh) | 一种协议软件的测试方法及装置 | |
CN112733516B (zh) | 快讯处理方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |