首页> 中国专利> 一种基于代码变更的移动应用测试脚本自动维护方法

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

摘要

本发明提出的一种基于代码变更的移动应用测试脚本自动维护方法,包括以下步骤:步骤1、代码变更分析:分析新旧版本代码中产生变化的代码,进行过滤后,获取导致界面行为模型产生变更的代码变更;步骤2、模型变更分析:利用代码和模型中元素的对应关系对模型进行行为变更分析,得到行为变更信息以及模型变更信息,将变更应用在模型中,得到新模型;步骤3、脚本变更修复:将脚本语句抽象为事件序列,根据行为变更信息、模型变更信息,修复和更新脚本对应的事件序列,得到能够正常使用的新脚本。对受到影响的脚本中的事件序列进行自动的维护和更新,最终得到可以应用在新版本中的脚本,以减轻测试人员维护脚本的负担。

著录项

  • 公开/公告号CN106021103A

    专利类型发明专利

  • 公开/公告日2016-10-12

    原文格式PDF

  • 申请/专利权人 南京大学;

    申请/专利号CN201610323917.4

  • 发明设计人 王林章;李筱;李宣东;陈志;

    申请日2016-05-16

  • 分类号G06F11/36(20060101);

  • 代理机构32207 南京知识律师事务所;

  • 代理人张苏沛

  • 地址 210046 江苏省南京市栖霞区仙林大道163号

  • 入库时间 2023-06-19 00:39:52

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-01-04

    授权

    授权

  • 2016-11-09

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20160516

    实质审查的生效

  • 2016-10-12

    公开

    公开

说明书

技术领域

本发明涉及移动应用测试中脚本的自动维护方法,属于移动应用测试、脚本测试、模型驱动的测试交叉技术领域。

背景技术

在移动应用领域,移动应用开发周期短且迭代速度快,同时由于设备软硬件种类繁多,需要大量测试工作。在移动应用的测试中,主要采用人工测试以及脚本驱动的测试方法,后者需要测试人员编写大量测试脚本或者采用模型驱动的测试方法自动生成测试脚本,来达到批量测试的目的,此处测试脚本为使用脚本编程语言所写的代码,能够在测试工具的支撑下对应用进行测试。然而在版本迭代回归过程中,功能的增删、布局的改动等都会影响移动应用的界面和结构等内容,使之前正确的脚本失效,降低了脚本回归的效率和能力,违背了自动化测试的初衷,其中一些细小的更改甚至需要测试人员重写大量脚本,增加了测试人员的负担,或者局部的更改需要从模型中重新生成全部脚本,在模型规模较大时会造成较大的开销。由于移动应用为事件驱动的软件,采用界面行为的状态机模型描述较为合适,在状态机模型中可以采用屏幕变化定义状态、采用用户事件定义转换规则,利用行为状态机模型可以描述当前应用的行为、事件序列等,模型与代码、脚本之间存在明确的映射关系。

模型采用建模语言来表示,能够描述软件的行为、结构和功能,贯穿整个开发和测试流程,无论是设计阶段、开发阶段或者是测试阶段,模型都是十分重要的组成部分。模型在测试领域应用也十分的广泛,例如模型驱动的测试是以模型为基础,生成测试用例并进行测试执行,是软件测试中常用的手段和重要的研究课题。模型与设计、代码之间往往有较为明确的对应关系,含有软件的基本信息和结构。然而软件可能会由于需求变更、优化、漏洞修复等各种原因进行版本的变更,版本的变更往往跟随者代码的变更以及模型的变更。

《一种提高性能测试脚本重用率的方法》(申请号:201210474774.9):针对性能测试中的数据变更问题,通过对脚本数据的维护和管理,使得脚本可以应用于变更后的程序,并不修改脚本本身,因此不能适用于代码变更的新版本程序。

