[论文解读] Beyond Code Coverage – an Approach for Test Suite Assessment and Improvement

Beyond Code Coverage – an Approach for Test Suite Assessment and Improvement

简介

论文标题

  • Beyond Code Coverage – an Approach for Test Suite Assessment and Improvement
  • 超越代码覆盖率–一种测试套件评估和改进的方法
  • 2015

摘要

摘要代码覆盖率被成功地用于指导白盒测试设计和评估各个测试的完备性。然而,当一个(回归)测试套件在软件变更后需要重新评估和发展时,简单的总体覆盖率通常不够精确,不能有效地提供帮助。我们提出了一种测试套件评估和改进的方法,该方法利用代码覆盖率信息,但在更详细的级别上,并添加了从覆盖率派生的进一步评估方面。该方法的主要用途是辅助各种测试用例演化的情况,如由于代码更改或测试用例效率提高而导致的测试用例的移除、重构和扩展。除了简单的代码覆盖率之外,我们定义了各种度量来表达测试套件的不同属性,并将评估和改进过程表示为不同改进目标和更具体的子活动的迭代应用。将该方法应用于改进了我们的一个实验系统的测试,证明了该方法的有效性。

定义了一种测试套件评估和改进的方法(流程):Taime

定义了多种指标来表达测试套件的不同属性,并在Taime流程中使用

Taime流程中使用了SODA和TAM的库和工具集

介绍

回归测试套件的可获得代码覆盖率通常被用作主要的充分性标准,因为它与测试套件的缺陷检测能力[1]、[2]相关。因此,在任何生命周期模型中,代码覆盖率都是白盒测试设计的传统基础[3]、[4]、[5]。

研究表明,高覆盖率和缺陷检测之间的关联并不总是存在,或者至少不明显[6]、[7],但是仅仅基于高代码覆盖率来获得对测试套件的信心也存在进一步的风险。在这项工作中,我们提出了我们的测试套件评估方法,它超越了简单的代码覆盖率,并特别涉及以下几个方面:

  • 较高的代码覆盖率可能会对测试用例的冗余性和相似性产生负面影响,使得通过测试用例使用的代码部分来区分测试用例的特定角色变得更加困难。
  • 通常使用不同级别的代码覆盖标准,例如函数、语句或分支覆盖。然而,在许多情况下,更详细的覆盖是不必要的(例如,如果函数从未被调用,则不需要使用其语句级覆盖)。
  • 完全与系统或模块相关联的总体覆盖通常不够精确,不足以提供与特定功能组或代码部分相关的覆盖范围的可操作信息。
  • 代码覆盖率只是一个指示器,通常很难看出应该如何实际使用它来指导测试套件改进过程。

考虑到这些问题,我们开发了一种对测试套件进行系统评估和改进的方法(称为测试套件评估和改进方法-TAIME),该方法基于对我们所称的详细覆盖信息进行的各种额外计算。它本质上是一个二进制覆盖矩阵,其中行表示单个测试用例,而列对应于根据所选粒度级别的语句或函数等程序元素。测试用例和程序元素都被分解成一致的逻辑组,这些逻辑组对应于系统中的不同功能单元。这样,除了标识低覆盖区域之外,还可以对覆盖矩阵执行各种分析,例如标识指示功能单元内的低一致性的覆盖模式。

在TAIME中,我们使用这些分析来识别测试套件中的潜在改进点,例如,哪些测试用例是移除或重构的候选,或者哪些地方需要额外的测试。该方法的核心是围绕不同的改进目标、代码覆盖粒度级别和功能单元进行迭代。该方法的主要用途是帮助系统的回归测试套件需要维护的各种情况,例如反映到代码更改、测试套件重构以提高效率,以及类似的情况(如果没有持续的维护,测试套件最终将失去其主要价值-缺陷检测能力[8])。

在本文中,我们通过前面的一个工业实例(第二节)来激励我们的工作,然后在第三节中给出了方法的详细信息,包括总体流程、用于评估的度量和几个实际使用案例。通过对我们自己的一个软件模块的系统分析和改进,展示了这些方法的实际应用(第四节)。最后,我们讨论了相关工作(第五节)和展望,并对全文进行了总结。最重要的是,我们欢迎业界就该方法的潜力和最有前景的增强领域提供反馈

动机和目标

