CN114706769A - 基于日志的面向回归测试的黑盒测试用例排序方法 - Google Patents

基于日志的面向回归测试的黑盒测试用例排序方法 Download PDF

Info

Publication number
CN114706769A
CN114706769A CN202210324773.XA CN202210324773A CN114706769A CN 114706769 A CN114706769 A CN 114706769A CN 202210324773 A CN202210324773 A CN 202210324773A CN 114706769 A CN114706769 A CN 114706769A
Authority
CN
China
Prior art keywords
log
test case
test
sequencing
test cases
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
Application number
CN202210324773.XA
Other languages
English (en)
Other versions
CN114706769B (zh
Inventor
王维靖
王赞
陈俊洁
陈志超
贾勇哲
马国宁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tianjin Thai Technology Co ltd
Tianjin University
Original Assignee
Tianjin Thai Technology Co ltd
Tianjin University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tianjin Thai Technology Co ltd, Tianjin University filed Critical Tianjin Thai Technology Co ltd
Priority to CN202210324773.XA priority Critical patent/CN114706769B/zh
Priority claimed from CN202210324773.XA external-priority patent/CN114706769B/zh
Publication of CN114706769A publication Critical patent/CN114706769A/zh
Application granted granted Critical
Publication of CN114706769B publication Critical patent/CN114706769B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage 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

本发明公开了一种基于日志的面向回归测试的黑盒测试用例排序方法,步骤1、对日志进行解析,得到日志事件;步骤2、将测试用例的日志事件数据进行向量化处理;步骤3、基于日志事件的语义信息进行自适应测试用例排序。与现有技术相比,本发明1)充分利用日志丰富的自然语言语义信息以及输出日志的语句在源代码中的位置信息,提升黑盒测试用例排序方法的排序效果,弥补传统黑盒测试用例排序方法无法获得被测***内部信息的不足,缩小黑盒与白盒两种测试用例排序之间的差距;2)适用性广泛,可应用于所有能产生日志的被测***,特别适用于测试人员无法获得被测***源码以及测试用例源码的情况,提升传统黑盒测试用例排序方法的健壮性。

Description

基于日志的面向回归测试的黑盒测试用例排序方法
技术领域
本发明涉及软件测试领域,特别是涉及一种测试用例排序方法。
背景技术
关于回归测试:回归测试是将已有的测试用例应用在更改后的代码上,从而保证代 码的更改并不影响原功能的实现。为了保证整个***的质量,在实际应用中通常执行全部的测试用例。但是,当被测***复杂而庞大时,回归测试的测试用例数目繁多,执行 过程耗时。因此,为了尽早地暴露出更多的缺陷,研究人员进行了各种探索,比如:根 据代码的变化选择相关的测试用例、测试用例最小化、测试用例排序、通过已有的测试 用例生成新测试用例等技术。其中,测试用例排序方法会保留原有的测试用例,因此成 为最主流的方法。
关于测试用例排序:测试用例排序旨在通过改变测试用例的执行顺序,尽早地发现 出更多的软件缺陷。测试用例排序的方法根据是否已知被测***的源代码以及相关的信 息,分为白盒与黑盒两个大类:
1)白盒的测试用例排序方法:测试人员对被测***的源代码进行静态或动态的分析。在众多白盒测试用例排序方法中,基于覆盖的方法最为主流,测试人员利用测试用 例覆盖的具体路径范围实现排序。基于覆盖的白盒测试用例排序按照覆盖的粒度可分为 以下三种:基于语句覆盖的测试用例排序、基于条件覆盖的测试用例排序以及基于方法 覆盖的测试用例排序。其中,基于语句的测试用例排序方法的粒度最细,因此成为三者 中最主流的白盒测试用例排序方法。另外,基于覆盖的白盒测试用例排序方法常常通过 贪婪算法,使用动态的覆盖信息进行排序,分为全局的测试用例排序和增量的测试用例 排序。其中,全局的测试用例排序方法旨在按照测试用例的覆盖对象的数量由多到少排 序,而增量的测试用例排序方法旨在按照未被覆盖的对象的数量对测试用例进行排序。 另外,一些方法把在执行测试用例后才能获取的信息考虑进来,以助力测试用例排序, 例如测试用例的执行成本、发现的故障的级别等等。尽管这类白盒方法可以直接获得内 部的代码逻辑并达到很好的效果,但是它们的实现代价相当昂贵。通常,测试人员通过 源代码插桩的方式获得测试覆盖信息,即解析源代码的语法结构后,***特定代码,运 行测试用例,最后对得到的测试结果进行分析,得到测试覆盖信息。这一获取动态信息 的过程工作量巨大,因此目前主流的研究方向是从静态信息入手,对白盒测试用例排序 方法进行更多的探索,比如通过被测代码的调用关系来模拟测试用例的覆盖信息。但实 际上,在工业实践中受限于测试规模和有限的资源,因此白盒测试并不实用。
2)黑盒的测试用例排序方法:测试人员无需已知被测代码,仅仅通过测试用例的输入输出或者测试用例的代码进行排序。经过不断探索,研究人员发现:相似的测试用 例能发现相似的故障。因此,在黑盒测试用例排序中,通常利用测试用例的相似性使测 试用例的多样性最大化。比如,基于主题的测试用例排序方法利用测试代码中的语言信 息进行主题建模,为每个测试用例生成一个基于主题的向量,并通过每次找到与已排序 的测试用例的平均欧氏距离最大的一个测试用例,最终得到测试用例排序结果。另外, 基于字符串的编辑距离的测试用例排序方法则是将测试代码视为字符串,并得到每两个 测试用例之间的文本欧氏距离,在每次迭代时选择与已排序的测试用例集具有最大欧氏 距离的测试用例,使多样性最大化。还有一些黑盒的测试用例排序方法需要利用需求文 档、代码更改等信息进行辅助,而在实际应用场景中,测试人员通常难以获得这些信息, 所以这类方法并没有成为主流的黑盒测试用例排序方法。另外,由于黑盒测试用例排序 方法没有接触到被测代码内部逻辑,因此黑盒方法通常不如白盒有效。但是,由于黑盒 的方法摆脱了深入理解待测程序源代码的限制,因此它在实际生产生活中得到非常广泛 的应用。
为了弥合黑盒与白盒两种测试用例排序之间的差距,需要借助其他的信息构建测试 用例,这些信息应具有以下两点特征:
特征一、尽可能多地包含程序源代码的相关信息,如代码位置、执行顺序和执行逻辑等;
特征二、获取难度较低,相对容易理解,并且能够使用自动化的手段进行分析。
而***日志恰恰符合上述两点条件:日志记录了***运行信息,易于获取与理解,因此日志被广泛用于各种可靠性保证任务。
***在运行时通常会产生大量日志信息,日志通常由代码中的日志生成语句输出得 到,如print()和logger.info()。生成的日志通常包含时间戳、日志级别(即INFO、DEBUG、WARNING、ERROR等)、日志内容等运行信息。其中,日志内容包含模板 和参数两部分,日志模板为固定的文本,用来描述***运行状态,也称为日志事件;而 日志参数是向模板里添加的实时内容,比如内存使用量、进程的id和网络速度等信息。 开发人员可以自行设置日志模板和日志参数,并通过输出的日志得知***当时的状态与 活动,例如***当时正在调用某个进程、从某个IP地址接收到某段数据包、与某个数 据库进行某种交互等等。因此,日志被广泛应用于众多可靠性保证任务中,比如:通过 检查日志理解***的运行状态、检测***异常和定位***故障的根因。
由于在回归测试中需要把已执行过的测试用例应用在更改后的代码上重新测试,因 此可以获得之前执行测试用例时产生的日志。因此,如何利用日志信息弥合黑盒与白盒两种测试用例排序之间的差距、进而提高测试用例排序方法的效果,是本发明亟待解决 的技术问题。
发明内容
本发明旨在弥合黑盒与白盒两种测试用例排序之间的差距,而提出一种基于日志的 面向回归测试的黑盒测试用例排序方法,通过分析测试用例生成的日志,充分利用日志丰富的自然语言语义信息以及输出日志的语句在源代码中的位置信息,实现了在回归测试中辅助黑盒测试用例排序。
本发明利用以下技术方案实现:
一种基于日志的面向回归测试的黑盒测试用例排序方法,该方法具体包括以下步骤:
步骤1、进行日志解析,即在收集测试用例生成的日志内容后,通过日志解析得到每个测试用例在***执行过程所对应的日志事件序列;
步骤2、将测试用例的日志事件数据进行向量化处理,具体包括:从单词的语义向量得到日志事件的向量表示,以及从日志事件的向量表示到测试用例的向量表示;
日志事件的向量Ve,如公式(1)所示:
Figure BDA0003572938260000041
其中,#wi表示单词wi在这句日志事件出现的次数,n表示该日志事件中单词的总个数,#SE表示所有不重复的日志事件的个数,
Figure BDA0003572938260000042
表示在#SE中包含单词wi的日志事件 的个数,
Figure BDA0003572938260000043
表示该单词的语义向量;TF(wi)表示单词wi在该日志事件中出现的频率, IDF(wi)表示单词wi在所有不重复的日志事件中出现的逆文档频率;
得到测试用例的向量Vts,如公式(2)所示:
Figure BDA0003572938260000044
其中,#ej表示第j个日志事件ej在该测试用例的日志序列中出现的次数,m表示该测试用例中日志序列的总个数,#ST表示所有不重复的测试用例日志序列的个数,
Figure BDA0003572938260000045
表示在#ST中包含第j个日志事件ej的测试用例日志序列的个数,
Figure BDA0003572938260000051
表示第j个日志事件ej的向量表示;TF(ej)表示第j个日志事件ej在日志序列中出现的频率,IDF(ej)表示第j个 日志事件ej在所有不重复的日志事件序列中出现的逆文档频率;
进而得到测试用例的向量矩阵
Figure BDA0003572938260000052
步骤3、定义需要排序的测试用例为TS=[ts1,ts2,...,tsu],基于日志事件进行自适 应测试用例排序:
首先,选择输出日志的位置最多的测试用例作为第一个测试用例,从剩余未排序的 测试用例中选择与已排序的测试用例具有最大欧氏距离的测试用例,顺序放入排序结果 序列,并以此类推;设有f个未排序的测试用例[ts1,ts2,...,tsf]与g个已排序的测试用例 [ts′1,ts′2,...,ts′g],未排序的测试用例tsx与当前已排序的g个测试用例的最小欧氏距离 d(x)如公式(3)所示:
Figure BDA0003572938260000053
其中,Euclidean表示欧几里得距离函数,tsx表示在f个未排序的测试用例中的第x个测试用例,
Figure BDA0003572938260000054
表示tsx的向量,tsy表示已排序的g个测试用例中的第y个测试用例, min表示最小值函数;
接下来,分别计算f个未排序的测试用例与g个已排序的测试用例的欧氏距离,进而得到应该从未排序的测试用例中选择放入已排序测试用例的序列中的第next_index 个测试用例,即得到已排序的测试用例集合具有最大欧氏距离的测试用例为 tsnext_index,如公式(4)所示:
Figure BDA0003572938260000055
其中,d(x)表示未排序的测试用例tsx与已排序测试用例的最小欧氏距离,
Figure BDA0003572938260000056
表示求在1≤x≤f范围内使d(x)值最大的x;
重复步骤3,每次从未排序的测试用例中选择一个测试用例加入排序结果序列,直到所有测试用例都被排序完,得到基于日志事件的自适应测试用例排序的排序结果 Revent
与现有技术相比,本发明能够达成以下有益的技术效果:
1)充分利用日志丰富的自然语言语义信息以及输出日志的语句在源代码中的位置 信息,提升黑盒测试用例排序方法的排序效果,弥补传统黑盒测试用例排序方法无法获得被测***内部信息的不足,缩小黑盒与白盒两种测试用例排序之间的差距;
2)适用性广泛,可应用于所有能产生日志的被测***,特别适用于测试人员无法获得被测***源码以及测试用例源码的情况,提升传统黑盒测试用例排序方法的健壮 性。
附图说明
图1为本发明的一种基于日志的面向回归测试的黑盒测试用例排序方法整体流程图;
图2为日志信息示例图;
图3为经过日志解析得到的日志事件示例图;
图4为本发明的一种基于日志的面向回归测试的黑盒测试用例排序方法的具体实施过程示意图。
具体实施方式
以下结合附图和具体实施例对本发明的技术方案进行详细说明。
本发明的基于日志的面向回归测试的黑盒测试用例排序方法采用Python语言实现, 主要步骤包括:1)将日志进行解析,得到测试用例的日志事件2)将测试用例的日志 事件数据进行向量化处理;3)基于日志事件进行自适应测试用例排序。
如图1所示,为本发明的一种基于日志的面向回归测试的黑盒测试用例排序方法的 整体流程图,该流程具体包括以下步骤:
步骤1、进行日志解析,即在收集测试用例生成的日志内容后,通过日志解析提取出去除参数后的日志模板作为日志事件;具体操作过程为:采用日志解析工具Drain, 利用固定深度的解析树,通过设计多个解析规则指导日志解析;每个测试用例都生成一 系列日志信息,从日志信息中提取日志模板,通过日志解析得到每个测试用例在***执 行过程所对应的日志事件序列;
如图2所示,日志信息示例图。其中,每一行表示一条日志信息,其中包括了固定的日志结构模板,也就是日志事件,以及日志参数。
如图3所示,为经过日志解析得到的日志事件示例图。不同的日志事件、甚至是不同的日志事件排列方式都代表着不同的***运行状态。*代表日志参数,日志参数常常 记录了***的参数,比如数值。
步骤2、将测试用例的日志事件数据进行向量化处理,具体包括:从单词的语义向量得到日志事件的向量表示,以及从日志事件的向量表示到测试用例的向量表示:
日志事件是一段用自然语言描述***运行状态的语句,为了得到每个日志事件语句 的向量,本发明通过“词频-逆文档频率”(TF-IDF)评估日志事件语句中每个单词对于整个日志事件语句的重要程度,依此对每个单词进行加权。TF-IDF原本在自然语言处 理领域中用于挖掘文本特征,旨在衡量每个单词对区分不同文档的贡献。TF-IDF的中 心思想是:一个单词若在单个文件中出现的次数越多则越重要,但与此同时如果它在整 个语料库中出现次数越多则越无关紧要。受到TF-IDF的思想为启发,将“词频-逆文档 频率”的思想应用于日志事件向量化的过程中,并考虑自然语言语义信息对测试用例排 序的帮助。具体而言,TF表示单词在该日志事件语句中出现的频率,TF越大表示该单 词对于该日志事件语句越重要;IDF表示逆文档频率,描述的是某个单词的普遍性,用 日志语句总数除以包含该单词的日志语句的数量,再取对数。如果IDF很小,说明该单 词很常见;如果IDF很大,说明该单词能够有效代表该日志事件语句。对于日志事件 e=[w1,w2,...,wi,...,wn],wi表示这句日志事件中的第i个单词。wi在这句日志事件中 的权重由该单词在该日志事件中出现的频率TF(wi)与该单词在所有不重复的日志事件 中出现的逆文档频率IDF(wi)共同决定。通过对日志事件中所有单词加权求平均,便得 到日志事件的向量Ve,如公式(1)所示。
Figure BDA0003572938260000081
其中,#wi表示该单词wi在这句日志事件出现的次数,n表示该日志事件中单词的总个数,#SE表示所有不重复的日志事件的个数,
Figure BDA0003572938260000082
表示在#SE中包含单词wi的日志事 件的个数,
Figure BDA0003572938260000083
表示该单词的语义向量;
每个测试用例生成的日志事件序列中包含了多条日志事件,为了得到每个测试用例 日志的向量化表示,本发明同样借助TF-IDF的思想,对“词频-逆文档频率”加以改进,并应用于测试用例日志的向量化过程。具体而言,TF表示日志事件在该日志事件序列 中出现的频率,TF越大表示该日志事件对于该日志事件序列越重要;IDF用来描述某 个日志事件的普遍性,用总日志事件除以包含该日志事件的测试用例日志事件序列的数 量,再取对数。如果IDF很小,说明该日志事件很常见,是一个普遍的日志输出;如果 IDF很大,说明该日志事件能够有效代表该测试用例。假设一个测试用例得到的日志事 件序列为L=[e1,e2,...,ej,...,em],ej表示该测试用例的日志序列中的第j个日志事件。与 日志事件的向量Ve同理,ej在该日志序列中的权重由该日志事件在该日志序列中出现的 频率TF(ej)与该日志事件在所有不重复的日志事件序列中出现的逆文档频率IDF(ej)共 同决定。得到测试用例的向量Vts如公式(2)所示。
Figure BDA0003572938260000091
其中,#ej表示日志事件ej在该测试用例的日志序列中出现的次数,m表示该测试用例中日志序列的总个数,#ST表示所有不重复的测试用例日志序列的个数,
Figure BDA0003572938260000092
表示在 #ST中包含日志事件ej的测试用例日志序列的个数,
Figure BDA0003572938260000093
表示该日志事件的向量表示;
进而得到测试用例的向量矩阵
Figure BDA0003572938260000094
步骤3、基于日志事件进行自适应测试用例排序:
如果两个测试用例的向量表示的欧氏距离很小,那么说明这两个测试用例是相似的。当执行一个测试用例后,再执行一个相似的测试用例是很不明智的。因此,在测试 用例排序中,每次选择与已排序的测试用例集合具有最大欧氏距离的测试用例,尽可能 快地覆盖测试空间。
但是,与传统的自适应随机排序算法随机选择某个测试用例作为第一个排序结果不 同的是,本步骤统计每个测试用例产生的日志的生成位置,覆盖位置个数最多的测试用例作为排序结果中的第一个。这是因为日志的生成位置反映出测试用例执行时经过的位置,因此把覆盖位置个数最多的测试用例放在排序结果中的第一个,减少了随机性给排 序结果带来的影响。具体而言,假设需要排序的测试用例为TS=[ts1,ts2,...,tsu]:
首先,选择输出日志的位置最多的测试用例作为第一个测试用例,从剩余未排序的 测试用例中选择与已排序的测试用例具有最大欧氏距离的测试用例,顺序放入排序结果 序列,并以此类推。设有f个未排序的测试用例[ts1,ts2,...,tsf]与g个已排序的测试用例 [ts′1,ts′2,...,ts′g],未排序的测试用例tsx与当前已排序的g个测试用例的最小欧氏距离 d(x)如公式(3)所示。
Figure BDA0003572938260000095
其中,Euclidean表示欧几里得距离函数,tsx表示在f个未排序的测试用例中的第x个测试用例,
Figure BDA0003572938260000101
表示tsx的向量,tsy表示已排序的g个测试用例中的第y个测试用例, 其中1≤y≤g,min表示最小值函数;
接下来,分别计算f个未排序的测试用例与g个已排序的测试用例的欧氏距离,得到已排序的测试用例集合具有最大欧氏距离的测试用例为tsnext_index,其中,应该从未 排序的测试用例中选择放入已排序测试用例的序列中的第next_index个测试用例如公 式(4)所示:
Figure BDA0003572938260000102
其中,d(x)表示未排序的测试用例tsx与已排序测试用例的最小欧氏距离,
Figure BDA0003572938260000103
表示求在1≤x≤f范围内使d(x)值最大的x;
重复步骤3,每次从未排序的测试用例中选择一个测试用例加入排序结果序列,直到所有测试用例都被排序完,得到基于日志事件的自适应测试用例排序的排序结果 Revent
本发明采用广泛使用的变异方法PIT所提供的所有变异算子来生成变异缺陷,并依 据变异缺陷研究的结论过滤掉重复的变异缺陷,以降低重复变异缺陷对测试用例排序方 法有效性的夸大影响。另外,实验中删除了不能被任何测试用例杀死的变异缺陷。
为了验证本发明有效性和对现有的黑盒测试用例排序方法的提升,本发明与黑盒测 试用例排序领域中最先进的2个方法进行效果对比,分别是Thomas等人提出的基于测试用例文本的主题的测试用例排序方法,和Ledru等人提出的基于测试用例字符串的编 辑距离的测试用例排序方法。其中,基于测试用例文本主题的测试用例排序方法利用测 试代码中的语言信息进行主题建模,为每个测试用例生成一个基于主题的向量,并通过 比较它们之间的欧氏距离,每次找到与已排序的测试用例的平均欧氏距离最大的一个测 试用例,最终得到测试用例排序结果;而基于测试用例字符串的编辑距离的测试用例排 序方法是将测试用例视为字符串,用字符串的编辑距离代表测试用例之间的距离,并得 到测试用例排序结果。之所以选择这两种方法作对比,是因为这两种方法都是黑盒的测 试用例排序方法,而且和本发明相比还利用了测试用例的源码信息,因此和这两种方法 进行对比,能够充分地证明本发明在提升黑盒测试用例排序效果的有效性。另外,本发 明也对比了白盒的两种测试用例排序方法,分别是全局测试用例排序和增量的测试用例 排序,旨在证明本发明旨在证明本发明是否能够有效地弥合白盒与黑盒之间的效果差 异。其中,白盒方法的覆盖信息是通过OpenClover2进行收集。在实验中,本发明方法 在10个实验对象上进行了对比实验,它们分别来自10种涉及不同领域的开源java项目, 分别是:基于Java的多协议的代理工具ActiveMQ、基于分布式计算资源的软件库康 佳Airavata、大型的高速数据库Blueflood、具有智能容错与负载均衡功能的开源服务框 架Dubbo、用于高效收集、聚合和移动大量日志数据的Flume、分布式的分析型数据仓 库Kylin,用于识别学术作者和贡献者的ORCID、Java安全框架Shiro,用于对Selenium WebDriver所需的驱动程序的开源Java库WebDriverManager以及基于Java的Web开 发框架Wicket。这些实验对象都基于Maven框架构建,并通过Junit框架管理测试用例。 在本实验中将每个测试类作为排序对象。
如图4所示,为本发明的一种基于日志的面向回归测试的黑盒测试用例排序方法的 具体实施过程示意图。本发明应用于回归测试,新版本的代码在上一版本的代码的基础上增加了部分修改,为了保证修改没有引入新的错误,新版本的代码需要通过上一版本 的测试用例。因此,本发明需要收集测试用例在上个版本运行产生的日志,作为本发明 的测试用例排序方法的输入,方法的输出是已经排序的测试用例序列。此时,将已排序 的测试用例应用于新版本的代码,可以尽早地发现出更多的软件缺陷,达到测试用例排 序的目的。为了模拟含有缺陷的新版本代码,本发明在对比时,利用PIT得变异体作为 新版本的代码。为了提高变异体的质量,在实验中分析出测试用例与其杀死变异体的对 应信息,并删除了效果重复的变异体。
在度量指标方面,本发明沿用了两种评测指标:APFD和RAUC-s,以评估测试用 例排序技术的效果。
APFD:平均故障检测率(Average Percentage of Fault Detection)被广泛应用于对测 试用例排序算法的评估,其计算方法如公式(6)所示:
Figure BDA0003572938260000121
其中,n表示测试用例的数量,m为被测***中缺陷的总数量,TFi表示在排序后的测试用例序列中,首次检测到缺陷i的测试用例所在的次序。若排在前面的测试用例能 检测出更多的缺陷,则APFD的值就会越高。因此,APFD可以度量测试用例排序结果 检测缺陷的能力,它的值域为[0,1]。
RAUC-s:由于在实际生产实践中有限的测试执行时间,通常不会完整地执行所有测试用例。因此,从整体进行评估的APFD指标具有一定的局限性,在实际场景中我们 希望通过排序结果中前几个测试用例,就能检测出所有已知缺陷。所以,本实验沿用已 有工作中的评估方法,将排序结果转化为二维坐标曲线。其中,x轴表示测试用例的数 量,y轴表示测试用例检测出来的缺陷的数量。对于前s个测试用例,该曲线下的面积 与理想排序结果的曲线下的面积的比率称为RAUC-s,用来衡量排序方法得到的排序结 果与理想排序结果的接近程度。其中,理想测试用例排序在每次排序时,首先统计没有 被已排序的测试用例检测到的变异缺陷,并从未排序的测试用例中,选择一个能检测出 最多的未检测的变异缺陷的测试用例。在本实验中,s分别取值为所有测试用例数量的 25%,50%,75%以及100%,并将这些评价指标分别称为RAUC-25%,RAUC-50%, RAUC-75%以及RAUC-100%。RAUC-s值越大,说明排序结果越好。首先,将本发明 与黑盒方法进行对比。
如表1所示,为本发明方法与两种现有的黑盒测试用例排序方法(基于字符串与基于主题)在10个实验对象上的APFD值的对比。
表1
Figure BDA0003572938260000122
Figure BDA0003572938260000131
其中,用加粗的方式标出了每个实验对象最好的APFD结果,最后一行表示在10 个实验对象上的平均值。从表1中可以看出,本发明方法的APFD值全部优于其他两种 黑盒的对比方法。具体而言,在10个实验对象上,本发明方法的平均APFD值达到了 0.7969,比基于字符串的黑盒排序方法提高了17.49%,比基于主题的黑盒排序方法提高 了17.38%。这些APFD结果彰显了本发明方法的显著优势。
如表2所示,为本发明方法与两种现有的黑盒测试用例排序方法(基于字符串与基于主题)在10个实验对象上的RAUC-s值(包括RAUC-25%,RAUC-50%,RAUC-75%, 以及RAUC-100%四个指标)的对比。
表2
Figure BDA0003572938260000132
其中用加粗的方式标出了每个实验对象在每个指标上最好的RAUC-s结果,最后一行表示每种方法在10个实验对象上的平均RAUC-s值。从表2可以看出,在所有实验 对象上,本发明方法始终具有最好的RAUC-s值。因此在实际应用中,在有限的测试时 间里,如果仅执行排在前面的测试用例,本方法得到的排序结果可以比其他黑盒对比方 法检测出更多的缺陷。
表1和表2示出本发明方法能够极大地提高黑盒测试用例排序方法的有效性。正是因为本方法利用日志丰富的自然语言语义信息,能够提升黑盒测试用例排序方法的排序效果。更值得一提的是,实验中所对比的两种黑盒排序方法需要获取测试用例的代码, 而本发明中的排序方法只需要测试用例在上一版本运行时生成的日志,因此本方法适用 性广泛,尤其适用于测试人员无法获得被测***源码以及测试用例源码的情况,可以大 大提升黑盒测试用例排序方法的健壮性。
如表3所示,为本发明方法与两种现有白盒测试用例排序方法(增量和全局)在10个项目上的APFD值的对比。
表3
Figure BDA0003572938260000141
其中用加粗的方式标出了每个最好的APFD结果。
表3中的数据表明,本发明方法在10个实验对象上的平均APFD值高于两种对比 的白盒测试方法。具体而言,本发明方法在4个实验对象上得到最高的APFD值,而对 比的白盒测试方法在其他6个实验对象上获得最高的APFD值。
如表4所示,为本发明方法与两种现有的白盒测试用例排序方法(增量方法和全局方法)在10个实验对象上的RAUC-s值(RAUC-25%,RAUC-50%,RAUC-75%,以 及RAUC-100%四个指标。)的对比。其中用加粗的方式标出了每个实验对象在每个指 标上最好的RAUC-s结果,最后一行表示每种方法在10个实验对象上的平均RAUC-s 值。从表4可以看出,在平均RAUC-25%和平均RAUC-50%方面,本发明方法优于两 种白盒测试方法。而对于RAUC-75%和RAUC-100%,本发明方法只是分别比最好的白 盒测试方法稍逊了0.0004和0.0028。
表4
Figure BDA0003572938260000151
表3、表4表明本发明方法可以缩小黑盒测试用例排序方法与白盒排序方法之间的差异,在一些实验对象上甚至略微优于最好的白盒方法。这也说明,本方法可以不依赖 于源代码信息便可达到和白盒方法不相上下的结果,因此本方法作为黑盒排序方法更具 实用价值。