《跨模型的图形用户界面测试脚本自动修复方法》(申请号:201110419535.9):生 成两个版本的EFG模型,对新模型中找不到的事件进行修复,在修复过程中还需要工程师逐个指定程序修复的方式,无法一直迭代循环下去,自动化程度较低;且其主要针对测试工具QTP,这类测试工具通常维护一个对象库,脚本的修复可以通过维护对象库进行,而不可以是任意事件驱动的移动应用测试工具。

《自动化测试方法和装置》(申请号:201110222217.3):公开了一种自动化脚本升级方法,在升级后的软件版本上运行原测试脚本时,若检测到原测试脚本的一个测试步骤中存在软件变更点,则跳过测试步骤执行下一个测试步骤;根据软件变更点对原测试脚本进行升级;在升级后的软件版本上运行升级后的测试脚本。主要是在运行过程中找到所有需要的修复点进行更新,通过变更-模型-事件-脚本。无法覆盖所有代码,且一个测试脚本对应一个特定软件,不具有通用性。

发明内容

针对现有技术中存在的问题,本发明提供一种基于代码变更的移动应用测试脚本自动维护方法,自动的维护受到变更影响的旧版本测试脚本中的事件序列,得到可以应用在新版本中的脚本。方法得到的新脚本和新模型可以用于下一次版本迭代时的修复工作。

技术方案为:一种基于变更的移动应用测试脚本自动维护方法,采用代码变更分析技术来比较代码(源代码、中间代码、二进制代码)之间的差异,获取能够导致界面行为模型产生变化的变更,即得到界面模型变更的操作序列,对旧版本模型进行更新,利用代码与模型、模型与测试脚本之间的映射关系,对受到影响的脚本中的事件序列进行自动的维护和更新,从而形成针对新版本可用的脚本。

状态机模型是对移动应用中的事件序列进行的简化,状态机模型包含状态以及在这些状态之间的转移和动作,将界面的转换和用户事件的特征描述出来。

代码、模型、测试脚本之间的映射关系包括一系列映射,这些映射包含了代码与模型、模型事件与测试脚本之间的关系。

具体包括以下步骤:

步骤1、代码变更分析:

分析新旧版本代码中产生变化的代码,对其进行过滤,将不能导致界面行为模型产生变更的代码变更进行过滤,包括:脚本语句源代码中的空行、注释、空白字符,或者中间码中的行号标识、寄存器标识,以及变更不会造成界面行为模型产生变化的变更, 获取导致界面行为模型产生变更的代码变更;

步骤2、模型变更分析:

利用代码和模型中元素的对应关系对模型进行行为变更分析,得到行为变更信息以及模型变更信息,将变更应用在模型中,得到新模型;

根据代码与模型中元素的对应关系以及增加的变更代码,得到模型中行为变更信息,如果变更使得模型中增加新的状态或者事件,则记录变更信息,即为模型变更信息,包含新状态相关状态的信息,以及事件转换信息、事件触发的条件,并将变更应用在模型中;

根据代码与模型中元素的对应关系以及删除的变更代码,得到模型中行为变更信息,如果变更使得模型中删除状态或者事件,则记录变更信息,即为模型变更信息,包含该状态相关状态的信息,以及该状态相关的事件,并将变更应用在模型中;

根据代码与模型中元素的对应关系以及修改的变更代码,得到模型中行为的变更信息,记录变更信息,即模型变更信息,包括修改的元素和修改结果,并将变更应用在模型中。

步骤3、脚本变更修复:

将脚本抽象为事件序列,事件序列为应用上的一系列动作序列,根据行为变更信息、模型变更信息,修复和更新脚本对应的事件序列,得到能够正常使用的新脚本。

步骤3.1:根据脚本和模型之间的映射关系,将脚本语句抽象为事件序列,找出受到变更影响的脚本,并找到在模型中相应的状态转换序列;

步骤3.2:根据步骤2中得到的模型变更信息,对受影响脚本进行逐个修复,首先修复事件序列,得到新的可用的事件序列;

如果脚本的事件序列中含有增加变更,则在受到变更影响的事件之间加入新的事件或者增加新的状态转换对应的事件序列;

