一种基于代码变更的移动应用测试脚本自动维护方法

文档序号:10654460阅读:229来源:国知局
一种基于代码变更的移动应用测试脚本自动维护方法
【专利摘要】本发明提出的一种基于代码变更的移动应用测试脚本自动维护方法,包括以下步骤:步骤1、代码变更分析:分析新旧版本代码中产生变化的代码,进行过滤后,获取导致界面行为模型产生变更的代码变更;步骤2、模型变更分析:利用代码和模型中元素的对应关系对模型进行行为变更分析,得到行为变更信息以及模型变更信息,将变更应用在模型中,得到新模型;步骤3、脚本变更修复:将脚本语句抽象为事件序列,根据行为变更信息、模型变更信息,修复和更新脚本对应的事件序列,得到能够正常使用的新脚本。对受到影响的脚本中的事件序列进行自动的维护和更新,最终得到可以应用在新版本中的脚本,以减轻测试人员维护脚本的负担。
【专利说明】
-种基于代码变更的移动应用测试脚本自动维护方法
技术领域
[0001] 本发明设及移动应用测试中脚本的自动维护方法,属于移动应用测试、脚本测试、 模型驱动的测试交叉技术领域。
【背景技术】
[0002] 在移动应用领域,移动应用开发周期短且迭代速度快,同时由于设备软硬件种类 繁多,需要大量测试工作。在移动应用的测试中,主要采用人工测试W及脚本驱动的测试方 法,后者需要测试人员编写大量测试脚本或者采用模型驱动的测试方法自动生成测试脚 本,来达到批量测试的目的,此处测试脚本为使用脚本编程语言所写的代码,能够在测试工 具的支撑下对应用进行测试。然而在版本迭代回归过程中,功能的增删、布局的改动等都会 影响移动应用的界面和结构等内容,使之前正确的脚本失效,降低了脚本回归的效率和能 力,违背了自动化测试的初衷,其中一些细小的更改甚至需要测试人员重写大量脚本,增加 了测试人员的负担,或者局部的更改需要从模型中重新生成全部脚本,在模型规模较大时 会造成较大的开销。由于移动应用为事件驱动的软件,采用界面行为的状态机模型描述较 为合适,在状态机模型中可W采用屏幕变化定义状态、采用用户事件定义转换规则,利用行 为状态机模型可W描述当前应用的行为、事件序列等,模型与代码、脚本之间存在明确的映 射关系。
[0003] 模型采用建模语言来表示,能够描述软件的行为、结构和功能,贯穿整个开发和测 试流程,无论是设计阶段、开发阶段或者是测试阶段,模型都是十分重要的组成部分。模型 在测试领域应用也十分的广泛,例如模型驱动的测试是W模型为基础,生成测试用例并进 行测试执行,是软件测试中常用的手段和重要的研究课题。模型与设计、代码之间往往有较 为明确的对应关系,含有软件的基本信息和结构。然而软件可能会由于需求变更、优化、漏 桐修复等各种原因进行版本的变更,版本的变更往往跟随者代码的变更W及模型的变更。
[0004] 《一种提高性能测试脚本重用率的方法》(申请号:201210474774.9):针对性能测 试中的数据变更问题,通过对脚本数据的维护和管理,使得脚本可W应用于变更后的程序, 并不修改脚本本身,因此不能适用于代码变更的新版本程序。
[0005] 《跨模型的图形用户界面测试脚本自动修复方法K申请号:201110419535.9):生 成两个版本的EFG模型,对新模型中找不到的事件进行修复,在修复过程中还需要工程师逐 个指定程序修复的方式,无法一直迭代循环下去,自动化程度较低;且其主要针对测试工具 QTP,运类测试工具通常维护一个对象库,脚本的修复可W通过维护对象库进行,而不可W 是任意事件驱动的移动应用测试工具。
[0006] 《自动化测试方法和装置》(申请号:201110222217.3):公开了一种自动化脚本升 级方法,在升级后的软件版本上运行原测试脚本时,若检测到原测试脚本的一个测试步骤 中存在软件变更点,贝峭b过测试步骤执行下一个测试步骤;根据软件变更点对原测试脚本 进行升级;在升级后的软件版本上运行升级后的测试脚本。主要是在运行过程中找到所有 需要的修复点进行更新,通过变更-模型-事件-脚本。无法覆盖所有代码,且一个测试脚本 对应一个特定软件,不具有通用性。

