CN104407977B - 基于模型检测的分阶段任务***的自动化联调测试方法 - Google Patents

基于模型检测的分阶段任务***的自动化联调测试方法 Download PDF

Info

Publication number
CN104407977B
CN104407977B CN201410742936.1A CN201410742936A CN104407977B CN 104407977 B CN104407977 B CN 104407977B CN 201410742936 A CN201410742936 A CN 201410742936A CN 104407977 B CN104407977 B CN 104407977B
Authority
CN
China
Prior art keywords
test
state
sut
model
stage
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.)
Expired - Fee Related
Application number
CN201410742936.1A
Other languages
English (en)
Other versions
CN104407977A (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.)
Beihang University
Original Assignee
Beihang 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 Beihang University filed Critical Beihang University
Priority to CN201410742936.1A priority Critical patent/CN104407977B/zh
Publication of CN104407977A publication Critical patent/CN104407977A/zh
Application granted granted Critical
Publication of CN104407977B publication Critical patent/CN104407977B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于模型检测的分阶段任务***的自动化联调测试方法,由自动化测试***和测试框架配合完成。本方法对被测***划分阶段,确定各阶段被测***的行为主体及元素、行为主体的状态集;抽象被测***的窗口树模型和状态图模型;依据窗口树模型,自动批量化生成测试用例以形成测试用例集;测试框架将测试用例进行可执行化操作,送入被测***执行,捕捉状态变化信息发送给自动化测试***;自动化测试***解析消息包获取状态转移序列,利用状态图模型比较获取检测结果。本发明有效地改善了因为手动编辑测试用例导致的覆盖不完全、效率低下的问题,并且自动化测试***与环境在设计时采用了模块化的设计思想,具有良好的可扩展性。

Description

基于模型检测的分阶段任务***的自动化联调测试方法
技术领域
本发明涉及基于模型检测的自动化测试方法,具体是一种基于模型检测的分阶段任务***(Phased-MissionSystem,简记为PMS)的自动化联调测试方法。
背景技术
随着信息化建设在各个领域的深入开展,软件***变得越来越复杂。分阶段任务***由一系列具有时间连续且不相互覆盖的基本任务阶段组成,且每个基本任务阶段有不同的任务可靠性要求,是一种典型的复杂任务***。
任务***广泛应用于灾害救援、航空、航天等安全关键领域,应急处置是目前国内外重要研究内容,包括应急响应与应急救援,可应用于强震救援、海啸救援、反恐处置等各种强时间约束的应急处置领域,而实现应急处置的及时性需要各类统计数据的及时送达,以实现决策支持,实施高效处置活动。例如,随着近几年来地震灾情的频频发生,如汶川地震、雅安地震等。地震救援应急处置已经成为人们十分关心的问题,研究灾后的应用处置问题不仅有着十分重要的理论意义,而且具有极其重要的实际意义,而该领域属于基于时空数据的任务***问题。再如,近年来一些地区发生的各类恐怖袭击事件,如何及时有效的进行应急处置也属于本项目的研究内容。尤其对于空天任务***的运行,其可信性更是“安全攸关(safety-crucial)”。对于此类阶段任务***的可信性验证,模型检测(ModelChecking)是一种有效的手段。
发明内容
本发明要解决的技术问题是针对分阶段任务***的联调测试的需求,提出一种基于模型检测的分阶段任务***的自动化联调测试方法,通过对被测***的窗口树模型和状态图模型进行抽象建模、构建自动化测试***与环境,完成对分阶段任务***的联调测试工作,目前该方法能够实际地应用于地震应急响应***这样的大型分阶段任务***。
本发明提供的基于模型检测的分阶段任务***的自动化联调测试方法,构建自动化测试***与环境对分阶段任务***进行联调测试,整个测试过程由自动化测试***和测试框架配合完成。
第一部分是自动化测试***,功能包括:
(1)对被测***进行窗口树建模并自动生成测试用例;
(2)根据***运行状态转移与理论状态模型,对***的运行情况进行验证;
(3)依据检测通过率评价算法对被测***进行评估。
第二部分是测试框架,功能包括:
(1)让被测***运行测试用例;
(2)捕获***中的状态转移信息;
(3)负责被测***与测试***之间的通信工作。
本发明提供的基于模型检测的分阶段任务***的自动化联调测试方法,包括如下步骤:
步骤一:划分被测***阶段,定义待联调测试的各阶段被测***的行为主体及包含的元素,确定元素的状态集和行为主体的状态集。本步骤中结合具体***穷举行为主体元素的状态集,最终确定行为主体的状态集。
步骤二:依据窗口树模型和状态图模型定义,抽象被测***的窗口树模型和状态图模型;窗口树模型中节点为窗口,连接节点的边是事件,对被测***实现情况进行窗口树建模;对任务***设计情况进行状态图建模,所述的状态图模型用于描述被测***的状态迁移信息;
步骤三:窗口树模型构造完毕后,测试用例自动生成模块依据窗口树模型的信息,自动批量化生成测试用例,并将生成的测试用例放入到测试用例集中,待测试用例全部生成完毕后将测试用例集发送到测试框架;
步骤四:测试框架接收到测试用例集后,对其中的每一个测试用例进行可执行化操作;所述的可执行化操作是指为测试用例中的每个API选择相匹配类型的参数数据并代入,使API能够在被测***中执行;
步骤五:将测试用例集中的每一个测试用例,依次带入到被测***中进行执行,在此期间捕捉被测***状态变化信息;
步骤六:根据被测***与测试框架之间协议的数据格式,将步骤五中得到的被测***状态变化信息封装成消息包,通过网络发送到自动化测试***中做进一步处理;
步骤七:自动化测试***接收到消息包后,按照协议解析消息包,提取其中的被测***状态变化信息并按照次序存放在状态转移序列中。该步骤循环进行,直到收到测试框架发来的一个测试用例执行完毕的消息后,将状态转移序列与状态图模型一同送入模型检测模块进行处理,同时清空目前的状态转移序列,等待下一个消息包。
步骤八:模型检测模块对被测***的实际运行情况与理论运行情况进行比较。具体做法是:将状态转移序列中的每个状态依次带入到状态图模型中进行检测,检查状态图模型中是否存在一条满足该状态转移序列的路径。当状态转移序列全部代入后,将检测结果带入到通过率评价公式中,最终输出联调测试通过率评估报告。
本发明提出了一种基于模型检测的分阶段任务***的自动化联调测试方法,其优点在于:
(1)测试效率高:在面对大量的测试用例时,测试者不必手工编写测试用例,只需要对被测***建立窗口树模型,将模型作为输入导入到***中便可以自动生成测试用例,减少了测试者的工作负担;
(2)测试准确率高:自动化工作可以避免手工或手动测试中因为人为失误导致的遗漏,提升了测试过程中的准确率;
(3)结果直观:本发明涉及到的模型检测模块能够对被测***的实际运行情况进行检验和评估,最终输出的联调测试通过率评估报告结果直观;
(4)可扩展性强:自动化测试***在设计时采用了模块化的设计方式,任何模块都可以根据实际使用的需求做出相应的调整,灵活方便。
附图说明
图1为本发明方法所采用的自动化测试***与环境结构图;
图2为本发明的基于模型检测的分阶段任务***的自动化联调测试方法整体流程图;
图3中,(A)为强震发生阶段的窗口树模型图,(B)为应急响应阶段的窗口树模型图;
图4为本发明的步骤三中测试用例自动生成的步骤流程图;
图5为一个具体的API可执行化过程图;
图6为模型检测的步骤流程图。
图7为本发明实施例中联调测试通过率评估报告示意图。
具体实施方式
下面将结合附图和实施例对本发明作进一步的详细说明。
本发明提出了一种基于模型检测的分阶段任务***的自动化联调测试方法,整体上分为两个部分。
第一部分是自动化测试***,功能包括:
(1)对被测***进行窗口树建模并自动生成测试用例;
(2)根据***运行状态转移与理论状态模型,对***的运行情况进行验证;
(3)依据检测通过率公式对被测***进行评估。
第二部分是测试框架,功能包括:
(1)让被测***运行测试用例;
(2)捕获***中的状态转移信息;
(3)负责被测***与测试***之间的通信工作。
如图1所示,本发明基于模型检测的分阶段任务***联调方法实施过程由基于模型检测的自动化测试***和测试框架两部分共同完成,其中输入内容为窗口树模型文件与状态图模型文件,输出为联调测试通过率评估报告。基于模型检测的自动化测试***包括了测试用例自动生成模块、模型检测模块和通过率评估模块,其中测试用例自动生成模块用于根据窗口树模型自动批量化生成测试用例以形成测试用例集,模型检测模块用于对被测***的实际运行情况与理论运行情况进行比较,通过率评估模块根据通过率评价公式,对检测结果进行计算并输出联调测试通过率评估报告。测试框架则包含了测试用例可执行模块、消息管理模块以及被测***,其中测试用例可执行模块用于对测试用例进行可执行化操作,消息管理模块用于传递自动化测试***和测试框架之间的数据包。自动化测试***与测试框架借助网络根据协议的数据格式进行通讯。
具体地,本发明提出的基于模型检测的分阶段任务***的自动化联调测试方法,如图2所示,该方法包括五个时段,八个步骤。
时段I:***抽象。
该时段主要完成的工作是对被测***进行抽象,目标是获得描述被测***实现和理论情况的窗口树模型和状态图模型,以便计算机识别这些信息并自动化的进行处理。
步骤1:划分被测***阶段,确定被测***行为主体及包含的元素,以及元素的状态集,并确定行为主体的状态集。
被测***也就是任务***,首先对被测***的阶段Phase进行划分,设划分为N个阶段,划分后的被测***可以用多个阶段{Phase1,Phase2,…,PhaseN}进行描述。通过划分多个阶段,可以分阶段的为被测***进行建模,然后再从总体上进行合并,生成更加复杂的整体流程。
在本实施例中,地震应急响应***被划分为日常值守阶段、强震发生阶段、***响应阶段、应急处置阶段一共四个阶段。
然后定义待联调测试的阶段任务***的行为主体为任务(Mission),为行为主体建模。本发明中行为主体包含两个元素,即Mission=(Flow,Report),其中,Mission是任务,Flow是流程,Report是报告。同时确定行为主体的元素的状态,行为主体状态由元素状态组合确定,本发明指任务的状态Mission_State=(Flow_State,Report_State),其中Mission_State是任务的状态,Flow_State是流程的状态,Report_State是报告的状态。
结合具体***穷举行为主体元素的状态集:
Flow_State={Flow_State1,Flow_State2,…,Flow_Statem}
Report_State={Report_State1,Report_State2,…,Report_Staten}
其中,m表示流程的状态个数,n表示报告的状态个数。
通过组合生成行为主体状态集Mission_State_Set:
Mission _ State _ Set = { ( Flow _ State i , Report _ State j ) | i = 1 . . m , j = 1 . . n } ⊆ { Flow _ State , Report _ State }
在这里,行为主体状态集Mission_State_Set是Flow_State和Report_State笛卡尔积的子集,因为笛卡尔积中的结果可能存在冗余或不符合***设计情况的种类。
另外,行为主体状态集中的状态变化是由于API(ApplicationProgrammingInterface,应用程序编程接口)的运行而改变的,因此将主体状态集中的元素与API进行关联可以得到有序三元组,其中***的API集合为API-Set:
(Mission_Statei,Mission_Statej,APIm)且Mission_Statei,Mission_Statej∈Mission_State_Set∪APIm∈API_Set
这些三元组组成的集合是对***理论转移情况的描述,该信息用于构建被测***的状态图模型。
本实施例中,通过对被测***的理论设计进行分析和总结,得到的流程状态集和报告状态集如下:
流程状态集={null,创建,流转,等待,暂停,夭折,结束}
报告状态集={null,创建,实例化,编辑}
因此经过组合得到的行为主体状态集,也就是任务状态集如下:
{(null,创建),(创建,创建),(流转,实例化),(流转,编辑),(等待,编辑),(暂停,创建),
(暂停,实例化),(暂停,编辑),(夭折,null),(结束,null)}。
步骤2:依据被测***的实现情况和理论情况,抽象被测***的窗口树模型和状态图模型。
对被测***进行自动化测试的第一步是生成用于测试的测试用例。本发明提出了窗口树模型的概念用于批量生成测试用例。窗口树模型是对***实际功能的抽象,其既可以对GUI(GraphicalUserInterface,图形用户接口)进行描述,同时也可以对***内部进行描述。虽然***内部并不存在GUI这样的可见窗口,但是***内部的行为却是与GUI有着相似性。一般情况下,任务***的执行过程可以看作是由大量窗口组成的,从一个窗口到另一个窗口一般是经过一个或多个事件。并且可能由于参数的不同导致调用API不同,就会产生不同的分支,最终形成类似一棵树的形态,称之为窗口树。窗口树中的节点为窗口,连接节点的边是事件。
窗口树定义为四元组(W,w0,E,RW,E),其中:
●W是窗口的集合,窗口w∈W为一个节点;
●w0∈W为初始窗口,是窗口树的根节点,即被测***的初始窗口;
●E为事件合集,即窗口与窗口之间流转的API集合;
●RW,E∈W×W×E,表示窗口之间的流转关系,如果存在(wi,wj,e)∈RW,E且e∈E,则表示窗口节点wi和窗口节点wj之间存在父子关系,且wi为父节点,wj为子节点,wi窗口通过调用e流转到wj窗口。
在本发明方法中,窗口树模型采用XML描述,树上的每一个节点通过多个字段值进行描述,如下所示:
其中,具体定义的字段为:
●sons:子节点名称,可以包含多个子节点名称;
●parent:父节点名称,表示该节点的父节点;
●api:事件名称,指的是通过运行什么事件可以到达该窗口,也就是父节点与该节点连接边;
●states:状态集,表示该节点的状态,可以存储不止一个状态变量。
本实施例中,根据步骤一对被测***阶段进行划分得到的四个阶段分别进行窗口树建模,得到了四个不同阶段的窗口树,其中图3中的(A)和(B)分别为强震发生阶段和应急响应阶段的窗口树模型,连接边上所示为所运行的API。接下来对四个阶段的窗口树进行合并操作,可获得代表整个***的窗口树模型。
除了对窗口树模型的抽象,本步骤还需要对状态图进行抽象。本发明方法定义的状态图刻画了被测***理论的正常行为,因此可以通过对比状态图模型和***实际运行情况来判断***运转是否正常。状态图中的节点是被测***的运行状态,有向边表示状态迁移所需要执行的API。
状态图定义为五元组(S,s0,E,RS,E,F),构成如下:
●S表示状态图中所有状态的有限集合;
●s0表示初始状态,s0∈S;
●E表示事件或者是事件序列集合;
●RS,E是状态转移集合函数,δ:S×E→S;
●F是终止状态集合,
同样地,状态图模型也采用XML进行描述,图中的每一个节点通过多个字段值进行描述,如下所示:
其中各字段定义如下:
●states:状态集,表示该节点的状态,可以存储不止一个状态变量;
●edges:边集合,表示以该节点为起点的所有的有向边集合,每条边记录了转移事件API和终点节点Id。FILLIN_TEMPLATE表示实例化的API。
时段II:生成测试用例。
该时段主要完成工作是生成测试***所用的测试用例,本方法采用测试用例自动生成的方式,依据窗口树模型遍历产生被测***可能出现的所有API序列,并通过可执行化操作让这些API序列可以直接带入到被测***中运行,为***运行时做好数据准备。
步骤3:测试用例自动生成模块读取窗口树模型文件,批量化的生成测试用例。
测试用例自动生成是根据窗口树模型对于***实际实现情况的描述,按照可能的操作流程自动生成操作序列即测试用例。按照步骤2中所说明的窗口树模型信息,找到窗口树模型的根节点可以对所有的可能操作进行遍历,依据该思路便可以完成测试用例的自动化生成工作。
该步骤流程图见图4,具体来说,分为如下几个子步骤:
步骤3.1,数据初始化,读取XML的窗口树模型,载入各个节点信息并根据节点间关系构造一棵树,并设置当前节点NowRoot为树根Root,同时清空缓冲队列APIList,跳转步骤3.2;
步骤3.2,判断NowRoot是否为空,如果为空跳转步骤3.7,如果不为空则跳转步骤3.3;
步骤3.3,判断当前节点是否为叶子节点,如果不是则将当前节点加入到APIList中,并跳转步骤3.4,如果是则跳转步骤3.6;
步骤3.4:判断当前节点是否还存在未访问的子节点,如果存在则将子节点设置为当前节点NowRoot,跳转步骤3.2,不存在则跳转3.5;
步骤3.5:将NowRoot从缓冲队列APIList中移除,并设置其父节点为NowRoot,跳转步骤3.4;
步骤3.6:将该叶子节点加入到缓存队列APIList中,然后将缓冲序列中的内容作为一个测试用例保存到测试用例集中,再跳转步骤3.5;
步骤3.7:获得测试用例集,流程结束。
通过上述步骤即可自动化的生成测试用例集,这些测试用例集将会在下一步的可执行化操作中进行处理,以保证被测***可以直接运行这些测试用例。
在本实施例中,图3(A)所示的应急响应阶段根据上述步骤,会产生两个API序列,因为整棵树只有两条分支,它们分别是null->FILLIN_TEMPLATE->SEND_FORM->VIEW_FORM和null->FILLIN_TEMPLATE->SEND_FORM->EDIT_FORM,最开始部分的null是代表***的初始状态,这时候不需要执行API。
步骤4:测试用例的可执行化处理。
测试框架接收到的测试用例并不能直接应用于被测***,因为它们目前只是API序列集,需要带入适当的参数才能够运行,因此要进行测试用例的可执行化。这需要准备好一系列不同类型的数据,对于每一个API选择和其参数类型匹配得上的数据代入到其中生成可执行化的测试用例并保存起来等待下一步操作。
在本实施例中,一次具体的可执行化过程如图5所示。在对测试用例集中一个名为FILLIN_TEMPLATE的API进行可执行化的过程中,通过分析API的参数可以得知该方法需要两个字符串类型,并且为EQID和TEMPLATEID,因此从提前注册好的参数表中找到适合该API的两个参数添加到其中完成可执行化操作,这样处理之后的API便可以带入到被测***中直接运行。
时段III:被测***运行测试用例。
该时段的主要工作是让被测***运行测试用例,获得被测***的状态转移情况,这些信息将用来判断被测***的运行是否符合预期。
步骤5:被测***运行测试用例。
测试用例集中的每一个测试用例经过步骤4的可执行化处理后,依次代入到被测***中执行。每一个API的执行会对***内部的状态产生影响,状态变化信息被测试框架捕获,待后续步骤处理。
在对地震应急***进行联调测试时,一个名称为FILL_IN_TEMPLATE的API执行时,将被测***的状态从(流转,创建)变为(流转,实例化),这个改变被测试框架捕捉到后将最新的状态与对应的API名称提取出来,即(流转,实例化,FILL_IN_TEMPLATE)。
时段IV:消息处置。
本时段的主要工作是将时段III中捕获到的消息进行封装、传送和分析。被测***的状态转移信息需要被送入测试***才能进行处理。因此需要在测试框架中依据指定数据格式封装为消息包,通过网络发送到测试***中,才能进行后续的分析工作。
步骤6:将状态信息按照协商好的数据格式封装成消息包发送到自动化测试***。
在捕捉到被测***的状态变化后,测试框架将根据与自动化测试***协商好的数据格式,将状态和其他相关的信息(如时间、类型等)封装成一个消息包,通过网络发送到外部的自动化测试***。在这里,为了能够保证多个测试***同时监听处理不同的消息包,测试框架允许测试***进行注册,登记测试***地址和关注的消息类型,每当有新的消息包产生,测试框架便会根据这个注册表将消息进行分发。
本实施例中,基于模型检测的自动化测试***向测试框架进行了注册,登记了该***的地址和关注的消息类型,同时测试框架在登记消息的过程中也保存了该自动化测试***注册的时间,这些字段信息保存在由测试框架维护的注册表中,其格式如下表所示:
表1测试框架维护的注册表格式
RegAddress TimeStamp Favorites
192.168.1.102 2014-07-2216:30:44.0 MSG_STCH
各参数含义如下:
●RegAddress:注册地址,String类型,保存注册***通讯时使用的地址信息,一般情况下为IP地址;
●TimeStamp:时间戳,String类型,保存外来***注册登记的时间;
●Favorites:关注点,String数组类型,保存注册***想要接收的消息类型。
在本实施例中,测试框架在捕获到被测***状态改变后,按照指定的消息包格式和协议格式生成通信用的消息包,并通过发送模块将消息进行分发,其中向地址为192.168.1.102发送的消息包格式如表2所示:
表2测试框架与自动化测试***之间通信的消息格式
其中的各参数说明如下:
MsgType:消息类型,String类型,在本实施例中该字段值为MSG_STCH;
TimeStamp:时间戳,String类型,表示该消息包产生的时间;
Description:描述,String类型,对消息进行附加描述,一般在正常构造的情况下该字段为regular;
Destination:目标,String类型,表示该消息将会发送到指定目标地址;
DataFormat:数据格式,String类型,该类型表示之后的数据段采用怎样的方式进行保存;
Data:数据段,String类型,保存消息包所要发送的数据,数据的格式由设定的协议类型ProtocolType决定,在本实施例中,Data段由两个状态变量和对应的API名称组成。
另外,每当一个测试用例运行完毕后,测试框架会生成一个执行完毕的消息包向外发送,以确保自动化测试***对之前接收的消息进行处理。
步骤7:自动化测试***接收并处理消息,生成状态转移序列,结合状态图模型一并送入模型检测模块等待处理。
自动化测试***接收到测试框架发来的消息包,首先将消息包按照指定数据封装格式进行读取,提取出被测***的状态并保存到一个队列中,该队列便是被测***的状态转移队列。该行为一直执行直到接收到结束消息,接收到后将这个队列保存在一个新的位置即状态转移序列,并清空队列等待接收新的消息包。同时将这个状态转移序列与状态图模型一同送入模型检测模块,进行下一步处理。
在本实施例中,基于模型检测的自动化测试***接收到来自测试框架的消息包,对消息的固定字段进行分析可以知道其中的Data字段是采用命名为P_3的数据格式进行的封装,即数据是由“,”进行分割的,因此根据该数据格式的描述将Data字段进行拆解,并将该状态存入到队列中。
时段V:模型检测。
该时段的主要工作是将时段IV处理得到的被测***的状态转移序列,与状态图模型进行比对,检查被测***的运行是否符合理论预期,并结合通过率公式,输出联调测试通过率评估报告,完成了被测***的联调测试工作。
步骤8:模型检测模块结合状态图模型对被测***实际运行情况进行检测,并生成对应的检测结果。
模型检测是根据描述***理论运行情况的状态图模型,将***实际运行的状态转移序列带入其中进行检查。按照步骤2中所说明的状态图模型信息,模型检测***会读取状态图模型XML文件信息,并采用图的结构进行存储,然后将序列带入到图中检查是否存在合法的路径与其对应,通过这样的过程便可以完成模型检测工作。
模型检测模块的处理步骤如图6所示,具体来说分为以下几个子步骤:
步骤8.1,读取XML的状态图模型文件信息,对文件中描述的每一个节点的数据进行数字化描述,映射成为状态图中的一个节点,同时将与该节点有关联的其他节点用有向线段连接起来,直到整个XML文件处理完毕,获得状态图G;
步骤8.2,令状态转移序列为S={s0,s1,…,sn},当前匹配的状态NowS为si,初始i=0,同时对应的API序列为API={api0,api1,…,apin-1};
步骤8.3,若状态转移序列中的(si,si+1,apii)在状态图G中匹配成功,则说明(si,si+1,apii)合法,记录该apii正确执行一次,否则记录该apii错误执行一次,然后执行步骤8.4;
步骤8.4,在记录行为结束后,更新i=i+1,如果更新后的i>n-1,则跳转到步骤8.5,否则跳转到步骤8.3;
步骤8.5,如果统计中有API错误执行记录,则说明被测***实际运行状态不符合预期,即对应的测试用例执行不正确,反则说明被测***实际运行状态符合预期,测试用例正常运行。
通过上述步骤可以对被测***的状态转移序列进行检测,并统计出详细的运行结果和API执行情况。通过对这些统计结果进行进一步分析,可以得到被测***的通过率。
对于一个测试用例集TS来说,假设其包含K个测试用例TC,则每一个TC都包含着许多个API。在这里令不同的API都具有不同的权重M,这是考虑到每个API在整个被测***中的重要程度不同。
当一个API执行时,有限状态机将会检查状态跳转是否符合预期,对于状态Si,当API执行后被测***状态转移与理论转移不一致时,则记录该API一次错误,否则记录该API一次正确。那么,当测试用例集TS都运行过后,对于整个***中的每一个API都有两个值,正确执行次数Gi和错误执行次数Bi
在测试用例运行过程中,API越重要,它所占据的权重比M越大,因此衡量被测***通过率公式Pes如下:
P es = Σ i = 1 K [ G i × M i ] Σ i = 1 K [ ( G i + B i ) × M i ] , 其中Mi≥0且 Σ i = 1 K M i = 1
其中,K表示API的个数,Mi表示第i个API的权重,Gi和Bi分别表示第i个API的正确执行次数和错误执行次数。
在本实施例中,步骤三中生成的两个测试用例在执行完毕后,将产生的状态转移信息依次根据上述步骤处理,可以得到图7中的信息,其中包括了每个测试用例的运行情况、API的执行信息统计以及测试通过率。
最终生成的联调测试通过率评估报告包含了模型检测过程中的测试用例具体执行情况、检测情况以及通过率评估值,这些具体、直观的信息将对于帮助开发者改善***会有较大的帮助。