由于软件的不断发展,回归测试套件通常会变得与软件本身一样庞大和复杂。如果回归测试套件没有经过持续的维护,例如,通过添加新的测试用例和更新或删除过时的测试用例,它最终将失去其基本价值、缺陷检测潜力[8]。在遵循敏捷原则的软件项目生命周期中尤其如此。在敏捷中,频繁修改代码库之后必须更新回归测试,包括它们的审查、选择、退出、测试数据和测试环境的更新[5]。回归测试套件的这种持续变化最终会给项目带来巨大的挑战,因为缺乏系统的方法和工具来帮助这个过程。哪些测试可能是多余的?我们怎样才能提高测试的效率呢?测试套件的哪些部分最需要扩展?等。但首先:测试套件的总体质量超出其覆盖范围是什么?我们观察到,类似这样的问题在各种工业项目的测试人员、开发人员和管理人员中很常见。

在以前的项目中,我们致力于WebKit的各种增强,WebKit是一个大型的工业支持的开源Web浏览器布局引擎[9]。它有大约220万行代码和大约27000个测试用例的大型测试套件。特别是,我们致力于这个测试套件的分析和改进(例如,在[10]中),但是我们很快意识到,如果没有合适的方法和工具,很难理解和评估它。

我们首先介绍了功能单元的概念,以及如何将测试套件分解为这样的组,以便能够使用更细粒度的分析。该术语将用于指代在功能上可以与其他部分分开的系统的一部分,并且是相关测试组和代码组对的相干集合。测试组是用于测试给定功能的测试用例的子集,代码组的成员是实现的各自部分。(通常,我们的方法不要求测试和代码组不重叠。)

接下来,我们开发了一个支持工具集(称为SODA),它具有优化的数据结构和算法,适用于处理诸如WebKit[11]、[12]这样的工业大型复杂系统。在WebKit开发人员的帮助下,我们确定了过程级功能单元(由函数和方法组成)以及相关的测试组,并测量了测试套件的详细代码覆盖信息。表I显示了不同的测试组如何覆盖该系统中的不同代码组。此表单元格中的数字表示给定测试组的测试用例相对于给定代码组(或第一行和列中所示的整个系统)所达到的代码覆盖率。

[论文解读] Beyond Code Coverage – an Approach for Test Suite Assessment and Improvement

我们称这种可视化为“热图”,因为在热图中,单元格的红色背景强度与单元格数值和列最大值的比率成正比。正如预期的那样,功能单元的测试用例通常主要覆盖它们各自的代码组(在对角线上),但这并不总是那么明显。使用这种可视化,我们能够指出总体复盖率太低或哪些功能单元不太连贯的潜在问题。

在目前的工作中,我们继续这一研究方向,提供了一种系统地评估回归测试套件的方法,目的是找到改进点并最终指导改进过程(我们称之为Taime-Test Suite评估和改进方法)。我们将很快解释除了上述覆盖率和可视化之外还可以使用哪些其他度量标准,以及如何将特定的改进目标合并到TAME过程中。

特别是,我们在这篇论文中的目标是:

  1. 基于详细的代码复盖率信息,我们给出了一种通用的、系统的回归测试集评估和改进方法
  2. 我们通过将其实际应用于改进我们的SoDA来演示该方法。
  3. 讨论了该方法工业化应用的可能性。通过如上所示评估WebKit,我们已经朝这个方向迈出了第一步。

TAIME 方法

方法

遵循目标-问题-度量(GQM)范式的原则[13],在Taime中,评估和改进过程以目标为中心。仅仅通过计算各种指标,我们将无法决定改进工作应该花在哪里。相反,我们首先确定我们的目标(例如增加覆盖范围或确定冗余),然后执行测量和改进,并在需要时继续下一个目标。

该方法的整个过程可以在图1中看到。外部循环由一个目标驱动,该目标定义了特定用例的给定迭代中的改进。中间循环是技术循环,它处理测量的粒度级别。在粗粒度上测量通常比在更细的级别上测量更容易,如果可以基于粗粒度做出决策,那么从粗粒度开始通常是个好主意(例如,如果在高级别上发现低覆盖率,那么在高级别覆盖率没有得到改善之前调查低级别是没有意义的)。

[论文解读] Beyond Code Coverage – an Approach for Test Suite Assessment and Improvement