【发明内容】

[0007] 针对现有技术中存在的问题,本发明提供一种基于代码变更的移动应用测试脚本 自动维护方法,自动的维护受到变更影响的旧版本测试脚本中的事件序列,得到可W应用 在新版本中的脚本。方法得到的新脚本和新模型可W用于下一次版本迭代时的修复工作。
[0008] 技术方案为:一种基于变更的移动应用测试脚本自动维护方法,采用代码变更分 析技术来比较代码(源代码、中间代码、二进制代码)之间的差异,获取能够导致界面行为模 型产生变化的变更,即得到界面模型变更的操作序列,对旧版本模型进行更新,利用代码与 模型、模型与测试脚本之间的映射关系,对受到影响的脚本中的事件序列进行自动的维护 和更新,从而形成针对新版本可用的脚本。
[0009] 状态机模型是对移动应用中的事件序列进行的简化,状态机模型包含状态W及在 运些状态之间的转移和动作,将界面的转换和用户事件的特征描述出来。
[0010] 代码、模型、测试脚本之间的映射关系包括一系列映射,运些映射包含了代码与模 型、模型事件与测试脚本之间的关系。
[0011] 具体包括W下步骤:
[0012] 步骤1、代码变更分析:
[0013] 分析新旧版本代码中产生变化的代码,对其进行过滤,将不能导致界面行为模型 产生变更的代码变更进行过滤,包括:脚本语句源代码中的空行、注释、空白字符,或者中间 码中的行号标识、寄存器标识,W及变更不会造成界面行为模型产生变化的变更,获取导致 界面行为模型产生变更的代码变更;
[0014] 步骤2、模型变更分析:
[0015] 利用代码和模型中元素的对应关系对模型进行行为变更分析,得到行为变更信息 W及模型变更信息,将变更应用在模型中,得到新模型;
[0016] 根据代码与模型中元素的对应关系W及增加的变更代码,得到模型中行为变更信 息,如果变更使得模型中增加新的状态或者事件,则记录变更信息,即为模型变更信息,包 含新状态相关状态的信息,W及事件转换信息、事件触发的条件,并将变更应用在模型中;
[0017] 根据代码与模型中元素的对应关系W及删除的变更代码,得到模型中行为变更信 息,如果变更使得模型中删除状态或者事件,则记录变更信息,即为模型变更信息,包含该 状态相关状态的信息,W及该状态相关的事件,并将变更应用在模型中;
[0018] 根据代码与模型中元素的对应关系W及修改的变更代码,得到模型中行为的变更 信息,记录变更信息,即模型变更信息,包括修改的元素和修改结果,并将变更应用在模型 中。
[0019] 步骤3、脚本变更修复:
[0020] 将脚本抽象为事件序列,事件序列为应用上的一系列动作序列,根据行为变更信 息、模型变更信息,修复和更新脚本对应的事件序列,得到能够正常使用的新脚本。
[0021] 步骤3.1:根据脚本和模型之间的映射关系,将脚本语句抽象为事件序列,找出受 到变更影响的脚本,并找到在模型中相应的状态转换序列;
[0022] 步骤3.2:根据步骤2中得到的模型变更信息,对受影响脚本进行逐个修复,首先修 复事件序列,得到新的可用的事件序列;
[0023] 如果脚本的事件序列中含有增加变更,则在受到变更影响的事件之间加入新的事 件或者增加新的状态转换对应的事件序列;
[0024] 如果脚本的事件序列中含有删除变更,则删除受到变更影响的事件W及之后所有 的事件序列,若对于受到变更影响的事件对应的状态,其前一个状态和后一个状态之间有 其他可用的状态转换事件,则用该事件作为原事件的替代;
[0025] 如果脚本的事件序列中含有修改变更,则修改受到变更影响的元素;
[0026] 步骤3.3 :利用修改后的事件序列,脚本与模型之间的映射关系,得到修复后的新 脚本。
[0027] 通过预先定义脚本和模型之间的映射关系表,可应用于各类移动应用脚本测试工 具。
[0028] 本发明具有如下有益效果:本发明的基于代码变更的移动应用测试脚本自动维护 方法中,通过分析移动应用两个版本之间的差异,包括源代码的变更、中间码的变更、二进 制码的变更(W上统称为代码的变更),识别两个版本之间的事件变更,包括增加、删除、修 改等,获取会导致界面行为发生变化的变更,将变更应用在状态机模型上,通过脚本与模型 中事件的映射关系,自动的修复测试脚本,减轻了测试人员维护测试脚本的负担。具体说 来,本发明所述的方法具有如下有益效果:
[0029] (1)在本发明所述的基于代码变更的移动应用测试脚本自动维护方法中,代码差 异是通过自动分析出来的,并且能够自动过滤不相关的变更差异,减轻测试人员的负担。
[0030] (2)在本发明所述的基于代码变更的移动应用测试脚本自动维护方法中,代码包 含源代码、中间码、二进制码,有较高通用性,在无源码的第=方测试中也可W使用。
[0031] (3)在本发明所述的基于代码变更的移动应用测试脚本自动维护方法中,将脚本 语句抽象为事件序列,可W根据给定的脚本语句和事件之间的映射关系,应用到各类脚本 测试工具中,不限制使用的工具和脚本语言,具有较高通用性。
[0032] (4)在本发明所述的基于代码变更的移动应用测试脚本自动维护方法中,在维护 脚本的过程中也维护了应用的行为状态机模型,可W应用于其他开发和测试过程中。
[0033] (5)在本发明所述的基于代码变更的移动应用测试脚本自动维护方法中,方法得 到的新脚本和新模型可W作为下一次修复的输入,W此循环,减轻测试人员负担。
【附图说明】
[0034] 图1是本发明实施例的流程示意图。
[0035] 图2是本发明实施例的代码变更分析流程示意图。
[0036] 图3是本发明实施例的模型变更与脚本修复的示意图。
【具体实施方式】
[0037] 为了便于本领域技术人员的理解,下面结合实施例与附图对本发明作进一步的说 明。
[0038] 本发明所述的基于代码变更的移动应用测试脚本自动维护方法具体实施中,首先 需要两个版本的代码(源代码、中间码、二进制码等),旧版本对应的行为状态机模型W及测 试脚本,旧版本代码与状态机模型之间的映射关系W及模型事件与脚本之间的映射关系, 可W通过版本控制管理不同版本。本发明首先对不同版本的代码进行代码变更分析,得到 能够导致应用行为模型产生变更的代码变更,并将其抽象为模型行为变更,包括增加、删 除、修改变更,并更新模型,然后将测试脚本抽象为事件序列,对于受到变更影响的事件序 列,根据模型行为变更修复该事件序列,并转换为相应的脚本语言,从而完成脚本的修复。
[0039] 本发明所述的基于代码变更的移动应用测试脚本自动维护方法具体实施流程如 图1所示。下面根据附图,对本发明作更详细的描述。
[0040] 1、代码变更分析
[0041] 本发明所述的基于代码变更的移动应用测试脚本自动维护方法具体实施中,需要 对两个版本的代码进行分析,找出其中的差异。使用W下两个版本源代码之间的diff片段 为例:
[0042]
[0043] 表示旧版本存在而新版本不存在的语句,而V'表示在新版本中存在但是旧版 本中不存在的语句,在此样例中,"删除"功能按键后增加了一个确认弹出框。方法需要将有 效的变更抽取出来,如图2所示的过程,通过代码分析得到代码的整体结构和关键点的内 容,从而分析两个版本间代码结构间的差异,来抽取代码间的差异。在此过程中我们需要忽 略无用的变更、不影响的变更。
[0044] 无用的变更主要是指源代码中的空行、注释、空白字符,或者中间码中的行号标 识、寄存器标识等,运些变更不会影响程序的语义,进而不会影响程序本身的结构和行为, 因此此类变更可W直接忽略。
[0045] 不影响的变更是指变更不会造成界面行为模型产生变化,例如不会影响事件的触 发和处理等,即对整体行为模型没有任何影响的变更,例如程序逻辑不变的情况下更换了 实现语句,如for和Whi Ie循环的更替等。
[0046] 代码变更分析对整体代码进行分析和比较,在具体实施时需要按需修改相应代码 的遍历分析工具或者修改编译器的前端,对语义进行抽象和抽取,得到有效的代码变更内 容。
[0047] 2、模型变更分析
[0048] 获取代码变更后,利用代码和模型中元素的映射关系对模型进行变更分析,得到 行为变更信息W及模型变更信息。具体步骤为:
[0049] 步骤1:根据代码与模型中元素的对应关系W及增加的变更代码,得到模型中行为 变更信息,如果变更使得模型中增加新的状态或者状态转移事件,则记录变更信息,即为模 型的变更信息,此处包含新状态相关状态的信息,W及转移条件等,将变更应用在模型中, 若新增加转移事件,则在模型中在两个状态之间新增一条边,若新加状态,需要在模型中增 加状态W及所有该状态相关的状态转移时间,并标注转移条件;
[0050] 步骤2:根据代码与模型中元素的对应关系W及删除的变更代码,得到模型中行为 变更信息,如果变更使得模型中删除状态或者状态转移事件,则记录变更信息,即为模型的 变更信息,此处包含该状态相关状态的信息,W及该状态相关的转移事件,将变更应用在模 型中,若删除状态转移事件,则在模型中删除相应的边,若删除状态,则在模型中删除该状 态W及与该状态相连的边;
[0051] 步骤3:根据代码与模型中元素的对应关系W及修改的变更代码,得到模型中行为 的变更信息,记录变更信息,即模型变更信息,包括修改的元素和修改结果,将变更应用在 模型中,例如修改状态事件的转移条件、边的起始状态W及到达状态等。
[0052] 在模型变更分析过程中,将所有的变更应用在旧的模型上可W得到新版本对应的 模型,运里的模型指行为状态机模型,状态指移动应用的界面状态,状态转换事件指用户交 互事件,例如点击按钮、输入文字等。
[0053] 3、脚本变更修复
[0054] 利用上面得到的模型变更信息,修复和更新脚本中的事件序列,得到能够正常使 用的新脚本,具体步骤为:
[0055] 步骤1:根据脚本和模型元素之间的映射关系,将脚本的语句抽象为事件序列,找 出受到影响的脚本,并获得在模型中相应的状态转移序列。
[0056] 步骤2:根据上面得到的模型变更信息,对脚本进行逐个修复,首先修复事件序列, 然后根据事件与脚本之间的映射关系修复脚本。
[0057] 步骤2.1:如果脚本的事件序列中含有增加变更,则在受到变更影响的事件序列之 间加入新的事件或者增加新的状态转移所对应的事件序列。如图3所示,在状态机模型中, 删除功能本应该从Sl到SO状态,然后根据图2的变更,删除功能后增加了一个对话框,需要 用户确认删除才可W转换到S0,因此图3的状态机模型中加入了一个新状态S3W及相关的 状态转移事件(更改部分W虚线标注),此处测试删除功能需要在删除按钮按下后,增加对 话框的处理才能正常使用。事件序列由原来的S0-〉S1-〉S0变为了 50-乂1-乂3-乂0(此处为 简写,省略了事件触发条件)。
[0058] 步骤2.2:如果脚本的事件序列中含有删除变更,则删除受到变更影响的事件W及 之后所有的事件序列,若对于受到变更影响的事件对应的状态,其前一个状态和后一个状 态之间有其他可用的状态转换事件,则用该事件作为原事件的替代。
[0059] 步骤2.3:如果脚本的行为事件序列中含有修改变更,则修改受到变更影响的元 素,例如触发事件的控件变化等。
[0060] 步骤3:利用修改后的事件序列,脚本与事件之间的映射关系,可W得到修复后的 新脚本,此处脚本语句与时间之间的映射关系预先定义,因此可W用于各类移动应用脚本 测试工具。
[0061] W上的实施例仅为说明本发明的技术思想,不能W此限定本发明的保护范围,凡 是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范 围之内。本发明未设及的技术均可通过现有的技术加 W实现。
【主权项】
1. 一种基于代码变更的移动应用测试脚本自动维护方法,其特征在于,包括以下步骤: 步骤1、代码变更分析: 分析新旧版本代码中产生变化的代码,进行过滤后,获取导致界面行为模型产生变更 的代码变更; 步骤2、模型变更分析: 利用代码和模型中元素的对应关系对模型进行行为变更分析,得到行为变更信息以及 模型变更信息,将变更应用在模型中,得到新模型; 步骤3、脚本变更修复: 将脚本语句抽象为事件序列,根据行为变更信息、模型变更信息,修复和更新脚本中的 事件序列,得到能够正常使用的新脚本。2. 根据权利要求1所述的基于代码变更的移动应用测试脚本自动维护方法,其特征在 于,步骤1中的过滤操作为: 将不能导致界面行为模型产生变更的代码变更进行过滤,包括:代码中的空行、注释、 空白字符,或者中间码中的行号标识、寄存器标识,以及变更不会造成界面行为模型产生变 化的变更。3. 根据权利要求1所述的基于代码变更的移动应用测试脚本自动维护方法,其特征在 于,步骤2具体步骤为: 根据代码与模型中元素的对应关系以及增加的变更代码,得到模型中行为变更信息, 如果变更使得模型中增加新的状态或者事件,则记录变更信息,即为模型变更信息,包含新 状态相关状态的信息,以及事件转换信息、事件触发的条件,并将变更应用在模型中; 根据代码与模型中元素的对应关系以及删除的变更代码,得到模型中行为变更信息, 如果变更使得模型中删除状态或者事件,则记录变更信息,即为模型变更信息,包含该状态 相关状态的信息,以及该状态相关的事件,并将变更应用在模型中; 根据代码与模型中元素的对应关系以及修改的变更代码,得到模型中行为的变更信 息,记录变更信息,即模型变更信息,包括修改的元素和修改结果,并将变更应用在模型中。4. 根据权利要求1所述的基于代码变更的移动应用测试脚本自动维护方法,其特征在 于,步骤3具体步骤为: 步骤3.1:根据脚本和模型之间的映射关系,将脚本语句抽象为事件序列,找出受到变 更影响的脚本,并找到在模型中相应的状态转换序列; 步骤3.2:根据步骤2中得到的模型变更信息,对受影响脚本进行逐个修复,首先修复事 件序列,得到新的可用的事件序列; 如果脚本的事件序列中含有增加变更,则在受到变更影响的事件序列之间加入新的事 件或者增加新的状态转换所对应的事件序列; 如果脚本的事件序列中含有删除变更,则删除受到变更影响的事件以及之后所有的事 件序列,若对于受到变更影响的事件对应的状态,其前一个状态和后一个状态之间有其他 可用的状态转换事件,则用该事件作为原事件的替代; 如果脚本的事件序列中含有修改变更,则修改受到变更影响的元素; 步骤3.3:利用修改后的事件序列,脚本与模型之间的映射关系,得到修复后的新脚本。5. 根据权利要求1或4所述的基于代码变更的移动应用测试脚本自动维护方法,其特征 通过预先定义脚本和模型之间的映射关系表,可应用于各类移动应用脚本测试工具。6.根据权利要求1所述的基于代码变更的移动应用测试脚本自动维护方法,其特征在 于:所述代码变更包括源代码、中间码、二进制码的变更。 在于:
【文档编号】G06F11/36GK106021103SQ201610323917
【公开日】2016年10月12日
【申请日】2016年5月16日
【发明人】王林章, 李筱, 李宣东, 陈志
【申请人】南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1