在移动众包测试中,众测工人的水平通常与测试专家相距甚远,因此提交的测试报告质量低下。由于测试报告很难阅读,这样的报告对于审查和理解Bug毫无帮助。为了简化对Bug场景的理解,我们提出了一种称为BIU(Bug Image Understanding,Bug图像理解)的新颖方法,该方法使用图像理解技术来帮助众测工人自动检测Bug并利用Bug截屏生成相关描述。这样,可以减轻群众工作人员的负担,大大提高工作效率和测试报告的质量。我们的贡献如下。
(1)我们基于一种新颖的图像理解技术,提出了一种称为BIU的Bug检测方法。它会根据给定的截屏生成适当的Bug报告。据我们所知,以前还没有这样的工作可以直接从截屏中检测Bug。
(2)我们将此方法实现为了一个工具。在我们的实现中,我们采用的Bug描述神经网络是完全可训练的,并使用了图像配字的最新方法。
(3)我们开展了一些初步的实验来评估BIU的效果,并发现它在大多数情况下都表现良好。
一、介绍
多年来,众包测试已在移动应用程序测试中得到普及。在移动应用众测中,典型的测试报告包括报告编号、日期、个人信息、待测应用程序、运行环境的信息、Bug描述、Bug截屏等。在所有这些元素中,Bug描述是最重要但存在问题的一部分。
首先,存在无意义的Bug描述。尽管各类报告质量的检测方法非常有效,但一些众测工人仍然会提交无意义的Bug描述,以尝试通过较少的工作获得更多回报。其次,Bug描述中可能存在不相关的单词和短语。在填写描述时没有硬性规定,这使得众测工人可以不受限地填写。第三,正如张涛等人指出,与台式机上的软件的测试报告相比,移动应用程序的测试报告的描述往往不充足[11]。尽管测试任务是由多个众测工人完成的,但每个众测工人也有多个任务要做,因此每个任务的时间大大缩短。考虑到测试任务的时间有限,再加上在移动设备上单词输入的不便,他们不愿意编写详细的Bug描述。但是,实际上,由于在移动设备上进行截屏很方便,因此移动应用程序的测试报告通常包含大量截屏,这对于揭示相应的Bug很有帮助。
鉴于上述移动应用程序众包测试报告的问题和功能,从截屏中检测Bug对于提高测试报告的质量十分必要。通过Bug检测,可以生成正确且充足的Bug描述,而众测工人将失去写无意义的文本和无关单词的动机。他们剩下的唯一工作就是在描述不够准确时简单地修改描述。
Bug截屏总是包含大量文本和组件形式的信息,其中一部分与Bug有关,甚至可以揭示Bug。例如许多情况下,在移动应用程序中发生某些错误时,会弹出出错消息。此类出错消息可能表明此应用程序存在潜在的Bug。此外,截屏还可以清楚地反映出组件渲染和布局问题。利用截屏中与Bug相关的信息,可以检测出其中的Bug。
在本文中,我们提出了一种通过图像理解技术从截屏中检测Bug的新颖方法。它利用截屏中的文本和组件信息来检测潜在的Bug。BIU可以将截屏翻译成几个句子来描述Bug,且在截屏中存在文本消息的情况下,它使用文本识别方法来提取文本信息。它汇总了图像翻译部分和文本识别部分的结果,从而进一步提高了生成的描述的准确性。
二、相关工作
许多研究人员做了扎实的工作,为我们理解图像铺平了道路。对于文本信息,光学字符识别(OCR)技术已成功应用于工业和我们的日常生活中,借助该技术,我们可以轻松地从截屏中提取所有文本以进行进一步处理。对于截屏中的非文本信息,有必要从图像中提取特征。颜色梯度直方图可以提取图像的颜色特征,而尺度不变特征转换(SIFT),加速稳健特征(SURF)和定向的FAST和旋转的BRIEF(ORB)可以从图像中有效地提取有关“角”的特征[6][2][8]。此外,空间金字塔匹配(SPM)是一种从图像中提取空间金字塔作为特征的高级方法[5]。与其他传统特征相比,空间金字塔包含的信息更多,并且可以提高图像分类的准确性。但是,与上述传统方法相比,基于深度学习的方法可以进一步提高准确性。卷积神经网络(CNN)的自主学习机制能够比传统方法提取更为丰富的特征[1]。
一些研究人员在众包测试领域中使用了图像理解技术。冯洋等人提出了一种报告检测方法,该方法在截屏上应用SPM方法,并与文本处理方法结合,以便对测试报告进行优先级排序[10]。同样,王俊杰等人提出了一种使用SPM测量的截屏相似度以及文本距离来检测重复报告的方法[4]。郝蕊等人开发了一种报告整合工具,该工具使用同样的图文组合相似性来汇总和总结重复的报告[7]。但是,所有这些工作都只是衡量截屏之间的相似性,而没有处理截屏中蕴含着的Bug信息。
三、方法
BIU旨在根据Bug截屏生成Bug报告。图1简单说明了BIU的工作。 它由3个主要部分组成:图像翻译、文本提取和描述汇总部分。 图像翻译部分提取截屏的特征向量,并使用该向量生成若干Bug描述。文本提取部分提取截屏中的所有文本信息,并使用预定义的关键字列表过滤与Bug相关的文本。接着在描述聚合部分使用文本聚类方法聚合生成的描述,并根据聚类产生Bug报告。 以下各节说明了这些部分的详细信息。