Claims (1)

1.一种基于日志的面向回归测试的黑盒测试用例排序方法,其特征在于,该方法具体包括以下步骤:
步骤1、进行日志解析,即在收集测试用例生成的日志内容后,通过日志解析得到每个测试用例在***执行过程所对应的日志事件序列;
步骤2、将测试用例的日志事件数据进行向量化处理,具体包括:从单词的语义向量得到日志事件的向量表示,以及从日志事件的向量表示到测试用例的向量表示;
日志事件的向量Ve,如公式(1)所示:
Figure FDA0003572938250000011
其中,#wi表示单词wi在这句日志事件出现的次数,n表示该日志事件中单词的总个数,#SE表示所有不重复的日志事件的个数,
Figure FDA0003572938250000012
表示在#SE中包含单词wi的日志事件的个数,
Figure FDA0003572938250000013
表示该单词的语义向量;TF(wi)表示单词wi在该日志事件中出现的频率,IDF(wi)表示单词wi在所有不重复的日志事件中出现的逆文档频率;
得到测试用例的向量Vts,如公式(2)所示:
Figure FDA0003572938250000014
其中,#ej表示第j个日志事件ej在该测试用例的日志序列中出现的次数,m表示该测试用例中日志序列的总个数,#ST表示所有不重复的测试用例日志序列的个数,
Figure FDA0003572938250000015
表示在#ST中包含第j个日志事件ej的测试用例日志序列的个数,
Figure FDA0003572938250000016
表示第j个日志事件ej的向量表示;TF(ej)表示第j个日志事件ej在日志序列中出现的频率,IDF(ej)表示第j个日志事件ej在所有不重复的日志事件序列中出现的逆文档频率;
进而得到测试用例的向量矩阵
Figure FDA0003572938250000021
步骤3、定义需要排序的测试用例为TS=[ts1,ts2,...,tsu],基于日志事件进行自适应测试用例排序:
首先,选择输出日志的位置最多的测试用例作为第一个测试用例,从剩余未排序的测试用例中选择与已排序的测试用例具有最大欧氏距离的测试用例,顺序放入排序结果序列,并以此类推;设有f个未排序的测试用例[ts1,ts2,...,tsf]与g个已排序的测试用例[ts′1,ts′2,...,ts′g],未排序的测试用例tsx与当前已排序的g个测试用例的最小欧氏距离d(x)如公式(3)所示:
Figure FDA0003572938250000022
其中,Euclidean表示欧几里得距离函数,tsx表示在f个未排序的测试用例中的第x个测试用例,
Figure FDA0003572938250000023
表示tsx的向量,tsy表示已排序的g个测试用例中的第y个测试用例,min表示最小值函数;
接下来,分别计算f个未排序的测试用例与g个已排序的测试用例的欧氏距离,得到已排序的测试用例集合具有最大欧氏距离的测试用例为tsnext_index,其中,应该从未排序的测试用例中选择放入已排序测试用例的序列中的第next_index个测试用例如公式(4)所示:
Figure FDA0003572938250000024
其中,d(x)表示未排序的测试用例tsx与已排序测试用例的最小欧氏距离,
Figure FDA0003572938250000025
表示求在1≤x≤f范围内使d(x)值最大的x;
重复步骤3,每次从未排序的测试用例中选择一个测试用例加入排序结果序列,直到所有测试用例都被排序完,得到基于日志事件的自适应测试用例排序的排序结果Revent
CN202210324773.XA 2022-03-30 基于日志的面向回归测试的黑盒测试用例排序方法 Active CN114706769B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210324773.XA CN114706769B (zh) 2022-03-30 基于日志的面向回归测试的黑盒测试用例排序方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210324773.XA CN114706769B (zh) 2022-03-30 基于日志的面向回归测试的黑盒测试用例排序方法

