CN116225889A - 一种测试位置标记方法、装置、电子设备及存储介质 - Google Patents
一种测试位置标记方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN116225889A CN116225889A CN202211090712.8A CN202211090712A CN116225889A CN 116225889 A CN116225889 A CN 116225889A CN 202211090712 A CN202211090712 A CN 202211090712A CN 116225889 A CN116225889 A CN 116225889A
- Authority
- CN
- China
- Prior art keywords
- code
- file
- current
- test
- difference
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Transmission And Conversion Of Sensor Element Output (AREA)
Abstract
本发明实施例公开了一种测试位置标记方法、装置、电子设备及存储介质。该方法包括:通过预先加载的感知器插件调用差异比较指令,确定出当前代码文件与历史代码文件之间存在的差异代码的差异代码信息;编译当前代码文件,生成与当前代码文件对应的当前编译文件,在当前编译文件中,确定出与差异代码信息相匹配的字节码作为目标字节码;基于目标字节码在当前编译文件中的字节码位置,确定待测试的测试位置,在测试位置处进行插桩操作,以对测试位置进行标记。本发明实施例的技术方案,可以提高标记效率和标记准确性,有助于基于标记完成精度测试,避免进行大量的冗余测试工作。
Description
技术领域
本发明实施例涉及测试技术领域,尤其涉及一种测试位置标记方法、装置、电子设备及存储介质。
背景技术
在软件测试过程中,对更新后的当前业务软件进行精准测试成为常用测试手段,在确保测试产品的质量的同时,能够提高测试效率。
现有技术中,在对更新后的当前业务软件进行精准测试时,需要由测试人员人工在当前业务软件的代码中标记出需要测试的测试位置,以按照测试位置对当前业务软件进行精准测试。
但是,在实现本发明的过程中,发现现有技术至少存在以下技术问题:由于软件代码的数量通常较多,采用人工标记的方式费时费力;且易出现误操作的情况,从而影响对软件进行精准测试时的准确性。
发明内容
本发明实施例提供了一种测试位置标记方法、装置、电子设备及存储介质,以实现提高标记效率和标记准确性的目的,有助于基于标记完成精度测试,避免进行大量的冗余测试工作。
第一方面,本发明实施例提供了一种测试位置标记方法,包括:
通过预先加载的感知器插件调用差异比较指令,确定出当前代码文件与历史代码文件之间存在的差异代码的差异代码信息;
编译所述当前代码文件,生成与所述当前代码文件对应的当前编译文件,在所述当前编译文件中,确定出与所述差异代码信息相匹配的字节码作为目标字节码;
基于所述目标字节码在所述当前编译文件中的字节码位置,确定待测试的测试位置,在所述测试位置处进行插桩操作,以对所述测试位置进行标记。
第二方面,本发明实施例还提供了一种测试位置标记装置,该装置包括:
差异代码信息确定模块,用于通过预先加载的感知器插件调用差异比较指令,确定出当前代码文件与历史代码文件之间存在的差异代码的差异代码信息;
目标字节码确定模块,用于编译所述当前代码文件,生成与所述当前代码文件对应的当前编译文件,在所述当前编译文件中,确定出与所述差异代码信息相匹配的字节码作为目标字节码;
测试位置确定模块,用于基于所述目标字节码在所述当前编译文件中的字节码位置,确定待测试的测试位置,在所述测试位置处进行插桩操作,以对所述测试位置进行标记。
第三方面,本发明实施例还提供了一种电子设备,该电子设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所提供的测试位置标记方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现本发明任意实施例所提供的测试位置标记方法。
本发明实施例所提供的一种测试位置标记方法,通过预先加载的感知器插件调用差异比较指令,确定出当前代码文件与历史代码文件之间存在的差异代码的差异代码信息,无需人工操作即可确定出当前代码文件与历史代码文件之间之间的差异;并且,编译当前代码文件,生成与当前代码文件对应的当前编译文件,在当前编译文件中,确定出与差异代码信息相匹配的字节码作为目标字节码;基于目标字节码在当前编译文件中的字节码位置,确定待测试的测试位置,以对测试位置通过插桩操作进行标记,从而实现自动化标记,解决了人工标记方式费时费力的问题,实现提高标记效率和标记准确性的作用;有助于基于标记完成精度测试,避免进行大量的冗余测试工作。
此外,本发明所提供的一种测试位置标记装置、电子设备及存储介质与上述方法对应,具有同样的有益效果。
附图说明
为了更清楚地说明本发明实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种测试位置标记方法的流程图;
图2为本发明实施例提供的另一种测试位置标记方法的流程图;
图3为本发明实施例提供的一种插桩操作过程的流程图;
图4为本发明实施例提供的最小化插桩操作示意图;
图5为本发明实施例提供的一种测试位置标记装置的结构图;
图6为本发明实施例提供的一种电子设备的结构图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。
在介绍技术方案之前,可以先对应用场景进行示例性说明。本技术方案可以应用在对软件升级后的代码文件,进行测试位置标记的场景中;例如,在对软件进行升级、更新时,通常在软件的历史代码文件的基础上进行调整,得到升级后的软件对应的当前代码文件。基于本实施例的方案,可确定出当前代码文件编译后得到的当前编译文件,并自动标记出当前编译文件进行测试时的测试位置,从而提高标记效率和标记准确性,有利于实现对升级后的代码文件进行精准测试。
图1为本发明实施例提供的一种测试位置标记方法的流程图。本实施例可适用于对待测试的代码文件进行测试位置标记,以按照标记的测试位置进行精准测试的情形,该方法可以由测试位置标记装置来执行,该装置可以通过软件和/或硬件来实现,可配置于终端和/或服务器中来实现本发明实施例中的测试位置标记方法。
如图1所示,本实施例的方法具体可包括:
S110、通过预先加载的感知器插件调用差异比较指令,确定出当前代码文件与历史代码文件之间存在的差异代码的差异代码信息。
需要说明的是,感知器插件可为用于编译、构建软件的Gradle插件,可预先创建感知器插件,并将感知器插件集成进代码文件中,以便基于感知器插件对代码文件进行操作。
其中,差异比较指令可为git diff指令,用于对比两个不同版本的代码文件之间的差异。当前代码文件可为软件升级后的软件版本对应的代码文件,历史代码文件可为软件升级前的软件版本对应的代码文件;例如,A软件在版本升级前为1.0版本,经过一次升级后更新为1.1版本,则1.0版本对应的代码文件为历史代码文件,1.1版本对应的代码文件为当前代码文件。当前代码文件和历史代码文件中,分别可包含至少一行代码。
在具体实施中,调用差异比较指令后,可对当前代码文件与历史代码文件进行对比,确定出当前代码文件与历史代码文件中的差异代码。需要说明的是,差异代码为当前代码文件中,与历史代码文件中代码不同的代码改动点,即差异代码为当前代码文件中的代码。基于确定出的差异代码,可确定出差异代码信息。其中,差异代码信息可包括差异类名、差异方法名和差异行号中的至少一种;差异类名为包含差异代码的类文件的名称,差异方法名包含差异代码的方法文件的名称,差异行号为差异代码在当前代码文件中的行号。进一步的,差异代码信息还可包括差异代码的代码内容、包含差异代码的方法文件的内容、包含差异代码的类文件的内容等。
本实施例中,确定出当前代码文件与历史代码文件之间存在的差异代码的差异代码信息,包括:将确定出的当前代码文件与历史代码文件之间存在的差异代码的差异类名、差异方法名和差异行号中的至少一项信息,确定为差异代码信息。
在具体实施中,基于差异比较指令,可实现将当前代码文件与历史代码文件进行对比,确定出二者之间的差异代码。为了便于后续在差异代码对应的位置进行插桩操作,可基于对比得到的差异代码,确定出差异类名、差异方法名和差异行号中的至少一项信息。由于差异类名、差异方法名及差异行号,均为明确且简短的信息,因此在后续确定目标字节码时,基于差异类名、差异方法名和差异行号,能够在包含大量字节码的当前编译文件中,快速、准确地确定出与各差异代码对应的目标字节码,有助于提高确定目标字节码的有效性和准确性,节省时间资源。
进一步的,可分别将差异代码对应的差异代码信息进行存储,生成差异代码集,便于对差异代码信息进行统一查询。存储时,可按照差异代码在当前代码文件中的编译先后顺序依次对差异代码信息进行存储;也可按照随机顺序进行存储,对此本实施例不作限定。
S120、编译当前代码文件,生成与当前代码文件对应的当前编译文件,在当前编译文件中,确定出与差异代码信息相匹配的字节码作为目标字节码。
为避免后续测试时对当前代码文件产生改动而无法复原,可对当前代码文件进行编译后,得到的当前编译文件标注测试位置,以对当前编译文件进行精准测试,从而避免对当前代码文件的内容产生破坏。
在具体实施中,编译当前代码文件的操作,可理解为将当前代码文件中的高级代码语言转换为计算机可识别的2进制语言,基于2进制语言生成的文件即为当前编译文件,当前编译文件用于被机器直接执行。
本实施例中,可采用直接通过感知器插件,依次扫描当前编译文件中的各字节码的方式,确定出与差异代码信息相匹配的字节码作为目标字节码。其中,字节码可为Java字节码,Java字节码对应的编程语言可包括Java语言或Kotlin语言。本实施例中,确定出的目标字节码与差异代码一一对应,目标字节码的数量与差异代码信息的数量相同。
具体的,确定与差异代码信息相匹配的字节码的方式可包括以下几种:1、基于差异代码信息,确定差异代码在当前代码文件中的行号;扫描字节码时,在当前编译文件中确定出与差异代码的行号一致的字节码,作为与差异代码信息相匹配的字节码;2、基于差异代码信息,确定差异代码的代码内容,扫描字节码时,确定字节码在编译前对应的代码是否与代码内容一致,如果一致,则说明该字节码与差异代码信息相匹配;如果不一致,则说明该字节码与差异代码信息不匹配。
本实施例中,在当前编译文件中,确定出与差异代码信息相匹配的字节码作为目标字节码的实现方式还可为:基于差异代码信息,确定出包含差异代码的类文件的类文件信息;遍历当前编译文件中的各类文件,确定与类文件信息对应的类文件作为目标类文件;在目标类文件的各字节码中,确定出目标字节码。
需要说明的是,编译文件可包括至少一个类文件,即class文件;各类文件中包括至少一个方法文件,即Method文件;各方法文件中可包括至少一个字节码。因此,在确定目标字节码时,可先确定出包含目标字节码的目标类文件;基于目标类文件,确定出相应的目标字节码。
具体的,基于差异代码信息,可确定出差异代码在当前代码文件中所属的类文件的差异类名,类文件的差异位置及类文件的差异内容;可将差异类名,类文件的差异位置及类文件的差异内容中的至少一项作为类文件信息;将当前编译文件中与类文件信息对应的类文件作为目标类文件;即将当前编译文件中包含的与差异代码对应的字节码的类文件,确定为目标类文件。
为了在当前编译文件中确定出目标类文件,可遍历当前编译文件中的各类文件;基于类文件信息确定出差异类名,将当前编译文件中与差异类名相匹配的类文件,确定为与类文件信息相对应的目标类文件;或者,可基于类文件信息确定出类文件在当前代码文件中的差异位置,将与该差异位置相匹配的当前编译文件中的类文件,确定为与类文件信息相对应的目标类文件;还或者,可基于类文件信息确定出类文件的差异内容,将当前编译文件中与该差异内容相匹配的类文件,确定为目标类文件。
在具体实施中,可在目标类文件的各字节码中,确定出目标字节码。具体的,可将目标类文件中的各字节码,均确定为需要进行测试的目标字节码。本实施例通过先确定出目标类文件,过滤掉了大量不包含目标字节码的类文件,从而减少在确定目标字节码时的工作量,无需对当前编译文件中的全部字节码进行遍历,提高了确定目标字节码的效率。
进一步的,为了更精确地在各目标类文件中确定出目标字节码,还可基于差异代码信息,分别在各目标类文件中确定出目标方法文件,将目标方法文件中的各字节码确定为目标字节码。其中,目标方法文件包含差异代码对应的字节码的方法文件。
示例性的,差异代码信息中包括差异方法名;基于差异方法名,遍历各目标类文件,在目标类文件中确定出与差异方法名相匹配的方法文件作为目标方法文件。可将目标方法文件中的各字节码确定为目标字节码,以对目标字节码进行测试;从而进一步的过滤掉大量不包含目标字节码的方法文件,能够提高确定出的目标字节码的准确度的同时,有助于提高确定目标字节码的效率。
本实施例中,还可遍历各目标类文件中的各字节码,确定出与差异代码信息相匹配的字节码作为目标字节码。为了在各目标类文件中更精确地确定出目标字节码,则可遍历各目标类文件,基于差异代码信息,分别在各目标类文件中确定出与差异代码信息相匹配的字节码,作为目标字节码。
示例性的,差异代码信息中包括差异代码的在当前代码文件中的行号,则在各目标类文件中,确定出与该行号一致的字节码,将该字节码确定为目标字节码;差异代码信息中还包括差异代码的代码内容,则可在各目标类文件中,确定出与该代码内容相对应的字节码,将该字节码确定为目标字节码。
本实施例通过遍历各目标类文件中的字节码,确定出与差异代码信息相匹配的字节码作为目标字节码,可在提高确定效率的同时,精准确定出需要测试的差异代码对应的字节码,避免出现将非差异代码对应的字节码进行测试的情况,有助于减少测试过程中的工作量。
S130、基于目标字节码在当前编译文件中的字节码位置,确定待测试的测试位置,在测试位置处进行插桩操作,以对测试位置进行标记。
在本实施例中,可分别将目标字节码的字节码位置,作为待测试的测试位置,分别在各测试位置处进行插桩操作;也可基于各目标字节码的字节码位置,确定目标类文件是否全部由目标字节码组成,如果是,则直接将目标类文件中的文件起始位置,确定为测试位置,进行插桩操作,以在测试过程中对整个目标类文件中的各目标字节码进行测试。
本实施例中,在测试位置处进行插桩操作的实施方式可为:在测试位置处插入插桩代码,以对测试位置进行标记;其中,插桩操作可由感知器插件完成。在测试位置处进行插桩操作之后,还包括:获取与插桩操作对应的插桩操作数据,并将每次插桩操作生成的插桩操作数据进行本地和/或远程存储。其中,插桩操作数据包括测试位置数据和插桩代码。本地存储可为将插桩操作数据存储至预先创建的Java本地文件中;远程存储可为通过网络接口将插桩操作数据存储至服务器中。
通过将插桩操作数据进行本地和/或远程存储,可对当前编译文件中的各测试位置进行统一管理,便于快速地确定出当前编译文件需要进行测试的测试位置的数量,及各测试位置对应的标记。
本实施例中,插桩代码包括测试调用代码;在将每次插桩操作生成的插桩操作数据进行本地和/或远程存储后,还包括:在当前编译文件进行测试运行的情况下,确定当前编译文件插入的各测试调用代码的触发状态;基于触发状态,确定当前编译文件在测试运行时命中的测试调用代码的实际数量;基于存储的插桩操作数据,确定当前编译文件在测试运行时命中的测试调用代码的理论数量;基于实际数量和理论数量,确定对当前编译文件的测试完成程度。
其中,测试调用代码为用于对测试位置处的字节码进行测试的代码,在当前编译文件进行测试运行时,当运行至测试位置,则调用插入的测试调用代码,以对测试位置处的字节码进行测试操作。
在具体实施中,可分别确定当前编译文件中插入的各测试调用代码的触发状态,当测试调用代码的触发状态为已触发,则说明当前测试位置已进行测试;若测试调用代码的触发状态为未触发,则说明当前测试位置未进行测试。通过检测各测试调用代码的触发状态,可确定出当前编译文件在测试运行时,命中的测试调用代码的实际数量,即实际进行测试操作的数量。基于存储的插桩操作数据,可确定出当前编译文件在测试运行时命中的测试调用代码的理论数量,即可将存储的插桩操作数据中的测试调用代码的数量,确定为理论数量。将理论数量和实际数量进行比对,若二者一致,则说明对当前编译文件的测试完成程度为百分之百;若实际数量小于理论数量,则说明存在测试调用代码未触发测试的情况,则可基于实际数量与理论数量之间的差值,确定测试完成程度;若出现实际数量大于理论数量的情况,则说明检测出现异常,可再次确定当前编译文件在测试运行时命中的测试调用代码的实际数量。
本实施例中,通过存储的插桩操作数据确定当前编译文件在测试运行时命中的测试调用代码的理论数量,通过检测测试调用代码的触发状态,确定出命中的测试调用代码的实际数量,以基于实际数量和理论数量确定测试完成程度,从而便于测试人员了解测试程度,及基于测试完成程度分析测试结果,有助于更全面、准确地完成对当前编译文件的测试过程。
在具体实施中,在在测试位置处进行插桩操作之后,还包括:对插桩后的当前编译文件按照预设格式进行打包操作,生成系统打包文件,以在系统测试环境下对系统打包文件进行测试运行。
其中,预设格式可包括jar(Java Archive,Java归档)格式或aar(AndroidArchive)格式。
具体的,可将当前编译文件按照预设格式进行打包,生成具有完成产品形态的系统打包文件。可将系统打包文件作为完整的文件,在系统测试环境下进行测试运行。同时,测试人员还可通过感知器插件查看对系统打包文件进行测试后生成的测试报告。
本实施例中,通过将当前编译文件打包为完整的系统打包文件,可实现在系统测试环境下对当前编译文件进行系统测试的作用,可无需依赖任何单元测试环境,有利于提高对当前编译文件进行测试的测试效率,便于测试人员评估测试覆盖率。
本发明实施例所提供的一种测试位置标记方法,通过预先加载的感知器插件调用差异比较指令,确定出当前代码文件与历史代码文件之间存在的差异代码的差异代码信息,无需人工操作即可确定出当前代码文件与历史代码文件之间之间的差异;并且,编译当前代码文件,生成与当前代码文件对应的当前编译文件,在当前编译文件中,确定出与差异代码信息相匹配的字节码作为目标字节码;基于目标字节码在当前编译文件中的字节码位置,确定待测试的测试位置,以对测试位置通过插桩操作进行标记,从而实现自动化标记,解决了人工标记方式费时费力的问题,实现了提高标记效率和标记准确性的作用;有助于基于标记完成精度测试,避免进行大量的冗余测试工作。
图2为本发明实施例提供的另一种测试位置标记方法的流程图。本实施例以上述各技术方案为基础进行优化。可选的,基于目标字节码在当前编译文件中的字节码位置,确定待测试的测试位置时,可基于当前编译文件中是否存在逻辑分支语句,及逻辑分支语句的组成字节码,确定待测试的测试位置。其中,与上述各实施例相同或相应的术语的解释在此不再赘述。
S210、通过预先加载的感知器插件调用差异比较指令,确定出当前代码文件与历史代码文件之间存在的差异代码的差异代码信息。
S220、编译当前代码文件,生成与当前代码文件对应的当前编译文件,在当前编译文件中,确定出与差异代码信息相匹配的字节码作为目标字节码。
S230、若当前编译文件中存在逻辑分支语句,且逻辑分支语句由各目标字节码组成,则确定逻辑分支语句的起始目标字节码对应的起始字节码位置,将起始字节码位置确定为测试位置。
其中,逻辑分支语句可包括if语句、switch语句等。需要说明的是,感知器插件进行插桩操作时,还可通过字节码分析技术,分析字节码的执行逻辑,以实现对目标字节码的插桩。
具体的,由于逻辑分支语句中的各字节码的执行顺序为由上至下进行执行,则当确定出当前编译文件中存在逻辑分支语句,且逻辑分支语句均由各目标字节码组成时,可针对该逻辑分支语句确定对应的一个测试位置,并在该测试位置插入一组字节码指令,以完成插桩操作,从而实现最小化插桩,减少插桩工作量。
在确定该逻辑分支语句对应的测试位置时,可将该逻辑分支语句的起始目标字节码对应的起始字节码位置,确定为测试位置;也将逻辑分支语句中的终止目标字节码对应的终止字节码位置,确定为测试位置。在进行测试运行时,可按照标记的该测试位置,完成对整个逻辑分支语句的测试。
S240、若当前编译文件中不存在逻辑分支语句,或存在的逻辑分支语句的组成字节码中包括非目标字节码,则分别将各目标字节码在当前编译文件中的字节码位置确定为测试位置。
其中,组成字节码为组成逻辑分支语句的各字节码,非目标字节码为与差异代码信息不匹配的字节码。
具体的,若当前编译文件中不存在逻辑分支语句,或者存在逻辑分支语句中,但是在该逻辑分支语句中的各组成字节码中存在非目标字节码,说明无法按照逻辑分支语句的执行逻辑执行各目标字节码,则可分别将各目标字节码在当前编译文件中的字节码位置确定为测试位置。在进行测试运行时,可按照标记的各测试位置,完成对各目标字节码的测试。
S250、在测试位置处进行插桩操作,以对测试位置进行标记。
为了详细、清晰地对插桩操作过程进行说明,可参见图3。在操作前,可预先对代码编译工具Gradle Plugin进行预先配置,并获取当前代码文件和历史代码文件,通过版本管理工具Git调用“source sets diff”指令,以确定出当前代码文件与历史代码文件之间的差异代码信息,差异代码信息可包括差异代码在当前代码文件中的类文件号、方法文件号及所在行号等,并将差异代码信息传输至代码编译工具。代码编译工具对当前代码文件进行编译,并生成与当前代码文件对应的当前编译文件,并通过差异代码信息,遍历当前编译文件中的各类文件,确定出与差异代码信息对应的目标类文件,并遍历各目标类文件,确定出与差异代码信息对应的目标方法文件;也可通过差异代码信息,遍历当前编译文件中的各方法文件,直接确定出与差异代码信息对应的目标方法文件。进一步的,可通过感知插件中的参数对接模块,获取到各目标方法文件,并遍历各目标方法文件,确定出与差异代码信息对应的字节码作为目标字节码,以在感知插件的插桩模块中,将目标字节码的字节码位置作为测试位置,插入字节码指令,以完成插桩操作。进一步的,还可通过参数对接模块,将插桩后的当前编译文件传输至代码编译工具中,以对插桩后的当前编译文件进行汇总,并通过参数对接模块将各插桩后的当前编译文件进行保存,再通过代码编译工具将各插桩后的当前编译文件按照jar(Java Archive,Java归档)格式或aar(Android Archive)格式进行打包,生成系统打包文件,以用于进行系统测试。
为更清楚的对最小化插桩过程进行说明,可参见图4。图中20-30行字节码为被修改过的目标字节码,且执行顺序为由上至下的顺序,则可将20-30行字节码看作整体,确定一个测试位置插入字节码指令,以完成插桩操作即可。图4中,第31行字节码为if条件指令,并相应包含满足条件和不满足条件两条分支,可分别确定两条分支分支中的字节码是否全部为目标字节码。如若第32-40行字节码均为目标字节码,则可在满足条件的分支处进行一次插桩,以对该分支进行标记;若第41-50行字节码均为目标字节码,则同时可在不满足条件的分支处进行一次插桩操作。
本实施例中,考虑到了各目标字节码在当前编译文件中的执行逻辑顺序,对于逻辑分支语句由各目标字节码组成的情况,对该逻辑分支语句进行一次插桩操作即可,从而即可确保全部的目标字节码均可进行测试的同时,大大减少了插桩数量,实现了最小化插桩的作用,有助于减少插桩操作的工作量。
图5为本发明实施例提供的一种测试位置标记装置的结构图,该装置用于执行上述任意实施例所提供的测试位置标记方法。该装置与上述各实施例的测试位置标记方法属于同一个发明构思,在测试位置标记装置的实施例中未详尽描述的细节内容,可以参考上述测试位置标记方法的实施例。该装置具体可包括:
差异代码信息确定模块10,用于通过预先加载的感知器插件调用差异比较指令,确定出当前代码文件与历史代码文件之间存在的差异代码的差异代码信息;
目标字节码确定模块11,用于编译当前代码文件,生成与当前代码文件对应的当前编译文件,在当前编译文件中,确定出与差异代码信息相匹配的字节码作为目标字节码;
测试位置确定模块12,用于基于目标字节码在当前编译文件中的字节码位置,确定待测试的测试位置,在测试位置处进行插桩操作,以对测试位置进行标记。
在本发明实施例中任一可选技术方案的基础上,可选的,目标字节码确定模块11包括:
类文件信息确定单元,用于基于差异代码信息,确定出包含差异代码的类文件的类文件信息;
目标类文件确定单元,用于遍历当前编译文件中的各类文件,确定与类文件信息对应的类文件作为目标类文件;
目标字节码确定单元,用于在目标类文件的各字节码中,确定出目标字节码。
在本发明实施例中任一可选技术方案的基础上,可选的,目标字节码确定单元,包括:
目标字节码确定子单元,用于遍历各目标类文件中的各字节码,确定出与差异代码信息相匹配的字节码作为目标字节码。
在本发明实施例中任一可选技术方案的基础上,可选的,测试位置确定模块12,包括:
插桩代码插入单元,用于在测试位置处插入插桩代码,以对测试位置进行标记;
该装置还包括:
插桩操作数据获取模块,用于在测试位置处进行插桩操作之后,获取与插桩操作对应的插桩操作数据,并将每次插桩操作生成的插桩操作数据进行本地和/或远程存储;
其中,插桩操作数据包括测试位置数据和插桩代码。
在本发明实施例中任一可选技术方案的基础上,可选的,插桩代码包括测试调用代码;该装置还包括:
触发状态确定模块,用于在将每次插桩操作生成的插桩操作数据进行本地和/或远程存储后,在当前编译文件进行测试运行的情况下,确定当前编译文件插入的各测试调用代码的触发状态;
实际数量确定模块,用于基于触发状态,确定当前编译文件在测试运行时命中的测试调用代码的实际数量;
理论数量确定模块,用于基于存储的插桩操作数据,确定当前编译文件在测试运行时命中的测试调用代码的理论数量;
测试完成程度确定模块,用于基于实际数量和理论数量,确定对当前编译文件的测试完成程度。
在本发明实施例中任一可选技术方案的基础上,可选的,测试位置确定模块12,包括:
第一测试位置确定单元,用于若当前编译文件中存在逻辑分支语句,且逻辑分支语句由各目标字节码组成,则确定逻辑分支语句的起始目标字节码对应的起始字节码位置,将起始字节码位置确定为测试位置;
第二测试位置确定单元,用于若当前编译文件中不存在逻辑分支语句,或存在的逻辑分支语句的组成字节码中包括非目标字节码,则分别将各目标字节码在当前编译文件中的字节码位置确定为测试位置。
在本发明实施例中任一可选技术方案的基础上,可选的,还包括:
系统打包文件生成模块,用于在测试位置处进行插桩操作之后,对插桩后的当前编译文件按照预设格式进行打包操作,生成系统打包文件,以在系统测试环境下对系统打包文件进行测试运行。
在本发明实施例中任一可选技术方案的基础上,可选的,差异代码信息确定模块10,包括:
差异代码信息确定单元,用于将确定出的当前代码文件与历史代码文件之间存在的差异代码的差异类名、差异方法名和差异行号中的至少一项信息,确定为差异代码信息。
本发明实施例所提供的测试位置标记装置可执行如下方法:通过预先加载的感知器插件调用差异比较指令,确定出当前代码文件与历史代码文件之间存在的差异代码的差异代码信息;编译当前代码文件,生成与当前代码文件对应的当前编译文件,在当前编译文件中,确定出与差异代码信息相匹配的字节码作为目标字节码;基于目标字节码在当前编译文件中的字节码位置,确定待测试的测试位置,在测试位置处进行插桩操作,以对测试位置进行标记。解决了人工标记方式费时费力的问题,实现了提高标记效率和标记准确性的作用;有助于基于标记完成精度测试,避免进行大量的冗余测试工作。
值得注意的是,上述测试位置标记装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
图6为本发明实施例提供的一种电子设备的结构图。图6示出了适于用来实现本发明实施例实施方式的示例性电子设备20的框图。显示的电子设备20仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图6所示,电子设备20以通用计算设备的形式表现。电子设备20的组件可以包括但不限于:一个或者多个处理器或者处理单元201,系统存储器202,连接不同系统组件(包括系统存储器202和处理单元201)的总线203。
总线203表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
电子设备20典型地包括多种计算机系统可读介质。这些介质可以是任何能够被电子设备20访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器202可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)204和/或高速缓存存储器205。电子设备20可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统206可以用于读写不可移动的、非易失性磁介质。可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线203相连。存储器202可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块207的程序/实用工具208,可以存储在例如存储器202中,这样的程序模块207包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块207通常执行本发明所描述的实施例中的功能和/或方法。
电子设备20也可以与一个或多个外部设备209(例如键盘、指向设备、显示器210等)通信,还可与一个或者多个使得用户能与该电子设备20交互的设备通信,和/或与使得该电子设备20能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口211进行。并且,电子设备20还可以通过网络适配器212与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器212通过总线203与电子设备20的其它模块通信。应当明白,可以结合电子设备20使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元201通过运行存储在系统存储器202中的程序,从而执行各种功能应用以及数据处理。
本发明所提供的一种电子设备,能够实现如下方法:通过预先加载的感知器插件调用差异比较指令,确定出当前代码文件与历史代码文件之间存在的差异代码的差异代码信息;编译当前代码文件,生成与当前代码文件对应的当前编译文件,在当前编译文件中,确定出与差异代码信息相匹配的字节码作为目标字节码;基于目标字节码在当前编译文件中的字节码位置,确定待测试的测试位置,在测试位置处进行插桩操作,以对测试位置进行标记。解决了人工标记方式费时费力的问题,实现了提高标记效率和标记准确性的作用;有助于基于标记完成精度测试,避免进行大量的冗余测试工作。
本发明实施例提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种测试位置标记方法,该方法包括:通过预先加载的感知器插件调用差异比较指令,确定出当前代码文件与历史代码文件之间存在的差异代码的差异代码信息;编译当前代码文件,生成与当前代码文件对应的当前编译文件,在当前编译文件中,确定出与差异代码信息相匹配的字节码作为目标字节码;基于目标字节码在当前编译文件中的字节码位置,确定待测试的测试位置,在测试位置处进行插桩操作,以对测试位置进行标记。解决了人工标记方式费时费力的问题,实现了提高标记效率和标记准确性的作用;有助于基于标记完成精度测试,避免进行大量的冗余测试工作。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的测试位置标记方法中的相关操作。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明实施例操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言——诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (11)
1.一种测试位置标记方法,其特征在于,包括:
通过预先加载的感知器插件调用差异比较指令,确定出当前代码文件与历史代码文件之间存在的差异代码的差异代码信息;
编译所述当前代码文件,生成与所述当前代码文件对应的当前编译文件,在所述当前编译文件中,确定出与所述差异代码信息相匹配的字节码作为目标字节码;
基于所述目标字节码在所述当前编译文件中的字节码位置,确定待测试的测试位置,在所述测试位置处进行插桩操作,以对所述测试位置进行标记。
2.根据权利要求1所述的方法,其特征在于,所述在所述当前编译文件中,确定出与所述差异代码信息相匹配的字节码作为目标字节码,包括:
基于所述差异代码信息,确定出包含所述差异代码的类文件的类文件信息;
遍历所述当前编译文件中的各类文件,确定与所述类文件信息对应的类文件作为目标类文件;
在所述目标类文件的各字节码中,确定出所述目标字节码。
3.根据权利要求2所述的方法,其特征在于,所述在所述目标类文件的各字节码中,确定出所述目标字节码,包括:
遍历各所述目标类文件中的各字节码,确定出与所述差异代码信息相匹配的字节码作为所述目标字节码。
4.根据权利要求1所述的方法,其特征在于,所述在所述测试位置处进行插桩操作,包括:
在所述测试位置处插入插桩代码,以对所述测试位置进行标记;
在所述在所述测试位置处进行插桩操作之后,还包括:
获取与所述插桩操作对应的插桩操作数据,并将每次插桩操作生成的所述插桩操作数据进行本地和/或远程存储;
其中,所述插桩操作数据包括测试位置数据和所述插桩代码。
5.根据权利要求4所述的方法,其特征在于,所述插桩代码包括测试调用代码;
在将每次插桩操作生成的所述插桩操作数据进行本地和/或远程存储后,还包括:
在所述当前编译文件进行测试运行的情况下,确定所述当前编译文件插入的各所述测试调用代码的触发状态;
基于所述触发状态,确定所述当前编译文件在测试运行时命中的所述测试调用代码的实际数量;
基于存储的所述插桩操作数据,确定所述当前编译文件在测试运行时命中的所述测试调用代码的理论数量;
基于所述实际数量和所述理论数量,确定对所述当前编译文件的测试完成程度。
6.根据权利要求1所述的方法,其特征在于,所述基于所述目标字节码在所述当前编译文件中的字节码位置,确定待测试的测试位置,包括:
若所述当前编译文件中存在逻辑分支语句,且所述逻辑分支语句由各所述目标字节码组成,则确定所述逻辑分支语句的起始目标字节码对应的起始字节码位置,将所述起始字节码位置确定为所述测试位置;
若所述当前编译文件中不存在逻辑分支语句,或存在的所述逻辑分支语句的组成字节码中包括非目标字节码,则分别将各所述目标字节码在所述当前编译文件中的字节码位置确定为所述测试位置。
7.根据权利要求1所述的方法,其特征在于,在所述在所述测试位置处进行插桩操作之后,还包括:
对插桩后的所述当前编译文件按照预设格式进行打包操作,生成系统打包文件,以在系统测试环境下对所述系统打包文件进行测试运行。
8.根据权利要求1所述的方法,其特征在于,所述确定出当前代码文件与历史代码文件之间存在的差异代码的差异代码信息,包括:
将确定出的当前代码文件与历史代码文件之间存在的差异代码的差异类名、差异方法名和差异行号中的至少一项信息,确定为所述差异代码信息。
9.一种测试位置标记装置,其特征在于,包括:
差异代码信息确定模块,用于通过预先加载的感知器插件调用差异比较指令,确定出当前代码文件与历史代码文件之间存在的差异代码的差异代码信息;
目标字节码确定模块,用于编译所述当前代码文件,生成与所述当前代码文件对应的当前编译文件,在所述当前编译文件中,确定出与所述差异代码信息相匹配的字节码作为目标字节码;
测试位置确定模块,用于基于所述目标字节码在所述当前编译文件中的字节码位置,确定待测试的测试位置,在所述测试位置处进行插桩操作,以对所述测试位置进行标记。
10.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-8中任一所述的测试位置标记方法。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-8中任一所述的测试位置标记方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211090712.8A CN116225889A (zh) | 2022-09-07 | 2022-09-07 | 一种测试位置标记方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211090712.8A CN116225889A (zh) | 2022-09-07 | 2022-09-07 | 一种测试位置标记方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116225889A true CN116225889A (zh) | 2023-06-06 |
Family
ID=86589827
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211090712.8A Pending CN116225889A (zh) | 2022-09-07 | 2022-09-07 | 一种测试位置标记方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116225889A (zh) |
-
2022
- 2022-09-07 CN CN202211090712.8A patent/CN116225889A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110059009B (zh) | 用于测试代码文件的方法和装置 | |
US9898387B2 (en) | Development tools for logging and analyzing software bugs | |
US7100152B1 (en) | Software analysis system having an apparatus for selectively collecting analysis data from a target system executing software instrumented with tag statements and method for use thereof | |
US20090248721A1 (en) | System And Method for Stack Crawl Testing and Caching | |
US9274930B2 (en) | Debugging system using static analysis | |
CN111158741B (zh) | 监控业务模块对第三方类库依赖关系变化的方法及装置 | |
CN110659210A (zh) | 一种信息获取方法、装置、电子设备及存储介质 | |
US20030088810A1 (en) | Methods and apparatus for determining software component sizes associated with errors | |
US11030074B2 (en) | Code update based on detection of change in runtime code during debugging | |
CN110597704B (zh) | 应用程序的压力测试方法、装置、服务器和介质 | |
CN110727476B (zh) | 一种授权配置文件的生成方法、装置、设备及存储介质 | |
US8843908B2 (en) | Compiler validation via program verification | |
CN116225889A (zh) | 一种测试位置标记方法、装置、电子设备及存储介质 | |
CN115756934A (zh) | 一种应用崩溃分析方法及装置 | |
CN108614704B (zh) | 代码编译方法及装置 | |
CN110795358B (zh) | 代码插桩检测方法、装置、设备及介质 | |
CN115456628A (zh) | 基于区块链的智能合约查看方法、装置、存储介质及设备 | |
US20120144371A1 (en) | Using exception information | |
CN113591147A (zh) | 一种数据抽取的方法、装置、计算机设备及存储介质 | |
CN113342431A (zh) | 函数调用栈回溯、程序异常处理方法、装置、设备及介质 | |
CN111338956A (zh) | 一种自动化的压测方法、装置、设备和存储介质 | |
CN113760291A (zh) | 日志输出的方法和装置 | |
CN112114811A (zh) | 一种编译方法、装置和设备 | |
CN111124423A (zh) | 一种基于多平台的编译检测方法、装置、服务器及介质 | |
CN111240928B (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 |