Claims (6)

1.一种基于模型检测的分阶段任务***的自动化联调测试方法,其特征在于,该方法由自动化测试***和测试框架配合完成,实现步骤如下:
步骤一:划分被测***阶段,定义各阶段被测***的行为主体及包含的元素,确定元素的状态集和行为主体的状态集;
步骤二:抽象被测***的窗口树模型和状态图模型;所述的窗口树模型中节点为窗口,连接节点的边是事件;所述的状态图模型用于描述被测***的状态迁移信息;
步骤三:依据得到的窗口树模型,自动批量化生成测试用例以形成测试用例集,将测试用例集发送到测试框架;
步骤四:测试框架接收到测试用例集后,对其中的每一个测试用例进行可执行化操作;所述的可执行化操作是指为测试用例中的每个API选择相匹配类型的参数数据并代入,使API能够在被测***中执行;
步骤五:将测试用例集中的每一个测试用例,依次带入到被测***中进行执行,在此期间捕捉被测***状态变化信息;
步骤六:根据自动化测试***与测试框架之间协议的数据格式,将步骤五中得到的被测***状态变化信息封装成消息包,通过网络发送到自动化测试***;
步骤七:自动化测试***接收到消息包后,解析消息包,提取其中的被测***状态变化信息并按照次序存放在***状态转移序列中;步骤七循环进行,直到收到一个测试用例执行完毕的消息后,将***状态转移序列与状态图模型一同送入自动化测试***进行处理,同时清空目前***状态转移序列,等待下一个消息包;
步骤八:对被测***的实际运行情况与理论运行情况进行比较,具体是:将状态转移序列中的每个状态依次带入到状态图模型中进行检测,检查状态图中是否存在一条满足该状态转移序列的路径;当所有的状态转移序列全部代入后,将检测结果带入到通过率评价公式中,最终输出联调测试通过率评估报告。
2.根据权利要求1所述的基于模型检测的分阶段任务***的自动化联调测试方法,其特征在于,步骤二中所述的窗口树定义为四元组(W,w0,E,RW,E),其中:
(1)W是窗口的集合;
(2)w0∈W为初始窗口,是窗口树的根节点;
(3)E为事件合集,为窗口与窗口之间流转的API集合;
(4)RW,E∈W×W×E,表示窗口之间的流转关系,如果存在(wi,wj,e)∈RW,E,e∈E,wi,wj∈W,则表示窗口wi和窗口wj之间存在父子关系,且wi为父节点,wj为子节点,窗口wi通过调用e流转到窗口wj
3.根据权利要求1所述的基于模型检测的分阶段任务***的自动化联调测试方法,其特征在于,步骤二中所述的状态图定义为五元组(S,s0,E,RS,E,F),构成如下:
(1)S表示状态图中所有状态的有限集合;
(2)s0表示初始状态,s0∈S;
(3)E表示事件或者是事件序列集合;
(4)RS,E是状态转移集合函数,δ:S×E→S;
(5)F是终止状态集合,
4.根据权利要求1所述的基于模型检测的分阶段任务***的自动化联调测试方法,其特征在于,步骤三中所述的自动批量化生成测试用例,具体步骤如下:
步骤3.1,读取窗口树模型,载入各个节点信息并根据节点间关系构造一棵树,并设置当前节点NowRoot为树根Root,同时清空缓冲队列APIList,跳转步骤3.2;
步骤3.2,判断NowRoot是否为空,如果为空跳转步骤3.7,如果不为空则跳转步骤3.3;
步骤3.3,判断当前节点是否为叶子节点,如果不是则将当前节点加入到APIList中,并跳转步骤3.4,如果是则跳转步骤3.6;
步骤3.4:判断当前节点是否还存在未访问的子节点,如果存在则将一未访问的子节点设置为当前节点NowRoot,跳转步骤3.2,不存在则跳转步骤3.5;
步骤3.5:将NowRoot从缓冲队列APIList中移除,并设置其父节点为NowRoot,跳转步骤3.4;
步骤3.6:将该叶子节点加入到缓存队列APIList中,然后将缓冲序列中的内容作为一个测试用例保存到测试用例集中,再跳转步骤3.5;
步骤3.7:获得测试用例集,流程结束。
5.根据权利要求1所述的基于模型检测的分阶段任务***的自动化联调测试方法,其特征在于,步骤八中所述的对被测***的实际运行情况与理论运行情况进行比较,具体步骤如下:
步骤8.1,读取状态图模型,根据各节点信息形成状态图G;
步骤8.2,设状态转移序列为S={s0,s1,…,sn},API={api0,api1,…,apin-1}为对应的API序列;设当前匹配的状态NowS为si,初始i=0;n为正整数;
步骤8.3,若状态转移(si,si+1,apii)在状态图G中匹配成功,则说明(si,si+1,apii)合法,记录该apii正确执行一次,否则记录该apii错误执行一次,然后执行步骤8.4;
步骤8.4,i自增1,判断i是否大于n-1,若是,跳转到步骤8.5执行,否则继续转步骤8.3执行;
步骤8.5,如果统计到有API错误执行记录,则说明被测***实际运行状态不符合预期,对应的测试用例执行不正确,反则说明被测***实际运行状态符合预期,测试用例正常运行。
6.根据权利要求1所述的基于模型检测的分阶段任务***的自动化联调测试方法,其特征在于,所述的自动化测试***包括测试用例自动生成模块、模型检测模块和通过率评估模块;测试用例自动生成模块用于根据窗口树模型自动批量化生成测试用例以形成测试用例集;模型检测模块用于对被测***的实际运行情况与理论运行情况进行比较;通过率评估模块用于将检测结果带入到通过率评价公式中,输出联调测试通过率评估报告。
CN201410742936.1A 2014-12-08 2014-12-08 基于模型检测的分阶段任务***的自动化联调测试方法 Expired - Fee Related CN104407977B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410742936.1A CN104407977B (zh) 2014-12-08 2014-12-08 基于模型检测的分阶段任务***的自动化联调测试方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410742936.1A CN104407977B (zh) 2014-12-08 2014-12-08 基于模型检测的分阶段任务***的自动化联调测试方法

