众包测试用例的质量评估

发布于 2021-05-10 00:55 ,所属分类:软件测试工程师学习资料

引用

Zhao Y, Feng Y, Wang Y, et al. Quality assessment of crowdsourced test cases[J]. Science China Information Sciences, 2020, 63(9): 1-16.

摘要

众包解决了许多不同的软件工程问题。在许多项目中,软件外包过程在基于云的平台上是非常精简的。在软件工程任务中,测试用例开发特别适用于众包,因为可以用很少的资金成本来生成大量的测试用例。然而,从众包中获取的大量测试用例可以是高质量的,也可以是低质量的。由于数量太大,用传统的方法来区分高质量的测试用例需要花费大量的计算成本。因此,众包测试将受益于区分测试用例质量的有效机制。本文介绍了一种自动化方法—TCQA—用来评估基于实时编码历史的测试用例的质量。TCQA 的质量评估通过三个步骤进行:(1)将代码历史作为一个时间序列来建模,(2)从时间序列中提取多个相关特征,以及(3)基于测试用例的质量建造一个分类模型。第三步通过基于特征的机器学习技术来完成。通过利用实时编码历史,TCQA 可以评估测试用例质量,而无需执行昂贵的源代码分析或执行这些测试用例。利用 9 项测试开发任务的数据,包括 400 多名参与者,我们从多个角度对 TCQA 进行了评估。TCQA 方法比传统的测试用例质量评估技术具有更高的精度、更快的速度和更低的开销。此外,TCQA 在评估完成之前提供了对测试用例质量的实时洞察。

研究背景

在软件工程研究领域,众包正获得越来越多的。众包的方法让大量众包人员参与如测试、设计、优化和开发等各种软件工程任务。众包在软件开发中有很多好处,但是从大量的众包人员中获取测试用例,这件事对于希望提高产品质量的开发人员来说很有用。其中,为微任务编写测试用例比特征实现或修复 bug 更合适,因为许多测试用例独立于软件系统的核心逻辑。而且,在同一个任务上工作的多组工作人员会生成大量的测试用例。因此,众包提高了获得高质量测试用例的可能性。

从另一方面来说,众包开发产生了许多低质量的测试用例。由于执行的所有测试用例都是资源密集型的,并且可能会引入安全风险,因此从低质量的测试用例中区分高质量的测试用例是人们需要且十分具有挑战性的任务。我们知道,手动检查所有测试用例是非常消耗劳动力的事情,相比传统的源代码分析技术来说更有效,传统的源代码分析技术很难区分通过众包获得的简短和相似的测试用例。同时,静态软件度量可能无法提供有用的见解,因为覆盖率度量和测试用例的质量通常是弱相关的。另一种技术是变异测试,它彻底地解决所有的人工缺陷版本的漏洞,并决定了测试用例是否检测到这些缺陷。然而,变异测试需要大量的时间和计算资源。因此,为了评估由众包产生的测试用例,我们需要高效用的创新技术。

本文的工作

当前的软件众包通常在基于云的平台上执行,这些平台为代码编写提供了集成开发环境(IDE)。对于软件众包来说,基于云的平台是理想的基础设施解决方案;特别是,它们捕获了众包工作者的细粒度活动。并且,利用浏览器和远程服务器之间的超文本传输协议(HTTP)进行交流,可以重构代码开发的细粒度动态历史,它由源代码的文件大小变化来表示。代码历史为给定代码的整个问题解决过程提供了丰富的信息。

此外,从细粒度的动态代码历史,我们可以估计从基于云的源代码编辑平台获取的众包测试用例的质量。在这里,我们开发了一种新的方法叫做测试用例质量评估(TCQA),它分析动态代码历史的粒度,否定了对源代码分析技术或变异测试的需求。TCQA 首先将动态代码历史建模为一个时间序列,然后从构建的时间序列中提取一组特征。基于提取的特征,TCQA 将一个给定的测试用例分为三个质量类别(高、中、低),为众多的众包测试用例提供了一个经济有效的评估。

这个方法在一个由超过 400 名从众人员开发的 2193 个测试用例的数据集上,从多个角度(有效性、效率和实时性)对所提出的方法进行了评估。在有效性评估中,TCQA 分类在任务内、全样本和跨任务三种情景下进行了测试。效率评估比较了 TCQA 的性能(时间和计算资源消耗)、收集覆盖度量和变异测试。最后,为了评估 TCQA 是否提供实时的洞察,我们确定 TCQA 是否能够预测一个尚未由众包工作人员提交的测试用例的质量。总之,这些评估展示了 TCQA 在评估基于云的代码编辑平台上通过众包获得的测试用例在质量方面的潜力。

本文的主要贡献如下。