Publications (2)

Publication Number Publication Date
CN114706769A true CN114706769A (zh) 2022-07-05
CN114706769B CN114706769B (zh) 2024-08-02

Family

ID=

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118170692A (zh) * 2024-05-15 2024-06-11 阿里云计算有限公司 代码测试方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101196817A (zh) * 2008-01-04 2008-06-11 福建星网锐捷网络有限公司 测试用例生成方法及***
US20130159774A1 (en) * 2011-12-19 2013-06-20 Siemens Corporation Dynamic reprioritization of test cases during test execution
CN108763091A (zh) * 2018-05-31 2018-11-06 恒生电子股份有限公司 用于回归测试的方法、装置及***
CN109783349A (zh) * 2018-12-10 2019-05-21 江苏大学 一种基于动态反馈权重的测试用例优先级排序方法及***
CN110134588A (zh) * 2019-04-16 2019-08-16 江苏大学 一种基于代码和组合覆盖的测试用例优先级排序方法及测试***
CN110502447A (zh) * 2019-08-30 2019-11-26 西安邮电大学 一种基于图的回归测试用例优先排序方法
WO2021160190A1 (zh) * 2020-02-14 2021-08-19 重庆邮电大学 一种基于混合模型的元启发式测试用例排序方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101196817A (zh) * 2008-01-04 2008-06-11 福建星网锐捷网络有限公司 测试用例生成方法及***
US20130159774A1 (en) * 2011-12-19 2013-06-20 Siemens Corporation Dynamic reprioritization of test cases during test execution
CN108763091A (zh) * 2018-05-31 2018-11-06 恒生电子股份有限公司 用于回归测试的方法、装置及***
CN109783349A (zh) * 2018-12-10 2019-05-21 江苏大学 一种基于动态反馈权重的测试用例优先级排序方法及***
CN110134588A (zh) * 2019-04-16 2019-08-16 江苏大学 一种基于代码和组合覆盖的测试用例优先级排序方法及测试***
CN110502447A (zh) * 2019-08-30 2019-11-26 西安邮电大学 一种基于图的回归测试用例优先排序方法
WO2021160190A1 (zh) * 2020-02-14 2021-08-19 重庆邮电大学 一种基于混合模型的元启发式测试用例排序方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
CHEN ZHICHAO, ET AL.: "Exploring Better Black-Box Test Case Prioritization via Log Analysis", 《ACM TRANS.SOFTW.ENG.METHODOL》, vol. 37, no. 4, 31 January 2022 (2022-01-31), pages 1 - 34 *
孙家泽;王刚;: "利用佳点集遗传算法的白盒测试用例优先排序", 计算机工程与科学, no. 10, 15 October 2018 (2018-10-15) *
岳鑫;: "自动化单元测试用例生成工具EvoSuite的性能探究", 现代计算机, no. 15, 25 May 2020 (2020-05-25) *
李淼;章力博;周悌慧;田宗彪;王金栋;: "地理国情普查质检软件测试方法", 遥感信息, no. 01, 15 February 2018 (2018-02-15) *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118170692A (zh) * 2024-05-15 2024-06-11 阿里云计算有限公司 代码测试方法

Similar Documents

Publication Publication Date Title
CN109144882B (zh) 一种基于程序不变量的软件故障定位方法及装置
Shen et al. Automating performance bottleneck detection using search-based application profiling
Liblit et al. Scalable statistical bug isolation
US8607198B2 (en) Cross-concern code coverage assessment
CN108268777B (zh) 一种利用补丁信息进行未知漏洞发现的相似性检测方法
US8312440B2 (en) Method, computer program product, and hardware product for providing program individuality analysis for source code programs
Chen et al. Coverage prediction for accelerating compiler testing
Chen et al. Understanding metric-based detectable smells in Python software: A comparative study
Zhang et al. {APICraft}: Fuzz driver generation for closed-source {SDK} libraries
Li et al. Classification of software defect detected by black-box testing: An empirical study
CN114365095A (zh) 用于评估软件开发者的代码贡献的***和方法
Aghamohammadi et al. Statement frequency coverage: a code coverage criterion for assessing test suite effectiveness
Gao et al. Effective software fault localization using predicted execution results
Fry et al. Clustering static analysis defect reports to reduce maintenance costs
Farmahinifarahani et al. On precision of code clone detection tools
Tang et al. Compiler testing: a systematic literature analysis
Astorga et al. PreInfer: Automatic inference of preconditions via symbolic analysis
Akimova et al. Pytracebugs: A large python code dataset for supervised machine learning in software defect prediction
Zhao et al. Fault centrality: boosting spectrum-based fault localization via local influence calculation
Wong et al. Software fault localization: An overview of research, techniques, and tools
CN115422092B (zh) 一种基于多方法融合的软件bug定位方法
Pettersson Measuring precision for static and dynamic design pattern recognition as a function of coverage
CN109032946B (zh) 一种测试方法和装置、计算机可读存储介质
Sagdeo et al. Precis: Inferring invariants using program path guided clustering
CN108763092B (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
GR01 Patent grant