Publications (2)

Publication Number Publication Date
CN104407977A CN104407977A (zh) 2015-03-11
CN104407977B true CN104407977B (zh) 2016-06-01

Family

ID=52645610

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410742936.1A Expired - Fee Related CN104407977B (zh) 2014-12-08 2014-12-08 基于模型检测的分阶段任务***的自动化联调测试方法

Country Status (1)

Country Link
CN (1) CN104407977B (zh)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106326732A (zh) * 2015-07-03 2017-01-11 阿里巴巴集团控股有限公司 一种api保护方法和装置
CN107590160B (zh) * 2016-07-08 2021-08-27 阿里巴巴集团控股有限公司 一种监控基数树内部结构以实现测试的方法及装置
CN107066382B (zh) * 2017-03-09 2021-01-26 北京航空航天大学 一种基于模型的航天器***自动化测试方法
CN107544906B (zh) * 2017-09-07 2020-12-25 杨瑞 一种基于内容非敏感性DOM骨架等价判定的Web自动化测试方法
CN108509339A (zh) * 2018-03-22 2018-09-07 京北方信息技术股份有限公司 基于浏览器和思维导图的测试用例生成方法、装置及设备
CN108628727B (zh) * 2018-04-19 2021-06-01 山东省计算中心(国家超级计算济南中心) 一种基于模式运行时特征的模式作业运行状态分析方法
CN109213681A (zh) * 2018-08-30 2019-01-15 北京三快在线科技有限公司 测试***、方法、设备及可读存储介质
CN110286882B (zh) * 2019-05-24 2021-03-09 北京航空航天大学 一种基于模型检测的前台***设计与验证方法
CN111104329B (zh) * 2019-12-20 2021-03-16 光大兴陇信托有限责任公司 一种自助***对接案例引导测试方法
CN111679960B (zh) * 2020-05-30 2021-01-26 北京航空航天大学 一种可靠性、弹性、脆性的***状态评估方法
CN111782524B (zh) * 2020-06-29 2024-06-18 京东科技控股股份有限公司 应用测试方法和装置、存储介质和电子装置
CN111934948B (zh) * 2020-07-20 2022-04-12 浙江理工大学 基于蒙特卡洛树搜索的efsm可执行测试序列生成方法
CN112270110A (zh) * 2020-11-16 2021-01-26 国家工业信息安全发展研究中心 面向工业互联网平台组件的兼容性测试方法及***
CN113608092A (zh) * 2021-06-28 2021-11-05 臻驱科技(上海)有限公司 一种双脉冲测试***
CN113704093B (zh) * 2021-08-05 2024-07-05 卡斯柯信号(成都)有限公司 一种通用联锁软件测试用例生成方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103235756A (zh) * 2013-04-22 2013-08-07 北京航空航天大学 一种面向嵌入式***分区应用程序软件的仿真测试方法
US8510596B1 (en) * 2006-02-09 2013-08-13 Virsec Systems, Inc. System and methods for run time detection and correction of memory corruption
CN104021070A (zh) * 2013-03-01 2014-09-03 腾讯科技(深圳)有限公司 一种智能终端软件包测试方法、装置和***

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8510596B1 (en) * 2006-02-09 2013-08-13 Virsec Systems, Inc. System and methods for run time detection and correction of memory corruption
CN104021070A (zh) * 2013-03-01 2014-09-03 腾讯科技(深圳)有限公司 一种智能终端软件包测试方法、装置和***
CN103235756A (zh) * 2013-04-22 2013-08-07 北京航空航天大学 一种面向嵌入式***分区应用程序软件的仿真测试方法

