CN109643271A - 识别不稳定测试 - Google Patents

识别不稳定测试 Download PDF

Info

Publication number
CN109643271A
CN109643271A CN201780051221.3A CN201780051221A CN109643271A CN 109643271 A CN109643271 A CN 109643271A CN 201780051221 A CN201780051221 A CN 201780051221A CN 109643271 A CN109643271 A CN 109643271A
Authority
CN
China
Prior art keywords
test
test case
failure
unstable
statistical analysis
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
CN201780051221.3A
Other languages
English (en)
Other versions
CN109643271B (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.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
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 Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN109643271A publication Critical patent/CN109643271A/zh
Application granted granted Critical
Publication of CN109643271B publication Critical patent/CN109643271B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/3692Test management for test results analysis
    • 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
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/18Complex mathematical operations for evaluating statistical data, e.g. average values, frequency distributions, probability functions, regression analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/81Threshold

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Evolutionary Biology (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Operations Research (AREA)
  • Probability & Statistics with Applications (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Algebra (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Maintenance And Management Of Digital Transmission (AREA)

Abstract

本公开提供了用于识别不稳定测试的方法和装置。可以获得测试用例的历史运行数据。可以基于历史运行数据来执行统计分析。可以基于统计分析来确定该测试用例是否是不稳定测试。

Description

识别不稳定测试
背景技术
在软件程序开发期间,可以在所开发的程序(例如,程序产品或程序代码段)上执行程序测试,以便验证该程序。可以运行一些测试用例(test case)来测试该程序。一些测试用例可能具有“通过”的运行结果,而其它测试用例可能具有“失败”的运行结果。不稳定测试(flaky test)可能是造成失败的运行结果的原因之一。在本文中,“不稳定测试”指行为随机并且即使对于相同程序也可能导致通过结果和失败结果两者的测试用例。
发明内容
提供本发明内容以便介绍一组概念,这组概念将在以下的具体实施方式中做进一步描述。本发明内容并非旨在标识所保护主题的关键特征或必要特征,也不旨在用于限制所保护主题的范围。
本公开的实施例提出了用于识别不稳定测试的方法和装置。可以获得测试用例的历史运行数据。可以基于历史运行数据来执行统计分析。可以基于统计分析来确定该测试用例是否是不稳定测试。
应当注意,以上一个或多个方面包括以下详细描述以及权利要求中具体指出的特征。下面的说明书及附图详细提出了所述一个或多个方面的某些说明性特征。这些特征仅仅指示可以实施各个方面的原理的多种方式,并且本公开旨在包括所有这些方面和其等同变换。
附图说明
以下将结合附图描述所公开的多个方面,这些附图被提供用以说明而非限制所公开的多个方面。
图1示出了程序测试的示例性应用场景。
图2是示出测试用例与测试任务之间的映射关系的示例性表格。
图3示出了根据实施例的用于识别不稳定测试的示例性过程。
图4示出了根据实施例的示例性运行曲线。
图5示出了根据实施例的示例性运行曲线。
图6示出了根据实施例的示例性运行曲线。
图7示出了根据实施例的示例性运行曲线。
图8示出了根据实施例的用于识别不稳定测试的示例性过程。
图9示出了根据实施例的用于识别不稳定测试的示例性方法的流程图。
图10示出了根据实施例的用于识别不稳定测试的示例性装置。
图11示出了根据实施例的用于识别不稳定测试的示例性装置。
具体实施方式
现在将参考多种示例性实施方式来讨论本公开。应当理解,这些实施方式的讨论仅仅用于使得本领域技术人员能够更好地理解并从而实施本公开的实施例,而并非教导对本公开的范围的任何限制。
图1示出了程序测试的示例性应用场景100。
目标程序110可以是由工程师或程序员提供的新开发的程序或更新的程序。在将目标程序110并入实际应用(例如,部署在产品中、向公众发布等)之前,可能需要验证目标程序110以便发现目标程序110中是否存在任何缺陷。可以由测试系统120在目标程序110上执行程序测试,以便验证目标程序110。
图1所示的测试系统120是测试相关功能的逻辑集合。测试系统120可以独立于由工程师或程序员用于开发目标程序110的程序开发平台,或者可以被并入到该程序开发平台中。
可以将目标程序110提供给测试系统120中的测试用例选择模块122。测试用例选择模块122可以基于目标程序110的特性或功能从测试用例库130中选择多个测试用例。在本文中,“测试用例”可以指用于测试待测试程序的一个或多个特性或功能的测试程序或测试代码。可以预先建立或开发测试用例库130中的测试用例。可以将由测试用例选择模块122为目标程序110选择的多个测试用例统称为针对目标程序110的“测试任务”。
可以由测试系统120中的测试任务执行模块124来执行由测试用例选择模块122选择的多个测试用例所形成的测试任务。在执行测试任务期间,将运行测试任务中的每个测试用例。测试任务执行模块124可以输出测试任务的测试结果126。测试结果126可以包括测试任务中每个测试用例的运行结果。
可以将测试结果126存储在测试日志数据库140中。测试日志数据库140可以存储测试用例库130中的测试用例的历史运行数据。
图2是示出测试用例与测试任务之间的映射关系的示例性表格200。
假定测试用例库中有n个测试用例。每个测试用例可以由至少一个测试任务选择和调用以测试至少一个目标程序。即,每个测试用例都可以具有在相应的测试任务中被执行的一次或多次测试运行(test run)。在本文中,一次“测试运行”可以指运行测试用例一次。此外,假设已经建立了m个测试任务,每个测试任务可以调用至少一个测试用例并可被执行用于测试相应的目标程序。例如,如图2所示,测试用例1已被测试任务1、测试任务3和测试任务m调用,测试用例2已被测试任务2和测试任务3调用,等等。此外,测试任务1调用了测试用例1、测试用例3、测试用例4、测试用例5和测试用例n,测试任务2调用了测试用例2、测试用例4和测试用例5,等等。
在一些实施方式中,可以将表格200中示出的映射关系以及每个测试用例的所有测试运行的运行结果作为测试用例的历史运行数据而存储在例如测试日志数据库中。
如上所述,目标程序的测试结果可以包括多个测试用例的运行结果,运行结果可以包括“通过”或“失败”。“失败”的运行结果可能是由于目标程序的缺陷、不稳定测试等造成的。
不稳定测试可能由于各种原因而导致失败的运行结果。例如,如果在不稳定测试中使用随机数发生器,并且在程序测试期间,由随机数发生器产生的随机数不能满足特定的要求,则不稳定测试的运行结果可能是失败的。如果不稳定测试基于网络或文件访问,并且在程序测试期间不能获得网络或文件访问,则不稳定测试的运行结果可能是失败的。如果不稳定测试与具体的日期或时间相关联,并且在程序测试期间,不能满足该具体的日期或时间,则不稳定测试的运行结果可能是失败的。
如果确定失败的运行结果是由目标程序引起的,则可以进而对目标程序进行修改或更新,以便克服缺陷,提高目标程序的质量。而如果失败的运行结果是由不稳定测试引起的,则该失败对于确定目标程序中是否存在任何缺陷是没有用的,并且可能导致目标程序的测试结果失真。
因此,识别不稳定测试将是有益的,这可以帮助避免由不稳定测试引起的“失败”运行结果对目标程序的最终测试结果的影响。可以从测试用例库中移除所识别的不稳定测试,或者可以将其修改为非不稳定的。
通常,可以通过重新运行的方式来识别不稳定测试。例如,如果一些测试用例具有“失败”的运行结果,则可以将这些测试用例重新运行预定的次数。如果测试用例中的一个测试用例的重新运行结果包括“通过”和“失败”两者,那么这个测试用例很可能是不稳定测试。而如果测试用例中的一个测试用例的重新运行结果全部是“通过”或者全部是“失败”,那么这个测试用例可能不是不稳定测试。但是,这种重新运行的方式可能是非常耗时或耗费资源的,特别是在需要重新运行大量测试用例的情况下。用于识别不稳定测试的另一种传统方法可以基于对测试用例的运行结果中的通过-到-失败转变的检测。例如,测试用例具有的通过-到-失败转变越多,则该测试用例是不稳定测试的可能性就越高。但是,这种方式可能不够准确,并且可能效率低下。
本公开的实施例提出了基于对测试用例的历史运行数据的统计分析来识别不稳定测试。可以通过数据挖掘来针对测试用例获得多个特征,并且可以基于这些特征来执行统计分析。通过统计分析,如果一个测试用例的一个或多个特征符合预定义的条件,则可以将该测试用例确定为不稳定测试。
在一些实施方式中,可以在执行统计分析之前对测试用例进行预处理。例如,可以对测试用例执行干扰过滤,以便滤除无法被确定为不稳定测试或不能以高置信度确定为不稳定测试的那些测试用例。
在一些实施方式中,可以对通过统计分析所识别的候选不稳定测试执行后处理,以便可以进一步验证这些候选不稳定测试是否为不稳定测试。
本公开的实施例可以通过消耗最少量的资源来识别不稳定测试。根据本公开实施例的对不稳定测试的识别可以是时间高效的,例如,可以在数分钟内完成对数万个测试用例的统计分析。
图3示出了根据实施例的用于识别不稳定测试的示例性过程300。
在310处,可以获得一组测试用例的历史运行数据。在一种实施方式中,可以从图1所示的测试日志数据库140中提取历史运行数据。然而,本发明的实施例不限于从测试日志数据库中获得历史运行数据,而是可以通过任何适当的方式获得历史运行数据。历史运行数据可以包括测试用例与测试任务之间的映射关系、测试用例的测试运行的运行结果、测试用例的测试运行的时间点等。该组测试用例中的每个测试用例由至少一个测试任务调用,并且每个测试任务可以调用该组测试用例中的至少一个测试用例。
在一些实施方式中,可以基于历史运行数据来生成运行曲线,以表示测试用例的运行历史。例如,对于一个测试用例,可以基于该测试用例的多次测试运行和相应的运行结果来生成运行曲线。图4示出了根据实施例的示例性运行曲线400。运行曲线400是基于测试用例1的30次测试运行和相应的运行结果而生成的。图4中的X轴按顺序均匀列出了30次测试运行,以相应的编号表示。运行曲线400上的每个点代表一次测试运行,运行曲线400在该点处的幅度代表测试运行的运行结果。运行曲线400可以具有两种幅度,其中,较高的幅度指示失败的运行结果,而较低的幅度指示通过的运行结果。例如,第3次、第7次、第13次、第14次、第17次到第20次、以及第26次的测试运行具有失败的运行结果,而其它的测试运行具有通过的运行结果。应当理解,运行曲线400是示例性的,并且在实际应用中,一个测试用例可以具有比30次多得多的测试运行。此外,可以为每个测试用例生成运行曲线,因此,在310处获得该组测试用例的历史运行数据之后,可以为该组测试用例生成多条运行曲线。
应当理解,本公开的实施例不限于通过运行曲线来表示测试用例的运行历史,测试用例的运行历史也可以被表示为任何其它形式,例如运行表。测试用例的运行表可以按顺序列出关于测试用例的测试运行的各种信息,例如,测试用例的每次测试运行的运行结果等。此外,尽管下面的讨论至少部分地基于运行曲线,但也可以将相同的技术手段或其等同变换应用于测试用例的运行历史的任何其它表示形式,例如运行表等。
在320处,可以对在310处为其获得了历史运行数据的一组测试用例执行干扰过滤。在本文中,干扰过滤也可以被称为对该组测试用例的预处理。干扰过滤可以被执行用于从该组测试用例中滤除无法被确定为不稳定测试或不能以高置信度确定为不稳定测试的那些测试用例。应当理解,320处的干扰过滤在过程300中是可选的。可以采用各种方式来执行干扰过滤。
在一种实施方式中,干扰过滤可以基于测试任务的失败率。在本文中,一个测试任务的“失败率”可以指该测试任务所调用的具有失败运行结果的测试用例的数量与该测试任务所调用的测试用例的总数量之比。可以预先定义一个失败率阈值,例如5%,其可被用于确定测试任务的失败率是否过高。通常,如果测试任务的失败率高于失败率阈值,则该测试任务中的测试用例的失败运行结果很可能是由执行环境引起的,如软件问题、硬件问题等。即,可能难以以高置信度来确定该测试任务中测试用例的失败运行结果是否是由于不稳定测试所造成的。因此,从一组测试用例中移除由该测试任务所调用的所有测试用例将是有益的。
在一种实施方式中,干扰过滤可以基于一组测试用例中的测试用例的测试运行次数。如果一个测试用例的测试运行次数低于测试运行阈值,例如75次,则这可能表明该测试用例未被运行足够的次数以便能以高置信度确定其是否是不稳定测试。因此,可以从该组测试用例中移除这个测试用例。
可以将在320处已被执行了干扰过滤的一组测试用例提供用于进一步的统计分析。
在330处,可以对已被执行了干扰过滤的一组测试用例执行统计分析。然而,如上所述,由于320处的干扰过滤是可选的并从而可以从过程300中省略,也可以直接对该组测试用例执行330处的统计分析。在本文中,“统计分析”可以指对通过数据挖掘获得的测试用例的一个或多个特征所执行的统计方式的分析。例如,可以通过对测试用例的运行曲线执行数据挖掘来获得测试用例的特征。
在一种实施方式中,测试用例的特征可以是“失败区域数量”332。在本文中,“失败区域”可以指由运行曲线中的一个或多个连续失败所形成的区域,“失败区域数量”可以指运行曲线中的失败区域的总数。图5示出了根据实施例的示例性运行曲线500。图5中的虚线框示出了示例性的失败区域。例如,虚线框510示出了由测试用例1的第3次测试运行处的失败所形成的失败区域,虚线框520示出了由第7次测试运行处的失败所形成的失败区域,虚线框530示出了由第13次和第14次测试运行处的两次连续失败所形成的失败区域,虚线框540示出了由第17次到第20次测试运行处的四次连续失败所形成的失败区域,虚线框550示出了由第26次测试运行处的失败所形成的失败区域。可以看出,测试用例1的运行曲线500中的失败区域数量是5。
考虑到不稳定测试时常会导致失败的运行结果,这不是一次性事件,“失败区域数量”特征可以有助于确定不稳定测试。例如,如果一个测试用例的运行曲线中没有包括失败区域或包括很少的失败区域,则这个测试用例很可能不是不稳定测试。在一种实施方式中,可以预先定义一个失败区域数量阈值,例如2个,并且可以确定一个测试用例的运行曲线中的失败区域的数量是否高于失败区域数量阈值。如果失败区域的数量高于失败区域数量阈值,则该测试用例是不稳定测试的可能性就很高。在图5中,由于运行曲线500的失败区域数量是5个,其高于失败区域数量阈值“2”,因此,就“失败区域数量”特征而言,测试用例1是不稳定测试的可能性很高。
在一种实施方式中,测试用例的特征可以是“连续失败数量”334。在本文中,“连续失败数量”可以指运行曲线中每个失败区域内包括的失败的总数。如图5所示,失败区域510、520和550的连续失败数量是1,失败区域530的连续失败数量是2,并且失败区域540的连续失败数量是4。
如果测试用例在多次连续测试运行中长时间保持失败,则该测试用例可能不是不稳定测试,因为该测试用例在这些连续测试运行中获得相对稳定的失败运行结果,而不稳定测试的特性应该是随机的失败或通过运行结果。在一种实施方式中,可以预先定义一个连续失败数量阈值,例如5,并且可以确定一个测试用例的运行曲线中每个失败区域内的连续失败数量是否低于连续失败数量阈值。如果每个失败区域内的连续失败数量都低于连续失败数量阈值,则该测试用例是不稳定测试的可能性很高。在图5中,由于运行曲线500中的失败区域510至550的连续失败数量全部低于连续失败数量阈值“5”,因此,就“连续失败数量”特征而言,测试用例1是不稳定测试的可能性很高。
在一种实施方式中,测试用例的特征可以是“失败距离”336。在本文中,“失败距离”可以指运行曲线中每对两个连续失败之间的测试运行的次数。图6示出了根据实施例的示例性运行曲线600。如图6所示,第3次测试运行处的失败与第7次测试运行处的失败是运行曲线600中的一对两个连续的失败,并且这两个失败之间的失败距离是4。类似地,可以确定第7次测试运行处的失败与第13次测试运行处的失败之间的失败距离是6,第13次测试运行处的失败与第14次测试运行处的失败之间的失败距离是1,等等。
由于不稳定测试时常会导致失败的运行结果,如果一个测试用例在多次连续的测试运行中长时间保持通过,则该测试用例可能不是不稳定测试。在一种实施方式中,可以预先定义一个失败距离阈值,例如50,并且可以确定运行曲线中每对两个连续失败之间的测试运行次数是否低于失败距离阈值。如果每对两个连续失败之间的测试运行次数低于失败距离阈值,则该测试用例是不稳定测试的可能性很高。在图6中,由于运行曲线600中每对两个连续失败之间的失败距离都低于失败距离阈值“50”,因此,就“失败距离”特征而言,测试用例1是不稳定测试的可能性很高。
在一种实施方式中,测试用例的特征可以是“转变时间”338。在本文中,“转变时间”可以指从失败到通过的转变中所花费的时间。图7示出了根据实施例的示例性运行曲线700。运行曲线700可以被视为图4所示的运行曲线400的变换。运行曲线700是基于测试用例1的30次测试运行和相应的运行结果而生成的。图7中的T轴是时间轴,其按时间顺序列出了30次测试运行,分别由相应的时间点表示。运行曲线700上的每个点表示一次测试运行,运行曲线700在该点处的幅度代表该次测试运行的运行结果。例如,在时间点t1处的第1次测试运行具有通过的运行结果,在时间点t2处的第2次测试运行具有通过的运行结果,在时间点t3处的第3次测试运行具有失败的运行结果,在时间点t4处的第4次测试运行具有通过的运行结果,等等。在运行曲线700中包括五次转变,例如从t3处的失败到t4处的通过的转变,从t7处的失败到t8处的通过的转变,从t14处的失败到t15处的通过的转变,从t20处的失败到t21处的通过的转变,从t26处的失败到t27处的通过的转变。作为示例,从t14处的失败到t15处的通过的转变时间可以被计算为t15-t14
考虑到程序员不可能太快地,例如在1小时内,修复目标程序中的缺陷,如果一个测试用例的运行结果从失败过快地变为通过,则该测试用例可能是不稳定测试。在一种实施方式中,可以预先定义一个转变时间阈值,例如1小时,并且可以确定运行曲线中从失败到通过的每次转变的转变时间是否低于转变时间阈值。如果至少一次转变的转变时间低于转变时间阈值,则该测试用例是不稳定测试的可能性很高。在图7中,由于运行曲线700中从t14处的失败到t15处的通过的转变时间低于转变时间阈值“1小时”,因此,就“转变时间”特征而言,测试用例1是不稳定测试的可能性很高。
尽管以上讨论了“失败区域数量”、“连续失败数量”、“失败距离”和“转变时间”这四种类型的特征,但是应当理解,330处的统计分析不限于这些特征,而是可以基于通过数据挖掘获得的测试用例的任何等同特征或任何其它特征来执行。
这些特征可以被用于独立地或组合地确定一个测试用例是否是不稳定测试。在一种实施方式中,如果至少一个特征符合预定义条件,例如预先定义的对应阈值,则可以将该测试用例确定为不稳定测试。在一种实施方式中,如果所有特征分别满足预定义条件,则可以将该测试用例确定为不稳定测试。在一种实施方式中,可以对基于特征的确定结果进行加权和求和,并且如果总和满足预定义条件,则可以将该测试用例确定为不稳定测试。
此外,以上讨论的所有阈值,例如失败区域数量阈值、连续失败数量阈值、失败距离阈值和转变时间阈值都是示例性的,并且可以根据实际需要或期望的置信度来定义和调整这些阈值的具体数量。
在340处,可以输出由统计分析识别的一个或多个不稳定测试的确定结果。
图8示出了根据实施例的用于识别不稳定测试的示例性过程800。过程800示出了图3中的过程300的另一优选实施方式,并且包括对统计分析的确定结果的验证过程。
除了830处的统计分析识别出一个或多个候选不稳定测试之外,图8中的810、820和830处的操作与图3中的310、320和330处的操作相同。在本文中,“候选不稳定测试”可以指很可能是不稳定测试但需要进一步验证的测试用例。
在850处,可以对候选不稳定测试执行验证过程。在本文中,验证过程也可以被称为对通过统计分析识别的候选不稳定测试的后处理。在一种实施方式中,可以将候选不稳定测试分别重新运行预定次数。然后,可以通过用于基于重新运行的结果来识别不稳定测试的任何常规方式,从候选不稳定测试中识别不稳定测试。应当理解,该验证过程可以通过各种方式来执行,而不限于重新运行方法。
在860处,可以输出通过验证而识别的一个或多个不稳定测试的确定结果。
图9示出了根据实施例的用于识别不稳定测试的示例性方法900的流程图。
在910处,可以获得测试用例的历史运行数据。
在920处,可以基于所述历史运行数据来执行统计分析。
在930处,可以基于所述统计分析来确定所述测试用例是否是不稳定测试。
在一种实施方式中,所述执行所述统计分析可以包括:从所述历史运行数据中识别所述测试用例的多次测试运行和对应的运行结果;以及基于所述多次测试运行和对应的运行结果来执行所述统计分析。
在一种实施方式中,所述执行所述统计分析可以包括:基于所述多次测试运行和对应的运行结果来生成运行曲线;以及基于所述运行曲线来执行所述统计分析。
在一种实施方式中,所述执行所述统计分析可以包括以下至少之一:确定所述运行曲线中的失败区域的数量是否高于失败区域数量阈值;确定所述运行曲线中每个失败区域内的连续失败数量是否低于连续失败数量阈值;确定所述运行曲线中每对两个连续失败之间的测试运行次数是否低于失败距离阈值;以及确定所述运行曲线中从失败到通过的每次转变的转变时间是否低于转变时间阈值。
在一种实施方式中,所述确定所述测试用例是否是不稳定测试可以包括基于以下至少之一来确定所述测试用例是不稳定测试:所述运行曲线中的失败区域的数量高于所述失败区域数量阈值;所述运行曲线中每个失败区域内的连续失败数量低于所述连续失败数量阈值;所述运行曲线中每对两个连续失败之间的测试运行次数低于所述失败距离阈值;以及所述运行曲线中从失败到通过的至少一次转变的转变时间低于所述转变时间阈值。
在一种实施方式中,方法900还可以包括:获得一组测试用例的历史运行数据,所述一组测试用例中的每一个测试用例由至少一个测试任务所调用,每个测试任务调用所述一组测试用例中的至少一个测试用例;以及对所述一组测试用例执行干扰过滤。所述测试用例可以是从已被执行了所述干扰过滤的所述一组测试用例中提取的。
在一种实施方式中,所述执行所述干扰过滤可以包括:确定一个测试任务的失败率高于失败率阈值;以及从所述一组测试用例中移除由所述测试任务调用的所有测试用例。
在一种实施方式中,所述执行所述干扰过滤可以包括:确定所述一组测试用例中的一个或多个测试用例的测试运行次数低于测试运行阈值;以及从所述一组测试用例中移除所述一个或多个测试用例。
在一种实施方式中,所述确定所述测试用例是否是不稳定测试可以包括:基于所述统计分析来确定所述测试用例是候选不稳定测试;重新运行所述测试用例预定的次数;以及基于所述重新运行的结果来确定所述测试用例是否是不稳定测试。
应当理解,方法900还可以包括根据上述本公开实施例的用于识别不稳定测试的任何步骤/过程。
图10示出了根据实施例的用于识别不稳定测试的示例性装置1000。
装置1000可以包括:数据获得模块1010,用于获得测试用例的历史运行数据;统计分析执行模块1020,用于基于所述历史运行数据来执行统计分析;以及不稳定测试确定模块1030,用于基于所述统计分析来确定所述测试用例是否是不稳定测试。
在一种实施方式中,所述统计分析执行模块1020可以用于:从所述历史运行数据中识别所述测试用例的多次测试运行和对应的运行结果;以及基于所述多次测试运行和对应的运行结果来执行所述统计分析。
在一种实施方式中,所述统计分析执行模块1020可以用于:基于所述多次测试运行和对应的运行结果来生成运行曲线;以及基于所述运行曲线来执行所述统计分析。
在一种实施方式中,所述统计分析执行模块1020可以用于以下至少之一:确定所述运行曲线中的失败区域的数量是否高于失败区域数量阈值;确定所述运行曲线中每个失败区域内的连续失败数量是否低于连续失败数量阈值;确定所述运行曲线中每对两个连续失败之间的测试运行次数是否低于失败距离阈值;以及确定所述运行曲线中从失败到通过的每次转变的转变时间是否低于转变时间阈值。
在一种实施方式中,所述不稳定测试确定模块1030可以用于基于以下至少之一来确定所述测试用例是不稳定测试:所述运行曲线中的失败区域的数量高于所述失败区域数量阈值;所述运行曲线中每个失败区域内的连续失败数量低于所述连续失败数量阈值;所述运行曲线中每对两个连续失败之间的测试运行次数低于所述失败距离阈值;以及所述运行曲线中从失败到通过的至少一次转变的转变时间低于所述转变时间阈值。
在一种实施方式中,所述数据获得模块1010可以用于获得一组测试用例的历史运行数据,所述一组测试用例中的每一个测试用例由至少一个测试任务所调用,每个测试任务调用所述一组测试用例中的至少一个测试用例。装置1000还可以包括干扰过滤模块,用于对所述一组测试用例执行干扰过滤。所述测试用例可以是从已被执行了所述干扰过滤的所述一组测试用例中提取的。
在一种实施方式中,所述干扰过滤模块可以用于:确定一个测试任务的失败率高于失败率阈值;以及从所述一组测试用例中移除由所述测试任务调用的所有测试用例。
在一种实施方式中,所述干扰过滤模块可以用于:确定所述一组测试用例中的一个或多个测试用例的测试运行次数低于测试运行阈值;以及从所述一组测试用例中移除所述一个或多个测试用例。
在一种实施方式中,所述不稳定测试确定模块1030可以用于:基于所述统计分析来确定所述测试用例是候选不稳定测试;重新运行所述测试用例预定的次数;以及基于所述重新运行的结果来确定所述测试用例是否是不稳定测试。
此外,装置1000还可以包括被配置用于执行根据上述本公开实施例的用于识别不稳定测试的方法的任何操作的任何其它模块。
图11示出了根据实施例的用于识别不稳定测试的示例性装置1100。
装置1100可以包括至少一个处理器1110。装置1100还可以包括与处理器1110连接的存储器1120。存储器1120可以存储计算机可执行指令,当所述计算机可执行指令被执行时,使得处理器1110执行根据上述本公开实施例的用于识别不稳定测试的方法的任何操作。
本公开的实施例可以实施在非暂时性计算机可读介质中。该非暂时性计算机可读介质可以包括指令,当所述指令被执行时,使得一个或多个处理器执行根据上述本公开实施例的用于识别不稳定测试的方法的任何操作。
应当理解,以上描述的方法中的所有操作都仅仅是示例性的,本公开并不限制于方法中的任何操作或这些操作的顺序,而是应当涵盖在相同或相似构思下的所有其它等同变换。
还应当理解,以上描述的装置中的所有模块都可以通过各种方式来实施。这些模块可以被实施为硬件、软件、或其组合。此外,这些模块中的任何模块可以在功能上被进一步划分成子模块或组合在一起。
已经结合各种装置和方法描述了处理器。这些处理器可以使用电子硬件、计算机软件或其任意组合来实施。这些处理器是实施为硬件还是软件将取决于具体的应用以及施加在系统上的总体设计约束。作为示例,本公开中给出的处理器、处理器的任意部分、或者处理器的任意组合可以实施为微处理器、微控制器、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、可编程逻辑器件(PLD)、状态机、门逻辑、分立硬件电路、以及配置用于执行在本公开中描述的各种功能的其它适合的处理部件。本公开给出的处理器、处理器的任意部分、或者处理器的任意组合的功能可以实施为由微处理器、微控制器、DSP或其它适合的平台所执行的软件。
软件应当被广泛地视为表示指令、指令集、代码、代码段、程序代码、程序、子程序、软件模块、应用、软件应用、软件包、例程、子例程、对象、运行线程、过程、函数等。软件可以驻留在计算机可读介质中。计算机可读介质可以包括例如存储器,存储器可以例如为磁性存储设备(如,硬盘、软盘、磁条)、光盘、智能卡、闪存设备、随机存取存储器(RAM)、只读存储器(ROM)、可编程ROM(PROM)、可擦除PROM(EPROM)、电可擦除PROM(EEPROM)、寄存器或者可移动盘。尽管在本公开给出的多个方面中将存储器示出为是与处理器分离的,但是存储器也可以位于处理器内部(如,缓存或寄存器)。
以上描述被提供用于使得本领域任何技术人员可以实施本文所描述的各个方面。这些方面的各种修改对于本领域技术人员是显而易见的,本文限定的一般性原理可以应用于其它方面。因此,权利要求并非旨在被局限于本文示出的方面。关于本领域技术人员已知或即将获知的、对本公开所描述各个方面的元素的所有结构和功能上的等同变换,都将通过引用而明确地包含到本文中,并且旨在由权利要求所覆盖。

Claims (19)

1.一种用于识别不稳定测试的方法,包括:
获得测试用例的历史运行数据;
基于所述历史运行数据来执行统计分析;以及
基于所述统计分析来确定所述测试用例是否是不稳定测试。
2.根据权利要求1所述的方法,其中,所述执行所述统计分析包括:
从所述历史运行数据中识别所述测试用例的多次测试运行和对应的运行结果;以及
基于所述多次测试运行和对应的运行结果来执行所述统计分析。
3.根据权利要求2所述的方法,其中,所述执行所述统计分析包括:
基于所述多次测试运行和对应的运行结果来生成运行曲线;以及
基于所述运行曲线来执行所述统计分析。
4.根据权利要求3所述的方法,其中,所述执行所述统计分析包括以下至少之一:
确定所述运行曲线中的失败区域的数量是否高于失败区域数量阈值;
确定所述运行曲线中每个失败区域内的连续失败数量是否低于连续失败数量阈值;
确定所述运行曲线中每对两个连续失败之间的测试运行次数是否低于失败距离阈值;以及
确定所述运行曲线中从失败到通过的每次转变的转变时间是否低于转变时间阈值。
5.根据权利要求4所述的方法,其中,所述确定所述测试用例是否是不稳定测试包括基于以下至少之一来确定所述测试用例是不稳定测试:
所述运行曲线中的失败区域的数量高于所述失败区域数量阈值;
所述运行曲线中每个失败区域内的连续失败数量低于所述连续失败数量阈值;
所述运行曲线中每对两个连续失败之间的测试运行次数低于所述失败距离阈值;以及
所述运行曲线中从失败到通过的至少一次转变的转变时间低于所述转变时间阈值。
6.根据权利要求1所述的方法,还包括:
获得一组测试用例的历史运行数据,所述一组测试用例中的每一个测试用例由至少一个测试任务所调用,每个测试任务调用所述一组测试用例中的至少一个测试用例;以及
对所述一组测试用例执行干扰过滤,
其中,所述测试用例是从已被执行了所述干扰过滤的所述一组测试用例中提取的。
7.根据权利要求6所述的方法,其中,所述执行所述干扰过滤包括:
确定一个测试任务的失败率高于失败率阈值;以及
从所述一组测试用例中移除由所述测试任务调用的所有测试用例。
8.根据权利要求6所述的方法,其中,所述执行所述干扰过滤包括:
确定所述一组测试用例中的一个或多个测试用例的测试运行次数低于测试运行阈值;以及
从所述一组测试用例中移除所述一个或多个测试用例。
9.根据权利要求1所述的方法,其中,所述确定所述测试用例是否是不稳定测试包括:
基于所述统计分析来确定所述测试用例是候选不稳定测试;
重新运行所述测试用例预定的次数;以及
基于所述重新运行的结果来确定所述测试用例是否是不稳定测试。
10.一种用于识别不稳定测试的装置,包括:
数据获得模块,用于获得测试用例的历史运行数据;
统计分析执行模块,用于基于所述历史运行数据来执行统计分析;以及
不稳定测试确定模块,用于基于所述统计分析来确定所述测试用例是否是不稳定测试。
11.根据权利要求10所述的装置,其中,所述统计分析执行模块用于:
从所述历史运行数据中识别所述测试用例的多次测试运行和对应的运行结果;以及
基于所述多次测试运行和对应的运行结果来执行所述统计分析。
12.根据权利要求11所述的装置,其中,所述统计分析执行模块用于:
基于所述多次测试运行和对应的运行结果来生成运行曲线;以及
基于所述运行曲线来执行所述统计分析。
13.根据权利要求12所述的装置,其中,所述统计分析执行模块用于以下至少之一:
确定所述运行曲线中的失败区域的数量是否高于失败区域数量阈值;
确定所述运行曲线中每个失败区域内的连续失败数量是否低于连续失败数量阈值;
确定所述运行曲线中每对两个连续失败之间的测试运行次数是否低于失败距离阈值;以及
确定所述运行曲线中从失败到通过的每次转变的转变时间是否低于转变时间阈值。
14.根据权利要求13所述的装置,其中,所述不稳定测试确定模块用于基于以下至少之一来确定所述测试用例是不稳定测试:
所述运行曲线中的失败区域的数量高于所述失败区域数量阈值;
所述运行曲线中每个失败区域内的连续失败数量低于所述连续失败数量阈值;
所述运行曲线中每对两个连续失败之间的测试运行次数低于所述失败距离阈值;以及
所述运行曲线中从失败到通过的至少一次转变的转变时间低于所述转变时间阈值。
15.根据权利要求10所述的装置,其中,
所述数据获得模块用于获得一组测试用例的历史运行数据,所述一组测试用例中的每一个测试用例由至少一个测试任务所调用,每个测试任务调用所述一组测试用例中的至少一个测试用例,
所述装置还包括干扰过滤模块,用于对所述一组测试用例执行干扰过滤,并且
所述测试用例是从已被执行了所述干扰过滤的所述一组测试用例中提取的。
16.根据权利要求15所述的装置,其中,所述干扰过滤模块用于:
确定一个测试任务的失败率高于失败率阈值;以及
从所述一组测试用例中移除由所述测试任务调用的所有测试用例。
17.根据权利要求15所述的装置,其中,所述干扰过滤模块用于:
确定所述一组测试用例中的一个或多个测试用例的测试运行次数低于测试运行阈值;以及
从所述一组测试用例中移除所述一个或多个测试用例。
18.根据权利要求10所述的装置,其中,所述不稳定测试确定模块用于:
基于所述统计分析来确定所述测试用例是候选不稳定测试;
重新运行所述测试用例预定的次数;以及
基于所述重新运行的结果来确定所述测试用例是否是不稳定测试。
19.一种用于识别不稳定测试的装置,包括:
至少一个处理器;以及
存储器,其存储计算机可执行指令,当所述计算机可执行指令被执行时使得所述处理器:
获得测试用例的历史运行数据;
基于所述历史运行数据来执行统计分析;以及
基于所述统计分析来确定所述测试用例是否是不稳定测试。
CN201780051221.3A 2017-06-13 2017-06-13 识别不稳定测试 Active CN109643271B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2017/088037 WO2018227367A1 (en) 2017-06-13 2017-06-13 Identifying flaky tests

Publications (2)

Publication Number Publication Date
CN109643271A true CN109643271A (zh) 2019-04-16
CN109643271B CN109643271B (zh) 2022-02-18

Family

ID=64660731

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780051221.3A Active CN109643271B (zh) 2017-06-13 2017-06-13 识别不稳定测试

Country Status (4)

Country Link
US (1) US11586534B2 (zh)
EP (1) EP3612941B1 (zh)
CN (1) CN109643271B (zh)
WO (1) WO2018227367A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113643128A (zh) * 2021-08-31 2021-11-12 中国银行股份有限公司 银行产品的自动化测试方法及装置

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10831647B2 (en) * 2017-09-20 2020-11-10 Sap Se Flaky test systems and methods
US11755919B2 (en) * 2018-05-07 2023-09-12 Sauce Labs Inc. Analytics for an automated application testing platform
CN112486820B (zh) * 2020-11-27 2022-04-01 北京百度网讯科技有限公司 用于测试代码的方法、装置、设备以及存储介质
US20230229586A1 (en) * 2022-01-14 2023-07-20 International Business Machines Corporation Environment specific software test failure analysis

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070150886A1 (en) * 2005-12-22 2007-06-28 Shapiro Alan J Apparatus and method for subtractive installation
US7860700B2 (en) * 2007-08-09 2010-12-28 International Business Machines Corporation Hardware verification batch computing farm simulator
CN102012861A (zh) * 2010-11-01 2011-04-13 北京航空航天大学 一种实时嵌入式软件测试结果数据分析的方法及系统
US20140341891A1 (en) * 2013-04-24 2014-11-20 Corning Incorporated Delamination resistant pharmaceutical glass containers containing active pharmaceutical ingredients
CN104503908A (zh) * 2014-12-17 2015-04-08 西北工业大学 基于谓词频率统计的软件故障定位方法
US9032259B1 (en) * 2012-02-29 2015-05-12 Amazon Technologies, Inc. Test prioritization techniques
CN104850584A (zh) * 2015-04-17 2015-08-19 北京赛思信安技术有限公司 一种应用于海量数据存储系统元数据测试的测试工具及方法
CN106155890A (zh) * 2015-04-02 2016-11-23 深圳市腾讯计算机系统有限公司 平台测试方法和系统
US20170010959A1 (en) * 2015-07-07 2017-01-12 International Business Machines Corporation Predictive model scoring to optimize test case order in real time

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7055065B2 (en) * 2001-09-05 2006-05-30 International Business Machines Corporation Method, system, and computer program product for automated test generation for non-deterministic software using state transition rules
US7712087B2 (en) 2005-06-28 2010-05-04 Oracle International Corporation Methods and systems for identifying intermittent errors in a distributed code development environment
EP2329376A1 (en) * 2008-08-15 2011-06-08 Verum Holding B.V. A method and system for testing complex machine control software
US20110173591A1 (en) 2010-01-13 2011-07-14 Target Brands, Inc. Unit Test Generator
GB2512861A (en) 2013-04-09 2014-10-15 Ibm Method and system for performing automated system tests
US9311220B1 (en) * 2013-12-31 2016-04-12 Google Inc. System to uncover root cause of non-deterministic (flaky) tests
CN106155894A (zh) 2015-04-10 2016-11-23 中兴通讯股份有限公司 一种测试用例的生成方法及装置
US9710364B2 (en) * 2015-09-04 2017-07-18 Micron Technology Licensing, Llc Method of detecting false test alarms using test step failure analysis
US9514037B1 (en) * 2015-12-16 2016-12-06 International Business Machines Corporation Test program scheduling based on analysis of test data sets
US9983988B1 (en) * 2016-06-23 2018-05-29 Amazon Technologies, Inc. Resuming testing after a destructive event
US10896120B2 (en) * 2017-03-16 2021-01-19 Google Llc Systems and methods for micro-scheduler testing framework

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070150886A1 (en) * 2005-12-22 2007-06-28 Shapiro Alan J Apparatus and method for subtractive installation
US7860700B2 (en) * 2007-08-09 2010-12-28 International Business Machines Corporation Hardware verification batch computing farm simulator
CN102012861A (zh) * 2010-11-01 2011-04-13 北京航空航天大学 一种实时嵌入式软件测试结果数据分析的方法及系统
US9032259B1 (en) * 2012-02-29 2015-05-12 Amazon Technologies, Inc. Test prioritization techniques
US20140341891A1 (en) * 2013-04-24 2014-11-20 Corning Incorporated Delamination resistant pharmaceutical glass containers containing active pharmaceutical ingredients
CN104503908A (zh) * 2014-12-17 2015-04-08 西北工业大学 基于谓词频率统计的软件故障定位方法
CN106155890A (zh) * 2015-04-02 2016-11-23 深圳市腾讯计算机系统有限公司 平台测试方法和系统
CN104850584A (zh) * 2015-04-17 2015-08-19 北京赛思信安技术有限公司 一种应用于海量数据存储系统元数据测试的测试工具及方法
US20170010959A1 (en) * 2015-07-07 2017-01-12 International Business Machines Corporation Predictive model scoring to optimize test case order in real time

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
QINGZHOU LUO等: "An Empirical Analysis of Flaky Tests", 《PROCEEDINGS OF THE 22ND ACM SIGSOFT INTERNATIONAL SYMPOSIUM ON FOUNDATIONS OF SOFTWARE ENGINEERING》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113643128A (zh) * 2021-08-31 2021-11-12 中国银行股份有限公司 银行产品的自动化测试方法及装置
CN113643128B (zh) * 2021-08-31 2024-02-27 中国银行股份有限公司 银行产品的自动化测试方法及装置

Also Published As

Publication number Publication date
EP3612941A1 (en) 2020-02-26
US20200183821A1 (en) 2020-06-11
US11586534B2 (en) 2023-02-21
CN109643271B (zh) 2022-02-18
EP3612941B1 (en) 2023-01-11
EP3612941A4 (en) 2020-12-02
WO2018227367A1 (en) 2018-12-20

Similar Documents

Publication Publication Date Title
CN109643271A (zh) 识别不稳定测试
US9317400B2 (en) Code coverage rate determination method and system
US20070219741A1 (en) Methods and apparatus for hybrid outlier detection
CN107220121B (zh) 一种numa架构下沙箱环境测试方法及其系统
JP2017102912A (ja) 機械学習ベースのソフトウェアプログラム修復
CN105608000A (zh) 获取代码覆盖率数据的方法及装置
US10496459B2 (en) Automated software program repair candidate selection
Lity et al. Applying incremental model slicing to product-line regression testing
CN104021072A (zh) 用于评估失效的软件程序的机器和方法
CN109408366B (zh) 数据源配置测试方法、系统、计算机设备和存储介质
CN110865941A (zh) 接口测试用例生成方法、装置和系统
CN110928777A (zh) 测试用例的处理方法、装置、设备及存储介质
Madeiral et al. Towards an automated approach for bug fix pattern detection
JP2018055676A (ja) 自動ソフトウェアプログラム修復
CN108469997A (zh) 一种基于动态特征的自定义堆管理函数的自动识别方法
CN114328168A (zh) 异常检测方法、装置、计算机设备和存储介质
US10698804B1 (en) Identifying inputs for automated computer-program testing operations
CN105912467A (zh) 一种性能测试方法及装置
CN111400171A (zh) 一种接口测试方法、系统、装置及可读存储介质
Chamoli et al. Analysing software metrics for accurate dynamic defect prediction models
El-Fakih et al. On code coverage of extended FSM based test suites: An initial assessment
CN111552608A (zh) 一种驱动内存监控方法及系统
CN107102938B (zh) 测试脚本的更新方法及装置
CN105094825B (zh) 一种内存变量分布动态发现方法
US11328108B2 (en) Predicting die susceptible to early lifetime failure

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
GR01 Patent grant