接下来,确定代码和测试组(如果自上次更新组以来信息仍然有效,则重复使用)。确定群体的过程取决于正在调查的系统和其他因素;TAIME方法在这一步骤中没有规定任何特定的方法。它可能遵循系统的某些现有结构,或者可能需要额外的手动或自动分析。在我们的WebKit和SODA实验中,我们首先根据物理文件结构执行自动分解,然后手动细化。

流程的最内循环包括测试的测量和修改。我们执行测试套件,测量不同的基于覆盖的度量(请参见下一节),并评估结果。根据评估的不同,我们可能会保留内部迭代,或者我们可以更改测试套件,在这种情况下,我们可能还需要在重新执行和测量测试套件之前更新代码和测试组。请注意,如果做出了不影响实际覆盖信息的更改,则不需要重新执行测试套件。例如,如果更改仅包括测试用例删除,则可以省略重新执行,因为剩余测试用例的覆盖数据不会更改,但是需要重新计算某些度量。

确定目标:如增加覆盖或确定冗余

设置或细化粒度: 如如果在高级别上发现低覆盖率,那么在高级别覆盖率没有得到改善之前调查低级别是没有意义的

确定组或者重用组:确定代码和测试组

执行: 执行测试套件; 测量:根据不同的指标度量;修改:新代码和测试组

度量

作为TAIME过程的一部分,可以根据在测试套件执行时获得的详细覆盖信息来计算一组基本的和派生的度量。请注意,可以在该方法中使用不同类型的度量,只要它们可以从详细的覆盖信息中导出即可。此外,Taime没有规定任何特定的计算覆盖范围的方法;通常可以使用现有的工具来完成。我们使用的所有度量都是为一对测试组T和代码组P定义的。这里,T是测试套件的所有测试用例的子集,而P包含根据给定粒度级别的程序代码元素,例如语句或过程。我们使用的两个基本度量是传统的代码覆盖率和所谓的划分度量,这是我们在以前的工作中在故障定位和测试减少的上下文中定义的[10]。

覆盖度量(COV)是指在选定的粒度级别上的传统覆盖率。它是这样给出的:
cov(T,P)={pPp covered by T}P \operatorname{cov}(T, P)=\frac{|\{p \in P \mid p \text { covered by } T\}|}{|P|}
COV的可能值为[0,1](显然,值越大越好)。

Partition Metric(Part)表征了一组测试用例根据它们的覆盖信息在程序元素之间进行区分的程度。对于某些活动来说,能否根据复盖它们的测试用例来区分程序元素是一个重要的方面,尤其是对于故障定位而言。那些不可区分的元素(具有相同的覆盖信息)属于同一分区。对于给定的测试组T和代码组P,我们用Π⊆P§表示这样的划分。我们定义πp∈Π为每个p∈P,其中

πp={pPp\pi_{p}=\{p^{\prime} \in P \mid p^{\prime} is covered by and only by the same test cases from T as p}T \text { as } p\}

p': 覆盖p的测试用例与覆盖p'的测试用例相同,即两段程序被相同的T覆盖

考虑到故障定位应用,|πp|−1将是程序中与p“相似”的代码元素的数量,因此要在πp中本地化p,我们最多需要|πp|−1检查[10]。基于此观察,PART形式化如下
PART(T,P)=1pP(πp1)P(P1) \operatorname{PART}(T, P)=1-\frac{\sum_{p \in P}\left(\left|\pi_{p}\right|-1\right)}{|P| \cdot(|P|-1)}
此度量从[0,1]取值,类似于COV,越大表示越好

分子: 对于所有的p,统计跟p满足统一分区关系的p'的个数'分母: 就是分子的最大值 ,分子比分母越小代表着区分度越高,

除了这些基本的度量标准之外,我们还使用派生的度量标准进行了实验,以量化测试的效率和唯一性。评估效率的最简单度量是Tests per Program Elements(TPP),它显示平均创建了多少个测试用例来测试一组程序元素(过程、语句等)
TPP(T,P)=TP \operatorname{TPP}(T, P)=\frac{|T|}{|P|}
为了表征功能单元的重叠和内聚程度,我们使用了两个相关的度量标准。它们衡量与其他测试组中的所有其他测试用例相比,测试组对代码组覆盖率的独特贡献。假设测试组为T⊆T’,其中T’是所有测试用例的集合。专门化指标(SPEC)显示测试组对代码组的专门化程度:
SPEC(T,P)={tTt covers P}{tTt covers P} \operatorname{SPEC}(T, P)=\frac{|\{t \in T \mid t \text { covers } P\}|}{|\{t \in \mathcal{T} \mid t \text { covers } P\}|}
选出的集合中覆盖了p的测试用例数量/所有集合中覆盖了p的测试用例数量

较小的SPEC表示其他测试组有测试代码组的任务,而较高的值反映给定的测试组负责测试代码组。一个相关指标是唯一性指标(UNIQ),它衡量被覆盖元素的哪一部分仅由特定测试组(唯一)覆盖:
UNIQ(T,P)={pPp covered only by T}{pPp covered by T} \mathrm{U}_{\mathrm{NIQ}}(T, P)=\frac{|\{p \in P \mid p \text { covered only by } T\}|}{|\{p \in P \mid p \text { covered by } T\}|}
一个测试集合里, 只被该集合覆盖了的程序P/该集合覆盖了的程序P

较小的UNIQ值表示功能单元的程序元素被其他测试组的许多测试用例覆盖,而较高的值表示给定的测试组唯一覆盖该代码组,因为其他组中覆盖相同程序元素的测试用例很少

用例

图1中的基本流程可以应用于几个实际场景,最值得注意的是:

  • 白盒测试设计。该方法可应用于通常以高复盖率为目标的白盒测试设计中。我们可以从细粒度和无测试用例开始,然后向不同的功能单元添加新的测试用例,同时持续监控整体和组级别的覆盖率。因为我们有不同组的复盖信息,所以我们可以使用这些信息来更改测试用例,并为不同的测试组设计新的测试用例。
  • 面向变更的测试集演化。在这种情况下,我们已经有了一个活动的测试套件,目标是通过以下软件更改来保持其质量(根据使用的度量标准)。在软件变更后,我们可以在选定的粒度级别上检测和检查测试度量值的变化,并在观察到某个度量恶化时决定是否需要修改测试套件。
  • 评估。测试套件的质量需要定期评估。特别是,任何改进过程都应该从初始评估开始。在这种情况下,我们的主要目标是在单个度量中计算不同的度量,并检测任何需要进一步调查的问题。然后,这可以作为改进阶段的初始目标,或者只是为更一般的软件产品质量评估提供输入。
  • 重构测试套件。对测试套件的评估可能表明,基于需要进一步调查的“坏”度量值,测试用例中存在所谓的测试气味(test smells)问题区域。在一个不断发展的软件中,如果发现了很多测试气味,并且测试套件的整体质量被认为是有问题的,那么您可能想要重构测试套件。我们可以从使用粗粒度级别消除一些测试气味的目标开始。然后,我们更改(添加、删除、修改)测试(可能还会修改功能单元分组),并测量更改对指示所选测试气味的度量值的影响。然后,我们可以细化粒度和组关联,并重新启动该过程的内部迭代。在达到最细粒度级别的目标之后,我们可以选择另一个目标并重新开始迭代,这一次还会连续检查所有先前寻址的目标。请注意,在基本流程中,我们不会明确定义模型应该如何解释度量值;哪些值将被视为“好”或“坏”。相反,它取决于特定的情况,通常以相对的方式进行评估。

要实现Taime方法,可以使用任何合适的工具。我们称为SODA和TAM的库和工具集是专门为适应提议的方法而设计的,并且可以作为开源[11]、[12]免费获得

对SODA的改进

为了评估和改进SoDA库本身的回归测试套件,我们遵循了Taime方法。在本节中,我们将描述如何在此使用中实例化该方法,并演示其好处,这可以作为示例和激励。

SODA(Software Development and Analysis framework,软件开发和分析框架)是一个开源库和工具集,旨在为研究人员和实践者提供一个框架,利用该框架可以在统一的环境中执行各种基于代码覆盖率的分析。它提供了一套高效的数据结构、算法和一个称为TAM的图形用户界面,并用C++实现。Soda和TAM等可以用来实现Taime方法。

图书馆可以分为两个部分。第一个定义了存储系统不同版本的覆盖率、测试结果和相关信息的高效数据结构。另一部分以插件的形式实现各种算法,使用和操作基本的数据结构

SODA包括一组单元测试,用于测试其基本的低级功能。这些测试充当回归测试套件,在更改库代码时应用。这个测试套件是演示Taime方法的一个很好的主题,因为它的初始版本是以一种相当特别的方式开发的,我们不知道它有多完整,以及它的其他质量属性是什么。作为第一步,我们定义了系统中的主要功能单元,并在过程级粒度上评估了测试套的质量。表II显示了关于该库的基本数据,以及我们确定的8个功能单元。在第一次评估时(第一列),该库有112个测试用例,并且有一个功能单元没有任何与其相关联的测试。第二列显示了执行Taime改进后的最终状态。

[论文解读] Beyond Code Coverage – an Approach for Test Suite Assessment and Improvement

在实验中,我们在三个阶段应用了所提出的方法,如图2所示。

[论文解读] Beyond Code Coverage – an Approach for Test Suite Assessment and Improvement

在初步评估之后,我们发现库的COV很低,因此我们从改进测试套件的这一属性开始。在重构测试套件的同时,我们还计算并记录了其他指标是如何变化。在整个改进过程中,我们只更改了测试套件,没有修改库的源代码。

在第一阶段,我们致力于过程级的粒度。在此阶段,我们执行了7个改进步骤,每个步骤集中于单个功能单元。reader的COV值非常高(0.96),因此我们没有在这组中进行改进。在这一阶段结束时,测试数量增加到131个,总体覆盖率从0.58提高到0.69。图3以图形方式显示了改进对整个测试套件的影响;这里没有指出单个组的改进。具体地说,在“第一阶段”。我们可以看到,除了覆盖范围之外,Part也从0.82提高到0.9。

第二阶段的目标是在较低的粒度水平上提高覆盖率,即语句(表II列出了每个单元中的语句数量)。首先,我们将单独的语句分配给功能单元(简单地作为相应的过程)。在此阶段,我们执行了28个改进步骤。过程是一样的:我们一次只改进一个组,并且没有修改库的源代码。我们发现,在许多情况下,在过程级别上具有100%复盖率的单元在较低级别上测量复盖率时可以进一步提高。系统覆盖率和分区指标的整体改进显示在“第二阶段”中。Part(在此阶段中,我们没有在过程级别度量度量的更改)。在整个改进过程的这一阶段,总共向测试套件添加了34个新测试,并修改了6个测试。在此阶段结束时,我们达到了改进覆盖率的目标,但无意中Part度量也得到了改进。我们在这一点上测量了过程级指标,我们发现COV提高到了0.74(从0.69),而Part从0.9上升到了0.93。

[论文解读] Beyond Code Coverage – an Approach for Test Suite Assessment and Improvement

在第二阶段提高测试组覆盖率的过程中,我们还调查了在此阶段所做的更改如何影响COV、Part和TPP指标的值。Cluster单元的语句级指标显示了一个有趣的现象,这可以在“第二阶段”中看到。在图4的前5个步骤中,我们只在Cluster单元上工作,它的所有指标都得到了改进;事实上,COV、Part和TPP在这一点上达到了它们的最高值。然而,在第五步之后,我们开始改进其他单元,我们注意到Cluster的SPEC度量开始下降。到第二阶段结束时,达到了这一阶段开始时的原始水平。这表明,由于其他单元正在使用集群单元的代码,提高其他单元的覆盖率降低了与集群相关的测试的专业性。我们将这一发现评估为“测试气味”,这应该得到纠正,因为单元测试应该集中在给定的单元上,并且只测试其功能,而不受其他单元的影响。

[论文解读] Beyond Code Coverage – an Approach for Test Suite Assessment and Improvement

这些发现和考虑促使我们进一步改进测试套件,因此我们开始了一个新阶段,在这个阶段中,我们的目标是改进cluster组的单元测试的规范度量。在第三阶段,我们执行了10个改进步骤,消除了其他测试组使用cluster程序的情况。实际上,有两个测试组依赖于cluster代码,即fl-technique和metric。这种依赖性是在单元测试的设置阶段引入的,在该阶段准备了测试的初始输入数据。图4中的最后一节显示了SPEC度量在此阶段是如何增加的,直到它达到1.0。我们确保COV和Part指标的值在此改进过程中不会减少,此外,相关的UNIQ指标也增加(分两步),并在1.0达到最大值。当从fl-technology测试组中删除cluster代码的使用时,该度量从0.64提高到0.67,当我们从度量单元的所有测试中删除这些插件的依赖时,该度量在最后一步达到1.0。这是一个很好的例子,说明了测试组中关于特定度量的改进可能会对其他单元和度量产生副作用