图1:一个BIU工作示意图
3.1 图像翻译
图像翻译部分旨在将Bug截屏翻译成若干可能的描述。这是一个特定的图像配字模型,经过训练,该模型可以始终生成Bug描述,而不是图像的常规描述。类似于机器翻译中的编码器-解码器结构[3],图像翻译部分包括一个截屏编码器和一个Bug描述解码器,其中截屏编码器从截屏中提取Bug特征,Bug描述解码器根据这些特征从编码器生成描述。
在图像翻译部分的实现中,我们采用im2txt模型,该模型是当前最先进的图像字幕模型。截屏编码器是一个深度卷积神经网络(CNN)。考虑到效率,我们使用预训练的Inception-v3模型作为截屏编码器。最后一个全连接层中的输出特征向量用于初始化解码器。
对于解码器,若用I表示输入图像的特征,用S表示正确的Bug描述,则解码器的目的是找到参数θ以便最大化以下函数:


递归神经网络(RNN)可以有效地最大化上述目标函数。因此,解码器是一个长期短期记忆(LSTM),它被训练为Bug描述语言模型。众所周知,梯度消失和梯度爆炸是与RNN相关的最大挑战,而LSTM可以有效应对这一挑战。在训练阶段,描述中的每个单词将被输入到单词嵌入层,以生成相应的单词嵌入,作为后续LSTM的输入。一个softmax层被添加在LSTM之后,以在Bug描述中生成下一个单词预测。我们使用Beam大小为3的BeamSearch方法来生成Bug描述。
3.2 文本提取
文本提取部分的目的是识别截屏上与Bug直接相关的文本,并将其用作可能的Bug描述。此部分由字符识别器和关键字过滤器组成。字符识别器从截屏中提取文本,然后使用关键字过滤器过滤与Bug相关的文本,作为可能的Bug描述。
在字符识别器的实现中,我们应用了光学字符识别(OCR)技术,因为当前的OCR技术通常可以准确地识别图像上的所有字符。当前,许多公司提供的OCR API通常比大多数开源OCR实现更准确。在对不同公司提供的各种OCR API进行初步测试后,我们发现百度OCR API的性能最佳,并且可以准确识别英文和中文文本的混合,这在中文应用程序中最为常见。因此,BIU的文本提取部分使用了百度OCR API。该API的输出是若干提取出来的文本行,其中包含许多与Bug无关的文本,因此必须进一步处理以产生一些Bug描述并计算其概率。
3.3 描述整合
描述汇总部分的目的是将图像翻译和文本提取部分生成的描述汇总到Bug报告中。我们使用文本聚类方法来检索指示不同类型Bug的聚类,并根据聚类大小形成报告。
由图像翻译部分和文本提取部分生成的描述通常彼此相似。这些相似的描述显示出存在特定Bug的可能性更大。因此,我们将这些描述分为几个聚类。


