论文部分内容阅读
基于动态搜索的Android应用测试方法通过动态搜索Android应用的用户界面状态空间,构建GUI模型,并据此生成测试用例,实现对Android应用的自动化测试。然而传统的深度优先模型搜索策略无法有效处理界面回路问题,造成部分界面的丢失,导致生成的GUI模型不完整。同时,在建模过程中人们一般使用随机生成的字符串或测试人员设置的字符串填充Android应用表单参数,导致对应用表单测试不充分。针对测试方法中存在的问题,本文提出一种基于记录栈的深度优先模型搜索策略,使用栈记录已搜索到的应用界面,以此识别界面回路,避免界面状态的丢失,保证模型完整性。为了提高表单测试的充分性,本文还提出基于约束的两两组合方法生成表单参数测试数据,该方法对Android应用表单参数进行约束分析,使用等价类划分确定参数可选值,实现对参数取值的二维组合覆盖,避免了无效参数数据的生成。在上述工作基础上,本文实现了Android应用自动化测试工具FectDroid,并选择了30个开源Android应用进行实验研究。实验结果表明:(1)基于记录栈的深度优先模型搜索策略可提高GUI模型的完整性。该策略对手工生成GUI模型的节点覆盖率为85.6%,边覆盖率为77.4%,高于传统的深度优先搜索策略;(2)基于约束的两两组合方法可生成较少的测试用例,相较于无约束两两组合方法,测试用例数减少了15.5%,并且实现了对手工生成GUI模型更高的节点和边覆盖,整体效果优于其他组合方法;(3)与其他测试工具相比,FectDroid实现的节点覆盖率平均增加了55.88%,边覆盖率平均增加了48.4%,代码覆盖率平均增加了23.2%。这主要是因为FectDroid构建的GUI模型以屏幕界面为节点,并对界面回路进行有效处理,使得生成的GUI模型更加完整。其次FectDroid使用的表单参数测试数据生成方法可以有效覆盖参数不同取值,实现更高的代码覆盖率;(4)与其他工具相比,FectDroid在合理的测试时间内探测到了75个应用错误,远多于其他工具探测到的错误数量。这表明FectDroid具有更强的错误探测能力。