表III总结了整个系统以及各个功能单元的所有调查指标的变化。粗体显示的V表示度量值增加,斜体表示度量值变差。数据和IO单元的SPEC和UNIQ值在三个阶段之后都有所下降。这两个单元包含算法的基本构建块,随着我们向测试套件添加越来越多的测试,这些单元的程序代码更多地被其他测试组使用,因此度量值减少。除了这两种情况外,我们还观察到所有单元的过程和语句级别的度量值都有所改善。然而,正如我们所看到的,仍然有改进的空间:例如,我们可以设定一个新目标,通过增加更多专门的测试用例并删除过于通用的测试用例来增加io组的SPEC值。

[论文解读] Beyond Code Coverage – an Approach for Test Suite Assessment and Improvement

两个级别 过程:函数单元 ;语句

相关工作

评估测试质量(以及软件质量)并非易事。研究人员只是在最近才开始转向面向测试的度量方法,这增强了我们努力实现更系统的测试评估方法的动机。在考试质量评估中可以考虑很多方面和不同的标准[14]。长期以来,评估测试充分性的主要方法是测试的故障检测能力,这传统上是通过覆盖度量来预测的,尽管也提出了其他方法(例如,Alshahwan和Harman定义的输出唯一性标准[15])。平托等人。对测试套件演化进行了广泛的实证研究[8]。因此,他们提出了开发“保留意图”的测试修复技术。如果“意图”可以由不同的度量表示,则可以使用我们的方法执行类似的过程。

Gomez等人对软件工程中使用的度量的全面调查。[16]显示只有一小部分指标用于测试。Chernak[17]还强调了测试套件评估作为改进测试过程的基础的重要性。本文要传达的主要信息是,应该在测试过程中定义和构建客观的措施,以提高测试的整体质量,但这项工作所采用的措施也是基于缺陷的。

Atanasiou等人。[18]概述基于代码的质量标准的最新进展。他们声明使用不同的覆盖值和静态软件度量(应用于测试代码)来评估测试质量;然而,他们得出结论,尽管测试质量的某些方面已经得到解决,但基本上它仍然是一个开放的挑战。作者基于软件改进小组的软件代码可维护性模型[19],提出了一种测试质量模型。然而,他们的方法(以及类似的基于代码的方法,例如[20])不能应用于不是用系统的编程语言实现的测试,这只适用于单元测试。此外,这些方法只检查测试套件的结构,而不检查它要测试的代码。在我们的方法中,我们结合了结构和基于规范的信息,利用代码覆盖率,并指出可能有助于测试套件质量的其他方面。

冗余是测试套件优化的另一个常用方面。Abreu等人。使用代码覆盖率来检测测试或程序代码之间的相似性,并将此信息用于程序理解[21]和故障定位[22]目的。我们的方法是不同的:我们不是自动检测相似的项目,而是使用功能单元作为先验信息,并利用代码覆盖率来获得关于测试套件及其与被测系统的关系的更深入的知识

在他们的论文中,van Deursen等人。[23]定义了单元测试的测试代码气味,并将其用于测试套件的系统重构。Bavota等人。[24]已经表明,这些气味中的大多数都会对测试代码的可理解性产生负面影响。这样的测试气味应该是自动检测的,并且可以使用不同的度量标准有效地完成,正如van Rompaey等人所研究的那样。[25]。虽然测试代码气味最初是为测试代码定义的,但其中一些也可以在非编码测试中解释。

除了这些相关的方法外,我们不知道有任何基于对详细复盖信息的分析来评估和改进测试项目的有文档记录的系统方法。显然,我们的方法可以补充前面提到的非基于覆盖的测试套件质量度量方法。

前景展望

本文提出的测试集评估和改进方法是我们面向更通用的测试集质量和演化框架的长期研究的一部分。在代码质量和演化领域,有许多高级方法(如重构工具、代码质量评估工具、静态缺陷检查器等),但是在测试领域,类似的解决方案还很少被探索。

我们给出的关于SoDA改进的小案例研究展示了该方法的实际应用,但其工业应用还需要进一步的验证和完善。关于如何改进Taime,我们有不同的计划,但最重要的是,我们计划将其应用于其他项目和各种测试套件演化场景。特别是,WebKit测试套件的实际改进是我们的计划之一,但我们正在寻找将该方法应用于工业环境的项目。尽管如此,我们特别欢迎业界就我们与Taime的未来努力方向提供任何反馈。