Overview
ICSE 即 International Conference on Software Engineering(国际软件工程会议),是国际公认的软件工程领域顶级会议,由国际计算机学会(ACM)与电气与电子工程师协会(IEEE)联合主办,每年召开一次。
这篇论文是复旦大学计算机科学技术学院和美团合作的一篇论文,发表在 ICSE 软工会议上,论文在软件工程和移动应用测试领域开展研究,致力于解决商业移动应用中数据不一致性检测的难题,其成果 AutoConsis 工具为提高移动应用数据质量和用户体验提供了有效解决方案。
AutoConsis 可以通过多模态深度学习模型自动分析 GUI 页面,并利用大型语言模型(LLM)从文本文段中提取目标数据。有了这些提取的数据,就可以检测它们的不一致性。论文通过一系列消融实验评估了 AutoConsis 的设计。最后通过八个具有代表性的案例展示了将 AutoConsis 应用于实际商业移动应用程序时的有效性。
消融实验(Ablation Experiment)是一种在研究中用于评估特定组件或方法对整体系统性能影响的实验方法。在本文中,消融实验被用于评估 AutoConsis 工具中不同部分的有效性,通过逐步去除或改变系统的某些部分,观察系统性能的变化,从而确定每个部分的贡献程度。
通过消融实验,清晰地展示了 AutoConsis 各部分设计(如多模态模型和 COT 提示模板)在提升工具性能方面的重要作用,为工具的优化和改进提供了有力依据,也证明了其在数据不一致性检测任务中的有效性和优势。
Background
商业移动应用中的数据不一致性问题
以美团为例,作为拥有庞大用户量的大型电子商务平台,其应用功能复杂,不可避免地存在漏洞。其中,许多漏洞表现为图形用户界面(GUI)中数据的自相矛盾,这种数据不一致性错误会给用户带来困扰,降低用户体验,因此在应用发布前检测此类错误至关重要。
Figure 1 展示了商业移动应用中存在的数据不一致性错误的具体案例,直观呈现了这些错误如何在图形用户界面(GUI)中体现,具体解释:
案例(a):AD 页面的价格计算错误
- 该 AD 页面展示了商品的价格信息,包括原价(如 “¥40”)、折扣(如 “60% Off”)和现价(如 “¥13.9”)。然而,这些价格数据之间存在不一致性,按照正常的折扣计算逻辑,原价 “¥40” 的商品打 60% 的折扣后,现价应为 “¥16”(计算方式为:),但页面显示的现价为 “¥13.9”,这表明价格计算或数据呈现出现错误。此案例体现了数据不一致性错误如何影响用户对商品价格的理解,可能导致用户做出错误的购买决策,进而影响用户体验和对平台的信任。
案例(b):产品类别与实际不符
- 在该案例中,“SingBar Karaoke TV” 这款卡拉 OK 产品出现在 “Massage”(按摩)类别下,产品名称与所属类别明显不匹配。这种产品类别不一致性错误会使用户在浏览或搜索特定类别产品时感到困惑,无法准确找到所需产品,严重干扰用户的正常使用,降低用户对应用分类准确性的信任,对用户体验产生负面影响,同时也反映出数据在呈现和组织上的混乱。
这些案例强调了在商业移动应用中检测和解决数据不一致性错误的重要性,也是本文提出 AutoConsis 工具的现实背景和应用场景需求的具体体现,旨在通过自动化手段检测和避免此类错误,提升应用的质量和用户体验。
移动应用测试实践
美团采用自动化 API 测试和 GUI 脚本测试来检测数据不一致性错误。
自动化 API 测试针对服务器端接口,但无法保证 GUI 页面的数据一致性。
GUI 脚本测试虽能从用户角度识别错误,但美团应用存在多业务线和大量页面,全面覆盖测试所需的脚本开发工作量巨大,每个脚本开发需 30 - 40 分钟,人工成本高,导致测试覆盖不足。
具体而言,测试工程师需要手动使用XPath(一种用于从用户界面(UI)层次结构文件中指向不同部分的语言)来选择包含目标数据的各种文本短语。接着,设计多个规则以便从这些文本短语中提取目标数据。最后,测试工程师需要在测试脚本中指定这些目标数据之间的关系。
然而,商业移动应用通常具有多个业务线(如酒店预订、出租车预订和食品配送),每个业务线都涉及大量的页面。因此,检测可能存在的数据不一致性漏洞就需要在开发相应测试脚本方面投入巨大的人工努力。本文旨在减少在解决数据不一致性漏洞时所需的这种人工工作量。
XPath(XML Path Language)即 XML 路径语言,是一种用于在 XML 文档中定位和选择节点的语言,在本文中用于从用户界面(UI)层次结构文件中指向包含目标数据的不同部分,辅助测试工程师手动选择文本短语以检测数据不一致性。
面临的挑战
GUI 多样性挑战
这部分讲了不同的 GUI 实现导致分析过程不同,给自动化 GUI 分析造成困难。
Figure 2 展示了不同 GUI 页面的视觉相似度情况,其目的在于直观呈现商业应用中 GUI 页面的多样性程度,以说明这种多样性对自动 GUI 分析带来的挑战。通过对美团 100 个 AD 页面(来自不同业务线)的研究发现,同一业务内不同页面平均视觉相似度为 59%,不同业务页面视觉相似度低于 48%。这种高度的 GUI 页面多样性给自动 GUI 分析带来了巨大挑战。
因为自动化测试工具难以针对如此多样的页面布局和视觉效果制定统一且有效的分析策略。不同的页面结构可能需要不同的算法和模型来准确识别和提取其中的数据,增加了自动化检测数据不一致性错误的难度,从而凸显了在移动应用测试中,开发适应 GUI 多样性的技术和工具的必要性,如本文提出的 AutoConsis 工具所面临的实际应用场景和需要解决的问题背景。
自然语言挑战
GUI 页面文本信息多以自然语言呈现,表达式多样,增加了从其中自动提取目标数据的难度。
**折扣数据可能有多种隐含或需计算的表达方式,目标数据可能未明确陈述而需从语义信息中挖掘。**这使得自动提取目标数据变得极为复杂,传统的自动化测试工具难以准确理解和处理这些自然语言表达,从而无法有效地提取出关键数据进行一致性验证。
- 价格数据提取示例:在图 1 (a) 中,对于商品价格相关数据的表达形式多样。例如,折扣数据可以表示为 “$8.3 Off”或者“60% Off”,这两种表达方式都是有效的,但对于自动化测试工具来说,需要理解并处理不同形式的折扣表达,以准确计算价格关系。**而且,在多数情况下,原价、折扣和折后价这些目标数据可能不会明确地在文本中同时给出,而是需要根据文本短语的语义信息进行分析和计算。**例如,当只给出原价“$50” 和折扣 “60% Off” 时,需要通过计算($50×(1 - 60%) = $20)才能得到折后价,这种隐含的数据关系增加了自动提取目标数据的难度,传统自动化测试工具难以准确识别和处理这些复杂的自然语言表达来获取完整的价格数据。
自然语言的灵活性和模糊性,导致测试工程师需要花费更多精力去理解和解析文本信息,设计复杂的规则来处理各种可能的表达方式,这不仅增加了测试脚本开发的难度和工作量,还容易因对自然语言理解的偏差而导致测试覆盖不全面或误判。
- 产品类别判断示例:如图 1 (b) 所示,对于产品类别与实际是否相符的判断也依赖于对自然语言的理解。例如 “SingBar Karaoke TV” 这款产品出现在 “Massage”(按摩)类别下,产品名称与所属类别之间的关系需要从语义层面进行判断。自动化测试工具很难自动理解产品名称所代表的实际产品类型,并将其与所在类别进行准确匹配,因为产品名称可能不会直接包含类别信息,需要从更广泛的语义知识或上下文信息中进行推断,这体现了从自然语言文本中提取和判断数据一致性时面临的挑战,即目标数据可能未明确陈述,需要挖掘语义信息来确定其一致性关系。
研究目的与 AutoConsis 的提出
- 鉴于上述问题,本文旨在减少数据不一致性检测中的人工工作量。为此,提出了 AutoConsis 这一自动数据不一致性检测工具,它模仿人类从 GUI 页面识别数据的方式,通过多模态深度学习模型分析 GUI 页面,借助大语言模型(LLM)提取目标数据,进而检测数据不一致性。
Tool Design And Testing Workflow
Overview
输入部分
- 测试人员向 AutoConsis 提供**两个关键输入:GUI 页面截图和测试要求。**GUI 页面截图来源于商业移动应用(如美团应用)的实际运行界面,涵盖了各种业务场景下的页面展示,包含丰富的布局、元素和数据信息。测试要求则明确规定了需要检测的数据不一致性类型,例如 “检查商品价格数据是否一致”“验证产品类别与实际是否相符” 等,同时还包括用于 ICL(In - Context Learning)的示例案例,这些示例案例为后续的目标数据提取和一致性验证提供了参考和引导。
组件构成与功能
- GUI 子区域识别组件
- 该组件是 AutoConsis 的第一步操作,其主要功能是在输入的 GUI 页面截图中准确识别出可能包含目标数据的子区域。它利用修改后的多模态 CLIP 模型,结合测试要求中的文本信息(如 “提取价格数据”),通过滑动窗口技术在页面截图上进行扫描。对于每个滑动窗口生成的子区域,模型计算其与文本查询的余弦相似度,最终筛选出相似度最高的前 k 个子区域。这些子区域将作为后续目标数据提取的候选区域,例如在检测价格数据时,识别出显示价格数字、货币符号等相关元素的区域。
- 目标数据提取组件
- 基于 GUI 子区域识别组件输出的候选子区域,目标数据提取组件负责从中提取出目标数据。此组件借助大语言模型(LLM)来实现,通过精心设计的 COT(Chain - of - Thought)提示模板,将测试要求转换为适合 LLM 理解的提示信息。例如,当检测价格数据时,提示模板会引导 LLM 准确识别原价、折扣和折后价等信息。同时,ICL 技术通过提供示例案例,增强 LLM 对任务的理解能力,使其能够处理各种自然语言表达形式的数据,如不同格式的折扣描述(“$8.3 Off”、“60% Off” 等),从而准确提取目标数据。
- 一致性验证组件
- 该组件主要对提取的目标数据进行一致性验证。对于数值数据,如价格数据,它根据预先定义的公式(如折后价 = 原价 ×(1 - 折扣))进行计算验证。对于语义信息,如产品类别与实际是否相符的判断,它构建 COT 提示并利用 LLM 的理解和推理能力进行分析。例如,判断 “SingBar Karaoke TV” 是否应属于 “Massage” 类别时,通过 LLM 对产品名称和类别语义的理解来确定两者是否一致,从而判断数据是否存在不一致性错误。
输出结果
- 经过上述三个组件的协同工作,AutoConsis 最终输出检测结果。**如果页面中存在数据不一致性错误,结果将详细指出哪些数据之间存在不一致以及错误的类型等信息,帮助测试人员快速定位和解决问题。**若未检测到不一致性错误,则表明页面数据在检测范围内是一致的,从而确保了移动应用数据的准确性和一致性,提升了用户体验,也体现了 AutoConsis 工具在数据不一致性检测方面的有效性和实用性。
GUI Sub-region Recognition
模型选择与原理
商业移动应用中 GUI 子区域描述的困难
在商业移动应用(如美团应用)中,存在很多 GUI 子区域无法简单地用简短文本准确表述。例如图 1 (b) 中的 “Product Card”(产品卡片),**其包含的信息和布局复杂,仅用简短文本难以完整且精准地描述其特征和内容,而且不同业务线(如酒店预订、出租车预订、食品配送等)或不同商家的页面可能在元素排列、颜色搭配、字体样式等方面存在显著差异,**导致难以制定通用的规则来准确找到目标数据所在区域,这给传统的依赖文本描述的方法带来了挑战。
预训练 CLIP 模型的局限性
预训练的 CLIP 模型在处理这类任务时面临困难,因为它通常需要明确的文本描述来进行操作。当 GUI 子区域难以用文本精确描述时,模型难以直接根据文本信息准确识别和定位这些子区域,无法有效完成在商业移动应用中识别包含目标数据子区域的任务。
人类多模态识别模式的启发
**人类用户在识别这些 GUI 子区域时,能够同时利用图像和文本信息,轻松地找到目标区域。**例如,人们可以通过观察产品卡片的视觉外观(如图像布局、颜色、图标等)以及相关的文本提示(如附近的标签、按钮文字等)来确定其位置和内容。
AutoConsis 的解决方案
**受人类这种多模态识别模式的启发,AutoConsis 采用了修改后的 CLIP 模型,增加了一个图像输入维度。如图 4 所示,对于任何给定的 GUI 截图,AutoConsis 允许同时使用文本查询(T)和图像(V)作为组合搜索标准。这样,模型就可以像人类一样,综合考虑图像和文本信息,更准确地识别出包含目标数据的 GUI 子区域。**这种改进后的模型设计更适应商业移动应用中 GUI 页面的复杂情况,有望提高数据不一致性检测的准确性和效率。
**CLIP(Contrastive Language-Image Pre-training)即对比语言 - 图像预训练,是由 OpenAI 开发的一种多模态(文本和图像)预训练模型。**它通过学习如何对文本和图像进行对比,从而实现跨模态的理解。
CLIP 模型的核心思想是将文本和图像嵌入到一个共同的语义空间中,使得相关的文本描述和图像内容在这个空间中的表示彼此靠近,而不相关的则远离。这种设计使得 CLIP 能够在各种任务上表现出色,如图像分类、图像检索、文本分类等。
CLIP 模型的特点包括:
- 多模态嵌入:将文本和图像分别嵌入到一个共享的多维空间中,该空间能够捕捉文本描述和图像内容之间的语义关系。
- 对比学习:使用对比学习的方法来训练模型。在对比学习中,模型被要求将相关的文本描述和图像内容映射到空间中的相邻位置,而不相关的则映射到远离的位置,以便模型学习区分相关和不相关的文本 - 图像对。
- 大规模训练数据:使用大规模的文本和图像数据集进行预训练,这些数据是从互联网上收集而来的,包含了各种不同的文本描述和图像内容,有助于模型学习到更广泛的语义关系。
- 自监督学习:采用自监督学习的方法,即模型在训练过程中不需要人工标注的标签,而是利用数据集中的文本描述和图像内容之间的自然关联来学习。
- 跨任务应用:由于学习到了文本和图像之间的通用语义关系,因此可以在各种任务上进行微调,表现出色,具有良好的通用性。
CLIP 模型训练分为三个阶段:
- 对比式预训练:使用图片 - 文本对进行对比学习训练;
- 提取预测类别文本特征;
- 进行零样本预测。
在 AutoConsis 工具中,使用修改后的多模态 CLIP 模型来识别包含目标数据的子区域。输入为 GUI 页面截图和测试要求,模型通过计算子区域与文本查询的余弦相似度,输出相似度最高的前 k 个子区域,这些子区域被认为是最有可能包含目标数据的区域,以便后续进行目标数据的提取和一致性验证等操作。
工作流程
Figure 4 展示了 AutoConsis 工具中 GUI 子区域识别部分的工作流程,清晰呈现了如何从输入的 GUI 页面截图中准确识别出包含目标数据的子区域,具体流程如下:
输入准备
首先,获取 GUI 页面截图,该截图可以来自商业移动应用(如美团应用)的任意业务页面,包含各种布局和元素。同时,接收测试要求,测试要求明确指定了需要识别的目标数据类型,例如 “提取商品价格信息” 或 “查找产品名称所在区域” 等。
生成子区域
AutoConsis 通过滑动窗口技术对需要识别的 GUI 截图生成一系列子区域 S = { s 1 , s 2 , ⋯ , s n } S = \{s_1, s_2, \cdots, s_n\} S={s1,s2,⋯,sn}。这一步骤是将整个 GUI 页面划分为多个较小的区域,以便后续对每个区域进行分析和判断,确定哪个区域最有可能包含目标数据。例如,在一个商品展示页面中,滑动窗口可能会依次覆盖商品图片、价格、描述等不同部分,将其划分为多个子区域。
编码处理
- 子区域编码:每个子区域 s i s_i si都要通过 CLIP 模型的图像编码器进行处理,得到其对应的嵌入向量 E i E_i Ei。这个嵌入向量能够以一种数学形式表示子区域的图像特征,便于后续计算相似度。
- 图像与文本编码:同时,输入图像 V V V(这里可能是原始的 GUI 页面截图或者与任务相关的其他图像信息)也使用相同的图像编码器被编码为 E v E_v Ev;文本查询 T T T(例如 “提取商品价格信息” 等测试要求)则通过 CLIP 的文本编码器被编码为 E t E_t Et。这样,图像和文本都被转换到了一个相似的嵌入空间中,为计算它们之间的相似度奠定了基础。
目标子区域识别
- 由于 CLIP 模型的特性,它能够将文本和图像映射到相似的嵌入空间,使得可以通过计算嵌入向量之间的余弦相似度来衡量它们的相关性。AutoConsis 通过计算每个子区域 s i s_i si的嵌入向量 E i E_i Ei与文本查询的嵌入向量 E t E_t Et以及输入图像的嵌入向量 E v E_v Ev的余弦相似度之和,来确定哪个子区域与目标数据的相关性最高。具体公式为k = arg max_{i = 0}^{n}(\cos(E_i, E_t) + \cos(E_i, E_v)),其中 k k k表示具有最高综合相似度得分的子区域索引。最终,这个索引对应的子区域 s k s_k sk就是确定的目标子区域 T a r g e t m u l t i − m o d a l Target_{multi-modal} Targetmulti−modal,即最有可能包含目标数据的区域。例如,如果一个子区域在图像特征上与输入图像相似(通过 cos ( E i , E v ) \cos(E_i, E_v) cos(Ei,Ev)衡量),并且其文本信息也与文本查询相关(通过衡量),那么它的综合相似度得分就会较高,更有可能被选为目标子区域,后续将从这个区域中提取目标数据进行一致性验证等操作。
Target Data Extraction
由于 GUI 页面上的目标数据通常以自然语言文本短语的形式呈现,且表达方式多样,这给自动提取带来了困难。为了解决这个问题,AutoConsis 借助了大语言模型(LLM)。
根据测试要求,测试工程师应首先定义与该要求相关的目标数据。然后AutoConsis 将刚才上一步识别到的目标子区域中的文本短语和目标数据作为输入。通过提示模板,AutoConsis 引导大语言模型从文本短语中准确提取目标数据。
Chain-of-Thought Prompt Template
测试工程师首先明确地定义需要提取的目标数据(例如商品价格、名称等)。然后 AutoConsis 利用精心设计的 COT(Chain-of-Thought,思维链)提示模板,将测试要求转换为提示信息,引导 LLM 从文本短语中进行数据提取。
思维链(Chain-of-Thought,COT)是一种在自然语言处理中用于引导模型进行推理和解决复杂问题的方法。
使用思维链提示模板的好处在于,它可以引导 AI 进行多步骤的推理。以计算购买一定数量的书和笔的总花费为例,传统响应可能直接给出答案 “总花费将是$49”,而使用思维链响应时,生成的提示会促使模型逐步进行推理:首先计算书的成本,每本书$15,买 3 本,得出书的成本是$45;接着计算笔的成本,每支笔$2,买 2 支,得出笔的成本是$4;最后将两者相加,得到总花费$49。
这样的思维链提示模板有助于模型更清晰地理解任务要求,按照逻辑步骤进行思考和解答,尤其适用于需要多步推理的任务,如数学问题、逻辑推理、编程挑战等,减少错误并提高结果的准确性和连贯性。
当面对 GUI 页面上以自然语言文本短语形式呈现且表达方式多样的目标数据时,思维链通过一系列逻辑步骤来引导大语言模型(LLM)进行思考。COT 提示首先引导大型语言模型从文本短语中提取与目标相关的所有短语。随后,根据测试需求,COT 提示引导大型语言模型进行更好的区分。
例如,在提取商品价格数据时,思维链会指导 LLM 先分析文本中与价格相关的关键词,如 “原价”、“折扣”、“折后价” 等。然后,根据这些关键词以及上下文信息,进一步确定具体的价格数值。如果文本中提到 “商品原价为 100 元,现打 8 折”,思维链会引导 LLM 理解先找到原价 “100 元”,再根据 “8 折” 计算出折后价为 “80 元”。
通过这种逻辑推理过程,思维链使得 LLM 能够模拟人类的思考方式,更好地处理复杂的自然语言信息,从而更准确地从文本中提取出目标数据,提高了数据提取的准确性和可靠性,有效应对商业移动应用中数据处理的挑战。
In-context learning
同时,为了增强 LLM 对应用测试的理解,减少错误,该部分还采用了 ICL(In-Context Learning,上下文学习)技术。即通过提供相关的示例案例(例如已正确提取价格数据的例子),帮助 LLM 更好地理解任务要求,从而能够更准确地从各种不同的自然语言表达中提取出目标数据。例如,它可以从 “$8.3 Off”“60% Off” 等各种形式的折扣描述中准确提取出折扣值。
ICL(In-Context Learning,上下文学习)技术基于这样一种理念,即向模型展示少量示例(如成功提取目标数据的案例),可以帮助模型更好地理解任务要求和应对不同情况。在实际操作中,例如在从商业移动应用的 GUI 页面提取数据时,会向大语言模型(LLM)提供一些已完成的正确数据提取示例,这些示例包含了不同类型的自然语言文本短语以及对应的准确提取结果,如从各种格式的价格描述(“$8.3 Off”、“60% Off” 等)中提取出正确的折扣值,或者从包含商品名称、价格、属性等信息的复杂文本中准确提取出目标数据。
上下文学习通常与思维链提示模板相结合使用。思维链提示模板为模型提供了逻辑推理的框架,指导模型按照一定步骤进行思考,如在提取价格数据时,先识别相关关键词,再进行计算等。而上文学习则为模型提供了实际的案例参考,让模型在这个框架下,依据示例中的模式和方法去处理新的输入数据。例如,在计算商品折扣后的价格时,思维链提示模板规定了计算步骤,上下文学习中的示例则展示了不同折扣形式(如直接减价、百分比折扣等)在实际文本中的呈现方式以及如何准确提取和计算,两者协同作用,增强了模型对任务的理解和处理能力。
在 AutoConsis 的目标数据提取场景中,通过提供相关示例,模型可以更快地适应不同的自然语言表达方式,减少错误的发生,提高数据提取的准确性和效率。例如,当面对新的商品页面文本,模型可以参考之前示例中对类似文本结构和表达方式的处理方式,更准确地识别和提取目标数据,从而更好地支持商业移动应用中数据不一致性检测等工作,确保数据的准确性和可靠性,提升整个应用的数据处理质量。然而,也需要注意,上下文学习也可能存在一些局限性,例如对示例的选择和数量较为敏感,如果示例不具有代表性或者数量过多可能会影响模型的性能和处理速度,但总体而言,在合适的应用场景下,它是一种非常有效的技术手段。
Figure 5 展示的思维链提示示例中,思维链提示引导模型逐步进行推理。首先,明确原价为 50 元,接着指出折扣后的价格为 20 元,然后通过两者的差值计算出节省的金额,即 50 - 20 = 30 元。最后,计算折扣率,用节省的金额除以原价,即 30 ÷ 50 = 0.6,也就是 60% 的折扣。
Consistency Verification
每个不一致性测试要求都包括目标数据应满足的关系。例如,在价格不一致性测试中,当前价格应等于原价减去折扣值。在识别出所有目标数据后,AutoConsis 基于这些关系进行一致性验证。
商业移动应用程序中实际上有两种类型的数据,即数值和人类语言中的语义信息。对于数值,AutoConsis 通过给定测试要求中的公式来验证其一致性。另一方面,对于语义信息,AutoConsis 利用 COT 机制构建 Prompt,并依赖大语言模型的理解和推理能力。
Figure 6 展示了用于验证Figure 1 (b) 中类别不一致的Prompt:
这个 Prompt 的核心作用是引导模型对提取的目标数据进行语义层面的一致性检查。它可能包含了明确的指令或问题,指导模型依据一定的规则和逻辑来评估数据的一致性。比如,对于一个商品,模型需要根据 Prompt 来检查其名称所暗示的特征是否与价格范围、属性描述等在语义上相符。如果商品名称表示是一款高端电子产品,但其价格极低且属性描述与高端产品不相符,模型通过这个提示就能识别出这种语义上的不一致。
这个 Prompt 还会涉及到对数据完整性的检查,确保所有关键的语义信息都已被正确提取并且在逻辑上是连贯的。它为模型提供了一个框架,使其能够按照统一的标准来分析和验证数据,从而提高数据的准确性和可靠性。例如,在商业移动应用的数据处理中,如果提取了商品的名称、价格、属性等多方面的信息,该提示会要求模型判断这些信息在语义上是否相互匹配、合理。
评估(Evaluation)
In this section, we evaluate the performance of AutoConsis by answering the following research questions.
- RQ1: How effective is AutoConsis in recognizing diverse GUI sub-regions pages compared with the existing approach?
- RQ2: What are the impacts of different parts in the prompt design of AutoConsis?
- RQ3: To what extent can AutoConsis detect inconsistency bugs in practical commercial mobile apps?
RQ1 评估了 AutoConsis 的多模态模型的有效性,考察了其在从 GUI 截图中进行子区域识别的准确性和效率。
RQ2 利用差异测试的思想(消融实验)来评估 AutoConsis 的提示设计的不同部分的影响。
RQ3 构建了一个包含 30 个不一致错误的数据集,模拟实际场景以评估 AutoConsis 在数据不一致错误检测中的可用性。
Evaluation Setup
Dataset
**由于 AutoConsis 是第一个用于商业移动应用程序的自动数据不一致检测工具。因此目前没有适用于同一目的的公开可用数据集。**尽管在美团内部可以获得大量收集的数据,但是对这些数据进行标注需要大量的人工努力。**因此在评估过程中使用了来自美团应用的一个小数据集来验证 AutoConsis 的设计有效性。**在第 5 节中将讨论在生产环境中使用大量数据的情况。
**在工业实践中,广告页面通常与交易相关,这是商业应用程序最关键的功能。**然而,由于商业应用程序的频繁更新,这些页面通常测试覆盖率较低。例如,广告页面上的价格不一致导致了美团的几个漏洞。鉴于广告页面中的数据不一致漏洞不仅易于理解,而且具有迫切的测试需求,在本节中,我们选择广告页面来评估 AutoConsis 的性能。
**在实践中,从美团的三个不同零售业务(餐饮券、门票和团购,即一种限时抢购活动)中随机收集了 130 张广告页面截图。**在美团,这三个业务都出现了当前价格与原价减去折扣值不一致的漏洞。因此,广告页面的目标数据是原价、折扣值和当前价格。
具体来说,**使用了 100 张截图来测试 AutoConsis 的性能,而其余 30 张截图将用于生成上下文学习的示例提示。对于每张截图,我们手动挑选出目标子区域,然后从其中选择目标数据。**为了尽量减少注释过程中人为因素的影响,本文的两位作者独立地注释这些截图。如果他们的意见不一致同样,另一位作者也会加入,然后三个人可以做出最终决定。
Baselines
**如第 3.2 节所示,传统的图像对象检测方法(即 YOLOX 和 YOLOv7)不适用于多样化的图形用户界面(GUI)页面。**因此,我们将仅文本的 CLIP 模型和仅图像的 CLIP 模型用作 AutoConsis 的图形用户界面子区域识别部分的基线。具体而言,仅文本的 CLIP 模型采用文本查询(T)从给定的图形用户界面截图中找到图形用户界面子区域。仅文本的 CLIP 模型的工作流程与 AutoConsis 相同,只是图像查询(V)已被移除。因此其目标子区域
T
a
r
g
e
t
t
e
x
t
Target _{text}
Targettext通过以下公式计算:
k
=
a
r
g
m
a
x
i
=
0
n
(
c
o
s
(
E
i
,
E
t
)
)
T
a
r
g
e
t
t
e
x
t
=
s
k
k = arg max _{i = 0}^{n}(cos(E_{i}, E_{t})) \\Target _{text}=s_{k}
k=argmaxi=0n(cos(Ei,Et))Targettext=sk
同样,仅图像的 CLIP 模型保留图像查询(V),同时去除文本查询(T)。其目标区域
T
a
r
g
e
t
i
m
g
Target_{img}
Targetimg 表示为:
k = a r g m a x i = 0 n ( c o s ( E i , E v ) ) T a r g e t i m g = s k k = arg\ max_{i = 0}^{n}(cos(E_{i},E_{v}))\\Target_{img}=s_{k} k=arg maxi=0n(cos(Ei,Ev))Targetimg=sk
为了评估 AutoConsis 的 COT 提示模板的有效性,将零样本提示和标准 ICL 提示作为基线:
如 Figure 7 所示,**在标准 ICL 提示中,示例提示中的答案是直接给出的。通过与标准 ICL 进行比较,我们可以评估 AutoConsis 中 COT 设计的有效性。**使用仅包含文本短语和目标数据名称的0 - shot(零样本学习),旨在研究 ICL 中示例提示的好处。
提示词工程(Prompt Engineering)是指在使用语言模型(如大语言模型)时,通过精心设计和优化向模型提供的提示词(Prompts),以引导模型生成更符合期望、更准确和有用的输出的过程。
RQ1: Performance of GUI Sub-region Recognition
论文通过一项消融研究,来评估 AutoConsis 的多模态模型在 GUI 子区域识别过程中的有效性。具体是将 AutoConsis 与其两个变体(即基线)——仅文本的 CLIP 模型和仅图像的 CLIP 模型进行比较。
将缺失的目标子区域定义为假阴性(FN),将识别出的无目标数据的子区域定义为假阳性(FP),我们使用准确率(P)、召回率(R)和 F1 分数(F)来呈现三种模型的性能。
Precision(精确率)
精确率是指模型预测为正例的样本中,真正为正例的比例。
Recall(召回率)
召回率是指实际为正例的样本中,被模型预测为正例的比例。
F - measure(F 值)
F 值是综合考虑精确率和召回率的指标,它可以更全面地评估模型的性能。常见的是 F1 值,其计算公式为 F 1 = 2 ∗ ( P ∗ R ) / ( P + R ) F1 = 2 * (P * R) / (P + R) F1=2∗(P∗R)/(P+R)。
如 Table 1 所示,在这三个模型中,多模态 CLIP 模型达到了最高的 F1 值,而纯文本CLIP 模型性能最差。Table 1 表明图像和文本都可以提供有用信息,并且可以相互补充。因此AutoConsis 的多模态输入设计引入了更大的信息丰富度,从而增强了的识别结果。
RQ2: Effectiveness of Prompt Design
论文为了展示为 AutoConsis 设计的 COT Prompt Template 的有效性,将 AutoConsis 与其两个变体(即标准 ICL 提示和零样本提示)进行比较,并通过一个目标数据提取任务进行测试。
ChatGPT 生成输出后,论文从数据和产品两个角度评估准确性。具体来说,鉴于每个子区域都包括一张产品照片及其相应的文本描述,首先计算有多少产品的所有三种价格都被正确提取出来,记为 Acc。此外,从目标数据的角度来看,论文中还利用精确率(P)、召回率(R)和 F1 分数(F)来表示价格数据提取的准确性。
Accuracy(准确率)
表示所有三种价格都被正确提取出来的样本数占总样本数的比例。
Precision(精确率)
精确率是指模型预测为正例的样本中,真正为正例的比例。
Recall(召回率)
召回率是指实际为正例的样本中,被模型预测为正例的比例。
F - measure(F 值)
F 值是综合考虑精确率和召回率的指标,它可以更全面地评估模型的性能。常见的是 F1 值,其计算公式为 F 1 = 2 ∗ ( P ∗ R ) / ( P + R ) F1 = 2 * (P * R) / (P + R) F1=2∗(P∗R)/(P+R)。
Table 2 展示了不同提示的性能。零样本提示的输出表现最差。这是因为零样本提示导致大型语言模型生成许多错误的 “目标数据”,同时遗漏了一些真实的目标数据。标准的少样本提示(ICL)优于零样本提示,这表明提示中的示例案例可以帮助大型语言模型理解当前任务。随着思维链(COT)机制的加入,AutoConsis 具有最佳性能,这表明思维链示例可以有效地指导大型语言模型处理复杂的逻辑任务。
RQ3: Inconsistency Bugs Detection
不一致性检测实验
基于美团的历史漏洞,本文的两位作者通过修改图形用户界面截图,手动创建了 30 个数据不一致性漏洞(每个业务 10 个漏洞),方法是更改 30 个产品的原价、折扣或现价中的任意一个或两个。为了评估 AutoConsis 在正确情况下的误报率,为每个业务随机选择了 40 个当前价格一致的产品。因此用于 RQ3 的数据集包含 20% ( 30 / ( 40 * 3 + 30 ) = 20%)的漏洞案例。
随后测试了 AutoConsis 是否能够完全检测出这 30 个错误,并检查是否存在任何误报。
Table 3 展示了检测结果(“#Rec.”代表由 AutoConsis 识别的错误数量)。AutoConsis 在 30 个错误案例中成功检测出 28 个有问题的页面,召回率达到 93.3%。这些未被识别的案例的主要原因是大型语言模型过度依赖其推理能力,并且在目标数据提取过程中偶尔会修改错误的价格。
误报分析
如 Table 3 所示,AutoConsis 的输出中有 5 个误报(FP)案例。鉴于三个价格数字的一致性认证可以通过一个简单的数学公式进行,所有这些误报案例都是由目标数据提取过程中的错误引起的。具体来说,由于多模态 CLIP 模型创建的虚假子区域可能因其不规则位置而被解析,所有这些误报案例都是由大型语言模型的错误引起的。
在行业实践中,需要人工验证的误报(即误报率,FPr)的比例至关重要。在部署 AutoConsis 之前,工作者邀请了美团的测试工程师来评估其可行性。鉴于 AutoConsis 结果中的误报率较低,并且识别一个误报最多比常规情况多花三倍的时间,估计 AutoConsis 可以将数据不一致性测试中的人工工作量减少 87%。
案例研究与讨论
AutoConsis 的每个部分都是在美团内部开发的,现在已集成到一个自动化测试平台中,以便测试工程师轻松访问。在调用 AutoConsis 时,工程师需要提供要测试的页面列表、几个子区域的示例以进行自动 UI 预处理,并完成目标数据分析的 COT 提示模板的缺失部分。有了这些信息,AutoConsis 就可以在所有页面上自主进行数据不一致性检测。
本节将介绍一些案例,以展示 AutoConsis 在美团商业移动应用测试中的实际好处。
案例 1:虚假广告检测
以美团应用程序中客户的购物流程为例。客户通常首先被如 Figure 8 (a) 所示的广告页面上的产品和价格所吸引。通过点击广告卡片,他们进入如图 Figure 8 (b) 所示的产品详情页面以查看产品的更多信息。然后,在下单页面上,客户将选择产品数量并确认最终价格。通常最终价格是通过从产品的原价中减去折扣来计算的。如果广告页面和下单页面之间存在价格不一致(即虚假广告),这将严重影响用户体验,损害公司声誉,并导致客户流失。
虽然解决广告订单价格不一致的问题迫在眉睫,但美团为数百个城市和地区的本地商店和景点部署定制广告页面的策略,导致了大量独特的广告页面。这种多样性在历史上使得广泛检测广告订单价格不一致成为一项具有挑战性的任务。
因此,AutoConsis 首先被部署用于对广告订单价格不一致进行自动检测。具体来说,从超过 754 个不同的城市或地区收集了 5000 个广告页面。对于每个广告页面,AutoConsis 首先识别所有的广告卡片(即一个产品的广告),并找出每个广告卡片上的当前价格 P r i c e A D Price_{AD} PriceAD。然后,通过 Android Debug Bridge(adb)工具点击 Get 按钮,AutoConsis 导航到订单放置页面并提取其中的最终价格 P r i c e o r d e r Price_{order} Priceorder。最后,AutoConsis 通过检查 P r i c e A D Price_{AD} PriceAD是否等于 P r i c e o r d e r Price_{order} Priceorder来进行广告订单价格不一致分析。
**AutoConsis 在 5000 个广告页面中发现了 10 个不同的广告订单价格不一致的错误,其中 8 个错误已被美团的测试工程师确认。**为了防止这些错误再次出现,我们追踪到 8 个 bug 的原因:其中两个是由于 API 响应超时,一个是由不正确的参数传递(缺少参数)引起的,其余五个 bug 是由于广告页面上调用的折扣 API 不足引起的。目前,这八个 bug 都已解决。
案例 2:验证产品类别一致性
鉴于数字只是数据的最简单形式,自然语言概念中的差异可能会导致更复杂的数据不一致错误。与数字数据不一致相比,此类错误更难检测。在过去,它只能通过人工检查来检测。
美团之前出现过一个严重的问题:在“生鲜”零售业务中,许多产品被错误地放置在错误的货架上。如 **Figure 9(a)**所示,牛肉被放在了“蔬菜”货架上。这种奇怪的情况让顾客感到困惑,并降低了当天生鲜业务的正常销售额。经过分析,我们发现,在生鲜业务中,产品不仅有季节性更新,还经常因供应商的促销活动而发生变化。在每次更新中,大多数产品的类别都是手动确定的,这一直导致生鲜业务中产品类别不匹配。
为防止此类产品类别不匹配情况再次出现,我们将 AutoConsis 部署到美团移动应用的购物清单页面,并定期进行产品类别不一致检测。具体来说,**由于排名较高的产品往往更容易被客户频繁查看,我们收集了来自美团应用程序的 GUI 杂货业务中每个货架的前 100 种产品。**AutoConsis 首先识别包含每个产品信息(即产品照片、名称和相应的文本介绍)的图形用户界面子区域。然后,它使用 Figure 5 中的模板构建一个思维链提示,利用大语言模型从每个子区域中提取产品的名称。
然后进行一致性验证过程,确定产品名称和类别之间的一致性需要进行推理,AutoConsis 使用 Figure 6 中的模板构建一个思维链提示,并利用大语言模型来完成此检查。
有效性质疑
一种可能的有效性质疑是,AutoConsis 的设计是否专门针对我们的目标应用程序(即美团中的应用程序),而对其他流行的商业应用程序效果不佳。尽管 AutoConsis 的设计和验证是在美团内部进行的,但以数据不一致为特征的功能缺陷在各种商业移动应用程序中普遍存在。这种表述也是本文的核心贡献之一。此外,通过模仿人类行为,AutoConsis 解决了图形用户界面多样性带来的挑战,这是商业应用程序的一个共同特征。因此,AutoConsis 的设计可以为其他移动应用程序的自动功能测试提供启示。
论文特色(Related Work)
移动应用程序的自动化测试长期以来一直吸引着学术界的兴趣。在文献中,许多基于各种技术的图形用户界面测试方法已被提出[35,40],包括随机测试[7,16,24]、进化算法[25,27]、基于模型的测试[13,34]和系统探索[9,10]。大多数提出的方法使用应用程序异常作为隐含的测试预言,并且只专注于检测非功能性故障,例如崩溃和无响应错误[14,20,33]。然而,移动应用程序中的错误不一定表现为非功能性故障。
为了有效地测试具有复杂多样业务逻辑的移动应用程序,当前的工业实践在很大程度上依赖于手动验证,这会产生大量成本。由于当前应用程序测试的劳动密集型性质,学术界和工业界都花费了大量精力来寻找功能性错误。AppFlow [17]和 CraftDroid [21]利用人工提供的测试方向来查找非崩溃错误。与这些工作不同,AutoConsis 不需要这样特定的测试方向,从而减少了人工干预。
也有一些工具专注于特定类别的功能性错误。DiffDroid [11]可以通过比较 GUI 图像或屏幕截图(由相同的 GUI 测试探索)来检测设备或特定平台的错误。SetDroid [36]可以为 Android 应用程序中与系统设置相关的非崩溃缺陷生成自动化测试预言,而 ACETON [18]专注于能源错误的自动检测。与这些方法不同,AutoConsis 专注于对移动应用程序中的所有功能都不可或缺的数据。通过模仿人类识别的过程,AutoConsis 能够检测各种数据不一致错误。
鉴于其庞大的知识基础和逻辑推理能力,大型语言模型(LLMs)在移动应用测试中也得到了广泛应用。DroidBot-GPT [44] 和 AutoDroid [43] 利用大语言模型生成的 UI 操作来进行 Android UI 自动化。QTypist [22] 专注于为移动应用的表单页面生成语义文本输入。**与这些工具不同,AutoConsis 可以直接检测复杂移动应用(例如,流行的商业应用)中的功能错误。**此外,通过对数千个实际 GUI 页面的案例研究,我们证明了 AutoConsis 可以有效降低工业实践中功能错误检测的人工成本。
广泛的案例研究表明,使用AutoConsis检测复杂商业应用程序的数据不一致错误具有实际优势,AutoConsis 是一个具有自己特色和实用价值的工作。
Conclusion
本文提出了AutoConsis,一种自动检测移动应用程序数据不一致错误的方法。为了从GUI页面中提取目标数据,AutoConsis采用了一种特殊定制的CLIP模型来识别包含目标数据的GUI子区域。然后,AutoConsis构造了一个COT提示,并在LLM的帮助下提取目标数据。最后,AutoConsis通过验证这些目标数据之间的关系来检测不一致错误。我们的实验表明,AutoConsis在从GUI页面中提取数据方面优于其他方法。此外,广泛的案例研究表明,使用AutoConsis检测复杂商业应用程序的数据不一致错误具有实际优势。