Skip to content

OPPO 论文解读

杨枫 2022.08.20

介绍

各位老师同学大家好,我是杨枫,接下来我将要解读的论文是 Understanding Reproducibility and Characteristics of Flaky Tests Through Test Reruns in Java Projects,这篇论文的主要内容是通过测试重跑理解 Java Flaky 测试的再现性和特征。

接下来我主要从以下四个方面介绍这篇论文,分别是动机和创新点、实验方法、实验结果和未来展望。

动机和创新点

Flaky Test 是指在同样的软件代码和配置环境下,得不到确定的测试结果的测试,处理 flaky test 的常见方法就是测试重跑。

那么 Flaky Test 会带来哪些问题呢?测试是保障软件质量的重要环节,当软件变更或升级时,会使用回归测试来验证已有的功能是否能正常运行。回归测试的前提是测试结果是确定的,然而在实际开发中,会出现测试结果不确定的情况,那么这种测试就是 flaky 的。flaky test 这种不确定的测试结果使得开发人员无法信任回归测试的结果,当回归测试失败时,无法确定该测试是否是 flaky 的,同时结果的不确定增加了开发人员调试代码的难度。这造成了软件质量的隐患和时间的浪费。

flaky test 导致结果不确定的原因有很多,例如测试依赖于执行顺序、测试中包含异步等待或并发、测试依赖依赖于系统时间、测试中包含 IO 相关的操作或随机数等等。

根据产生的原因,flaky test 可以被分为两大类。 一类是 OD test,特征是确定且顺序相关;一类是NOD test,特征是非顺序相关,本文将 NOD test 分为了 NDOD test 和 NDOI test 这两类。

也就是说,一个测试可以被分为四类,如下表所示。第一类是 Not Flaky,……;第二类是 OD Test,其特征是确定且顺序相关,确定是指……,顺序相关是指……;第三类是 NDOD Test,……;第四类是 NDOI Test,……。

下面这个程序就是一个 NDOD Test 的示例,(解释)。

之前对于 flaky test 的研究大多关注于 OD Test,研究如何检测和自动修复程序中的 OD Test,而本文关注的是 NOD Test。NOD Test 的研究存在着一些挑战,()。

下面是论文中一些重要的术语。

本文主要关注于 NOD Test,并对 NOD Test 提出了四个研究问题,通过分析实验数据解答这四个研究问题,并用于指导开发人员的开发。

方法

P18:在 TSO 中,具体的实验设置是这样的,测试套件的执行分为了40个批次执行,每一批需要执行100次,20 批是以一个特定的执行顺序执行的,剩下的20批是以随机的执行顺序执行的。每一批的测试执行都启用了不同的 JVM,因此每一批的执行顺序都可能是不同的。这样既可以保证执行顺序的多样性,又可以保证至少一种执行顺序执行了足够多次。

结果

未来展望