Also Published As

Publication number Publication date
CN104407977A (zh) 2015-03-11

Similar Documents

Publication Publication Date Title
CN104407977B (zh) 基于模型检测的分阶段任务***的自动化联调测试方法
KR102483025B1 (ko) 운영 유지 시스템 및 방법
CN106302008B (zh) 数据更新方法和装置
CN105159964B (zh) 一种日志监控方法及***
CN104317843B (zh) 一种数据同步etl***
CN106095677B (zh) 基于Robot Framework实现的RESTful Webservice接口自动化测试方法
CN106599197B (zh) 数据采集交换引擎
CN107704392A (zh) 一种测试用例的处理方法及服务器
CN104539053B (zh) 基于爬虫技术的电力调度自动化巡检机器人及巡检方法
CN105740140A (zh) 软件***故障诊断方法、服务器及***
CN108377255A (zh) 信息处理装置、信息处理方法和记录介质
CN106104398A (zh) 过程控制***中的分布式大数据
CN107770797A (zh) 一种无线网络告警管理的关联分析方法及***
CN103970121B (zh) 一种分布式卫星自动化测试框架***
CN102932195A (zh) 一种基于网络协议分析的业务分析监控方法及***
CN108376111A (zh) 信息处理装置、信息处理方法和记录介质
CN109784818A (zh) 基于bom的产品数据处理方法、装置、设备及存储介质
CN106021816A (zh) 一种基于行为树的分布式***行为仿真分析工具的实现方法
US20150286555A1 (en) System and method for converting the business processes to test-centric activity diagrams
CN109213102A (zh) 多命令监测方法、装置、计算机设备及存储介质
CN106027674A (zh) 一种互联网与智能制造相结合的架构***
CN113518012A (zh) 一种分布式协同流量仿真环境构建方法及***
CN110895506A (zh) 测试数据的构造方法和构造***
US8918765B2 (en) Auto-documenting based on real-time analysis of code execution
US8042024B2 (en) Method, system, and computer program product for reconstructing a data stream

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20160601

Termination date: 20201208

CF01 Termination of patent right due to non-payment of annual fee