关键词:
软件测试
移动应用
功能错误
摘要:
移动应用软件(简称移动应用)是一种基于图形用户界面的事件驱动程序,近年来变得越来越流行。随着移动应用数量的爆炸式增长,开发移动应用的企业都竭尽所能地保障移动应用的质量,以提高其市场竞争力。尽管如此,很多移动应用都会在发布后曝露出各种各样的功能错误,这些功能错误会影响应用所提供的功能,造成移动应用的功能失效,甚至可能引起一些严重的后果。为了避免这些错误的发生,充分测试移动应用的功能至关重要。然而,由于移动应用的版本迭代频率高且应用状态复杂,手工测试移动应用的成本高昂。为此,研究人员们提出了一些自动化测试技术来帮助人们对移动应用进行测试。但是由于测试预言问题(即难以自动地区分移动应用的正确行为和错误行为)的存在,现有的自动化测试技术无法系统地对移动应用进行功能测试,只能检测到一些特定类型的功能错误。例如,大多数的动态测试技术都只能通过捕获应用日志中抛出的异常来检测移动应用中的崩溃错误,而无法判断那些非崩溃功能错误(指不会抛出异常的、仅仅能从应用界面上观察到错误表现的功能错误)是否发生。为了弥补现有技术的不足,本文着眼于移动应用功能的三个重要的质量属性:正确性、鲁棒性和安全性,分别提出了对应的移动应用自动化测试技术,以检测那些难以被现有技术所检测到的移动应用中的功能错误,具体如下:
1.提出了基于性质的模糊测试方法以检测移动应用中数据处理功能的错误。数据处理功能在移动应用中很常见,他们执行常见的增、删、改、查操作来处理应用的数据。确保这些数据处理功能的正确性对于保障移动应用基础功能的质量而言至关重要。为了有效检测这些数据处理功能中的错误(也称数据处理错误),本文提出了一种基于性质的模糊测试方法。这一方法创新性地使用基于模型的性质来刻画数据处理功能的特征,并通过随机组合相关的数据处理功能和其他可能的应用事件来对目标功能进行更充分的测试。为了支持这一方法的应用,本文实现了一个自动化的测试工具PBFDroid,在17个开源移动应用和3个商业移动应用中检测到了29个以前未知的数据处理错误。此外,本文的进一步评估结果表明,其中的非崩溃功能错误(共22个)无法被现有的测试工具所检测到。
2.提出了设置敏感的蜕变模糊测试方法和基于错误模式的静态分析方法以检测移动应用中由系统设置更改导致的功能错误。移动系统中有大量用户可更改的设置选项(例如网络设置),这些设置的变化将会对移动应用产生影响,导致各种功能错误,我们将这类错误称为设置缺陷。由于设置选项繁多,可能引起的错误类型复杂,因此很难系统性地对这类功能错误进行测试。为此,本文首次对设置缺陷进行了大型的实证研究以了解其特征。基于实证研究的结果,本文提出了两种在检测能力上互补的自动化错误检测方法(设置敏感的蜕变模糊测试方法和基于错误模式的静态分析方法)并实现了对应的工具Set Droid和Set Checker,分别从界面和代码层面系统地检测设置缺陷。在实验中,Set Droid和Set Checker在26个开源移动应用和5个商业移动应用中发现了共65个以前未知的设置缺陷,其中的非崩溃功能错误(共51个)无法被现有的测试工具所检测到。
3.提出了隐私规范驱动的测试方法以检测移动应用中违反社交隐私规范的功能错误。为保障用户的隐私安全,开发移动应用的公司会维护大量自然语言撰写的隐私规范,并在每次版本更新前基于它们对移动应用进行测试。然而,高效且充分地对这些规范进行检查是困难的。为此,本文提出了一种隐私规范驱动的测试方法,该方法通过将隐私规范转换为对应的自动机来指导应用探索并基于自动机所处的状态判断是否检测到与隐私规范不一致的应用行为。本文将这一方法实现为了一个自动化的测试工具SDTDroid并对其进行评估。评估结果表明,SDTDroid可以高效地检查给定的隐私规范,并在3个商业应用中检测到13个以前未知的与隐私规范不一致的应用行为,这类错误无法被现有的技术所检测到。
综上,本文针对移动应用中的功能错误自动化测试难的问题,从三个测试维度提出了测试方法并实现了对应的工具,并在包括微信、抖音、Instagram在内的多个移动应用中检测到上百个难以被现有测试技术所检测到的功能错误。