CN111290966B - 提高安卓应用测试覆盖率的测试用例分解组合方法和系统 - Google Patents

提高安卓应用测试覆盖率的测试用例分解组合方法和系统 Download PDF

Info

Publication number
CN111290966B
CN111290966B CN202010155397.7A CN202010155397A CN111290966B CN 111290966 B CN111290966 B CN 111290966B CN 202010155397 A CN202010155397 A CN 202010155397A CN 111290966 B CN111290966 B CN 111290966B
Authority
CN
China
Prior art keywords
test case
application
cases
state
test
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010155397.7A
Other languages
English (en)
Other versions
CN111290966A (zh
Inventor
蒋炎岩
王珏
许畅
曹春
马晓星
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University filed Critical Nanjing University
Priority to CN202010155397.7A priority Critical patent/CN111290966B/zh
Publication of CN111290966A publication Critical patent/CN111290966A/zh
Application granted granted Critical
Publication of CN111290966B publication Critical patent/CN111290966B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本发明公开了一种提高安卓应用测试覆盖率的测试用例分解组合方法,包含如下步骤:一、给定被测安卓应用,使用自动生成或人工提供的方式为被测应用生成初始测试用例,发送这些初始测试用例到被测应用,记录其执行轨迹,根据执行轨迹建立被测应用的状态自动机;二、将初始测试用例分解为执行应用单个功能的子用例;三、分析子用例间的关系,组合成执行被测应用复杂功能的复合测试用例;四、向被测应用发送生成的复合测试用例,根据其执行轨迹决定是否返回步骤一迭代执行。本发明能够自动生成有效复合测试用例以测试被测安卓应用的复杂功能,提高安卓应用测试覆盖率。

Description

提高安卓应用测试覆盖率的测试用例分解组合方法和系统
技术领域
本发明涉及应用测试技术领域,具体而言涉及一种提高安卓应用测试覆盖率的测试用例分解组合方法和系统。
背景技术
安卓应用运行在目前最受欢迎的智能设备平台安卓上,受众广泛,与用户日常的生活、工作、学习息息相关,且经常涉及用户的隐私与安全。为了确保卓应用的用户体验与安全性,测试人员需要高质量的测试用例,以在测试过程最大化测试覆盖率,充分验证安卓应用的行为正确性,发现潜在的应用缺陷。现有面向安卓应用的测试用例自动技术,由于无法生成执行应用复杂功能的测试用例,因而无法达到较高的测试覆盖率。
专利号为CN201811575155.2的发明“测试用例的执行方法、装置、终端及计算机可读存储介质“中提出了一种测试用例的执行方法,该方法包括:预先存储多个功能测试用例,根据测试产品的测试需求,从预先存储的所述多个功能测试用例中,获取待执行的功能测试用例;获取所述待执行的功能测试用例对应的预设执行顺序;按照所述预设执行顺序,运行所述待执行的功能测试用例,得到测试结果。专利号为CN201810113816.3的发明“一种软件测试用例的生成方法及装置”中提出了一种软件测试用例的生成方法及装置,方法包括以下步骤:根据软件需求说明书生成每个功能需求点对应的测试用例,并将这些测试用例放入基础用例库中;根据基础用例库中的测试用例生成测试用例数据;根据使用场景和业务流分别获取每个功能需求点被触发的组合条件;删除所述组合条件中重复的组合,根据余下的组合条件对测试用例数据进行组合调用,获得全部的组合测试用例;将组合测试用例中可重复使用的测试用例提取出来,并作为共享用例放入基础用例库中。
但类似前述发明中所提及的基于随机或启发式策略的自动技术一般仅能够覆盖应用简单的功能,无法探索较深的应用状态并测试应用较为复杂的功能。基于系统测试用例生成策略的自动技术一般较为低效,无法利用实际生产中有效的测试资源为大规模的安卓应用生成测试用例。人工进行测试用例生成一般能够生成所需的执行应用复杂功能测试用例,但需要极大的人力与较长的时间,无法应对现代应用开发快速迭代敏捷开发的需求。
发明内容
本发明目的在于提供一种提高安卓应用测试覆盖率的测试用例分解组合方法和系统,深刻解析生成的初始测试用例,将其划分成执行应用单个功能的子用例,再根据子用例之间的关系组合生成大量复合测试用例,提高了初始测试用例的利用率和复合测试用例的生成效率;同时,通过设置迭代条件,结合实际测试结果不断更新复合测试用例,有效提高测试覆盖率和测试效率。
为达成上述目的,结合图1,本发明提出一种提高安卓应用测试覆盖率的测试用例分解组合方法,所述测试用例分解组合方法包括:
S1:给定被测应用,使用人工提供或自动生成的方法为被测应用生成初始测试用例,将这些初始测试用例发送给被测应用,记录其执行轨迹,根据执行轨迹建立被测应用的状态自动机;其中,初始测试用例是指可以执行应用部分功能,但无法保证执行应用复杂功能的测试用例。
S2:采用步骤S1获取的状态自动机,将初始测试用例分解为执行应用单个功能的子用例。
S3:采用步骤S1获取的被测应用的执行轨迹与状态自动机,分析通过步骤S2获取的子用例间的关系,将部分子用例组合成执行被测应用复杂功能的复合测试用例。
S4:将步骤S3中获取的复合测试用例发送给被测应用,记录其新的执行轨迹,并根据与已有执行轨迹的比对结果,结合预设的迭代判别条件决定是否迭代执行;如迭代,则返回步骤S1,指定新的执行轨迹中出现的不满足迭代终止条件的被测应用状态作为初始状态,生成额外的初始测试用例并继续执行;如不迭代,则输出所有轮迭代生成的复合测试用例。
作为其中的一种优选例,步骤S1中,给定被测安卓应用,使用人工给定或自动生成的方法为被测应用生成初始测试用例可使用如下方法获得:
方法一:从给定的被测应用状态开始,通过深度优先遍历被测应用图形界面的方法,自动生成初始测试用例。
方法二:通过记录人类测试者或用户从给定的被测应用状态开始使用被测应用时生成的事件序列,获得初始测试用例。
其中,给定的被测应用状态在不同次的迭代中不尽相同,在初次迭代时,为被测应用的启动状态,在其它次迭代时,为步骤S4返回时指定的状态。
作为其中的一种优选例,步骤S1中,所述执行轨迹包含四个部分:(1)发送给被测应用的测试用例即事件序列,(2)发送每个事件前后被测应用的图形界面布局,(3)被测应用接收并处理测试用例期间的方法调用序列,以及(4)被测应用接受并处理测试用例包含的每一个原子事件时调用的方法集合。所述状态自动机包含三个部分:(1)一组被测应用的抽象状态,每个状态代表一组执行轨迹中记录的被测应用图形界面布局,每个执行轨迹中记录的被测应用图形界面布局具有且仅有一个状态表示,(2)执行轨迹记录的所有发送过的事件,以及(3)一个状态转移函数,用以指明当被测应用处在于某个抽象状态下并接收到某个事件后,将转移至哪一个抽象状态。
作为其中的一种优选例,步骤S1中,根据执行轨迹建立被测应用的状态自动机,可使用如下方法:对执行轨迹中记录的每一个被测应用图形界面布局,使用一个独有的抽象状态表示,并根据执行轨迹中的图形界面布局改变序列,相应初始化状态转移函数,之后根据指定的图形界面等价标准,合并表示等价图形界面布局的抽象状态,并相应调整状态转移函数,直至无可合并的抽象状态。
作为其中的一种优选例,步骤S2中,利用步骤S1获取的状态自动机,将初始测试用例分解为执行应用单个功能的子用例,可通过如下方法:
方法一:可通过人工标注,由人类测试者观测状态自动机,标记状态自动机中执行应用单个功能时对应的状态转移路径,根据标记的路径,将初始测试用例分解成事件序列片段,提取出被标记路径对应的片段拼接作为子用例。
方法二:可通过自动选取,标记自动机中所有不同的无环状态转移路径,根据标记的路径,将初始测试用例分解成事件序列片段,提取出被标记路径对应的片段拼接作为子用例。
作为其中的一种优选例,步骤S3中,子用例间的关系为如下两种二元不对称关系:
关系一:对齐关系,在状态自动机中,一个子用例对应的状态转移路径的最后一个抽象状态,是另一个子用例对应的状态转移路径的起始状态,则认为第一个子用例对齐于第二个子用例。
关系二:依赖关系,如在执行轨迹中,应用在处理一个子用例中的某个事件时读取了某个特定的共享资源(如数据库中的某项,全局变量),并且在处理另一个子用例的某个事件时修改了这个共享资源,则认为第一个子用例依赖于第二个子用例。
作为其中的一种优选例,步骤S3中,复合测试用例是由子用例组合生成的,能够执行被测应用复杂功能的测试用例,具有以下性质:
性质一:由利用步骤二中获取的子用例拼接而成,且第一个子用例在步骤一中获取的状态自动机中的对应状态执行路径从被测应用的启动状态开始。
性质二:复合测试用例包含的每对相邻的子用例,前一个子用例均对齐于后一个子用例。
性质三:一条复合测试用例中,存在多对不同的子用例,后一个子用例依赖于前一个子用例。
作为其中的一种优选例,步骤S3中,所述组合成执行被测应用复杂功能的复合测试用例,可采用以下方法:
方法一:随机组合利用步骤二获得的子用例,利用步骤一中获取的执行轨迹与状态自动机,分析组合生成的测试输入中子用例的关系,判断其是否具有复合测试用例所具有的性质,若有,则保留,否则丢弃。
方法二:利用步骤一中获取的执行轨迹与状态自动机,分析每对步骤二中获取的子用例间的对齐关系与依赖关系,选取多对具有依赖关系的子用例排列成满足复合测试用例性质三的序列,选取具有依赖关系的子用例进行连接,并增加从启动状态开始的前缀子用例序列,以组合生成复合测试用例。
作为其中的一种优选例,步骤S4中,将步骤S3中获取的复合测试用例发送给被测应用,记录其新的执行轨迹,并根据与已有的执行轨迹的比对结果,决定是否迭代执行;如迭代,则并返回步骤一,生成额外的初始测试用例;如不迭代,则输出所有轮迭代生成的复合测试用例,可采用如下方法:如新的执行轨迹中,出现了全所未见的被测应用图形界面布局,则返回步骤一,指定前所未见的被测应用图形界面布局对应的被测应用状态作为起始状态,生成额外初始测试用例,并继续进行。
基于前述方法,本发明还提及一种提高安卓应用测试覆盖率的测试用例分解组合系统,所述系统包括初始测试用例生成模块,执行轨迹记录及状态自动机生成模块、测试用例分解模块、子用例组合模块,以及复合测试用例发送及迭代判断模块。
所述初始测试用例生成模块用于生成初始测试用例和发送初始测试用例至被测应用。
所述执行轨迹记录及状态自动机生成模块用于记录执行轨迹,并建立被测应用的状态自动机。
所述测试用例分解模块用于借助生成的状态自动机,分解给定测试用例为执行应用单个功能的子用例。
所述子用例组合模块用于借助执行轨迹与状态自动机分析子用例间的关系,并相应组合子用例生成执行被测应用复杂功能的复合测试用例。
所述复合测试用例发送及迭代判断模块用于发送复合测试用例到被测应用,记录其执行轨迹并判断是否进行迭代,如迭代则输出下一轮迭代中初始测试用例生成模块所需的被测应用起始状态,如不迭代则返回所有迭代生成的复合测试用例集合。
以上本发明的技术方案,与现有相比,其显著的有益效果在于:
(1)本发明能够使用于现实生活中常见的大规模安卓应用测试中,使用场景并不严重受制于被测应用复杂程度。
(2)本发明能够利用执行应用简单功能的测试用例,通过分解组合的方式为安卓应用生成执行应用复杂功能的复合测试用例,以提高测试覆盖率。
(3)本发明利用可快速获得的执行应用简单功能的测试用例通过分解组合快速生成执行应用复杂功能的复合测试用例,对于测试用例生成所需时间代价较小,能够满足快速迭代敏捷开发的要求,可部署于持续集成交付的安卓应用开发过程中进行测试用例生成。
(4)复合测试用例的生成和测试过程交错进行,根据测试结果不断更新复合测试用例,确保生成的复合测试用例具有极高的测试效率。
(5)本发明能够弥补现有安卓应用测试用例生成技术的不足,利用测试用例分解组合的方法,高效地生成执行应用复杂功能的测试用例,从而提升安卓应用的测试覆盖率,以提升测试的充分性。
应当理解,前述构思以及在下面更加详细地描述的额外构思的所有组合只要在这样的构思不相互矛盾的情况下都可以被视为本公开的发明主题的一部分。另外,所要求保护的主题的所有组合都被视为本公开的发明主题的一部分。
结合附图从下面的描述中可以更加全面地理解本发明教导的前述和其他方面、实施例和特征。本发明的其他附加方面例如示例性实施方式的特征和/或有益效果将在下面的描述中显见,或通过根据本发明教导的具体实施方式的实践中得知。
附图说明
附图不意在按比例绘制。在附图中,在各个图中示出的每个相同或近似相同的组成部分可以用相同的标号表示。为了清晰起见,在每个图中,并非每个组成部分均被标记。现在,将通过例子并参考附图来描述本发明的各个方面的实施例,其中:
图1是本发明的提高安卓应用测试覆盖率的测试用例分解组合方法的流程图。
图2是本发明的提高安卓应用测试覆盖率的测试用例分解组合系统架构图。
图3是初始测试用例生成模块的工作流程图。
图4为本发明提供的执行轨迹记录及状态自动机生成模块的工作流程图。
图5为本发明提供的测试用例分解模块的工作流程图。
图6为本发明提供的子用例组合模块的工作流程图。
图7为本发明提供的复合测试用例发送及迭代判断模块的工作流程图。
具体实施方式
为了更了解本发明的技术内容,特举具体实施例并配合所附图式说明如下。
结合图1,本发明提出一种提高安卓应用测试覆盖率的测试用例分解组合方法,所述测试用例分解组合方法包括:
S1:给定被测应用,使用人工提供或自动生成的方法为被测应用生成初始测试用例,将这些初始测试用例发送给被测应用,记录其执行轨迹,根据执行轨迹建立被测应用的状态自动机;其中,初始测试用例是指可以执行应用部分功能,但无法保证执行应用复杂功能的测试用例。
S2:采用步骤S1获取的状态自动机,将初始测试用例分解为执行应用单个功能的子用例。
S3:采用步骤S1获取的被测应用的执行轨迹与状态自动机,分析通过步骤S2获取的子用例间的关系,将部分子用例组合成执行被测应用复杂功能的复合测试用例。
S4:将步骤S3中获取的复合测试用例发送给被测应用,记录其新的执行轨迹,并根据与已有执行轨迹的比对结果,结合预设的迭代判别条件决定是否迭代执行;如迭代,则返回步骤S1,指定新的执行轨迹中出现的不满足迭代终止条件的被测应用状态作为初始状态,生成额外的初始测试用例并继续执行;如不迭代,则输出所有轮迭代生成的复合测试用例。
所述安卓应用是运行在由安卓操作系统支持的智能手机或平板上的应用程序,一般包含Activity(负责管理图形界面并与用户交互)、Service(负载在后台执行长时间任务)、Boradcast Receiver(负责接收处理安卓系统事件广播)、及Content Provider(负责管理应用共享数据)四类组件。每个组件内部可进一步包含其他子组件(如负责接收处理图形界面点击事件的OnClickListener与负责异步执行任务的AsyncTask组件),这些组件借助安卓系统进行通信,共同运行以向用户提供应用功能;所述测试用例是指安卓系统支持的原子输入事件(简称事件,如屏幕点击事件)序列,安卓应用通过接收处理这些原子输入序列向用户提供所需的一系列功能,并改变自身状态。
结合图2,本发明还提出一种提高安卓应用测试覆盖率的测试用例分解组合系统,所述系统包括初始测试用例生成模块,执行轨迹记录及状态自动机生成模块、测试用例分解模块、子用例组合模块,以及复合测试用例发送及迭代判断模块。
所述初始测试用例生成模块用于生成初始测试用例和发送初始测试用例至被测应用。
所述执行轨迹记录及状态自动机生成模块用于记录执行轨迹,并建立被测应用的状态自动机。
所述测试用例分解模块用于借助生成的状态自动机,分解给定测试用例为执行应用单个功能的子用例。
所述子用例组合模块用于借助执行轨迹与状态自动机分析子用例间的关系,并相应组合子用例生成执行被测应用复杂功能的复合测试用例。
所述复合测试用例发送及迭代判断模块用于发送复合测试用例到被测应用,记录其执行轨迹并判断是否进行迭代,如迭代则输出下一轮迭代中初始测试用例生成模块所需的被测应用起始状态,如不迭代则返回所有迭代生成的复合测试用例集合。
如图2所示,本发明实施例提供的提高安卓应用测试覆盖率的测试用例分解组合方法,给定被测应用apk文件,首先利用初始测试用例生成模块生成初始测试用例,再利用执行轨迹记录及状态自动机生成模块,发送初始测试用例至被测应用,记录执行轨迹,并建立被测应用的状态自动机。之后,测试用例分解模块借助生成的状态自动机,分解给定测试用例为执行应用单个功能的子用例。之后,子用例组合模块借助执行轨迹与状态自动机分析子用例间的关系,并相应组合子用例生成执行被测应用复杂功能的复合测试用例。最后,复合测试用例发送及迭代判断模块发送复合测试用例到被测应用,记录其执行轨迹并判断是否进行迭代,如迭代则输出下一轮迭代中初始测试用例生成模块所需的被测应用起始状态(由一组到达这一状态的事件片段表示),并返回步骤一执行,如不迭代则返回所有迭代生成的复合测试用例集合。整个方法框架包含五个模块对应四个步骤:初始测试用例生成模块,执行轨迹记录及状态自动机生成模块、测试用例分解模块、子用例组合模块、及复合测试用例发送及迭代判断模块。
步骤一:初始测试用例生成模块,为被测应用生成初始测试用例,执行轨迹记录及状态自动机生成模块,发送初始测试用例至被测应用,记录执行轨迹,并生成被测应用状态自动机。
如图3所示,图3为初始测试用例生成模块的工作流程图。给定被测应用与指定的被测应用起始状态,初始测试用例生成模块通过深度优先遍历被测应用图形界面布局的方式,生成初始测试用例。在每个被测应用图形界面布局,其选择一个在当前布局尚未被发送的事件生成并发送,观测图形界面布局的变化;若其变为一个之前探索到的图形界面布局,则回溯至之前的界面布局继续探索;否则从当前布局开始继续探索;当所有可能的事件都已发送或时间限制达到时,则停止。特别的,在首轮迭代中,指定的被测应用起始状态为应用完成启动时的状态,而在其它轮迭代中,由合测试用例发送及迭代判断模块给定。
如图4所示,图4为执行轨迹记录及状态自动机生成模块的工作流程图。执行轨迹记录及状态自动机生成模块发送初始测试输入给被测应用,记录其执行轨迹。接着,利用执行轨迹建立被测应用的状态自动机。首先,初始化状态及转移函数,即对每个图形界面布局,使用一个独有的抽象状态进行表示,并相应建立事件集合与状态转移函数。接着,利用Baek等人提出的Lv.4图形界面布局等价标准,选择代表的所有图形界面布局全部等价的两个状态尝试进行合并。若合并后不会带来不确定地状态转移(即在某个抽象状态发送同一个事件,不会存在多种不同的结果状态),则保持改合并,并相应调整状态转移函数,否则撤销合并。当所有可合并的状态均合并后,则结束状态自动机生成。
步骤二:测试用例分解模块,借助利用步骤一生成的状态自动机,将已有测试用例分解为执行应用单个功能的子用例。
如图5所示,图5表示测试用例分解的工作流程图,借助步骤一生成的状态自动机,选取其中所有不同的无环状态转移路径。根据每条状态转移路径,在测试用例中找到对应的事件序列,将测试用例分解为多个事件片段,提取组成状态转移路径对应事件序列的事件片段拼接作为一个子用例。
步骤三:子用例组合模块,组合子用例生成执行被测应用复杂功能的复合测试用例。
如图6所示,图6表示子用例组合模块的工作流程图,首先借助步骤一获取的执行轨迹与状态自动机,分析每一对步骤二获取的子用例间的依赖关系与对齐关系。之后迭代以组合生成多条复合测试用例。每次,选取k对具有依赖关系的子用例,将其排列为一子用例序列,并保证选取的子用例间至少一半的依赖关系中,被依赖的子用例在序列中先于依赖其的子用例。之后根据对齐关系,采用随机探索的方式,选取子用例插入序列中或拼接与序列头部,使得序列满足首个子用例对应状态自动机中的状态执行路径从被测应用启动状态开始,且每对相邻的子用例均满足前一子用例对齐于后一子用例。多次循环此组合过程直至满足终止条件(如到达时间上限)。
步骤四:复合测试用例发送及迭代判断模块,记录执行轨迹并进行迭代判断。
如图7所示,图7表示复合测试用例发送及迭代判断模块的工作流程图,发送每一条步骤三生成的复合测试用例,记录其执行轨迹。全部发送完成后,将记录的执行轨迹与已有的执行轨迹进行比对,若存在前所未探索到的图形界面布局,则输出迭代信号,并输出到达新探索的图形界面的事件序列;否则输出所有迭代生成的复合测试用例并结束流程。
在本公开中参照附图来描述本发明的各方面,附图中示出了许多说明的实施例。本公开的实施例不必定义在包括本发明的所有方面。应当理解,上面介绍的多种构思和实施例,以及下面更加详细地描述的那些构思和实施方式可以以很多方式中任意一种来实施,这是因为本发明所公开的构思和实施例并不限于任何实施方式。另外,本发明公开的一些方面可以单独使用,或者与本发明公开的其他方面的任何适当组合来使用。
虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明。本发明所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可作各种的更动与润饰。因此,本发明的保护范围当视权利要求书所界定者为准。

Claims (9)

1.一种提高安卓应用测试覆盖率的测试用例分解组合方法,其特征在于,所述测试用例分解组合方法包括:
S1:给定被测应用,使用人工提供或自动生成的方法为被测应用生成初始测试用例,将这些初始测试用例发送给被测应用,记录其执行轨迹,根据执行轨迹建立被测应用的状态自动机;其中,初始测试用例是指可以执行应用部分功能,但无法保证执行应用复杂功能的测试用例;
S2:采用步骤S1获取的状态自动机,将初始测试用例分解为执行应用单个功能的子用例;
S3:采用步骤S1获取的被测应用的执行轨迹与状态自动机,分析通过步骤S2获取的子用例间的关系,将部分子用例组合成执行被测应用复杂功能的复合测试用例;
S4:将步骤S3中获取的复合测试用例发送给被测应用,记录其新的执行轨迹,并根据与已有执行轨迹的比对结果,结合预设的迭代判别条件决定是否迭代执行;如迭代,则返回步骤S1,指定新的执行轨迹中出现的不满足迭代终止条件的被测应用状态作为初始状态,生成额外的初始测试用例并继续执行;如不迭代,则输出所有轮迭代生成的复合测试用例;
步骤S1中,所述根据执行轨迹建立被测应用的状态自动机包括以下步骤:
对执行轨迹中记录的每一个被测应用图形界面布局,使用一个独有的抽象状态表示,并根据执行轨迹中的图形界面布局改变序列,相应初始化状态转移函数,之后根据指定的图形界面等价标准,合并表示等价图形界面布局的抽象状态,并相应调整状态转移函数,直至无可合并的抽象状态;
所述执行轨迹包括四个部分:(1)发送给被测应用的测试用例即事件序列,(2)发送每个事件前后被测应用的图形界面布局,(3)被测应用接收并处理测试用例期间的方法调用序列,以及(4)被测应用接受并处理测试用例包含的每一个原子事件时调用的方法集合;
所述状态自动机包含三个部分:(1)一组被测应用的抽象状态,每个状态代表一组执行轨迹中记录的被测应用图形界面布局,每个执行轨迹中记录的被测应用图形界面布局具有且仅有一个状态表示,(2)执行轨迹记录的所有发送过的事件,以及(3)一个状态转移函数,用以指明当被测应用处在于某个抽象状态下并接收到某个事件后,将转移至哪一个抽象状态。
2.根据权利要求1所述的提高安卓应用测试覆盖率的测试用例分解组合方法,其特征在于,步骤S1中,所述使用人工提供或自动生成的方法为被测应用生成初始测试用例的方法包括以下两种:
方法一:从给定的被测应用状态开始,通过深度优先遍历被测应用图形界面的方法,自动生成初始测试用例;
方法二:通过记录人类测试者或用户从给定的被测应用状态开始使用被测应用时生成的事件序列,获得初始测试用例。
3.根据权利要求2所述的提高安卓应用测试覆盖率的测试用例分解组合方法,其特征在于,所述通过深度优先遍历被测应用图形界面的方法,自动生成初始测试用例是指,
在每个被测应用图形界面布局,其选择一个在当前布局尚未被发送的事件生成并发送,观测图形界面布局的变化;若其变为一个之前探索到的图形界面布局,则回溯至之前的界面布局继续探索;否则从当前布局开始继续探索;当所有可能的事件都已发送或时间限制达到时,则停止。
4.根据权利要求1所述的提高安卓应用测试覆盖率的测试用例分解组合方法,其特征在于,步骤S2中,所述将初始测试用例分解为执行应用单个功能的子用例包括以下两种方法:
方法一:通过人工标注,由人类测试者观测状态自动机,标记状态自动机中执行应用单个功能时对应的状态转移路径,根据标记的路径,将初始测试用例分解成事件序列片段,提取出被标记路径对应的片段拼接作为子用例;
方法二:通过自动选取,标记自动机中所有不同的无环状态转移路径,根据标记的路径,将初始测试用例分解成事件序列片段,提取出被标记路径对应的片段拼接作为子用例。
5.根据权利要求1-4中任意一项所述的提高安卓应用测试覆盖率的测试用例分解组合方法,其特征在于,所述子用例间的关系包括以下两种二元不对称关系:
关系一:对齐关系,在状态自动机中,一个子用例对应的状态转移路径的最后一个抽象状态,是另一个子用例对应的状态转移路径的起始状态,则认为第一个子用例对齐于第二个子用例;
关系二:依赖关系,如在执行轨迹中,应用在处理一个子用例中的某个事件时读取了某个特定的共享资源,并且在处理另一个子用例的某个事件时修改了这个共享资源,则认为第一个子用例依赖于第二个子用例。
6.根据权利要求5所述的提高安卓应用测试覆盖率的测试用例分解组合方法,其特征在于,所述复合测试用例具有以下性质:
性质一:由获取的子用例拼接而成,且第一个子用例在步骤S1中获取的状态自动机中的对应状态执行路径从被测应用的启动状态开始;
性质二:复合测试用例包含的每对相邻的子用例,前一个子用例均对齐于后一个子用例;
性质三:一条复合测试用例中,存在多对不同的子用例,后一个子用例依赖于前一个子用例。
7.根据权利要求6所述的提高安卓应用测试覆盖率的测试用例分解组合方法,其特征在于,步骤S3中,所述将部分子用例组合成执行被测应用复杂功能的复合测试用例包括以下两种方法:
方法一:随机组合利用步骤二获得的子用例,利用步骤一中获取的执行轨迹与状态自动机,分析组合生成的测试输入中子用例的关系,判断其是否具有复合测试用例所具有的性质,若有,则保留,否则丢弃;
方法二:利用步骤一中获取的执行轨迹与状态自动机,分析每对步骤二中获取的子用例间的对齐关系与依赖关系,选取多对具有依赖关系的子用例排列成满足复合测试用例性质三的序列,选取具有对齐关系的子用例进行连接,并增加从启动状态开始的前缀子用例序列,以组合生成复合测试用例。
8.根据权利要求1-4中任意一项所述的提高安卓应用测试覆盖率的测试用例分解组合方法,其特征在于,步骤S4中,所述预设的迭代判别条件是指,相比于已有轨迹,新的执行轨迹中,出现了前所未见的被测应用图形界面布局;
所述不满足迭代终止条件的被测应用状态是指,所述前所未见的被测应用图形界面布局对应的被测应用状态。
9.一种基于权利要求1-4中任意一项所述方法的提高安卓应用测试覆盖率的测试用例分解组合系统,其特征在于,所述系统包括初始测试用例生成模块,执行轨迹记录及状态自动机生成模块、测试用例分解模块、子用例组合模块,以及复合测试用例发送及迭代判断模块;
所述初始测试用例生成模块用于生成初始测试用例和发送初始测试用例至被测应用;
所述执行轨迹记录及状态自动机生成模块用于记录执行轨迹,并建立被测应用的状态自动机;
所述测试用例分解模块用于借助生成的状态自动机,分解给定测试用例为执行应用单个功能的子用例;
所述子用例组合模块用于借助执行轨迹与状态自动机分析子用例间的关系,并相应组合子用例生成执行被测应用复杂功能的复合测试用例;
所述复合测试用例发送及迭代判断模块用于发送复合测试用例到被测应用,记录其执行轨迹并判断是否进行迭代,如迭代则输出下一轮迭代中初始测试用例生成模块所需的被测应用起始状态,如不迭代则返回所有迭代生成的复合测试用例集合。
CN202010155397.7A 2020-03-09 2020-03-09 提高安卓应用测试覆盖率的测试用例分解组合方法和系统 Active CN111290966B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010155397.7A CN111290966B (zh) 2020-03-09 2020-03-09 提高安卓应用测试覆盖率的测试用例分解组合方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010155397.7A CN111290966B (zh) 2020-03-09 2020-03-09 提高安卓应用测试覆盖率的测试用例分解组合方法和系统

Publications (2)

Publication Number Publication Date
CN111290966A CN111290966A (zh) 2020-06-16
CN111290966B true CN111290966B (zh) 2023-06-02

Family

ID=71017724

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010155397.7A Active CN111290966B (zh) 2020-03-09 2020-03-09 提高安卓应用测试覆盖率的测试用例分解组合方法和系统

Country Status (1)

Country Link
CN (1) CN111290966B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101814053A (zh) * 2010-03-29 2010-08-25 中国人民解放军信息工程大学 一种基于功能模型的二进制代码漏洞发现方法
CN101916225A (zh) * 2010-09-02 2010-12-15 于秀山 图形用户界面软件功能覆盖测试方法
CN107656864A (zh) * 2016-11-09 2018-02-02 华东师范大学 一种基于概率模型的移动应用自动化测试方法
CN110209593A (zh) * 2019-06-14 2019-09-06 南京大学 一种面向偏好设置的安卓应用测试方法
CN110543421A (zh) * 2019-08-31 2019-12-06 华南理工大学 基于测试用例自动生成算法的单元测试自动执行方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101814053A (zh) * 2010-03-29 2010-08-25 中国人民解放军信息工程大学 一种基于功能模型的二进制代码漏洞发现方法
CN101916225A (zh) * 2010-09-02 2010-12-15 于秀山 图形用户界面软件功能覆盖测试方法
CN107656864A (zh) * 2016-11-09 2018-02-02 华东师范大学 一种基于概率模型的移动应用自动化测试方法
CN110209593A (zh) * 2019-06-14 2019-09-06 南京大学 一种面向偏好设置的安卓应用测试方法
CN110543421A (zh) * 2019-08-31 2019-12-06 华南理工大学 基于测试用例自动生成算法的单元测试自动执行方法

Also Published As

Publication number Publication date
CN111290966A (zh) 2020-06-16

Similar Documents

Publication Publication Date Title
CN106095677B (zh) 基于Robot Framework实现的RESTful Webservice接口自动化测试方法
US7975262B2 (en) Error tracing with context history
CN108108297A (zh) 自动化测试的方法和装置
CN106033393B (zh) 一种应用程序测试方法及系统以及移动终端
US8307339B2 (en) Software reuse in model based software systems
CN107861876A (zh) 测试方法、装置、计算机设备及可读存储介质
CN110515830A (zh) 操作轨迹可视化方法、装置、设备及存储介质
CN109344053B (zh) 接口覆盖测试方法、系统、计算机设备和存储介质
CN109508298B (zh) 图形化的脚本测试方法及系统
CN107733710A (zh) 链路调用关系的构建方法、装置、计算机设备及存储介质
CN111259212B (zh) 一种遥测数据判读方法、装置、设备及存储介质
CN109902251A (zh) 基于决策树的方案选择方法、装置、终端及可读存储介质
Cartaxo et al. LTS-BT: a tool to generate and select functional test cases for embedded systems
CN114003451B (zh) 一种接口测试方法、装置、系统及介质
US20120131543A1 (en) Method and system for capturing user interface structure in a model based software system
CN111258881A (zh) 一种用于工作流程测试的智能测试系统
CN110059002A (zh) 测试数据的生成方法、测试设备、存储介质及装置
CN111290966B (zh) 提高安卓应用测试覆盖率的测试用例分解组合方法和系统
CN106776284B (zh) 一种软件测试方法以及系统
CN114936121A (zh) 一种故障模拟方法、装置、系统和介质
CN111897725B (zh) 中台服务自动化测试方法、介质、设备及系统
CN114676066A (zh) 目标应用的安全测试方法及其装置、电子设备及存储介质
CN112015633B (zh) 测试激励多平台复用方法、装置、设备及存储介质
CN113672674A (zh) 一种自动编排业务流的方法、电子装置和存储介质
CN114416520A (zh) 一种面向Windows程序图形界面绕过的模糊测试方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant