论文部分内容阅读
近年来,随着移动互联网的迅速发展,在应用市场上出现了越来越多的App。Android由于其开源的优势,吸引了更多的开发者。然而由于开发者的水平参差不齐,应用市场上出现了越来越多的劣质App。为了提升用户体验、提高用户粘合度,App开发团队对软件测试尤为关注。为了提升测试效率以及准确度,Android自动化测试被广泛运用。现如今因为手机App的主要程序逻辑主要集中在UI展示方面,UI部分的代码产生问题的比率越来越大,所以Android UI自动化测试技术在工业界以及学术界被广泛研究。目前自动化UI测试输入生成技术是研究的热点之一,通过该技术可以实现模拟用户操作并产生测试截图。为了验证截图的正确性,需要人工进行审查。由于测试过程中将产生大量的截图,测试人员在审查过程中难免产生疲倦疏忽,导致测试效率低下。为了节约测试人员审查截图的人力成本以及时间成本,并且让测试人员能够高效地识别截图中的UI错误,本文设计并实现了基于机器学习的Android UI错误自动化检测系统UIChecker。UIChecker利用开源社区较为成熟的两个自动化UI测试工具Maxim以及UIAutomator2,通过自动化以及人工方法截获Android应用程序在运行时的大量截图及其控件布局文件,然后通过提取控件的文本与图像的特征,进一步建立文本以及图像相关控件的错误分类模型,对控件的错误进行检测。本文给出了文本密集型App以及图像密集型App的定义,UIChecker针对不同类型的App会建立自适应错误控件分类模型来提高检测错误的准确性。本文给出了控件间共生关系以及相互依存关系的定义。UIChecker提取了截图中具有父子关系、兄弟关系的控件对信息,采用Wilson Score排序算法进一步提取控件间的相对位置关系、共生关系以及相互依存关系并生成断言表,通过分析控件间的关系来检测更多的UI错误。本文实验首先选取了五个闭源App以及五个开源App,并人工对其注入了一些错误。实验共收集了31278个文本控件以及15834个图像控件,同时收集了255929个存在父子关系的控件对以及443980个存在兄弟关系的控件对。UIChecker在测试集上对于错误的文本和图像控件预测准确率分别平均达到97.85%和96.46%。其次选取了第三方应用市场上的一款真实App,UIChecker对使用压力测试工具产生的App截图进行了检测。对于人工审查所发现的UI错误,UIChecker能够进行比较准确的检测,准确率达到了94.51%。本文还对UIChecker的时间性能进行评测,通过使用UIChecker,测试人员能够大大降低人工审查截图所耗费的人力成本以及时间成本。