图2:描述整合的工作流程
图2显示了描述聚合部分的工作流程。在这一部分中,我们在单词标记化之后从描述中删除几个停用词。然后,使用词频-逆向文件频率(TF-IDF)方法对其余标记进行向量化。TF-IDF向量化为那些描述中的高频标记分配了更大的权重,这可以提高之后的聚类步骤的准确性。
向量化之后,所有描述都由向量表示,由此可以通过k-means聚类方法将其简单地聚类。尽管k-means方法在处理高维向量方面存在一些弱点,但由于描述数量较少,因此描述向量的维数较低。在大多数情况下,Bug截屏中只有一个或两个Bug,因此由图像翻译部分和文本提取部分生成的描述数量始终很少。k-means聚类方法可以高精度和高效地处理它们。
在我们的实现中,将聚类的数量k设置为2。在对描述进行聚类之后,我们选择其向量与每个聚类中的聚类中心距离最小的描述。由于聚类大小可以反映那些描述聚类的概率,因此我们将按聚类大小的降序将这些选定的描述与其他报告元素一起收集在列表中。最终产生的Bug报告即为BIU的输出。
四、评估
4.1 工具设置
我们的数据集由26387对Bug截屏及其相应的描述组成,这些信息来自百度移动测试中心(MTC)和Mooctest平台。 我们将数据集转换为268个TFRecord文件,并按64:1:2的比例分别将它们分为训练集、验证集和测试集。 训练步骤数设置为10,000。 对于BIU的文本提取部分,我们使用百度公司提供的经过预先训练的OCR接口,考虑到它可以识别图像中的中英文单词的混合文本。
4.2 实验
在训练im2txt模型之后,我们进行了一些初步实验来评估BIU的整体准确性。 我们使用测试集中的100个Bug截屏。 我们采用的评估指标是专家评估。 我们聘请的专家拥有平均约4年的测试经验。专家将BIU生成的Bug描述与每个截屏的正确答案进行比较,以确定所生成的描述是否准确。如果其中任何一个描述都是正确的,则认为它们是正确的。
4.3 实验结果
根据我们的初步实验,BIU的准确性约为90%。通常,我们发现BIU可以在具有某些特征(例如黑屏,闪回等)的截屏上准确地识别Bug。BIU也可发现一些UI渲染的Bug,例如按钮上缺少文本或没有自适应的UI。但是,在Bug与业务逻辑相关的情况下,其效果往往会下降。
BIU可以在包含一定特征的截屏上表现相当出色不足为奇,因为这些截屏很容易解释。困难在于对与UI渲染或业务逻辑有关的Bug的理解。在某些情况下,生成的描述可能包含一些与Bug直接相关的关键字,但它们可能不够通顺或描述得并非十分准确。对于连人类都很难仅根据截屏来识别Bug的情况(例如出现功能性故障的按钮或媒体播放器),其生成的描述也与Bug几乎无关。
五、用户手册
图3展示了BIU的用户界面。 它由4个区域组成,分别在图中用A,B,C和D标记。 区域A显示当前Bug报告的基本信息。 区域B是用户上传Bug截屏的地方。上传后,几秒钟内在C区中会自动生成一些Bug描述。为了展示效果,图像翻译部分和文本提取部分的中间结果也分别显示在了区域C1和C2中。 汇总的输出显示在区域C3中。在生成这些描述之后,用户可以在区域C3中选择一个最准确的描述,然后在区域C4中对其进行进一步编辑。编辑后,Bug报告已完成,用户可以通过单击区域D中的按钮来提交它。


图3:BIU的用户界面图
六、结论
在本文中,我们提出了一种名为BIU的新颖工具,该工具采用截屏理解技术来检测移动应用程序中的Bug,以提高测试报告的质量。 BIU可以通过了解截屏中的文本信息和与组件相关的信息,自动为众测工人生成准确的Bug报告。