数据库与自动测试的即插即用:发掘持久数据改进系统测试

互联不一般哥 2024-03-15 00:15:07

引用

Diego Clerissi, Giovanni Denaro, Marco Mobilio, and Leonardo Mariani. 2020. Plug the database & play with automatic testing: improving system testing by exploiting persistent data. In Proceedings of the 35th IEEE/ACM International Conference on Automated Software Engineering (ASE '20). Association for Computing Machinery,New York, NY, USA, 66–77. DOI:https://doi.org/10.1145/3324884.3416561

摘要

自动 Web 测试中的一个关键挑战是生成语法和语义上有效的输入值,这些输入值可以执行对输入有效性施加约束的许多功能。现有的测试用例生成技术要么依赖于手动整理的值目录,要么从外部数据源(如 Web 或公共可用的知识库)提取值。不幸的是,对于大多数实际应用程序来说,依靠人工工作通常过于昂贵,而特定领域和特定应用程序的数据在 Web 或通用知识库中很难找到。

本文提出了 DBInputs,这是一种新的方法,可以重用目标 Web 应用程序数据库中的数据,以自动识别特定域和特定应用程序的输入,并有效地满足测试 Web 页面中存在的有效性约束。DBInputs 可以正确地处理系统测试和维护测试工作,因为数据库在这些阶段自然且廉价可用。为了从应用程序数据库中提取有效输入,DBInput 利用输入字段标识符与数据库表中标识符之间的语法和语义相似性,自动解决用户界面与数据库模式之间的不匹配问题。我们的实验提供了初步证据,证明 DBInputs 优于随机输入选择和 Link,后者是一种从知识库中搜索输入的竞争方法。

关键字

系统测试、Web 测试、测试输入、测试生成。

背景

自动化 Web 测试的目的是生成测试用例,使用用户界面来测试 Web 应用程序。在这种情况下,一个关键的挑战是如何有效地分配接受自由文本的输入字段,这通常是许多具有输入值的网页设计的一部分。为这些自由文本字段生成合适的输入值很困难,这也是是许多自动化 Web 测试技术的一个众所周知的障碍,因此可能无法彻底测试某些功能,甚至可能忽略依赖于缺失输入值的用户界面的整个区域。

例如,考虑 Web 应用程序的简单情况,它要求用户在使用任何其他功能之前注册。由于无法在注册表格中输入有效输入(例如,有效用户名或电子邮件地址)而未能注册将严重影响测试生成器的有效性。类似地,如果测试生成器无法满足对输入的要求以归档任何有效的保险记录,那么用于处理用户保险记录的 Web 应用程序在很大程度上可能仍然未经测试。

为了实现充分的测试,测试生成器必须能够同时使用错误和有效的输入执行目标操作,如上面举例的注册操作。虽然生成错误的输入可能相对容易,例如,生成与任何有效电子邮件地址或社会保险号不对应的字符串,但生成有效的输入(如有效电子邮件地址或社会保险号)可能特别具有挑战性。

一些自动化 Web 测试技术通过允许测试人员定义一个输入值目录来规避这个问题,测试生成器可以利用该目录进行输入选择。尽管这是一种可能的选择,但它毫无吸引力,因为它将解决问题的负担转移到了测试人员的手动工作上,从而降低了技术的自动化程度。在许多情况下,它也可能非常昂贵,因为仅仅定义一组在任何地方使用的值是不够的,但是测试人员应该为许多网页的各个字段定义特定的值目录。

测试输入的有效性可能取决于句法、语义和连贯性约束。语法约束与输入字段中填充的字符串的格式有关。例如,Web 应用程序的输入字段可能需要以“mm dd yyyy”格式表示的日期,并拒绝以不同格式表示的输入,例如“11/03/2020”或“11-03-20”。语义约束是对输入值含义的断言。例如,输入字段可能需要真实存在的街道地址,因为应用程序旨在地图上显示地址,同时拒绝任何虚假地址,即使它在语法上有效。一致性约束是对一组除个别值独立有效之外,其余必须相互一致的输入的谓词,。例如,一个网页可能允许用户配置要购买的产品的多个属性,但只有当这些属性的组合符合给定的业务规则时,才允许用户完成购买。

迄今为止提出的所有解决方案都研究了通过将测试生成器与其他服务集成来自动生成有效输入的问题,这些服务可能支持从外部、公共可用源检索有效输入值。Bozkurt 和 Harman 提出了一种从 Web 服务中提取值的技术,基于对其 API 的分析,这些 Web 服务可以作为数据提供者。McMinn 等人研究使用搜索引擎检索值的有效性。Mariani 等人利用数据网络自动获得一致的值集。

这些方法的一个常见缺点是,它们通常无法检索依赖于特定领域概念或特定应用程序数据的输入的有效值。特定领域的概念,包括非标准甚至行话术语、同义词和首字母缩略词,很容易成为 Web 应用程序中输入字段标识符的一部分。它们通常在很大程度上扩大了测试生成器搜索的关键字与外部数据源中使用的关键字之间的语法和语义不匹配,严重阻碍了有效输入的识别。例如,在我们的实验中,我们考虑了一个预算管理 Web 应用程序,并尝试使用 Link 生成测试输入,Link 利用数据网络获得输入值。由于数据网络不能很好地覆盖预算管理领域,特别是测试应用程序中使用的预算相关术语,Link 始终无法为该应用程序生成有效输入。

特定于应用程序的数据,即直接依赖于被测应用程序状态的值,是导致输入丢失的另一个常见原因。例如,一项操作可能需要以前提交的保险合同的编号,这在任何外部数据源中都很难找到。

在本文中,我们提出了 DBInputs,这是一种用于自动 Web 测试的新技术,通过直接利用被测 Web 应用程序的数据库来识别测试输入。我们的方法利用了两个关键观察结果:(i)应用程序数据库使用特定于应用程序的数据构建,并且使用特定领域的概念设计,因此它们可以很好地处理上述当前技术的开放性问题。(ii)自动化 Web 测试涉及系统测试和维护测试阶段,因此,我们通常可以依靠现存的测试数据库,甚至已有数据库产品,而不需要测试人员额外的努力。

DBInputs 能够利用标识符之间的语法和语义相似度,将目标 Web 应用程序输入字段的标识符与可用数据库表中列的标识符自动匹配。数据库可能包含应用程序大多数操作的有效数据,从而使 DBInputs 可行、有效和有用。我们喜欢将这种实际的方法称为即插即用的解决方案,因为测试人员只需要指定到可用数据库的连接,然后 DBInputs 就可以直接选择有用的数据,并考虑到可能的命名不匹配。

我们通过:(i)生成随机值,(ii)使用竞争技术 Link,该技术利用数据网络来识别有效输入,以及(iii)使用 DBInput 这三种方式为 ABT 系统测试生成器配备识别测试输入的能力,从而评估 DBInputs。本文中报告的结果提供了经验证据,表明使用 DBInputs 生成的测试用例比其他方法更广泛地探索了被测应用程序的功能:DBInputs 几乎使使用有效输入的表单的数量增加了一倍,而同样使用无效输入的表单的数量也增加了一倍

概述

图 1 说明了 DBInputs 如何与自动 Web 测试集成在一起。测试生成器当需要在自由文本输入字段中输入值的时候查询 DBInput。为了回答这些查询,DBInputs 引用了一个应用程序数据库的工作副本,它是测试者第一次配置 DBInputs 与给定数据库的连接时创建的。工作副本克隆应用程序数据库的模式,并在每个表中导入记录的子集。准确导入的记录可能取决于不同的策略,如第 4 节所描述和实验的。DBInputs 只需要连接到工作副本并使用它的数据,而不管在测试生成器执行被测应用程序时实际的数据库可能会发生什么变化。注意,DBInputs 不受任何数据库格式的限制,并且支持任何基于 SQL 的数据库。

图 1:利用 DBInputs 进行自动化 Web 测试

为了应答每个查询,DBInputs 通过三个步骤:(i)首先,它计算输入字段标识符和数据库列名称之间的语法和语义相似度;(ii)然后,通过聚类算法利用相似度得分,选择为每个输入字段提供最佳匹配的列集;(iii)最后,它为每个输入字段选择一个最佳匹配列,方法是在(a)实现匹配的高平均相似度和(b)限制匹配列引用的数据库表的数量之间进行权衡。图 2 举例说明了 DBInputs 的三个步骤。

图 2:示例Web 表单的DBinput 结果

在第一步中,DBInputs 量化了 Web 表单中输入字段的标识符和数据库列名称之间的相似性。DBInputs 为每个输入字段考虑三个标识符:(i)的标签,这是视觉相关的文本输入字段的 Web 页面(例如,文本在其左侧),由 Becce 等人的改编版本的算法识别。(ii) id 属性的值从页面的文档对象模型(DOM),和(3)名称属性的值,仍然从页面的 DOM 获取。

DBInputs 结合一个句法距离(即编辑距离)和一个语义距离(即 word2vec 模型)计算标识符和列名之间的相似度得分。潜在的直觉是,标识符之间的匹配应该容忍不相关的语法差异,并考虑标识符的语义,而不管它们的语法表示。在图 2 中,与蓝色、红色和绿色箭头相关联的值表示相似性得分,在我们的实验中,DBInputs 针对三个数据库表中的某些列计算了三个输入字段,即 LOGIN_DATA、USERS 和 email。例如,DBInputs 几乎完美地匹配了输入字段 Username 和同名的数据库列 Username,但是它也匹配了输入字段 E-mail 和数据库列 email(相似度 0.74),尽管对应的标识符之间有轻微的语法差异。然而,对于应用程序的另一个 Web 表单,它很好地匹配了输入字段 Current issue 和语法不同但语义相似的数据库列 Bug id(相似度 0.6)。这种灵活性允许 DBInput 检索有意义的输入值,尽管应用程序和数据库中使用的标识符可能存在差异。标识符的差异通常是由于在不同的时间(例如,由不同的开发人员)或考虑到不同的目标(例如,选择 GUI 标签以支持用户友好性,以及选择列名称以遵守数据模型的命名约定)而引入的。

在第二步中,DBInputs 为每个输入字段标识一组“足够好”的匹配列。为此,它根据每个输入字段的相互强度(基于 ST-DBSCAN 聚类方法)对其计算的相似度分数进行聚类,然后选择与顶部聚类对应的列,即包含最佳相似度分数的聚类。这个聚类步骤允许 dbinput 只关注最有希望匹配的列,同时仍然保留可以匹配多个具有不同但相当相似的列的输入字段的选择。图 2 突出显示了具有相同颜色背景的属于相同顶部集群的相似值。在顶部集群中,字段 Real Name 只有一个匹配列,而字段 Username 和 E-mail 分别有两个和三个候选列。

在第三步中,DBInputs 选择一个最终的解决方案,每个输入字段包含一个匹配列,通过追求选择具有高度相似度的匹配的目标,以及尽可能限制涉及的数据库表的数量的目标。后面这个目标背后的直觉是,通过从同一个数据库表中选择多个输入值,我们增加了找到彼此一致的值的可能性。自输入字段,属于同一网页往往相关(例如,它们表示相同的信息域的实体),DBInputs 支持这样的想法:输入数据应该从一组有限的选择表(自信息域实体通常是存储在一个或几个数据库表)。

为此,DBInputs(输入字段和数据库列之间的一组匹配,每个输入字段只出现一次)首先使用匹配的最高的平均相似度分数,再次使用聚类。在顶部集群的解决方案中,DBInputs 选择了包含最少表数的方案。例如,在图 2 中,DBInputs 最终选择用 USERS 表的三列来匹配这三个输入字段(实边表示最终选择的匹配)。

算法细节

1. 自动从数据库中提取测试输入

算法 1 中的伪代码定义了 DBInputs 的输入和输出,并以自顶向下的方式描述了算法的组织。

图 3:算法 1——DBInputs 的伪代码

DBInputs 将当前 Web 页面中的输入字段列表(输入 F)和数据库中的表(输入 T)作为输入,并根据 DBInputs 最佳匹配启发式方法返回一个映射(输出 M),该映射将每个字段与数据库列关联起来。DBInputs 使用缓存来优化性能,避免对相同的输入字段集进行多次映射计算(第 5 行),并将计算分为两个宏步骤。第一步标识与每个具有相当高相似性的字段匹配的数据库列,而第二步计算字段的列映射之间的最佳折衷高相似度得分和低数量的相关数据库表。

2. 找出匹配值

算法 2 定义了 ColumnsWithTopSimilarity 函数,该函数标识与每个具有较高相似性的输入字段匹配的数据库列。它接受输入的字段 T F 和数据库表的集合,并返回一个 multi-map,将每一个输入字段的设置最相似的数据库列,和相应的相似性度量(S)。加权边缘如图 2 所示例证函数的结果。该算法首先计算每个字段-列对的相似度得分(第 9 行),然后对相似度得分进行聚类,以确定每个字段的最高得分(第 10 行)。

计算相似性分数。这个步骤在函数 Similarity 中得到了进一步的详细说明。它由分解输入字段和列的标识符标记,代表了独立的单词,找到最好的相似性得分每一对字段的列标记,区间通过选择最佳的句法或语义相似度测量,并平均所有标记对的相似性分数。

为了计算相似度,DBInputs(参数值)将每个输入字段 f∈F 表示为< id、name、label>元组,其中 id 和 name 是字段的 id-property 和 name-property 的值,从 Web 页面的 DOM 中获得,label 是 Web 页面在视觉上与输入字段关联的文本内容。我们使用 Becce 等人算法的一个改进版本来分析 Web 页面,从而识别与输入字段相关的标签,该算法利用了用户界面设计中的良好实践。更具体地说,DBInputs 使用输入字段的占位符属性值作为标签。如果这样的属性没有值,DBInputs 使用显式指向目标输入字段的标签元素的值作为标签。如果不存在这样的元素,DBInputs 使用最接近的元素中的文本作为标签的值,该元素在输入字段的前面或后面。如果这样的元素不存在,DBInputs 使用包含输入字段的 HTML 单元格头或页脚中的文本。如果这些选项都不成功,则输入字段将与没有标签相关联。

LemmatizedTokens 函数以 lemmalized 的形式提取标识符中包含的符号,也就是说,它将标识符分隔在由分隔符(例如空格、下划线和短线符号)或驼背式表示法分隔的子字符串中,并同质化变化和变体形式(例如,填充变成填充,better 变成 good),并去掉任何非字母数字字符。例如,user_username 标识符被拆分为令牌 user 和 username。

DBInputs 计算语法相似性作为令牌字符串的 Edit Distance,以及基于利用单词嵌入的语义 Word2vec 模型的语义相似性。语法相似性匹配在次要细节上不同的标识符。例如,编辑距离为标识符 E-mail 和 email 生成 0.73。语义相似度匹配具有相似含义的不同语法标识符。例如,对于标识符问题和错误,Word2vec 的结果是 0.6。DBInputs 将编辑距离和 Word2vec 测量值归一化(0..1)——1 是可能的最高相似度——以培养分数的可比性。此外,DBInputs 保持两个分数中最高的,以在每一种情况下包含最好的相似性视角:一个标识符和一个数据库列的名称,如果在语法或语义上相似,就可能表示相同的概念。

图4:算法2——为每个输入字段识别具有较高相似性的数据库列

最后,DBInputs 通过平均所有对应令牌对的相似度得分来识别字段-列对的相似度,以适当地加权所有令牌的集体贡献。例如,参考图 2 的例子,令牌用户是 Username 和 Email 输入字段的 id 属性的一部分,并且与列 user_id 具有很高的相似性。但是,当考虑到所有令牌的贡献时,前者对于列 user_id 的总体相似度得分要比后者输入字段高得多。

聚类顶部相似分数。通过聚类算法 ST-DBSCAN,DBInput 将与每个输入字段 f 相关的相似度得分聚类,它是经典 DBSCAN 算法的一个版本,它根据所分析的值的总体特征自调优算法的参数。我们的算法选择出现在 ST-DBSCAN 识别的最上面的聚类中的匹配,这是相似性得分最高的值的聚类。图 5 演示了图 2 示例中三个输入字段的集群输出。

图5:Mantis 缺陷追踪器中的相似点顶部聚类

3.选择最佳匹配

算法 3 定义了函数 IdentifyBestMatches,该函数标识字段-列映射,作为一个整体,该字段-列映射可能产生较高的相似度分数,并引用很少的数据库表。函数在输入中接受字段集合 F,数据库表集合 T,以及算法 2 函数的结果,即将输入字段与它们最相似的数据库列关联起来的多映射 MM 和相应的相似度分数 s,因此,函数将其评估限制为算法 2 识别的得分最高的字段列映射,返回映射 M,将每个字段关联到一个最佳匹配的数据库列。

图6:算法 3——为每个输入字段标识最匹配的列

算法如下。首先,IdentifyBestMatches 生成候选解决方案的空间。候选解决方案由一个完整的匹配组成,该匹配将每个输入字段与单个数据库列关联起来。函数通过展开 DBInputs 计算到目前为止和函数在输入中接收到的高相似度候选匹配列来获得候选解决方案。然后,函数用质量值为每个候选解决方案评分,该质量值计算为解决方案中匹配的相似度得分的平均值,并再次利用 ST-DBSCAN 算法根据该质量值来识别候选解决方案的顶部集群。函数根据每个解决方案中的数据库列所指向的表的数量再次对顶部集群中的解决方案进行评分,并进一步选择该评分具有最小值的候选解决方案。最后,如果多个解决方案涉及相同(最小)数量的表,函数选择具有最大平均相似度的那个,然后从其余的解决方案中选择一个随机的解决方案。这个过程允许使用高质量匹配,同时将涉及很少数据库表的解决方案与具有可比质量级别的解决方案区分开来。

实例评估

为了评估 DBInputs 的有效性,我们将我们的方法集成到 ABT 测试生成器中(这里是 ABT-DBInputs),并在一系列实验中对 ABT-DBInputs 的有效性进行了基准测试。通过 ABT-DBInputs 的实验,我们量化了 DBInputs 对测试生成过程有效性的影响,无论是绝对值还是与其他策略的比较。特别是,我们将 DBInputs 与基线策略(选择随机字符串作为输入)和使用 Link 方法实现的策略(Link 方法利用语义 web 技术生成语义上有意义的输入)进行了比较。Semantic-web 确实被证明是测试中语义上有意义和有效值的有用来源。为了验证这些替代方法,我们将随机输入发生器和 Link 集成到 ABT 中,即分别获得 ABT-Random 和 ABT-Link。下面,我们简要介绍 ABT 和 Link 工具,然后我们讨论研究问题、评价指标、设置和我们实验的结果。

1. ABT

AutoBlackTest(ABT)是一个用于 GUI 和 Web 应用程序的自动测试用例生成解决方案。ABT 通过使用 Q-Learning Agent 来练习被测试应用程序的功能,该 Agent 负责选择和执行操作,同时将观察到的结果合并到基于状态的模型中。该模型表示关于被测试应用程序行为的知识,并被用来逐步提高测试生成工具所采取的选择的有效性。特别是,ABT 启发式地将高测试效率与观察重大 GUI 更改联系起来,假设重大 GUI 更改意味着重大计算的执行。这种启发式方法允许 ABT 了解执行路径,这些路径更有可能有效地执行被测软件,并将测试活动集中在这些路径周围。我们在实验中使用的实现是基于.net 的,并使用 Selenium WebDriver 测试框架与被测试的 Web 应用程序交互。

2. Link

Link 是一种通过利用 Web of Data 检索语法和语义上正确的输入值的连贯集合的技术。特别是,给定与输入字段关联的描述符和可以通过 SPARQL 端点查询的源知识库,Links 将搜索存储在知识库中的与提供的描述符匹配的资源。例如,Link 可以检测到一个源知识库承载着由诸如姓名、姓氏和年龄等属性描述的个人数据,这些属性与输入描述符(如名、名和年龄)非常匹配。考虑到输入描述符和知识库中使用的描述符的语义,将它们配对。如果在知识库中确定了合适的资源,Link 将检索相关的实例,并使用提取的值来测试所测试的应用程序。

3. 研究问题和评估指标

我们用 4 个 Web 应用程序测试了测试生成器 ABT-DBInputs,目的是表征 DBInputs 输入生成算法的有效性。我们在相同的 Web 应用程序上进一步实验了 ABT-Random 和 ABT-Link,以评估 DBInput 与其他输入生成方法相比的重要性。更详细地说,我们的实验是由以下研究问题驱动的:

l RQ1:有效性:DBInputs 生成的输入能在多大程度上促进 Web 应用程序的有效测试?

l RQ2: 比较:对于随机选择的输入或基于语义 web 技术的输入,DBInputs 是否显著提高了测试效率?

为了回答 RQ1 的问题,我们研究了在考虑不同的方法来创建用来选择输入数据的 DBInputs 工作副本数据库时,ABT-DBInputs 的有效性。具体来说,我们研究了三种场景,其中 DBInputs 的数据库分别等于(ABT-DBInputs=),与(ABT-DBInputs~)部分重叠,或与(ABT-DBInputs!=)完全不一致,即测试中的应用程序在运行时使用的实际数据库。我们的目标是评估与此配置选择有关的 DBInputs 的敏感性,并找出使 DBInputs 产生 ABT-DBInputs 的最佳有效性的配置。事实上,数据库的初始配置可能会影响 DBInputs 生成新值或现有值的能力,从而影响执行特定应用程序约束的可能性。由于更好地生成测试输入的能力会影响使用输入字段的功能,所以我们将评估的重点放在至少有一个输入字段的表单上。特别地,我们根据 ABT-DBInputs 生成测试输入的频率,量化 ABT-DBInputs 在它的三个配置中的有效性,这些测试输入会为练习过的表单产生有效或无效的结果。如果测试用例执行一系列动作(i)将输入表单可视化到用户屏幕上,(ii)向表单输入适当的输入,以及(iii)使应用程序处理表单的输入,那么我们就说测试用例练习输入表单。我们说,如果应用程序在处理表单输入时不发出验证错误,那么测试用例执行输入表单的结果是有效的,或者无效的。

为了回答 RQ2,我们比较了 ABT-DBInputs 在其三种配置下的有效性与 ABT-Random 和 ABT-Link 的有效性。我们使用在 RQ1 中定义的相同设置和指标来衡量这些方法的有效性。

4. Web 应用程序

我们在 4 个网络应用上进行了实验,涵盖了 4 个不同的领域,包括开源和工业应用:

Tickets:我们选择了 Mantis 开源问题跟踪系统,它允许用户和开发人员创建 ticket 和管理应用程序的问题,并将活动组织成项目和类别。这个应用程序也被用于其他关于 Web 测试的论文中。

ERP:我们选择了 Dolibarr 开源的企业资源计划和客户关系管理系统,它提供了大量的功能,包括资源计划、发票、产品和商店管理。这个应用程序也被用于其他关于 Web 测试的论文。

Insurance:这是 Tricentis Vehicle Insurance 演示应用程序,它实现了处理车辆保险数据的服务。它包括几个具有挑战性的输入约束的输入形式,因此与我们的实验相关。

Budgets:这是一个计划和管理预算的应用程序,是与一个行业合作伙伴共同开发的。由于我们与工业合作伙伴达成了保密协议,我们不能透露具体细节,但我们有权报告我们在这个应用程序中所做的实验的汇总统计数据。

所有这些应用程序都在数据库中维护持久的数据,高度依赖于基于表单的交互,并包括对其输入有效性有约束的 Web 表单。因此,这些应用程序代表了用于生成输入值的技术所要解决的一类 Web 应用程序。表 1 总结了我们实验中考虑的 Web 应用程序的主要统计数据

表 1:Web 应用程序的统计数据

5. 实验步骤

数据收集。为了收集使用有效(f+)和无效(f-)输入的表单数量的数据,我们手工检查了考虑的 Web 应用程序中的每个表单。对于我们收集的输入有限制的表格:(i)形式标识符(通常是标题页),(2)使应用程序的操作过程的形式(例如,单击提交按钮),和(3)页面,可以达到处理表单后,确定图形元素,使我们能够区分如果无效或有效输入已经提交。我们使用此信息来增加 ABT,使用特定于应用程序的记录器来跟踪 ABT 每次使用有效或无效输入的表单时的情况。

数据库准备。对于研究问题 RQ1,研究 ABT-DBInputs=,ABT-DBInputs∼ 以及 ABT-DBInputs!=,我们生成了不同的测试数据库。我们将每个考虑的 Web 应用程序的原始数据库分割成大小相等的两部分,分别用于工作数据库以及应用程序运行时数据库

表 2 提供了关于我们使用的数据库的统计信息。我们采用的 Erp Dolibarr Web 应用程序拥有最多表和每个表最多列的数据库。预算管理的工业应用程序“Budgets”拥有中等规模的数据库,但记录数量最多。Tickets,即 Mantis 应用程序,也有一个中等大小的数据库,但是记录的数量有限。最后,Insurance 应用程序拥有最小的数据库,但有大量的记录。

表2:DBInputs 使用的数据库统计数据

身份验证。探索依赖于身份验证的功能对自动测试生成器来说是一个众所周知的挑战,因为测试生成器通常不可能猜测用户的密码,甚至不可能从数据库中存储的相应加密格式解码密码。在我们的实验中,我们通过让 ABT 知道每个考虑过的应用程序的用户密码来解决这个问题。

设置竞争方法。我们将随机生成的输入值作为比较 DBInputs 的基准方法。它只是在每次需要输入时产生一个随机长度的随机字符串。Link 利用数据网络来生成测试输入。在其原始论文中,我们使用 DBPedia 作为源知识库,其中包含从维基百科中提取的语义注释数据。对于这两种方法,我们都添加了一个缓存管理系统,其工作方式与 DBInputs 一样,以保证比较的公平性。

执行实验。我们在每个应用程序上执行了 10 次每种技术,总共执行了 180 次。特别是,我们在 Tickets、Erp 和 Budget 应用程序上执行了所有的技术(DBInputs 的 3 种配置和 2 种竞争方法),而我们只执行了 ABT-DBInputs!=和 Insurance 的两种竞争方法,因为只有分离的数据库可用。总的来说,为每种技术收集的经验证据相当于为每个应用程序生成 500 个测试用例,并与各种输入表单进行数千次自动交互,总共需要超过一个月的计算时间。

6. 实验结果

RQ1 的结果:DBInputs 有效。图 7 总结了每种技术对使用有效和无效输入执行的表单的度量。每个栏的顶部区分了由两个配置执行的表单的数量——仅由一个 DBInputs 配置执行的表单的数量和唯一的配置执行的表单的数量,以量化一个配置测试特定表单的惟一能力。

图7:由DBInputs 执行的表单

RQ2 的结果:以比较结果呈现

图 8 比较了 ABT-DBInputs!=根据上面报告的结果最好的 DBInputs 配置,与方法 ABT-Random 和 ABT-Link 竞争的结果。这张图中的图指的是所有考虑过的应用程序,包括 Insurance,这就是为什么新图显示了比图 7 更大的测量值。图中的结果证实了我们研究的主要假设,即 DBInputs 在生成有效测试输入方面比其他竞争方法更有效。

图8:由DBInputs, Random 和 Link 产生有效结果的每个操作类别分类

讨论及有效性威胁

实验结果表明,DBInputs 可以提高测试生成器使用有效值执行表单的能力。这对于实现良好的探索能力以及达到和测试所测试的 Web 应用程序的功能非常重要。具有与应用程序使用的数据库不同的数据库的配置一致地产生了最好的结果,因此,它也是推荐使用的配置。

虽然 DBInputs 被证明能够有效地为测试用例提供有效的输入数据,但它的主要弱点在于数据库本身。排除工作副本数据库中填充了很少的行或几个空/null 值的情况,存储在数据库中的数据很少是构造无效的,因为它们反映了测试中的应用程序可能的有效状态,使得特定于领域的约束很难失效。这仍可能发生如果数据库模式或 Web 页面本身设计不良(比如,一个列提供了一个非常通用的或难以理解的名称或输入字段没有相关标识符),识别坏输入字段和数据库列之间的匹配,因此,可能返回无效数据。虽然生成大量的无效值会损害探索的有效性,但结果表明 Link 和 Random 设法为某些表单生成了唯一的无效值。这表明 DBInputs, Link 和 Random 可以是互补的,特别是在它们产生无效值的能力上,并且一个最佳的测试生成策略可以通过组合它们而得到。

我们的实验的有效性的主要内部威胁为(i)相关输入表单的人工识别评估限制他们的输入,和(2)记录器的设计,收集的数据是否这些形式得到锻炼在运行时使用有效和无效值。为了降低这些风险,我们多次仔细检查应用程序,并多次执行彻底测试记录器,最终我们对当前数据的准确性充满信心。外部有效性威胁到我们研究结果的普遍性。我们的结果参考了一个重要的输入表单示例(共 127 个),这些表单考虑了不同的应用程序域和具有不同数量的表和列的数据库。我们将每个实验重复 10 次,以控制输入生成和测试生成算法的随机性,从而获得稳定的实验证据。然而,我们意识到,我们不能声称我们的发现对任何可能的应用、应用领域和数据库类型都是有效的,我们正在进行新的实验,以进一步扩展目前的经验数据。特定威胁的担忧是否 DBInputs 的有效性可以概括来测试发电机 ABT。原则上,DBInputs 作品以同样的方式独立测试生成器,使用它,并没有明显的技术原因的选择测试生成器应该影响的结果。我们认为这是一个有趣的方向,可以在未来扩展我们的研究成果。

相关工作

系统测试技术,特别是 Web 测试技术,关注的是事件序列的生成,这些事件序列可以覆盖被测试应用程序的执行空间。现有的技术有不同的策略,包括随机化的、基于模型的和不变量驱动的执行空间探索。作为事件生成的补充,这些技术使用不同的方法在与被测应用程序交互时用测试输入填充输入字段。生成随机输入是廉价的,但在包含输入有效性约束的 Web 表单中很容易失败。事实上,我们的实验表明,ABT-Random 与没有约束的表单很好地相互作用,但是 ABT-DBInputs 比 ABT-Random 在许多有约束的表单中表现更好。一种方法是准备一组手工管理的值,并将它们传递给测试生成器。纯值列表相对有效,因为它不能保证为正确的输入字段选择正确的值。例如,列表可能包含日期值,但是测试生成器很容易在列表中为日期约束的输入字段选择其他值。

一种更复杂的方法是将类型与策划列表中的每个值关联起来。虽然这可能会增加测试过程的有效性,但它要求开发人员为测试下的应用程序的许多形式准备一组广泛的值和相关类型,这限制了该方法的实际好处。实际上,DBInputs 提供了一个更好的折衷方案,因为它不需要人工操作。一些解决方案通过依赖外部资源来解决自动生成语法和语义相关输入的问题。McMinn 等人利用 Web 作为数据来源,通过 Web 搜索检索输入。Bozkurt 和 Harman 定义了一种搜索 Web 服务的策略,这些 Web 服务可以被激发产生测试过程中需要的类型值。Link 和 Wanwarang 等人的方法都利用了数据 Web 和语义 Web 技术来检索可以用于测试应用程序的适当类型的值。

正如我们已经评论过的,依赖于外部源的技术很难产生特定于应用程序的数据(例如,进入问题跟踪系统的问题标识符)。它们可以生成一些特定于领域的数据,但前提是应用程序的外部领域和领域是一致的,但通常情况下并非如此。例如,在我们的评估中,Link 在复制四个 Web 应用程序及其域时遇到了困难。DBInputs 成功地丰富了自动 Web 测试的能力,它能够自动识别特定领域和特定应用程序的数据,通过重用应用程序数据库来达到测试的目的。我们的结果表明,DBInputs 可以显著地提高测试生成器的性能,以执行被测应用程序的功能。

总结

有效输入值的生成可能成为自动 Web 测试的障碍。实际上,为了成功地执行相应的功能,通常需要在 Web 表单中输入特定于领域和特定于应用程序的值。如果不能获得这些值,可能会显著限制测试用例的有效性,从而无法执行某些功能,从而无法探索应用程序的部分执行空间。

为了缓解这个问题,本文研究了使用应用程序数据库作为可用于生成测试用例的值的数据库的想法。它展示了 DBInputs 技术,即最初体现这种直觉的技术。DBInputs 自动处理 Web 页面内容和数据库结构之间的不匹配,提取出对测试有用的输入。特别是,DBInputs 利用了语法和语义距离,通过匹配启发式成功地将输入字段映射到数据库中表的列。这个映射允许从数据库中的记录中提取值,DBInputs 使用这些记录填充被测试应用程序的输入字段。我们在论文中报告的实证评估表明,DBInputs 可以比现有的基于随机输入或从 Web 上可用的外部资源检索数据的方法更好。

我们目前正在研究如何扩展 DBInputs 以跨应用程序重用数据库,从而进一步提高它获取异构输入的能力,从而揭示被测应用程序中的问题。我们也在考虑将 DBInputs 扩展到移动应用中,以研究该解决方案在移动领域的有效性。最后,我们打算评估该技术在涉及大型数据库和应用程序时的可伸缩性和可行性。

致谢

本文由南京大学软件学院 2021 级硕士研究生程一镇翻译转述。

0 阅读:0

互联不一般哥

简介:感谢大家的关注