CN115509883A - 代码覆盖率的检测方法、装置、平台、系统和存储介质 - Google Patents
代码覆盖率的检测方法、装置、平台、系统和存储介质 Download PDFInfo
- Publication number
- CN115509883A CN115509883A CN202110689667.7A CN202110689667A CN115509883A CN 115509883 A CN115509883 A CN 115509883A CN 202110689667 A CN202110689667 A CN 202110689667A CN 115509883 A CN115509883 A CN 115509883A
- Authority
- CN
- China
- Prior art keywords
- instrumentation
- app
- component
- coverage
- coverage rate
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本公开实施例涉及一代码覆盖率的检测方法、装置、平台、系统和存储介质,通过获取测试设备对覆盖率插桩应用程序APP执行测试用例后得到的测试数据,测试数据包括测试用例覆盖到的桩的信息,基于预先得到的该覆盖率插桩APP中的组件的插桩现场信息,以及测试用例覆盖到的桩的信息,确定覆盖率插桩APP中的组件的代码覆盖率数据。实现了对组件化APP中各组件的代码覆盖率的准确检测,为分析组件化APP的软件质量提供了可靠依据。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种代码覆盖率的检测方法、装置、平台、系统和存储介质。
背景技术
随着用户业务需求的增长,当前移动端应用程序(Application简称APP)逐渐趋向于大型化,代码量越来越巨大,开发人员越来越难以协同维护巨量的工程代码。
当前通用的主流技术是将移动端APP进行组件化拆分,把单一巨量工程拆分成多个子工程,各个团队只负责少数个子工程的研发,对外输出应用程序的组件软件开发工具包(Software Development Kit,简称SDK),这样就成功的解决了巨量代码协同开发维护的问题。组件化的大型移动端APP在处于敏捷开发模式下,迭代速度比较快,因此对质量要求也比较高,代码覆盖率监检测是度量项目开发质量的重要指标,对于保障软件质量有关键意义。而传统的代码覆盖率检测系统仅对单一工程有效,而组件化的APP工程分散,APP编译集成的是多个组件SDK,因此,亟需一种方案来解决组件化APP的代码覆盖率检测难题。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开实施例提供了一种代码覆盖率的检测方法、装置、平台、系统和存储介质。
本公开实施例的第一方面提供了一种代码覆盖率的检测方法,包括:获取测试设备对覆盖率插桩应用程序APP执行测试用例后得到的测试数据,所述测试数据包括所述测试用例覆盖到的所述覆盖率插桩APP中的桩的信息,所述覆盖率插桩APP是指经过插桩处理后的APP;基于所述覆盖率插桩APP中的组件的插桩现场信息,以及所述测试用例覆盖到的桩的信息,确定所述覆盖率插桩APP中的组件的代码覆盖率数据。
在一种可行的实施方式中,所述组件的插桩现场信息中包括所述组件中的桩的位置信息;
所述基于所述覆盖率插桩APP中的组件的插桩现场信息,以及所述测试用例覆盖到的桩的信息,确定所述覆盖率插桩APP中的组件的代码覆盖率数据,包括:
基于所述组件中的桩的位置信息,确定所述测试用例覆盖到的桩在所述组件中的位置;基于所述测试用例覆盖到的桩在所述组件中的位置,确定所述组件被所述测试用例覆盖到的代码行;基于所述组件被所述测试用例覆盖到的代码行,以及预先得到的所述组件的总行数,确定得到所述组件的行覆盖率。
在一种可行的实施方式中,所述基于所述测试用例覆盖到的桩在所述组件中的位置,确定所述组件被所述测试用例覆盖到的代码行之后,所述方法还包括:
基于预先得到的所述组件中的方法和类所在的代码行的信息,确定所述组件被所述测试用例覆盖到的代码行中包括的方法和类的数量;基于所述组件被所述测试用例覆盖到的代码行中包括的方法和类的数量,以及预先得到的所述组件中包括的方法和类的总数量,确定所述组件的方法覆盖率和类覆盖率。
在一种可行的实施方式中,所述基于所述覆盖率插桩APP中的组件的插桩现场信息,以及所述测试用例覆盖到的桩的信息,确定所述覆盖率插桩APP中的组件的代码覆盖率数据之前,所述方法还包括:
获取所述覆盖率插桩APP与构成所述覆盖率插桩APP的组件之间的绑定关系;基于所述绑定关系,从预先存储的插桩现场信息中查找得到所述组件的插桩现场信息。
在一种可行的实施方式中,所述基于所述覆盖率插桩APP中的组件的插桩现场信息,以及所述测试用例覆盖到的桩的信息,确定所述覆盖率插桩APP中的组件的代码覆盖率数据之后,所述方法还包括:
基于所述绑定关系,以及所述覆盖率插桩APP中的组件的代码覆盖率数据,确定所述覆盖率插桩APP的代码覆盖率数据。
本公开实施例的第二方面提供了一种检测装置,该检测装置,包括:
第一获取模块,用于获取测试设备对覆盖率插桩应用程序APP执行测试用例后得到的测试数据,所述测试数据包括所述测试用例覆盖到的所述覆盖率插桩APP中的桩的信息,所述覆盖率插桩APP是指经过插桩处理后的APP;
第一确定模块,用于基于所述覆盖率插桩APP中的组件的插桩现场信息,以及所述测试用例覆盖到的桩的信息,确定所述覆盖率插桩APP中的组件的代码覆盖率数据。
在一种实施方式中,所述第一确定模块,包括:
第一确定子模块,用于基于所述组件中的桩的位置信息,确定所述测试用例覆盖到的桩在所述组件中的位置;
第二确定子模块,用于基于所述测试用例覆盖到的桩在所述组件中的位置,确定所述组件被所述测试用例覆盖到的代码行;
第三确定子模块,用于基于所述组件被所述测试用例覆盖到的代码行,以及预先得到的所述组件的总行数,确定得到所述组件的行覆盖率。
在一种实施方式中,所述第一确定模块,还包括:
第四确定子模块,用于基于预先得到的所述组件中的方法和类所在的代码行的信息,确定所述组件被所述测试用例覆盖到的代码行中包括的方法和类的数量;
第五确定子模块,用于基于所述组件被所述测试用例覆盖到的代码行中包括的方法和类的数量,以及预先得到的所述组件中包括的方法和类的总数量,确定所述组件的方法覆盖率和类覆盖率。
在一种实施方式中,所述装置还包括:
第二获取模块,用于获取所述覆盖率插桩APP与构成所述覆盖率插桩APP的组件之间的绑定关系;
查找模块,用于基于所述绑定关系,从预先存储的插桩现场信息中查找得到所述组件的插桩现场信息。
在一种实施方式中,所述装置还包括:
第二确定模块,用于基于所述绑定关系,以及所述覆盖率插桩APP中的组件的代码覆盖率数据,确定所述覆盖率插桩APP的代码覆盖率数据。
本公开实施例的第三方面提供了一种云端检测平台,该平台包括:处理器和存储器,其中,所述存储器中存储有计算机程序,当所述计算机程序被所述处理器执行时,所述处理器执行上述第一方面的方法。
本公开实施例的第四方面提供了一种检测系统,该检测系统包括组件管理平台、测试设备、软件集成平台和云端检测平台;
所述组件管理平台上存储有经过插桩处理的组件;
所述软件集成平台用于从所述组件管理平台上获取组件集成覆盖率插桩APP,并将所述覆盖率插桩APP分发给所述测试设备,以使所述测试设备对所述覆盖率插桩APP执行测试用例;
所述云端检测平台,用于获取所述测试用例覆盖到的所述覆盖率插桩APP中的桩的信息;以及基于所述覆盖率插桩APP中的组件的插桩现场信息和所述测试用例覆盖到的桩的信息,确定所述覆盖率插桩APP中的组件的代码覆盖率数据。
本公开实施例的第五方面提供了一种计算机可读存储介质,该存储介质中存储有计算机程序,当所述计算机程序被处理器执行时,所述处理器执行上述第一方面的方法。
公开实施例提供的技术方案与现有技术相比具有如下优点:
本公开实施例,通过获取测试设备对覆盖率插桩应用程序APP执行测试用例后得到的测试数据,测试数据包括测试用例覆盖到的桩的信息,基于预先得到的该覆盖率插桩APP中的组件的插桩现场信息,以及测试用例覆盖到的桩的信息,确定覆盖率插桩APP中的组件的代码覆盖率数据。实现了对组件化APP中各组件的代码覆盖率的准确检测,为分析组件化APP的软件质量提供了可靠依据。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本公开实施例提供的一种代码覆盖率的检测系统的结构示意图;
图2是本公开实施例提供的一种SDK产物上传方法的示意图;
图3是本公开实施例提供的一种集成APP的方法的示意图;
图4是本公开实施例提供的一种组件管理平台下发组件的方法示意图;
图5是本公开实施例提供的一种覆盖率插桩的示意图;
图6是本公开实施例提供的一种代码覆盖率的检测方法的流程图;
图7是本公开实施例提供的又一种代码覆盖率的检测方法的示意图;
图8是本公开实施例提供的一种检测装置的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
在本公开的一个实施例中提供一种代码覆盖率的检测系统,该检测系统可以用于检测组件化的应用程序的代码覆盖率。图1是本公开实施例提供的一种代码覆盖率的检测系统的结构示意图,如图1所示。该检测系统至少包括软件集成平台10和云端检测平台11、测试设备12和组件管理平台13。
其中,组件管理平台13上存储有经过插桩处理的组件和未经过插桩处理的组件。
软件集成平台10用于从组件管理平台上获取组件集成覆盖率插桩APP,并将覆盖率插桩APP分发给测试设备12,以使用户14在测试设备12操作针对该覆盖率插桩APP的测试用例。
云端检测平台11,用于获取测试用例覆盖到的覆盖率插桩APP中的桩的信息;以及基于预先得到的该覆盖率插桩APP中的组件的插桩现场信息和测试用例覆盖到的桩的信息,确定该覆盖率插桩APP中的组件的代码覆盖率数据。
具体的,图2是本公开实施例提供的一种SDK产物上传方法的示意图,如图2所示,在将SDK产物上传组件管理平台13的场景中,用户可以通过软件集成平台10提供的用户交互系统对待编译的组件的组别、名称、版本号等信息进行设置,并触发软件集成平台10对待编译的组件进行编译。其中,软件集成平台10对待编译的组件的编译包括两个部分,一部分是对没有经过插桩的组件进行编译得到组件的原始产物,另一部分是先根据预设的插桩规则对组件进行插桩处理,然后对插桩后的组件进行编译得到组件的代码覆盖率插桩产物。在的编译得到得组件的原始产物和代码覆盖率插桩产物之后,软件集成平台10判断编译得到的原始产物和代码覆盖率插桩产物是否是首次发布,如果是,则将编译得到的原始产物和代码覆盖率插桩产物会上报给组件管理平台13进行存储,否则不上传。
可选的,为了防止冗余存储,组件管理平台13在接收到软件集成平台10上报的原始产物和代码覆盖率插桩产物之后,会先根据各产物的组别、名称和版本等信息,确定当前已存储该原始产物和代码覆盖率插桩产物,若否,则对该原始产物和代码覆盖率插桩产物进行存储,否则不进行重复存储。
进一步的,图3是本公开实施例提供的一种集成APP的方法的示意图,如图3所示,在集成APP的场景中,软件集成平台10还可以通过用户交互系统获取用户配置的用于集成APP的组件列表,组件列表中包括组件的信息(比如,组件所属的组别、组件的名称及版本号等),并根据该些组件的信息确定目标集成的是否是覆盖率插桩APP,如果是,则将用于集成APP的各组件的信息上报给组件管理平台13,从组件管理平台13中获取各组件的代码覆盖率插桩产物,基于各组件的代码覆盖率插桩产物集成覆盖率插桩APP,并绑定宿主(即生成的覆盖率插桩APP)与组件SDK的绑定关系,并将绑定关系上报给云端检测平台11。如果目标集成的不是覆盖率插桩APP,则基于各组件的信息从组件管理平台13中获取各组件的原始产物,并基于各组件的原始产物生成原始APP。其中,组件的代码覆盖率插桩产物是指对组件进行插桩处理得到的产物,该产物可以理解为经过插桩处理后的组件。组件的组别可以根据需要进行划分,而不必局限于某一种特定的划分方式。为了方便理解,本实施例中可以将组件的组别示例性的理解为按照实现的功能(比如,转账、红包、发送消息等)划分得到的组别。
需要说明的是本实施例集成的盖率插桩APP中包括实时上报模块,实时上报模块用于将测试用例的测试数据上传给云端检测平台11。软件集成平台10产出的覆盖率插桩APP会被分发给一个或多个测试设备12。测试设备12接收到覆盖率插桩APP后运行该APP,用户14在测试设备12上对该覆盖率插桩APP执行测试用例(该测试用例可以是一个也可以是多个,测试用例可以是人工用例和/或自动化用例),并将该些测试用例覆盖到的桩的信息上报给云端检测平台11,其中,上述桩的信息包括但不局限于包括桩的标识信息。
进一步的,图4是本公开实施例提供的一种组件管理平台下发组件的方法示意图,如图4所示,组件管理平台13(在图1中未示出)在接收到软件集成平台10的请求后,首先根据请求信息中携带的组件的组别、名称、版本等信息,从预先存储的组件或者代码覆盖率插桩查无中匹配得到相应的组件或者代码覆盖率插桩产物,然后根据请求信息判断软件集成平台10是否请求组件的代码覆盖率插桩产物,如果不是,则将匹配得到的未经插桩处理的组件反馈给软件集成平台10,使得软件集成平台10基于未经过插桩处理的组件生成给用户使用的APP;如果是,则将匹配得到的代码覆盖率插桩产物反馈给软件集成平台10,使得软件集成平台10基于代码覆盖率插桩产物集成得到覆盖率插桩APP。其中,判断是否请求组件的代码覆盖率插桩产物的步骤也可以在匹配组件组别、名称、版本号等信息之前执行。
在本实施例中,云端检测平台11中预先存储有构成上述覆盖率插桩APP的组件的插桩现场信息。其中插桩现场信息中至少包括组件中包含的桩的标识信息和桩在组件中的位置信息。其中桩的位置信息包括但不局限于包括桩在组件中的行数信息。在这种情况下,云端检测平台11在接收到上述测试设备12上报的信息后,可以根据测试设备12上报的测试用例覆盖到的桩的标识信息、覆盖率插桩APP与构成该覆盖率插桩APP的代码覆盖率插桩产物之间的绑定关系以及预先得到的覆盖率插桩APP中各组件的插桩现场信息,处理得到APP的代码覆盖率以及APP中各组件的代码覆盖率,其中,APP的代码覆盖率以及APP中各组件的代码覆盖率包括但不限于如下中的至少一种代码的行覆盖率、方法覆盖率和类覆盖率。举例来说,图5是本公开实施例提供的一种覆盖率插桩的示意图,如图5所示,假设基于多个组件编译集成得到的APP共有100行代码,该些代码的行用L1到L100进行表示,其中在第L30和L31之后包括桩Z1,L70和L71之间包括桩Z2,L90和L911之间包括桩Z3,L100之后包括桩Z4。如果测试设备12执行测试用例后监测到桩Z1、Z2和桩Z3被覆盖到,而Z4没有被覆盖到,那么则可以确定L91行到L100行的代码没有被执行到,此时执行到的代码行数为90行,计算得到的代码覆盖率为90%。当然这里仅为示例说明而不是对本公开的唯一限定。
本公开实施例,设计了一种应用程序代码覆盖率的检测系统,该检测系统中的软件集成平台可以用于获取APP中各组件的代码覆盖率插桩产物,基于各组件的代码覆盖率插桩产物生成APP对应的覆盖率插桩APP,以及将覆盖率插桩APP与各组件的代码覆盖率插桩产物之间的绑定关系上报给云端检测平台,将生成的覆盖率插桩APP分发给测试设备,以使测试设备对该覆盖率插桩APP执行测试用例,得到该测试用例在该覆盖率插桩APP上覆盖到的桩的信息;该检测系统中的云端检测平台可以用于根据测试设备上报的测试用例覆盖到的桩的信息,覆盖率插桩APP与各组件的代码覆盖率插桩产物之间的绑定关系以及预先得到的该些组件的插桩现场信息,确定得到APP的代码覆盖率以及APP中组件的代码覆盖率。本公开实施例提供的方案能够准确检测到组件化APP的代码覆盖率和APP中组件的代码覆盖率,为分析组件化APP的软件质量提供可靠依据。
本实施例通过组件管理平台对APP的组件和组件的代码覆盖率插桩产物进行管理,能够在APP生产过程中和APP代码覆盖率检测过程中快速获的相应组件或者代码覆盖率插桩产物,提高了APP的生产效率和代码覆盖率检测效率。
图6是本公开实施例提供的一种代码覆盖率的检测方法的流程图,该方法可以应用于上述实施例中的云端检测平台执行。该方法包括:
步骤601、获取测试设备对覆盖率插桩应用程序APP执行测试用例后得到的测试数据,测试数据包括测试用例覆盖到该覆盖率插桩APP中的桩的信息,覆盖率插桩APP是指经过插桩处理后的APP。
步骤602、基于所述覆盖率插桩APP中的组件的插桩现场信息,以及测试用例覆盖到的桩的信息,确定所述覆盖率插桩APP中的组件的代码覆盖率数据。
参照上述实施例中的检测系统,覆盖率插桩APP中的组件的插桩现场信息可以基于软件集成平台10上报的各组件的插桩现场的信息,以及覆盖率插桩APP与构成覆盖率插桩APP的组件之间的绑定关系,从已存储的组件的插桩现场的信息中获取构成覆盖率插桩APP的组件的插桩现场的信息。其中,组件的插桩现场信息中可以包括组件中的桩的位置信息。
在本实施例提供的一种实施方式中,步骤602可以包括:
步骤A、基于组件中的桩的位置信息,确定测试用例覆盖到的桩在所述组件中的位置。
步骤B、基于测试用例覆盖到的桩在组件中的位置,确定组件被测试用例覆盖到的代码行。
步骤C、基于组件被测试用例覆盖到的代码行,以及预先得到的组件的总行数,确定得到组件的行覆盖率。
其中,组件的插桩现场信息中包括的桩的位置信息,可以理解为组件的代码转换成相应的字节码/汇编指令后,桩在字节码/汇编指令中的位置的信息。云端检测平台在接收到测试设备上报的测试数据后,根据测试数据中包括的桩的信息,确定测试用例覆盖到的桩在字节码/汇编指令中的位置,然后通过逆向工程确定字节码/汇编指令与代码行之间的对应关系,从而根据测试用例覆盖到的桩在字节码/汇编指令中的位置,以及字节码/汇编指令与代码行之间的对应关系,即可以得到组件被测试用例覆盖到的代码行,进而根据被覆盖到的代码行与组件总的代码行数的比例关系,即可得到组件的行覆盖率。
或者在其他实施方式中,组件的插桩现场信息中包括的桩的位置信息也可以理解为,桩在组件代码中的位置信息,也即每个桩位于组件代码中的代码行的信息,进一步的根据测试设备上报测试数据中包括的桩的信息,即可以确定得到测试用例覆盖到的桩在组件代码中的代码行,进而根据测试用例覆盖到的代码行占组件总代码数据的比例,即可确定得到组件的行覆盖率。
进一步的,在本实施例的有一些实施例中,在上述B步骤之后,还可以包括:
步骤D、基于预先得到的组件中的方法和类所在的代码行的信息,确定组件被测试用例覆盖到的代码行中包括的方法和类的数量。
比如,在一些实施例方式中,软件集成平台上报给云端检测平台的组件的插桩现场信息中,还可以包括组件中包括的各方法和类在组件代码中的位置,该位置可以用行信息进行表示。比如,组件中包括方法a和方法b,其中,方法a在组件代码中的位置为第5行到第10行,方法b组件代码中的位置为第11行到第20行,那么如果测试用例覆盖到的桩分别在组件代码的第10行和第20行,那么根据预先得到的组件中的方法和类所在的代码行的信息,可以确定测试用例覆盖到了组件中的两个方法,类似的测试用例覆盖到的类的数量也可以采用与前述类似的方法确定得到。
步骤E、基于组件被测试用例覆盖到的代码行中包括的方法和类的数量,以及预先得到的组件中包括的方法和类的总数量,确定组件的方法覆盖率和类覆盖率。
举例来说,假设组件中包括的方法数为5,包括的类的数量为5,被覆盖到的方法的数量为1,类的数量为1,那么,组件的方法覆盖率为20%,类覆盖率为为20%。当然这里仅为举例说明而不是唯一限定。
通过测试用例覆盖到的桩的信息,以及组件插桩现场信息中包括的装置的位置信息,方法和类所在的代码行的信息,能够准确的确定出覆盖率插桩APP中各组件的行覆盖率、方法覆盖率和类覆盖率信息。提高了确定组件化APP的代码覆盖率的效率和准确性。
可选的,在本公开的又一些实施例中,在确定出覆盖率插桩APP中各组件的行覆盖率、方法覆盖率和类覆盖率之后,还可以根据覆盖率插桩APP与构成该覆盖率插桩APP组件之间的绑定关系,确定出覆盖率插桩APP包括的总的代码行数、方法数和类数,进而基于覆盖率插桩APP中各组件的行覆盖率、方法覆盖率和类覆盖率数据,确定出覆盖率插桩APP总的行覆盖率、方法覆盖率和类覆盖率数据数据,例如,覆盖率插桩APP中2个组件总共包括100行、10个方法和10个类,其中一个组件被测试用例覆盖到50行,1个方法和1个类,另一个组件被测试用例覆盖到20行,7个方法和6个类,则覆盖率插桩APP的行覆盖率为70%、方法覆盖率为80%、类覆盖率为70%。当然这里仅为示例说明而不是唯一限定。
本公开实施例根据覆盖率插桩APP与组件之间的绑定关系,以及覆盖率插桩APP中各组件的行覆盖率、方法覆盖率和类覆盖率数据,能够准确确定出覆盖率插桩APP总的行覆盖率、方法覆盖率和类覆盖率。从而为分析覆盖率插桩APP的软件质量提供了可靠保证。
图7是本公开实施例提供的又一种代码覆盖率的检测方法的示意图,如图7所示,该方法可以包括:
S1、获取所有测试设备上报的测试数据。
其中,测试数据中包括的桩的信息,可以理解为覆盖率插桩APP的代码转换成对应的字节码/汇编指令后,字节码/汇编指令中被覆盖到的桩的信息。
S2、获取当前测试的覆盖率插桩APP的插桩现场信息。
其中,覆盖率插桩APP的插桩现场信息可以理解为桩在覆盖率插桩APP的字节码/汇编指令中的位置信息。
S3、对测试设备上报的测试数据与覆盖率插桩APP的插桩现场信息匹配,得到覆盖率插桩APP对应的字节码/汇编指令中被覆盖到的桩的信息。
其中,通过匹配得到的被覆盖到的桩的信息,包括桩在字节码/汇编指令中的位置。
S4、还原覆盖率插桩APP的行覆盖率。
其中,还原覆盖率插桩APP的行覆盖率时,可以通过逆向工程的方法得到具体的字节码/汇编指令对应的代码行,然后根据被覆盖到的桩在字节码/汇编指令中的位置即可得到覆盖率插桩APP被覆盖到的代码行,从而得到覆盖率插桩APP的行覆盖率信息。
S5、反推覆盖率插桩APP的方法覆盖率、类覆盖率数据。
其中,在反推覆盖率插桩APP的方法覆盖率、类覆盖率数据时,可以根据预先得到的覆盖率插桩APP中方法和类与具体代码行之间的对应关系,确定各方法和类对应的代码行区间,然后,根据覆盖率插桩APP中被覆盖到的代码行的信息,即可以确定得到覆盖率插桩APP中被覆盖到的方法和类,进而得到覆盖率插桩APP的方法覆盖率、类覆盖率数据。
S6、根据覆盖率插桩APP与组件之间的绑定关系,确定得到各组件对应的行覆盖率、方法覆盖率、类覆盖率数据。
其中,在确定各组件对应的行覆盖率、方法覆盖率、类覆盖率数据时,可以根据覆盖率插桩APP与组件之间的绑定关系,确定各组件在盖率插桩APP中的位置(包括各组件在盖率插桩APP中对应的代码行区间)然后,根据盖率插桩APP中被覆盖到的行、方法、类等数据,即可确定出各组件的行覆盖率、方法覆盖率、类覆盖率数据。
S7产出各组件对应的行覆盖率、方法覆盖率、类覆盖率数据。
通过获取测试设备对覆盖率插桩应用程序APP执行测试用例后得到的测试数据,测试数据包括测试用例覆盖到的桩的信息,基于预先得到的该覆盖率插桩APP中的组件的插桩现场信息,以及测试用例覆盖到的桩的信息,确定覆盖率插桩APP中的组件的代码覆盖率数据。实现了对组件化APP中各组件的代码覆盖率的准确检测,为分析组件化APP的软件质量提供了可靠依据。
图8是本公开实施例提供的一种检测装置的结构示意图,如图8所示,检测装置80可以理解为上述实施例中的云端检测平台或者云端检测平台中的部分功能模块,检测装置80:
第一获取模块81,用于获取测试设备对覆盖率插桩应用程序APP执行测试用例后得到的测试数据,所述测试数据包括所述测试用例覆盖到的所述覆盖率插桩APP中的桩的信息,所述覆盖率插桩APP是指经过插桩处理后的APP;
第一确定模块82,用于基于所述覆盖率插桩APP中的组件的插桩现场信息,以及所述测试用例覆盖到的桩的信息,确定所述覆盖率插桩APP中的组件的代码覆盖率数据。
在一种实施方式中,所述组件的插桩现场信息中包括所述组件中的桩的位置信息;
所述第一确定模块82,包括:
第一确定子模块,用于基于所述组件中的桩的位置信息,确定所述测试用例覆盖到的桩在所述组件中的位置;
第二确定子模块,用于基于所述测试用例覆盖到的桩在所述组件中的位置,确定所述组件被所述测试用例覆盖到的代码行;
第三确定子模块,用于基于所述组件被所述测试用例覆盖到的代码行,以及预先得到的所述组件的总行数,确定得到所述组件的行覆盖率。
在一种实施方式中,所述第一确定模块82,还包括:
第四确定子模块,用于基于预先得到的所述组件中的方法和类所在的代码行的信息,确定所述组件被所述测试用例覆盖到的代码行中包括的方法和类的数量;
第五确定子模块,用于基于所述组件被所述测试用例覆盖到的代码行中包括的方法和类的数量,以及预先得到的所述组件中包括的方法和类的总数量,确定所述组件的方法覆盖率和类覆盖率。
在一种实施方式中,所述装置还包括:
第二获取模块,用于获取所述覆盖率插桩APP与构成所述覆盖率插桩APP的组件之间的绑定关系;
查找模块,用于基于所述绑定关系,从预先存储的插桩现场信息中查找得到所述组件的插桩现场信息。
在一种实施方式中,所述装置还包括:
第二确定模块,用于基于所述绑定关系,以及所述覆盖率插桩APP中的组件的代码覆盖率数据,确定所述覆盖率插桩APP的代码覆盖率数据。
本实施例提供的装置能够执行图6或图7实施例的方法,其执行方式和有益效果类似在这里不再赘述。
本公开实施例还提供一种云端检测平台该云端检测平台包括处理器和存储器,其中,所述存储器中存储有计算机程序,当所述计算机程序被所述处理器执行时,所述处理器执行上述图6或图7实施例的方法。
本公开实施例还提供一种计算机可读存储介质,该存储介质中存储有计算机程序,当所述计算机程序被处理器执行时,所述处理器执行上述图6或图7实施例的方法。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种代码覆盖率的检测方法,其特征在于,包括:
获取测试设备对覆盖率插桩应用程序APP执行测试用例后得到的测试数据,所述测试数据包括所述测试用例覆盖到的所述覆盖率插桩APP中的桩的信息,所述覆盖率插桩APP是指经过插桩处理后的APP;
基于所述覆盖率插桩APP中的组件的插桩现场信息,以及所述测试用例覆盖到的桩的信息,确定所述覆盖率插桩APP中的组件的代码覆盖率数据。
2.根据权利要求1所述的方法,其特征在于,所述组件的插桩现场信息中包括所述组件中的桩的位置信息;
所述基于所述覆盖率插桩APP中的组件的插桩现场信息以及所述测试用例覆盖到的桩的信息,确定所述覆盖率插桩APP中的组件的代码覆盖率数据,包括:
基于所述组件中的桩的位置信息,确定所述测试用例覆盖到的桩在所述组件中的位置;
基于所述测试用例覆盖到的桩在所述组件中的位置,确定所述组件被所述测试用例覆盖到的代码行;
基于所述组件被所述测试用例覆盖到的代码行,以及预先得到的所述组件的总行数,确定得到所述组件的行覆盖率。
3.根据权利要求2所述的方法,其特征在于,所述基于所述测试用例覆盖到的桩在所述组件中的位置,确定所述组件被所述测试用例覆盖到的代码行之后,所述方法还包括:
基于预先得到的所述组件中的方法和类所在的代码行的信息,确定所述组件被所述测试用例覆盖到的代码行中包括的方法和类的数量;
基于所述组件被所述测试用例覆盖到的代码行中包括的方法和类的数量,以及预先得到的所述组件中包括的方法和类的总数量,确定所述组件的方法覆盖率和类覆盖率。
4.根据权利要求1-3中任一项所述的方法,其特征在于,所述基于所述覆盖率插桩APP中的组件的插桩现场信息,以及所述测试用例覆盖到的桩的信息,确定所述覆盖率插桩APP中的组件的代码覆盖率数据之前,所述方法还包括:
获取所述覆盖率插桩APP与构成所述覆盖率插桩APP的组件之间的绑定关系;
基于所述绑定关系,从预先存储的插桩现场信息中查找得到所述组件的插桩现场信息。
5.根据权利要求4所述的方法,其特征在于,所述基于所述覆盖率插桩APP中的组件的插桩现场信息,以及所述测试用例覆盖到的桩的信息,确定所述覆盖率插桩APP中的组件的代码覆盖率数据之后,所述方法还包括:
基于所述绑定关系,以及所述覆盖率插桩APP中的组件的代码覆盖率数据,确定所述覆盖率插桩APP的代码覆盖率数据。
6.一种检测装置,其特征在于,包括:
第一获取模块,用于获取测试设备对覆盖率插桩应用程序APP执行测试用例后得到的测试数据,所述测试数据包括所述测试用例覆盖到的所述覆盖率插桩APP中的桩的信息,所述覆盖率插桩APP是指经过插桩处理后的APP;
第一确定模块,用于基于所述覆盖率插桩APP中的组件的插桩现场信息,以及所述测试用例覆盖到的桩的信息,确定所述覆盖率插桩APP中的组件的代码覆盖率数据。
7.根据权利要求6所述的装置,其特征在于,
所述第一确定模块,包括:
第一确定子模块,用于基于所述组件中的桩的位置信息,确定所述测试用例覆盖到的桩在所述组件中的位置;
第二确定子模块,用于基于所述测试用例覆盖到的桩在所述组件中的位置,确定所述组件被所述测试用例覆盖到的代码行;
第三确定子模块,用于基于所述组件被所述测试用例覆盖到的代码行,以及预先得到的所述组件的总行数,确定得到所述组件的行覆盖率。
8.一种云端检测平台,其特征在于,包括:
处理器和存储器,其中,所述存储器中存储有计算机程序,当所述计算机程序被所述处理器执行时,所述处理器执行如权利要求1-5中任一项所述的方法。
9.一种检测系统,其特征在于,包括:组件管理平台、测试设备、软件集成平台和云端检测平台;
所述组件管理平台上存储有经过插桩处理的组件;
所述软件集成平台用于从所述组件管理平台上获取组件集成覆盖率插桩APP,并将所述覆盖率插桩APP分发给所述测试设备,以使所述测试设备对所述覆盖率插桩APP执行测试用例;
所述云端检测平台,用于获取所述测试用例覆盖到的所述覆盖率插桩APP中的桩的信息;以及基于所述覆盖率插桩APP中的组件的插桩现场信息和所述测试用例覆盖到的桩的信息,确定所述覆盖率插桩APP中的组件的代码覆盖率数据。
10.一种计算机可读存储介质,其特征在于,所述存储介质中存储有计算机程序,当所述计算机程序被处理器执行时,所述处理器执行如权利要求1-5中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110689667.7A CN115509883A (zh) | 2021-06-22 | 2021-06-22 | 代码覆盖率的检测方法、装置、平台、系统和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110689667.7A CN115509883A (zh) | 2021-06-22 | 2021-06-22 | 代码覆盖率的检测方法、装置、平台、系统和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115509883A true CN115509883A (zh) | 2022-12-23 |
Family
ID=84500079
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110689667.7A Pending CN115509883A (zh) | 2021-06-22 | 2021-06-22 | 代码覆盖率的检测方法、装置、平台、系统和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115509883A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117171057A (zh) * | 2023-11-02 | 2023-12-05 | 沐曦集成电路(上海)有限公司 | 芯片软硬件联合仿真阶段的软件代码覆盖率确定系统 |
-
2021
- 2021-06-22 CN CN202110689667.7A patent/CN115509883A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117171057A (zh) * | 2023-11-02 | 2023-12-05 | 沐曦集成电路(上海)有限公司 | 芯片软硬件联合仿真阶段的软件代码覆盖率确定系统 |
CN117171057B (zh) * | 2023-11-02 | 2024-01-26 | 沐曦集成电路(上海)有限公司 | 芯片软硬件联合仿真阶段的软件代码覆盖率确定系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104391795B (zh) | 一种分布式系统中自动化测试覆盖率的测试方法及系统 | |
CN110795078B (zh) | 基于ios系统下的app工程运作系统的架构方法 | |
CN101553802A (zh) | 用于收集并报告api性能剖析的自动化方法和系统 | |
CN104077217A (zh) | 代码文件的编译发布方法及系统 | |
CN114297666B (zh) | 一种基于模糊测试的云部署自动化漏洞挖掘系统 | |
CN108009080B (zh) | 一种代码扫描工具的评估方法及装置 | |
CN113568839A (zh) | 软件测试和统计测试覆盖率的方法、装置、设备及介质 | |
CN110134583B (zh) | 软件测试及数据处理方法及装置 | |
CN110413316A (zh) | 面向区块链智能合约的非侵入式测试系统及方法 | |
CN113448854A (zh) | 一种回归测试方法和装置 | |
CN111813655A (zh) | 一种埋点测试方法、装置、埋点管理系统和存储介质 | |
KR102269286B1 (ko) | 어노테이션 자동 진단 시스템 | |
CN113535538A (zh) | 应用全链路自动化测试方法、装置、电子设备和存储介质 | |
Pordes et al. | The liquid argon software toolkit (LArSoft): Goals, status and plan | |
CN115509883A (zh) | 代码覆盖率的检测方法、装置、平台、系统和存储介质 | |
CN110309055A (zh) | 基于Java虚拟机的黑盒测试方法、装置、终端及存储介质 | |
CN116866242A (zh) | 一种交换机回归测试方法、设备及介质 | |
CN103838666A (zh) | 一种确定代码执行覆盖率的方法和装置 | |
CN117215932A (zh) | 代码增量覆盖信息的展示方法及其装置、电子设备 | |
CN112131102A (zh) | 一种微服务模式下的软件项目管理系统及设备、介质 | |
CN116382697A (zh) | 版本一致性检查方法、项目构建方法、设备及介质 | |
CN116016270A (zh) | 一种交换机测试管理方法、装置、电子设备和存储介质 | |
CN113282504A (zh) | 一种增量代码覆盖率检测方法及业务开发方法、装置 | |
Hokka et al. | Linking developer experience to coding style in open-source repositories | |
CN115129575A (zh) | 一种代码覆盖结果生成方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |