论文部分内容阅读
图形用户界面(Graphic User Interface,简称GUI)是大多数软件系统提供给用户的交互接口,其功能正确性直接决定软件质量。GUI测试是检测GUI功能正确性的重要手段,它是一种通过对被测软件GUI元素的测试,验证被测软件的功能实现与规约是否一致的测试方法。在测试资源有限的情况下,对GUI实施准确有效的测试是降低测试成本的一种有效途径。 GUI具有事件驱动特性,事件处理函数完成预期的GUI功能。GUI错误通常由软件开发人员在实现GUI功能关联的事件处理函数时引入,一般可以分为两类,第一类为事件处理函数内部逻辑实现错误,通常由开发人员误解软件需求所致;第二类为事件处理函数间数据依赖关系实现错误,如在一个事件处理函数内错误地设置某个变量,导致在另一个事件处理函数中使用此变量时发生错误,此类错误通常会导致软件异常、程序崩溃等。 当前,GUI测试研究方法主要包括基于模型的GUI测试和基于代码的GUI测试。基于模型的GUI测试通过构造尽可能多的用户操作序列,以期发现GUI错误。由于模型(如事件流图模型或有限状态机模型)无法准确描述事件处理函数的内部执行逻辑以及事件处理函数间的数据依赖关系,生成测试用例以覆盖尽可能多的用户操作序列为目标(而非前述的两类GUI错误),导致难以准确有效地对GUI实施测试。基于代码的GUI测试,主要通过静态分析、符号执行等技术对软件代码进行分析测试,其主要目的是尽可能提高被测软件的代码结构覆盖率,然而,代码结构的高覆盖率并不代表事件处理函数间数据依赖关系的高覆盖率,导致无法有效发现第二类GUI错误。 针对基于模型的GUI测试和基于代码的GUI测试中的问题,根据上述两类GUI错误,本文围绕事件处理函数,从GUI功能实现的角度,分析事件处理函数的内部执行逻辑和事件处理函数间的数据依赖关系,构造事件处理函数图,制定相应的GUI测试覆盖准则;首先研究GUI测试用例生成技术,然后针对GUI测试用例冗余问题,展开GUI测试用例集约简等相关技术研究,以期进一步降低GUI回归测试中的测试成本。主要包括: 1.定义事件处理函数图。分析GUI元素上的事件与事件处理函数之间的关系,依据此关系对GUI元素上的事件进行分类,定义事件处理函数并提出事件处理函数图。 2.制定GUI测试覆盖准则。根据事件处理函数的代码结构特征,提出完整最短路径定义,描述GUI功能的执行逻辑;根据事件处理函数间的数据依赖关系特征,提出完整最短路径上的定义-引用对定义,描述事件处理函数间的数据依赖关系。在这两个定义的基础上,分别制定基于完整最短路径以及完整最短路径定义-引用对的GUI测试覆盖准则,前者体现了事件处理函数相关代码结构的覆盖率,后者体现了事件处理函数间的数据依赖关系的覆盖率。 3.基于反馈的GUI测试用例生成。为了规避根据静态模型生成测试用例时遗漏GUI功能以及生成无效测试用例等问题,在对用户输入数据等价类划分的基础上,将已有测试用例执行信息作为反馈,指导测试用例自动生成。典型的开源被测应用的实验表明,基于此模型的生成方法不仅能有效控制GUI测试用例规模,而且提高了GUI相关代码结构以及数据依赖关系的覆盖率。 4.基于事件处理函数的GUI测试用例集约简。针对GUI测试用例冗余问题,定义基于事件处理函数执行路径和基于事件处理函数间数据依赖关系的GUI测试用例冗余规则,制定并实现相应的GUI测试用例集约简算法。实验结果表明,基于事件处理函数间数据依赖关系的GUI测试用例集约简技术在保证测试质量的前提下,能有效降低GUI测试用例集的规模。 5.在移动测试平台的应用。结合上述研究,介绍在“核高基”国家科技重大专项“智能手机嵌入式软件平台研发及产业化”支持下开发的测试原型工具,对其平台上的“想法管理器”、“模拟收费系统”等,构建事件处理函数图,生成测试用例并对测试效果进行评估。 综上所述,本文针对GUI测试,从事件处理函数的角度,提出了事件处理函数图,制定了两个基于完整最短路径的测试覆盖准则,设计并实现了基于反馈的GUI测试用例生成方法;从事件处理函数执行路径和数据依赖关系的角度,提出了相应的GUI测试用例集约简技术,并取得了较好的测试效果,为GUI测试与实现,提供了丰富的参考。