•提出的方法(TCQA)通过动态代码历史自动评估众包测试用例的质量,而不需要源代码分析和变异测试。该方法采用多种时间序列分析技术。

•一个基于浏览器的众包扩展平台,MoocTest,支持用户在线编程。在我们基于浏览器的编程环境扩展中,可以动态记录和分析众包工作人员的实时编码行为。

•在 MoocTest 平台上,TCQA 从三个角度进行综合评估。TCQA 可以精确有效地评估众包测试用例的质量,并且不需要过多的计算资源。此外,TCQA 在众包工作人员提交测试用例之前提供了实时的洞察力。

研究方法

本文通过应用 TCQA 来评估众包工作人员编写的测试用例质量的整个过程,下图为该过程的描述。它包括三个主要步骤。

Ø步骤一:从动态编码历史到时间序列、

在第一步中,TCQA 只需在相应的时间点简单的记录源代码的大小(以字符数度量),并将其插入到序列中。假设总共 n 个周期,此步骤后测试用例的动态代码历史由以下 n 个周期时间序列给出:

其中 ti 是当前时间,si 是 ti 处测试代码的大小。

Ø步骤二:提取时间序列特征

在这一步中,TCQA 从这些时间序列中提取特征。为了解决同一时间序列的其他元素之间相关性的问题,我们使用现成的库 TSFRESH 从时间序列数据中提取相关特征,TSFRESH 是一个 Python 包,它通过三步程序提取特征并评估它们的相关性。首先,TSFRESH 通过全面和完善的特征映射来刻画时间序列,并在附加特征中描述元信息。其次,分别独立地评估每个特征向量在目标预测中的重要性。这一步生成多个 p 值的向量。在最后一步中,TSFRESH 使用 Benjamini-Yekutieli 程序评估 p 值向量,并决定要保留的特征。

TSFRESH 从中提取了 87 个相关特征,并将其分为三大类:简单指标(如 maximum)、统计指标(如 agg_linear_trend)和基于频率的指标(如 fft-coefficient)。

Ø步骤三.预测众包测试的质量

这一步,我们在训练数据上训练预测模型,并且在测试数据上进行预测。我们寻求在最小化计算资源的同时,将许多众包测试用例自动分类为质量类别。在评估训练测试用例的质量并用相对质量等级标记每个用例之后,机器学习模型可以训练来去分类未来的测试用例,而不需要高昂的执行或分析代价。

使用例如朴素贝叶斯、决策树分类器、神经网络和支持向量机(SVM)的分类方法。其中,TCQA 中的默认分类算法是随机森林,这是一种集成学习方法,通过赋予基于树的分类器的能力、灵活性和可解释性,提高了分类模型的鲁棒性。

除了默认的随机森林算法。TCQA 允许其他算法,比如朴素贝叶斯、J48 和 SVM,这些算法可以用最少的代价来实现。基于非特征的时间序列分类算法(如 DTW)也很容易在 TCQA 的框架中实现。

实验

Ø实验基础

我们的评估数据集是根据在国际软件质量、可靠性和安全会议(QRS)上举行的软件测试竞赛的结果准备的,该竞赛模拟了众包测试。在基于云的编程平台—MoocTest—上,参与者可以在任何标准的 web 浏览器中编写测试用例。源代码快照通过 httpput 方法定期发送到服务器。所有参与者被分配两个小时在 MoocTest 中编写测试用例。为了进行评估,我们收集了 6 个主项目的数据,每个项目属于一个独立的主题任务,从而获得了 2193 个测试用例。提交的测试用例的质量通过两个经典标准进行评估:覆盖率评分和突变评分。覆盖率得分被广泛用于评估程序源代码的执行程度。与测试覆盖率较低的程序相比,测试覆盖率较高的程序包含未检测到的软件错误的可能性较小。突变评分也常用于评估测试套件的有效性。变异分数是在变异测试之后计算出来的,这需要对程序进行一些小的修改。每一个修改的版本都被称为变种。如果测试套件检测到修改,突变子体就可以被杀死。突变分数是被杀死的突变体数量与突变体总数的比率。

Ø实验问题

为了进一步降低计算成本,请求者还应该获得关于测试用例质量的实时见解。为此,我们制定了以下研究问题(RQs):

RQ1:TCQA 如何准确地评估使用动态代码历史记录中的众包测试用例的质量?该 RQ 评估 TCQA 的有效性。

RQ2:相对于传统的质量评估技术,TCQA 如何有效地评估众包测试用例的质量?该 RQ 评估 TCQA 的效率。

RQ3:TCQA 能否在提交众包测试用例之前实时评估其质量?这个 RQ 评估 TCQA 是否可以从部分动态代码历史中确定众包测试用例的质量。




Ø实验一

我们通过实验一评估了 TCQA 在以下三种情况下的性能:

在任务场景中:对同一任务的数据进行绩效评估和模型训练。

全样本场景:根据五项任务的数据训练模型,并根据剩余任务的数据评估其性能。

跨任务场景:根据一项任务的数据对模型进行训练,并根据其余五项任务的数据对其性能进行评估。在这三种情况下的实验需要特别考虑,为了方便读者,将在结果的同时对其进行描述。




Ø实验二

实验二比较了 TCQA 与传统技术的效率。通过覆盖度评估和变异测试两种传统的方法来评价算法的效率。对此,我们相信,TCQA 中的测试评估比变异测试快得多;然而,在现实世界中基于云的众包平台中部署 TCQA 时,精确的度量将有助于精确的性能评估。在这里,TCQA 的性能与 MoocTest 提交评估方法的性能进行了比较。

Ø实验三

在本实验中,我们创建了 9 个实验条件,涵盖整个时间序列的 10%、20%、30%、40%、50%、60%、70%、80%、90%或 100%(最终条件提供了基线条件)。在每个实验条件 x%下,对每个时间序列的前 x%进行预测和性能评价。例如,在 50%条件下,使用整个时间序列的前 50%进行预测。如果任何 x%条件下的结果与基线条件下的结果(100%)相当,我们得出结论,TCQA 可以从部分时间序列评估测试用例的质量。也就是说,TCQA 在提交众包测试用例之前将对其提供实时洞察。

实验结果

Ø实验一结果

通过实验一,我们得出结论:TCQA 可以预测众包测试用例的质量。大多数任务的准确度误差很小。TCQA 在任务内和整个样本场景中的表现优于跨任务场景。整个样本场景的高精度增强了我们的信心,即 TCQA 可以学习多个任务的数据,并可以将其用于特定的任务预测。

任务内的结果

结果见下表。我们很快的可以观察到,TCQA 在这六项任务的数据上除 ITClocks 以外,表现得都相当好。所有任务的精确度都超过 0.7,六分之四(66.67%)的任务接近 0.8。

全样本结果

整个样本和任务内情景的结果具有可比性。整个样本情景中的精度值近似大于等于 0.7。这个结果对于在生产环境中部署 TCQA 尤其重要,在生产环境中,成百上千的请求者发布了数千个任务。因此,我们认为 TCQA 将通过从多个任务(可能来自多个被测组件或系统)中连续收集的自增长数据集来改进其机器学习模型。因此,期望模型具有较高的鲁棒性。

跨场景结果

交叉任务场景揭示了模型对不同训练和测试数据的敏感性。结果见下表。在这个表中,行和列分别代表了作为训练和测试数据集收集数据的受试任务。例如,单元格[Datalog,CMD]显示了在 Datalog 数据上训练并在 CMD 数据上测试的分类器的性能。

Ø实验二结果

如下表所示,TCQA 在效率方面优于传统的质量评估技术。最后一列显示了 TCQA 相对于传统方法节省时间的幅度。TCQA 的执行速度是传统方法的 16.75 到 56.00 倍。

对此,我们可以知道 TCQA 的执行时间比传统的质量评估技术要短得多。在 6 个受测试的任务中,TCQA 比传统方法快 16.75-56.00 倍。

通过实验二,我们得出结论:跨任务场景下,TCQA 的性能低于其他两种情景。因此,在跨任务场景中部署 TCQA 时需要谨慎。

Ø实验三结果

通过实验三,我们得出结论:TCQA 可以在群组工作人员提交测试用例之前提供关于测试用例质量的实时见解。这种早期预测可能有助于优化众包测试用例开发过程。

结论

编写测试代码是一项困难的任务。众包以较低的成本获取大量的测试,并以较高的概率收集好的测试,但区分高质量测试和低质量测试是一个重大挑战。本文介绍了我们的 TCQA 方法,它自动评估在基于云的众包平台上获取的众包测试用例的质量。利用代码的细粒度动态历史,TCQA 可以在不计算覆盖度量或执行变异测试的情况下估计代码的质量。在从 400 多名参与者中收集的 2193 个测试用例上实施并广泛评估了提议的方法。评估结果证实 TCQA 能够准确预测测试用例的质量。与传统的质量评价技术相比,TCQA 取得了卓越的效率。在我们的第三个实验中,TCQA 在众包工作人员提交代码之前,还获得了对众包测试用例质量的实时洞察。总之,TCQA 是评估众包测试用例质量中的一种很有前途的技术。由于 TCQA 的高效性和最小的计算开销,它对于基于云的众包软件开发平台特别有吸引力。

致谢

本文由南京大学软件学院 2021 级硕士何家伟翻译转述。

感谢国家重点研发计划(2018YFB1403400)和国家自然科学基金(71732003,61772014)支持!


相关资源