如果脚本的事件序列中含有删除变更,则删除受到变更影响的事件以及之后所有的事件序列,若对于受到变更影响的事件对应的状态,其前一个状态和后一个状态之间有其他可用的状态转换事件,则用该事件作为原事件的替代;

如果脚本的事件序列中含有修改变更,则修改受到变更影响的元素;

步骤3.3:利用修改后的事件序列,脚本与模型之间的映射关系,得到修复后的新脚本。

通过预先定义脚本和模型之间的映射关系表,可应用于各类移动应用脚本测试工具。

本发明具有如下有益效果:本发明的基于代码变更的移动应用测试脚本自动维护方法中,通过分析移动应用两个版本之间的差异,包括源代码的变更、中间码的变更、二进制码的变更(以上统称为代码的变更),识别两个版本之间的事件变更,包括增加、删除、修改等,获取会导致界面行为发生变化的变更,将变更应用在状态机模型上,通过脚本与模型中事件的映射关系,自动的修复测试脚本,减轻了测试人员维护测试脚本的负担。具体说来,本发明所述的方法具有如下有益效果:

(1)在本发明所述的基于代码变更的移动应用测试脚本自动维护方法中,代码差异是通过自动分析出来的,并且能够自动过滤不相关的变更差异,减轻测试人员的负担。

(2)在本发明所述的基于代码变更的移动应用测试脚本自动维护方法中,代码包含源代码、中间码、二进制码,有较高通用性,在无源码的第三方测试中也可以使用。

(3)在本发明所述的基于代码变更的移动应用测试脚本自动维护方法中,将脚本语句抽象为事件序列,可以根据给定的脚本语句和事件之间的映射关系,应用到各类脚本测试工具中,不限制使用的工具和脚本语言,具有较高通用性。

(4)在本发明所述的基于代码变更的移动应用测试脚本自动维护方法中,在维护脚本的过程中也维护了应用的行为状态机模型,可以应用于其他开发和测试过程中。

(5)在本发明所述的基于代码变更的移动应用测试脚本自动维护方法中,方法得到的新脚本和新模型可以作为下一次修复的输入,以此循环,减轻测试人员负担。

附图说明

图1是本发明实施例的流程示意图。

图2是本发明实施例的代码变更分析流程示意图。

图3是本发明实施例的模型变更与脚本修复的示意图。

具体实施方式

为了便于本领域技术人员的理解,下面结合实施例与附图对本发明作进一步的说明。

本发明所述的基于代码变更的移动应用测试脚本自动维护方法具体实施中,首先需 要两个版本的代码(源代码、中间码、二进制码等),旧版本对应的行为状态机模型以及测试脚本,旧版本代码与状态机模型之间的映射关系以及模型事件与脚本之间的映射关系,可以通过版本控制管理不同版本。本发明首先对不同版本的代码进行代码变更分析,得到能够导致应用行为模型产生变更的代码变更,并将其抽象为模型行为变更,包括增加、删除、修改变更,并更新模型,然后将测试脚本抽象为事件序列,对于受到变更影响的事件序列,根据模型行为变更修复该事件序列,并转换为相应的脚本语言,从而完成脚本的修复。

本发明所述的基于代码变更的移动应用测试脚本自动维护方法具体实施流程如图1所示。下面根据附图,对本发明作更详细的描述。

1、代码变更分析

本发明所述的基于代码变更的移动应用测试脚本自动维护方法具体实施中,需要对两个版本的代码进行分析,找出其中的差异。使用以下两个版本源代码之间的diff片段为例:

“-”表示旧版本存在而新版本不存在的语句,而“+”表示在新版本中存在但是旧版本中不存在的语句,在此样例中,“删除”功能按键后增加了一个确认弹出框。方法 需要将有效的变更抽取出来,如图2所示的过程,通过代码分析得到代码的整体结构和关键点的内容,从而分析两个版本间代码结构间的差异,来抽取代码间的差异。在此过程中我们需要忽略无用的变更、不影响的变更。

无用的变更主要是指源代码中的空行、注释、空白字符,或者中间码中的行号标识、寄存器标识等,这些变更不会影响程序的语义,进而不会影响程序本身的结构和行为,因此此类变更可以直接忽略。

不影响的变更是指变更不会造成界面行为模型产生变化,例如不会影响事件的触发和处理等,即对整体行为模型没有任何影响的变更,例如程序逻辑不变的情况下更换了实现语句,如for和while循环的更替等。

代码变更分析对整体代码进行分析和比较,在具体实施时需要按需修改相应代码的遍历分析工具或者修改编译器的前端,对语义进行抽象和抽取,得到有效的代码变更内容。

2、模型变更分析

获取代码变更后,利用代码和模型中元素的映射关系对模型进行变更分析,得到行为变更信息以及模型变更信息。具体步骤为:

步骤1:根据代码与模型中元素的对应关系以及增加的变更代码,得到模型中行为变更信息,如果变更使得模型中增加新的状态或者状态转移事件,则记录变更信息,即为模型的变更信息,此处包含新状态相关状态的信息,以及转移条件等,将变更应用在模型中,若新增加转移事件,则在模型中在两个状态之间新增一条边,若新加状态,需要在模型中增加状态以及所有该状态相关的状态转移时间,并标注转移条件;

步骤2:根据代码与模型中元素的对应关系以及删除的变更代码,得到模型中行为变更信息,如果变更使得模型中删除状态或者状态转移事件,则记录变更信息,即为模型的变更信息,此处包含该状态相关状态的信息,以及该状态相关的转移事件,将变更应用在模型中,若删除状态转移事件,则在模型中删除相应的边,若删除状态,则在模型中删除该状态以及与该状态相连的边;

步骤3:根据代码与模型中元素的对应关系以及修改的变更代码,得到模型中行为的变更信息,记录变更信息,即模型变更信息,包括修改的元素和修改结果,将变更应用在模型中,例如修改状态事件的转移条件、边的起始状态以及到达状态等。

在模型变更分析过程中,将所有的变更应用在旧的模型上可以得到新版本对应的模 型,这里的模型指行为状态机模型,状态指移动应用的界面状态,状态转换事件指用户交互事件,例如点击按钮、输入文字等。

3、脚本变更修复

利用上面得到的模型变更信息,修复和更新脚本中的事件序列,得到能够正常使用的新脚本,具体步骤为:

步骤1:根据脚本和模型元素之间的映射关系,将脚本的语句抽象为事件序列,找出受到影响的脚本,并获得在模型中相应的状态转移序列。

步骤2:根据上面得到的模型变更信息,对脚本进行逐个修复,首先修复事件序列,然后根据事件与脚本之间的映射关系修复脚本。

步骤2.1:如果脚本的事件序列中含有增加变更,则在受到变更影响的事件序列之间加入新的事件或者增加新的状态转移所对应的事件序列。如图3所示,在状态机模型中,删除功能本应该从S1到S0状态,然后根据图2的变更,删除功能后增加了一个对话框,需要用户确认删除才可以转换到S0,因此图3的状态机模型中加入了一个新状态S3以及相关的状态转移事件(更改部分以虚线标注),此处测试删除功能需要在删除按钮按下后,增加对话框的处理才能正常使用。事件序列由原来的S0->S1->S0变为了S0->S1->S3->S0(此处为简写,省略了事件触发条件)。

步骤2.2:如果脚本的事件序列中含有删除变更,则删除受到变更影响的事件以及之后所有的事件序列,若对于受到变更影响的事件对应的状态,其前一个状态和后一个状态之间有其他可用的状态转换事件,则用该事件作为原事件的替代。

步骤2.3:如果脚本的行为事件序列中含有修改变更,则修改受到变更影响的元素,例如触发事件的控件变化等。

步骤3:利用修改后的事件序列,脚本与事件之间的映射关系,可以得到修复后的新脚本,此处脚本语句与时间之间的映射关系预先定义,因此可以用于各类移动应用脚本测试工具。

以上的实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。本发明未涉及的技术均可通过现有的技术加以实现。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号