CN115964273A - 基于深度学习的航天器测试脚本自动生成方法 - Google Patents
基于深度学习的航天器测试脚本自动生成方法 Download PDFInfo
- Publication number
- CN115964273A CN115964273A CN202211553505.1A CN202211553505A CN115964273A CN 115964273 A CN115964273 A CN 115964273A CN 202211553505 A CN202211553505 A CN 202211553505A CN 115964273 A CN115964273 A CN 115964273A
- Authority
- CN
- China
- Prior art keywords
- test
- parameter
- spacecraft
- instruction
- text
- 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.)
- Pending
Links
Images
Classifications
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/30—Computing systems specially adapted for manufacturing
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提出了一种基于深度学习的航天器测试脚本自动生成方法,涉及航天器自动化测试领域。本发明包括:构建航天器测试分系统知识库,基于关键信息抽取与知识扩充的方法对测试用例分类;基于多任务语法草图生成航天器测试指令,对更加细粒度的测试步骤生成指令,解决了测试用例层面脚本无法复用的问题;实现航天器测试脚本自动生成系统。本发明实现自动地确定当前测试用例对应的测试分系统,得到对应的分系统知识库,实现测试步骤文本到脚本代码的映射,解决了模板匹配方法的灵活性差、可扩展性弱、脚本生成效率低的缺点,大大减轻测试人员的工作量,生成结果可供测试人员进行审查纠正与确认,保证了测试脚本的安全性、可靠性和准确性。
Description
技术领域
本发明涉及测试脚本自动生成技术以及航天器自动化测试领域,具体涉及一种基于深度学习的航天器测试脚本自动生成方法。
背景技术
随着航天事业的飞速发展、系统软硬件复杂度不断提升,各类航天器测试任务压力也在逐渐加大。为减轻航天器测试人员日益繁重的测试任务,在航天器测试的各个环节都有自动化测试的研究工作。航天器测试的基本流程为,通过上行链路向卫星发送激励信号,通过下行链路接收卫星的响应信号,根据响应结果分析卫星功能是否处于正常状态。测试人员拿到航天器测试任务书后,首先需要根据任务书中的测试大纲编写具体的测试用例,然后根据测试用例在测试IDE(集成开发环境)软件上拖拽对应测试步骤的测试原子,引入测试指令,进而填写指令的参数和参数值。其中测试用例是测试步骤描述文本,测试原子指令是对应的测试脚本代码。
随着深度学习技术的发展,通过深度语义解析技术解决自然语言领域问题的相关方法不断成熟,在脚本自动生成方向有了不少的尝试和不错的成就。目前已有基于组件和脚本的航天器测试方法、航天器测试脚本语义识别与自动生成方法等开拓性研究,为航天器测试自动化指明了新的方向。而在自然语言处理领域,对自然语言描述的文本进行语义解析以生成对应的可执行指令代码是一个重要的研究方向,如Text2Code、Text2SQL、Text2Sparql等。其中Text2SQL问题研究从自然语言的查询语句到数据库查询语言SQL脚本的转换,来帮助非专业人员通过将自然语言转换成SQL来连接数据库,与航天器测试用例文本到航天器测试脚本语言CATOL的转换问题有很大的相似之处。目前解决Text2SQL问题主要有两种思路,其一是通过seq2seq的方法,其二是通过构造多任务语法草图的方法。虽然当前航天器测试脚本自动生成研究已取得了一定的成果,但其仍面临着以下挑战:
(1)基于XML模板匹配的方法工作量大、灵活性差、可扩展性弱、无法利用历史测试数据。一方面难以针对所有的测试用例提取出统一的测试流程模板,模板总结要求高、工作量大。另一方面基于模板总结的测试脚本生成方法只能对部分用例建立其到指令脚本代码的映射,它依赖于航天器测试人员预先做好语义分析,在需求完全相同的情况下,这些模板可以更改参数名称直接拿来使用。但是对于绝大多数情况下需求都会有差异,依然需要测试人员亲手编写脚本代码。
(2)测试用例层面上无法做到复用。新的航天器测试任务会引入新的需求,有些测试流程会根据当前被测航天器的特点有一些特殊的定制化流程,因此不适于直接面向测试用例级别进行代码映射总结,而应该着眼于更细粒度的测试步骤文本进行分析,由测试步骤的生成结果组成最终的测试脚本代码。
(3)测试指令生成的复杂性。在航天器测试任务中,不同类型卫星乃至同一类型卫星不同型号之间都可能存在着差异。以卫星热控测试为例,每一发卫星热控通道数量,每路的初始状态,每路热控通道的温度阈值控制等往往有所不同。这些决定着在测试代码中各个指令的测试参数及参数值需要根据当前被测设备而改变。
(4)标注数据不足、可对比的模型不足、安全严苛要求。由于研究刚刚处于起步阶段,加上航天器测试领域的特殊性,从航天器测试用例文本到测试脚本自动生成方向没有相关的公开研究数据。目前航天器测试脚本生成问题没有像其他语义解析领域一样涌现出大量深度模型和方法,缺乏可对比借鉴的模型。因为航天器是安全严苛系统,对其的测试也有着严格的要求,目前的测试脚本工作依赖于人工编写与检查,对于自动生成方法生成的脚本最终需要测试人员对结果进行审查、纠正与确认才可进行测试运行。
综上所述,要解决航天器测试脚本自动生成任务,需要着眼于更细粒度的测试步骤生成、需要利用航天器测试知识提供脚本生成的知识背景、需要对测试用例文本进行语义解析和关键信息抽取,以尽可能提升测试自动化水平。
发明内容
基于上述问题和需求,本发明设计了一套基于深度学习的航天器测试脚本自动生成方法,提出了基于关键信息抽取与知识扩充的测试用例分类方法,自动地确定当前测试用例对应的测试分系统,进而得到其对应的分系统知识库,为后续的测试指令生成提供了知识背景,提出了基于多任务语法草图的航天器测试指令生成方法,解决测试用例层面脚本无法复用的问题,从更加细粒度的测试步骤入手,针对每个测试步骤去进行指令生成,同时因为其提供更加细粒度的指令生成,学习测试步骤文本到脚本代码的映射关系,解决了模板匹配方法的灵活性差、可扩展性弱、脚本生成效率低的缺点。
本发明提出一种基于深度学习的航天器测试脚本自动生成方法,包括:
第一步,建立航天器测试系统知识库和测试用例分类模型。
为不同的航天器测试分系统分别构建一个知识库,知识库中记载的知识从航天器的历史测试数据集中挖掘获取。航天器测试知识库的知识表示采用语义网络表示方法,测试知识采用3元组进行描述。
知识库的关系共分为3种,分别是分系统测试参数值value-of-param、分系统设备名称equipment-of-system、分系统测试参数param-of-system。测试实体共分为4种,分别是测试参数param、参数值param_value、设备名称equipment、测试分系统sub-system。各个实体及其相互关系定义如下:
(1)测试参数与参数值三元组:<param_value,value-of-param,param>;
(2)设备名称与测试子系统三元组:<equipment,equipment-of-system,sub-system>;
(3)测试参数与测试子系统三元组:<param,param-of-system,sub-system>。
为实现测试用例的分类,本发明构建测试用例分类模型采用基于前向最大匹配+Trie树的航天器测试文本分词器抽取测试用例文本中的关键信息,并基于只存在于固定分系统的设备名称、参数名称、参数值对原测试步骤文本进行信息扩充。
第二步,基于多任务语法草图生成测试指令。
将测试指令生成任务拆解为5个子任务,分别为:指令类型分类、测试参数数目预测、测试参数值抽取、测试参数实体链接、测试参数和参数值匹配。这5个子任务由两个模型来完成,其中前三个子任务由参数值抽取子模型完成,这一步的输出结果(指令类型,参数数目,参数值列表)被送入参数绑定子模型。参数绑定子模型进行测试参数实体链接和参数值绑定。一个测试步骤经过上述方式可完成所有的语义分析和信息抽取,完成一条测试脚本指令的映射。
参数值抽取子模型的输入为测试用例的测试步骤文本,输出为测试指令类型、测试参数数目和测试参数值列表;由于一个测试步骤文本涉及到的测试参数数目范围在0-3之间,因此将测试参数数目预测问题转化为分类问题,构建一个4分类模型;测试步骤文本在经过BERT编码后输入参数值抽取子模型,参数值抽取子模型分别通过两个全连接层进行测试指令类型分类和测试参数数目预测,通过序列标注模型Bi-LSTM+CRF进行测试参数值抽取;其中,Bi-LSTM表示双向长短时记忆网络,CRF表示条件随机场。
参数绑定子模型的输入为测试用例文本、分系统测试知识库、测试参数数目、测试指令类型和测试参数值列表,输出;参数绑定子模型根据测试步骤文本的语义信息,从对应的航天器分系统测试知识库中筛选出一批标准的候选测试参数名称,对候选测试参数名称进行排序,根据参数值抽取子模型输出的测试参数数目param_num,取得排序得分最高的前param_num个测试参数名称作为航天器测试参数识别结果,结合参数值抽取子模型输出的测试参数值列表,输出测试参数和测试参数值匹配列表。
第三步,构建航天器测试脚本自动生成系统。
航天器测试脚本自动生成系统包括系统管理模块、测试用例分类模块、测试指令生成模块、测试脚本生成模块、以及模型训练与更新模块;其中,测试用例分类模块利用第一步对航天器测试用例文本进行分析,得到对应的测试分系统及测试分系统知识库;测试指令生成模块利用第二步对航天器测试步骤文本进行分析,将其转化为对应的航天器测试指令;测试脚本生成模块用于对测试指令生成模块输出的航天器测试指令转换为脚本代码,并展示给用户;模型训练与更新模块用于对第一步和第二步中所使用到的网络模型进行训练与更新。
本发明的基于深度学习的航天器测试脚本自动生成方法,其相对于现有技术,优点和积极效果在于:
(1)本发明方法能够辅助测试人员对编写的测试用例进行语义分析,判别给定测试用例所属的测试分系统知识库,对每个测试步骤进行指令分类,抽取出测试步骤中涉及到的指令参数名称和参数值并进行绑定。这些工作可以改善航天器测试人员目前依赖于手工拖拽测试用例对应的测试原子然后在输入框内编辑对应的参数名称及参数值的现状。
(2)本发明方法通过测试脚本自动生成系统的辅助分析,可以由模型给出对测试用例的分析结果供航天器测试人员进行审核与纠正,这将大大减轻测试人员的工作量。在脚本编写过程中,由本发明提出的系统进行语义分析完成测试脚本自动生成以提高测试脚本编写效率,进一步提升航天器测试自动化程度,并由航天器测试人员对测试脚本自动生成结果进行审核与纠正以保证测试脚本的安全性、可靠性和准确性。
(3)本发明方法还根据提出的航天器测试脚本自动生成方法,设计并实现了一个前后端分离,功能模块完善,用户界面良好的航天器测试脚本自动生成系统。通过本系统,航天器测试人员可以方便地对测试用例进行操作,使用系统提供的脚本生成功能对测试用例文本进行自动的指令生成,并生成结果供测试人员进行审查纠正与确认。
附图说明
图1为本发明实施例中知识库构建方法的示意图;
图2为本发明实施例中航天器分词词典构建方法示意图;
图3为本发明实施例测试用例分类模型结构示意图;
图4为本发明实施例航天器测试指令生成任务语法草图;
图5为本发明实施例测试指令生成时子任务拓扑依赖关系示意图;
图6为本发明实施例航天器测试指令生成整体模型结构示意图;
图7为本发明实施例构建的参数值抽取子模型网络结构示意图;
图8为本发明实施例所示的一个指令分类结果示意图;
图9为本发明实施例参数值抽取子模型的训练流程示意图;
图10为本发明实施例构建的参数绑定子模型的结构示意图;
图11为本发明实施例中一个测试参数候选实体筛选结果的示例图;
图12为本发明实施例进行测试参数与值匹配的示意图;
图13为本发明实施例结合距离匹配算法进行参数绑定的示意图;
图14为本发明实施例中参数绑定子模型进行参数绑定的一个示例图;
图15为本发明实施例的航天器测试脚本自动生成系统的功能模块图;
图16为本发明实施例的航天器测试脚本自动生成系统的实现架构图;
图17为本发明实施例的航天器测试脚本自动生成系统的运行架构示意图;
图18为本发明实施例的航天器测试脚本自动生成系统前端交互用例图;
图19为本发明实施例的航天器测试脚本自动生成系统后端业务处理逻辑图;
图20为本发明实施例的航天器测试脚本生成的业务逻辑流程图;
图21为本发明实施例的航天器测试脚本自动生成系统前端组件父子通信关系示意图;
图22为本发明实施例的系统用户鉴权机制示意图;
图23为本发明实施例的系统后台代码组织结构示意图;
图24为本发明实施例的模型预测时各类之间的依赖关系图;
图25为本发明实施例的模型训练时各类之间的依赖关系图。
具体实施方式
下面结合附图和实施例对本发明进行详细阐述。
本发明提出了一种基于深度学习的航天器测试脚本自动生成方法,主要包括三大部分:航天器测试系统知识库构建与测试用例分类;基于多任务语法草图的测试指令生成;航天器测试脚本自动生成系统设计与实现。其中,在构建航天器测试系统知识库时,首先构建航天器测试脚本生成数据集,再建立航天器测试系统知识库。在测试用例分类时提出基于关键信息抽取与知识扩充的方法,自动地确定当前测试用例对应的测试分系统,进而得到其对应的分系统知识库,为后续的测试指令生成提供了知识背景。基于所构建的知识库,提出基于多任务语法草图的航天器测试指令生成方法,针对每个测试步骤去进行指令生成,能够从更加细粒度的测试步骤入手,解决了测试用例层面脚本无法复用的问题。同时,因为其提供更加细粒度的指令生成,学习测试步骤文本到脚本代码的映射关系,解决了模板匹配方法的灵活性差、可扩展性弱、脚本生成效率低的缺点。
下面对本发明的基于深度学习的航天器测试脚本自动生成方法的三个步骤进行说明。
第一步,航天器测试系统知识库构建与测试用例分类。本步骤分如下4个子步骤说明。
步骤1.1:本发明根据航天器历史测试数据构建结构化的航天器测试脚本生成数据集,并将不同分系统的测试用例数据之间进行了分隔。
通过对历史测试数据的挖掘,构建出相应的知识库以供脚本生成任务使用,这是航天器测试脚本自动生成的基础。每个航天器测试用例数据包括测试描述和测试步骤两部分。测试描述包括功能描述、输入参数和判读参数。测试步骤包括测试步骤文本及对应的测试指令代码。航天器测试脚本生成数据采用json格式存储。下面对结构化的测试脚本生成数据格式进行说明。
首先,本发明根据历史测试数据为每个航天器测试分系统构建一个测试用例数据表,其中的每条数据是属于该分系统的测试用例及其脚本代码。测试描述部分的数据格式如表1所示。
表1测试描述的数据格式
列名 | 数据类型 | 是否允许空值 | 数据含义 |
func_desc | text | 否 | 功能描述 |
input_param | text | 是 | 输入参数 |
adjudge_param | text | 是 | 判读参数 |
每则测试用例都有功能描述用来叙述该测试用例的测试功能,输入参数一般是被设置参数,用来在测试过程中执行赋值操作。判读参数为测试过程中要读取值变化的参数名称。一个测试用例会包括若干条测试步骤。这些测试步骤通过一个有序数组来组织。每条测试步骤的数据格式如表2所示。
表2测试步骤的数据格式
列名 | 数据类型 | 是否允许空值 | 数据含义 |
step | text | 否 | 测试步骤文本 |
ex_res | text | 是 | 期望结果 |
code | Json | 否 | 测试指令代码 |
其中,step属性是测试步骤的文本描述,ex_res属性是这条测试步骤执行后的期望结果,如果测试指令执行结果不符合期望结果则说明有错误存在。code是该条测试步骤具体的测试脚本指令。code包含两部分,第一部分是指令类型,第二部分是指令参数。测试指令代码code数据格式如表3所示。
表3测试指令代码的数据格式
列名 | 数据类型 | 是否允许空值 | 数据含义 |
Instr_type | text | 否 | 测试指令类型 |
Equip_name | text | 否 | 测试设备名称 |
Param_name | Text | 否 | 指令参数名称 |
Param_value | Text | 是 | 指令参数值 |
测试指令类型分为SETP指令和GETVALUE指令,分别为参数值设置指令和参数值判读指令。Equip_name为测试设备名称、Param_name为指令参数名称、Param_value为指令参数值。从测试用例数据中也可以推出其他信息,如由参数列表长度可以得到测试参数数目。由所属文件可以得到分系统名称及其知识库等。
步骤1.2:为每个测试分系统构建对应的测试知识库。
测试知识库的知识从结构化的航天器测试脚本生成数据集中得来。由于航天器测试脚本生成过程中主要关注于用例文本中可能涉及到的测试参数、测试设备、测试参数值、测试分系统等信息。因此,可以从脚本生成数据集中抽取出每个测试分系统对应的所有测试参数、测试参数值、测试设备名称。具体地,本发明实施例知识库构建的流程如图1所示,输入航天器分系统测试用例数据表SubSystemUsecase,遍历该表,将测试设备名称添加到知识库;遍历测试用例数据表中的参数列表param_list,将测试步骤的参数名称添加到知识库中;得到参数对应的参数值后,将其添加到知识库中,最后输出分系统测试知识库。
分系统测试知识库以知识图谱的形式进行表示,本发明知识库中的知识表示采用语义网络表示方法。对知识库中的测试知识采用三元组进行描述,其中,知识库的关系共分为3种:value-of-param、equipment-of-system、param-of-system,分别是分系统测试参数值、分系统设备名称、分系统测试参数;测试实体共分为4种:测试参数param、参数值param_value、设备名称equipment、测试分系统sub-system。各个实体及其相互关系定义如下:
1)测试参数与参数值三元组:<param_value,value-of-param,param>
param_value是测试参数值,对应历史测试数据中param的一个可能取值。
param是测试参数,其包含在对应的sub-system中。
2)设备名称与测试子系统三元组:<equipment,equipment-of-system,sub-system>
equipment是测试设备,对应sub-system中的一个测试设备名称。
sub-system是测试分系统,对应历史测试数据中的航天器测试分系统名称。
3)测试参数与测试子系统三元组:<param,param-of-system,sub-system>
param是测试参数,对应历史测试数据中param的一个可能取值。
sub-system是测试分系统,对应历史测试数据中的航天器测试分系统名称。
步骤1.3:抽取测试用例文本的关键信息并进行知识扩充。
由于各个测试分系统对应着不同的测试知识库,因此在进行航天器测试脚本自动生成时,首先需要明确当前的测试用例属于哪个测试分系统,才能够得到其对应的分系统知识库。为实现测试用例的分类,本发明提出了基于关键信息抽取与知识扩充的测试用例分类方法。
测试用例文本的关键信息抽取方法体现为航天器测试文本分词器的构建,本发明提出了基于前向最大匹配+字典树(Trie树)的航天器测试文本分词器用于抽取测试用例文本中的关键信息。
所使用的分词词典包括测试系统名称、测试设备名称、测试参数名称和测试参数值四部分。为对不规范描述的测试参数或设备名称信息进行抽取,本发明对设备和参数的名称进行再分词,具体地,采用通用领域的分词工具对上述设备名称和参数名称进行分词;同时对每个设备名称或参数名称的分词结果进行2-gram的词组组合,即可很好的捕捉到那些不规范的名称描述。如采用jieba分词工具对“温度阈值上限”的分词结果为(“温度”,“阈值”,“上限”),通过2-gram的词组组合可以得到(“温度阈值”,“阈值上限”)。这样根据“温度阈值上限”这个参数名称可以一共得到(“温度阈值上限”,“温度”,“阈值”,“上限”,“温度阈值”,“阈值上限”)6个词典词。这样当存在有不规范描述时,可以在如“温度”、“上限”、“阈值”等更细粒度的词语上捕捉到对分类有用的信息。航天器分词词典构建算法如图2所示,将测试系统名称、测试设备名称、测试参数名称、测试参数值组成的知识库词加入分词词典,对当前知识库词中的测试设备名称和测试参数名称进行分词,取得更加细粒度化的词语,将细粒度词加入分词字典,取得细粒度词的2-gram组合结构加入分词词典,最后输出得到的分词词典。
本发明对测试用例文本采用基于前向最大匹配+Trie树的分词方法。Trie树采用公共前缀构造树形结构,在字符串匹配过程中从根节点开始,一直与相同前缀的字符串进行匹配直到遇到叶子节点,将时间复杂度由O(n)降到O(m),n表示待匹配字符串集合数目,m表示最长待匹配字符串长度。对于航天器测试参数名称来说,由于其数目远远大于最长测试参数名称长度,因此基于Trie树的匹配算法可以大大减少检索时间,提高词匹配效率。
经过关键信息抽取算法可以得到测试用例中的关键词。关键词的不同在一定程度上体现了测试用例所属的测试分系统。为加强测试用例信息表达,提高分类效果,本发明采用了知识扩充的方法,可以对那些只存在于固定测试分系统的设备名称、参数名称、参数值对测试步骤文本进行信息扩充。具体地,如果测试步骤中出现了到某个测试分系统的唯一映射关系,那么就将该词对应的测试分系统名称放入测试步骤文本中一同参与分类。例如,参数名称“充放电效率比”仅存在于供配电系统,因此在参数抽取后可以将“充放电效率比”改为(“供配电系统”,“充放电效率比”),以此来引入测试背景知识,提高分类效果。
正向最大匹配和Trie树结合相当于在Trie树上做深度优先搜索,从测试语句中抽取出尽可能长的测试参数名称。对应到本发明的分词词典中,标准的测试设备参数名称是相对较长的,而分词词语和取2-gram组合后的结果相对较短。因此,正向最大匹配在测试设备参数名称描述规范时可以提取出完整的标准名称,在参数描述不规范时,可以优先抽取出匹配到的2-gram词组,最后即使和标准名称很不相符也能通过对分词词语的抽取匹配到较短的检索词信息。
步骤1.4:构建测试用例分类模型。
本发明的测试用例分类模型分为两部分,首先是通过自主构建的航天器测试文本分词器对测试用例步骤文本进行知识扩充和关键信息抽取。然后将测试用例文本的title部分和经过关键信息抽取及知识扩充的步骤列表部分进行拼接,一同送入BERT中进行分类。BERT是一种预训练语言模型,具体的模型结构如图3所示。模型首先对测试用例文本进行处理,经过关键信息抽取和背景知识引入两步得到新的测试用例文本表示。在新文本的开头拼接[CLS]标签。经过BERT进行编码后,得到每个字对应的原始embedding(嵌入)向量。然后经过Transformer的encoder(编码)层进行语义信息编码。最后取得BERT对[CLS]标签的输出向量加入全连接层进行分类操作,取得概率值最大的下标对应类别标签作为分类结果。[CLS]表示分类任务标签。title部分是指定义文档标题的title标签内容。
在预测时,同样是先对输入的测试用例文本进行关键信息抽取与背景知识引入,然后将新文本送入BERT分类模型中。在输出端章节取得概率值最大的下标对应类别作为分类结果,然后取得其对应分系统知识库给航天器测试指令生成模型使用。
第二步,基于多任务语法草图的测试指令生成方法。
每个测试用例的测试任务由若干测试步骤组成,因此需要根据测试步骤描述来生成相应的测试指令代码。一条测试指令包含具体的指令类型,参数和参数值。不同的测试步骤有不同的参数及参数值,数目也是根据具体的步骤描述来确定。
本发明将测试指令生成任务拆解为5个子任务,分别为:指令类型分类、测试参数数目预测、测试参数值抽取、测试参数实体链接、测试参数和参数值匹配。航天器测试指令生成任务的语法草图如图4所示。其中,$instr_type表示指令类型预测子任务,$param_num表示测试参数数目预测子任务,$param_name表示测试参数抽取子任务,即测试参数实体链接子任务,$param_value表示测试参数值抽取子任务,$param_value_match表示参数值绑定子任务,即测试参数和参数值匹配子任务。基于语法草图,将整个测试脚本生成任务分解为5个子任务,共同完成到一条测试脚本指令的映射。
上述5个子任务的执行在时间上有着前后依赖关系,其拓扑依赖关系如图5所示。由依赖关系可以看出,测试参数的抽取依赖于参数数目预测子任务,参数值匹配子任务依赖于参数值抽取子任务、指令类型分类子任务和测试参数抽取子任务。根据子任务融合的思想,将$param_name和$param_value_match进行融合。根据子任务联合优化的思想,将子任务$instr_type、$param_num、$param_value在同一个模型中进行训练。此时整个测试脚本生成需要两步,即第一步完成测试指令类型分类、测试参数数目预测、测试参数值抽取。第二步完成测试参数抽取与链接和测试参数值匹配。
航天器测试指令生成模型的整体结构如图6所示。子任务$instr_type、$param_num、$param_value由参数值抽取子模型完成。参数值抽取子模型的输入为测试用例的测试步骤文本,输出为指令类型、测试参数数目、测试参数值列表。子任务$param_name、$param_value_match由参数绑定子模型完成。参数绑定子模型的输入为测试用例文本、航天器测试系统知识库、测试参数数目、测试指令类型、以及测试参数值列表,输出为测试参数和测试参数值匹配列表。参数值抽取子模型的输出结果(指令类型,参数数目,参数值列表)被送入参数绑定子模型,由该模型进行测试参数实体链接和参数值绑定。下面分两个步骤分别来说明两个子模型的实现。
步骤2.1:构建参数值抽取子模型。
参数值抽取子模型将测试指令分类子任务、参数数目预测子任务、参数值抽取子任务进行联合优化,该模型的结构如图7所示。参数值抽取子模型的输入是测试用例步骤文本加上[CLS]、[PAD]等标签,其中[CLS]标签在子模型中的用处有两个,一个是用来对测试指令类型进行预测,另一个是用来对测试参数数目进行预测。[PAD]标签用于表示句子的填充,以满足固定长度的输入。
测试指令类型预测分为两类,分别是SETP和GETVALUE指令。参数值抽取子模型首先取得词数据集的BERT编码的输出Embedding[cls],其维度是(batchSize,768),batchSize表示数据量的大小,768表示每个词被编码后的向量大小。通过接上一层全连接层,得到每个分类类别的logits分数,其维度是(batchSize,2),在最后一维,下标0表示GETVALUE分类的logits值,下标1表示SETP分类的logits值。这一步的公式为:
Logitsi=Dense(Embedding[cls],CategoriesNum)
其中,Dense表示全连接层操作,CategoriesNum表示类别数目,logitsi表示下标i对应类别的logits值,i=0,1。
然后采用softmax函数对输出概率值进行归一化,具体公式如下:
其中,x表示输入序列,yi表示类别i,logits(x,yi)是对序列x计算的属于类别yi的logits值,P(yi|x)是对logits(x,yi)归一化的概率值。
测试指令类型分类的损失函数采用了交叉熵损失函数,分类模型表现得越好则正确类别下的概率得分越接近1,错误类别下的概率得分越接近于0。交叉熵损失函数基于类别预测概率值来得到loss值lossij,具体公式如下:
lossij=-[yij*logpij+(1-yij)log(1-pij)]
其中,yij表示样本i属于类别j的真实概率,pij表示预测样本i属于类别j的概率。
如图8所示,为对测试用例“query:设置热控回路4的光照状态为阳照区”进行指令分类的结果,应属于SETP类别。
测试参数数目预测子任务用于预测测试步骤中包含的测试参数数目,本发明将测试参数数目预测子问题转化为分类问题来解决。经过统计,一个测试步骤文本涉及到的测试参数数目范围在0-3之间。通过构建一个4分类模型可以解决数目预测问题。即如果模型预测结果为2,则表示模型预测该测试步骤含有2个测试参数。经过BERT编码后,得到每个字对应的原始Embedding向量,再通过BERT模型中Transformer的encoder层进行语义信息编码,得到Encodding向量,最后取得BERT对[CLS]标签的输出向量Encodding[cls]输入到参数数目预测的全连接层来得到每个分类数目的logits值,具体公式为:
Logitsi=Dense(Encodding[cls],paramNum)
其中,paramNum为参数数目,logits值的下标i对应测试参数数目。
测试参数数目预测的概率值使用softmax函数,损失函数采用交叉熵损失函数。
测试指令参数值抽取通过序列标注方法来完成的。本发明采用BIO标记的BERT+Bi-LSTM+CRF方法作为参数值抽取的算法模型。其中,Bi-LSTM为双向长短时记忆网络,CRF为条件随机场。具体地,首先得到BERT对测试步骤文本的编码输出,然后通过连接Bi-LSTM层来捕捉前后项语义依赖,之所以加上Bi-LSTM层是因为BERT本身由于其采用的注意力机制对于位置信息没有给予过多关注,而序列标注任务本身依赖于前后标签跳转,是需要关注位置信息的。Bi-LSTM网络的主要思想是通过依次输入文本embedding,在每一步得到当前步的输出O、当前步的隐层状态h和上下文信息C,然后经过正反两个方向,分别取得前向和后向输出结果。最后将前后向的输出向量进行拼接,作为整个Bi-LSTM网络层的输出H。Bi-LSTM层输出公式为:
Hi=Concat(hLi,hRi)
其中,Concat表示拼接操作,Hi为Bi-LSTM网络层的输出,hLi,hRi分别为前后向输出向量,此处i对应字的编号。
得到Bi-LSTM层输出后需要预测每个字对应的标签概率值,相当于对每个字进行分类,分类的类别数是BIO标签数目,这一步得到的结果也叫做发射分数。具体的做法是将Bi-LSTM的输出接一层全连接,发射分数的计算公式如下:
Emissioni=Dense(Hi,tagsNum)
其中,Emissioni为第i个字的发射分数,tagsNum表示BIO标签数目。
CRF层网络用来捕捉BIO标签内部的跳转概率,该网络维护了标签跳转概率矩阵以及每个标签起始和终止的概率值。CRF层网络分为训练和预测两部分。在训练过程中,根据当前序列的发射概率和转移概率矩阵可以得到正确标注路径的得分。具体的对文本序列S标注为标签序列L的路径得分score(S,L),计算公式如下:
其中n表示标签的数目。
转移矩阵Transition的形状为(t+2)*(t+2),其中t为原标签数目,多出的2是额外添加的起始标签和终止标签。表示从标签Li-1跳转到Li的概率值。表示第i个文字标注为标签Li的发射概率。CRF层的损失函数用最大化似然函数取负对数值来表示,主要由两部分组成,第一部分是正确标注标签路径的得分,第二部分是所有可能序列路径的得分。具体公式如下:
其中,SRealPath表示真实路径的分数,S1~SN表示各条路径的分数,N为路径数目。
模型的训练是通过loss计算梯度进行反向传播,不断优化发射概率网络和转移概率矩阵的参数值,从而提升参数值抽取任务的表现。在预测时,使用训练好的Bi-LSTM层网络和CRF层网络,通过维特比算法计算出最佳路径。具体公式如下:
参数值抽取子模型要解决3个子任务,其中有两个分类任务$instr_type、$param_num,有一个是抽取任务$param_value。对于每一个输入的测试用例,其测试指令分类loss用instructTypeLoss表示,参数数目预测loss用paramNumLoss表示,序列标注loss用taggingLoss表示。多任务联合训练的loss表示公式如下:
TotalLoss=instructTypeLoss+paramNumLoss+taggingLoss
训练过程中的优化函数采用的是AdamW,之所以使用该优化函数是因为BERT的模型结构深、参数量大,要保证能够根据梯度有效更新模型参数以及模型训练的收敛和减少过拟合的出现。参数值抽取子模型的训练流程如图9所示,对三个子任务的网络进行联合训练。
步骤2.2:构建参数绑定子模型。
参数绑定子模型包括两个子任务:测试参数识别和参数值绑定。首先采用基于候选值排序的模型对候选实体与参数pair对进行排序,得到测试参数抽取结果。然后结合距离匹配算法对参数值匹配pair对进行加权,得到参数值绑定结果。参数绑定子模型的结构如图10所示。
本发明采取基于候选实体排序的抽取方法实现航天器测试参数抽取。首先根据测试步骤文本的语义信息,从对应的航天器分系统测试知识库中筛选出一批标准的候选测试参数名称,然后对候选测试参数名称进行排序。根据参数值抽取子模型得到的$param_num值,取得排序得分最高的前$param_num个测试参数名称作为航天器测试参数识别结果,因为候选测试参数名称来自于航天器测试系统知识库,候选实体排序的输出结果都是标准名称表述,即可一同解决测试参数识别和链接两方面的任务。
测试用例分类后可以得到对应的分系统知识库,知识库中包含该分系统所有的设备名称、测试参数名称、测试参数取值等。用例中测试步骤涉及到的测试参数名称来源于知识库中的测试参数名称,可以利用字符或词语的共现信息来对测试参数进行候选实体筛选。具体地,采用Rouge-1和Rouge-L的思想。将Rouge-N用作实体候选值初筛,是将待抽取的文本与实体库的实体通过共现n-gram信息来进行初筛。n-gram即每次捕捉的文本范围,当n-gram等于1时,该方法变成了基于字符交集的匹配,即Rouge-1,只要文本和实体间有一个相同的字符,该实体就自动加入候选实体列表中。Rouge-L中的L是最长公共子序列(LCS)的缩写,LCS是双序列型动态规划问题。将Rouge-L算法用于实体抽取初筛的思路是将待抽取实体文本与实体做最长公共子序列抽取,基于公共子序列长度值得到候选实体列表。
Rouge-1关注测试步骤中的每个字符,抽取出测试参数名称中所有与测试步骤有相同字符的参数实体。使用Rouge-1可以初步得到一批候选实体,将那些与测试步骤文本没有一点关系的参数名称筛掉,进一步再采用Rouge-L思想进行筛选。测试参数候选实体筛选结果的示例如图11所示。
经过Rouge-1、Rouge-L得到了经过排序的初筛候选参数名称集合。根据$param_num的值,可以从排序的候选参数名称集合中取得前2*param_num个候选实体作为最终的筛选结果,公式如下:
CandidatesParam=SortedCandidates[0:2*param_num]
其中,SortedCandidates表示排序候选参数,CandidatesParam表示筛选结果。
参数值绑定子任务$param_value_match是本发明解决的重难点。根据此前子任务的解决,可以拿到测试指令类型、测试参数列表、参数值列表等信息。测试参数和参数值的匹配任务可以看作在测试步骤中寻找符合equals关系的pair对,即类似于关系抽取的方法。
由于测试参数抽取任务的解决依赖于候选实体筛选。导致了参数值绑定问题无法从测试步骤中得到测试参数的语义表征向量。本发明综合了SpERT模型和ETL-span模型的做法,借鉴了ETL-span模型的实体抽取和值抽取分离和共享编码向量的思想,借鉴了SpERT模型的实体和值拼接匹配的思想,提出了一种改进的测试参数与值匹配模型,将候选测试参数和参数值进行拼接,然后和测试步骤文本一起送入匹配网络中进行打分,进行实现参数值绑定。
本发明通过将得到的候选参数和候选参数值进行两两配对,即将前述得到的CandidatesParam和$param_value结果进行组合,生成PairCandidates,取得参数匹配候选pair对后将其与测试步骤文本进行拼接。具体地,将步骤文本与匹配pair对用[SEP]标签隔开,以及设置步骤文本的段标号segment_ids为1、匹配pair的segment_ids为0来对这两块内容进行区分。然后取得[CLS]标签值的输出作为匹配判别分数。[CLS]标签的作用类似双句子分类,本发明用它来判断候选参数匹配pair对是否符合步骤文本中描述语义。对pair对进行语义信息交互后,将输出Encodding[CLS]连接全连接层对匹配度进行打分,分数计算如下:
MatchLogits=Dense(Encodding[cls],2)
其中,MatchLogits为匹配度分数。全连接层最后一维的大小为2,输出下标0表示不匹配程度,下标1表示匹配程度。得到logits后进一步使用softmax归一化,得到匹配分数如下:
输出分数MatchScore越高表示候选匹配对越符合步骤文本中描述语义。对所有的候选匹配pair进行打分后,根据pair对的匹配分数进行由高到低排列。由于候选参数和候选参数值在匹配过程中只能出现一次,故而优先选择最先匹配的候选参数和参数值,在剩下的候选参数和参数值里选择次优的配对,直到选取pair对数目达到param_num个。具体参数值配对流程如图12所示。
本发明将参数值匹配和参数抽取两个任务进行融合,通过一个网络来同时解决这两个问题。具体地,当经过参数绑定算法后,模型可以筛选出param_num个参数匹配pair对,由于过程中约束了param_name和param_value只使用一次,故而可以保证抽取出符合数目的测试参数名称。这一步完成了从候选测试参数名称中确定出最终参数名称抽取结果。而确定的param_num个匹配pair对则用于参与参数值绑定问题。
由模型结构的图10可以看出,参数绑定问题的解决依赖于模型对匹配对的打分和距离匹配算法的综合结果。之所以在模型外结合距离匹配算法是因为航天器测试步骤文本中测试参数和测试参数值的配对出现往往是距离较近的。例如:设置热控回路的温度阈值上限值为t1,下限值为t2。这种名称后面紧跟其对应的参数值的情况是比较常见的。本发明采用距离匹配算法可以将这种常见情况捕捉到。不过,在设计距离匹配算法时,仍然要解决名称描述不规范的问题,例如上述叙述中,下限值指代的是“温度阈值下限”这个测试参数,在进行距离匹配时,虽然经过模型对候选测试参数的筛选和打分已经得到确定的标准名称“温度阈值下限”,但是其在原步骤文本中并无法确定其位置。为了解决这个问题,本发明设计了采取最长公共子序列的平均index下标来表示标准测试参数名称的位置。通过与参数值之间的距离计算,选择距离最近的pair对作为匹配结果,具体算法如图13所示。
基于距离的匹配方法的缺点是无法解决对于距离近而不是正确绑定值的情况,例如“设置温度阈值上下限值分别为t1,t2”,在这种情况下并非距离最近的参数值与参数是匹配的。这些无法由距离匹配算法解决的情况由模型来进行兜底。最终的匹配结果由模型和距离匹配算法共同决定,其加权公式为:
如果经过距离匹配算法计算出Pairi的距离是最近邻的,那么将整体分数加上0.3,将所有Pair对的结果进行排序,然后按照参数绑定算法求得最终的匹配结果。参数绑定子模型利用上述两种匹配算法进行参数绑定的一个示例如图14所示。
第三步,航天器测试脚本自动生成系统设计与实现。本发明基于提出的测试用例分类和测试指令生成模型,设计并实现了航天器测试脚本自动生成系统,其主要功能是进行测试用例文本信息自动抽取、生成相应指令并填写具体的参数信息,为航天器测试人员的测试脚本编写提供智能辅助。由于航天器测试的安全严苛性,根据模型生成的代码必须由测试人员进行查验和结果修正以保证测试的有效进行。这里航天器测试脚本的自动生成所体现的优点是改善现有测试人员手工根据测试用例文本拖拽测试原子指令和填写参数的效率。
步骤3.1:航天器测试脚本自动生成系统总体设计。
航天器测试脚本自动生成系统的主要功能是进行测试用例文本信息自动抽取、生成相应指令并填写具体的参数信息,为航天器测试人员的测试脚本编写提供智能辅助。将系统分为5大功能模块,分别是系统管理模块、测试用例分类模块、测试指令生成模块、测试脚本生成模块、模型训练与更新模块,其功能结构如图15所示。
系统管理模块包括登录与注册、运行结果记录子模块。登录与注册子模块负责对系统的登录进行验证以及注册新的用户。运行结果记录子模块是日志系统,主要对系统的每一次运行及其结果进行记录。
测试用例分类模块负责对航天器测试用例文本进行分析,得到其对应的测试分系统及测试分系统知识库。根据其运行流程分为航天器测试系统知识库构建、测试用例搜索、测试用例分类3大块。
测试指令生成模块负责对航天器测试步骤文本进行分析,将其转化为对应的航天器测试指令。其主要分为5个子功能,分为测试指令分类、测试参数数目预测、测试参数值抽取、测试参数识别和参数值绑定。
测试脚本生成模块负责对航天器测试指令生成模块的结果进行组合,生成最终的脚本代码。同时将生成的脚本代码进行展示供测试人员进行查验与更正,以保证测试脚本代码的准确性。
模型训练与更新模块负责对航天器测试指令自动生成过程中涉及到的模型进行训练与更新,可以根据当前航天器测试数据的不同、运行表现较差的测试分系统数据进行再训练,以不断优化模型表现。
根据对系统整体功能的分解结果,综合考虑航天器测试脚本自动生成系统的实现,将系统层级架构分为数据访问层、支撑层、应用逻辑层、应用表示层共4层。系统逻辑结构图如图16所示。
其中数据访问层为系统整体运行提供数据支撑。具体地,用户数据管理用于注册和系统登录验证。系统运行日志用于记录系统后台运行情况,记录脚本生成系统测试数据及结果。测试用例数据为模型训练、知识库构建、功能测试提供支撑。
支撑层分为模型训练、模型更新、航天器测试系统知识库构建三部分。模型的训练和更新为上层的应用逻辑层提供算法模型基础,航天器测试系统知识库为测试用例分类以及测试指令生成提供背景知识。
应用逻辑层主要围绕航天器测试脚本生成任务,分为测试用例分类和测试脚本生成两大块。测试用例分类为航天器测试指令生成提供测试分系统名称,进一步可以确定相应的测试分系统知识库。测试指令识别将每条测试步骤转化成对应的测试脚本指令,通过组合每条测试步骤结果生成最终的航天器测试脚本。
应用表现层是系统和用户的交互页面,用户通过操作页面来进行登录注册、模型管理、用例数据选取等功能。系统重点实现了测试脚本生成工作台,将脚本生成过程中的每一个步骤结果都进行了可视化展示,方便对模型运行结果进行及时跟踪。脚本生成后提供了结果核对编辑页面,供测试人员对测试脚本结果进行确认,保证其正确性。
根据系统的层级架构图,本发明设计实现了对应的运行架构,如图17所示。航天器测试人员通过登录操作请求登录系统,新用户可以通过填写注册申请表进行用户注册。系统验证用户名密码通过后,测试人员可以进入系统进行权限内操作,选择相应的测试用例或编写新的测试用例,然后通过系统进行测试用例分类、测试脚本代码自动生成,最后测试人员对脚本生成结果进行更正与确认。在系统运行期间,系统日志会对用户操作进行记录。在后台,系统管理员可以处理新用户的注册申请,进行模型训练和更新,算法模型导入导出操作,通过还可以通过日志系统对系统运行状况进行监控。
步骤3.2:航天器测试脚本自动生成系统各模块设计。
系统前端交互是面向用户提供的一组操作界面,用于向用户提供航天器测试脚本自动生成服务。系统前端交互用例图如图18所示。
对于航天器测试人员来说,系统提供的前端交互设计主要针对登录与注册、测试脚本生成工作台两部分。用户通过操作这些前端功能接口来使用系统功能。
系统后端逻辑是各个业务逻辑设计,包括航天器测试系统知识库构建、测试用例分类、测试脚本生成工作流逻辑。航天器测试用例分类的业务逻辑流程包括3部分,首先对根据选定的测试用例进行文本分析,接着根据文本分析结果对历史测试用例进行搜索排序,最后由排序结果对测试用例文本进行投票,选取出本测试用例的测试主体,具体业务处理逻辑图如图19所示。
航天器测试脚本生成的业务逻辑流程包括后台请求和脚本生成算法模型两部分,后台请求分为3部分,按照工作流程首先是测试用例编辑与选取,然后是进行脚本生成工作流请求,最后是对脚本生成结果的审查与纠正。有新的数据到来时或者有模型更新需求时可以请求针对新数据去重新训练模型。后台算法模型包括3部分,首先是知识库的读取,这一步依赖于测试用例分类的结果。然后是模型训练,最后是模型服务。具体业务处理逻辑图如图20所示。
根据系统的需求,本发明对前后端通信要用到的接口进行设计及定义。为了简化前后端通信,本发明将所有接口都进行了封装,尽量减少不必要的交互,将能够合并处理的请求集中在一两个网络请求内完成。根据功能的不同分为数据请求接口、模型服务接口、后台管理接口三部分,数据请求接口信息如下表所示:
表4数据请求接口信息
模型服务接口信息如下表所示:
表5模型服务接口信息
后台管理接口信息如下表所示:
表6后台管理接口信息
步骤3.3:航天器测试脚本自动生成系统的前后端实现。
本发明所实现的航天器测试脚本自动生成系统采用前后端分离思想。本发明实现航天器测试脚本自动生成系统的前端技术选型是Vue,所有的前端请求由Vue应用处理,与后端服务通过网络接口进行交互。Vue的主要特点是组件化编程。本发明共编写了24个Vue前端组件,具体见下表:
表7Vue前端组件
组件间的通信有两种,一种是通过子组件定义props属性,父组件定义ref属性来向子组件传递值和调用函数。另一种对于没有父子关系的组件页面之间可以通过VueX的state来共享状态值。组件间的父子通信关系如图21所示。
本发明采用Vue-cli的脚手架构建方式构建的前端项目,Vue-cli的主要作用是免配置进行前端模块化、项目打包和资源解析,省去了使用原生webpack繁琐的配置操作。为了方便开发,在进行组件开发时使用了Element-plus库。为了处理前端的可视化需求,本发明使用了Echarts可视化组件库。前端应用和后端应用在不同端口进行监听的请求跨域问题,通过Vue的全局配置文件设置代理来解决。前后端的网络通信用到的是axios模块,基于promise进行异步网络请求。
后端作为服务提供方,以接口的形式提供业务支持。Django是基于python语言的后端框架,本发明使用该框架通过接口设计时定义的交互接口进行通信来响应前端的各个请求。Djangorestframework是基于Django用于构建符合REST风格的Web工具,本发明使用该工具进行系统登录时用户表的自动查询验证。Djangorestframework-jwt是一种基于Django的身份验证解决方案。本发明采用jwt构建基于token的鉴权机制。用户鉴权机制如图22所示。
后端系统的代码实现共分为UseCaseSearchModule、InstructExtractionModule、ModelDir、DataDir、DataUtils、Myapp共6个模块。详细的代码组织结构如图23所示。
其中UseCaseSearchModule是进行测试用例分类的模块,包括分词器、知识扩充等。InstructExtractionModule是指令生成算法模块,包括参数值抽取模型预测与训练、参数绑定模型预测与训练、模型预测pipeline。MyApp模块是整个后台系统同前端交互的部分。DataUtil模块进行文件IO处理和测试参数候选筛选。ModelDir是系统的模型文件。DataDir是系统的数据文件存储模块,包括航天器历史测试用例EquipTestCase、用户自定义测试用例SelfDefination。
步骤3.4:航天器测试脚本自动生成系统的算法模型实现。
算法模型主要分为测试参数值抽取模型和参数绑定模型。由于系统预测和训练时涉及的流程及使用的类不一样,下面分为预测时类图和训练时类图分别进行阐述。
模型预测时各类之间的依赖关系如图24所示。
预测时类图共涉及8个类。其中ModelTogetherPredict类用于整合所有的模型预测过程,给出最终的系统预测结果并返回给前端应用。Model1PredictData用于读取前端传回的测试用例并对文本进行处理,形成符合参数值抽取模型所需要的数据形式。ValueTaggingPredict模型用于完成$instr_type、$param_num、$param_value子任务的预测。Model2PredictData用于为参数绑定模型准备需要的数据形式。ParamMatchPredict模型用于完成$param_name、$param_value_match子任务的预测。RuleMatch类用于采用平均距离匹配的方法来完成参数值绑定。CandidateMatch类用于提供候选测试参数的筛选功能。DataProcess用于处理数据格式之间的转换和知识库字典的生成。
模型训练时各类之间的依赖关系如图25所示。
模型训练时类图共涉及7个类。其中ValueTaggingTrain类用来训练参数值抽取模型,Model1TrainData类用来为参数值抽取模型准备符合输入形式的张量,Model1DatasetPrepare用来对指定的训练数据文件进行读取和处理,并按照指定的划分比例划分出train、validation、test数据集。ParamMatchTrain类用来训练参数绑定模型。类似的Model2DatasetPrepare类的功能是参数绑定模型训练数据读取处理以及数据集的划分。在测试用例文件处理过程中用到的文件IO处理、文件格式转换、知识库读取等操作由DataProcess类负责。
Claims (7)
1.一种基于深度学习的航天器测试脚本自动生成方法,包括:
步骤1,建立航天器测试系统知识库和测试用例分类模型;
为不同的航天器测试分系统分别构建一个知识库,知识库中的知识从历史航天器测试数据集中挖掘获取,采用语义网络表示方法表示;所述知识库中的测试实体分为4种:测试参数param、测试参数值param_value、设备名称equipment、测试分系统sub-system;知识库的关系分为3种:分系统测试参数值value-of-param、分系统设备名称equipment-of-system、分系统测试参数param-of-system;知识采用3元组描述,知识库中的各个实体及其相互关系如下表示:
(1)测试参数与测试参数值三元组:<param_value,value-of-param,param>;
(2)设备名称与测试子系统三元组:<equipment,equipment-of-system,sub-system>;
(3)测试参数与测试子系统三元组:<param,param-of-system,sub-system>;
构建测试用例分类模型,用于判断测试用例所属的测试分系统;
步骤2,基于多任务语法草图生成测试指令;
将测试指令生成任务被拆解为5个子任务,分别为:测试指令类型分类、测试参数数目预测、测试参数值抽取、测试参数实体链接、测试参数和参数值匹配;前三个子任务由参数值抽取子模型完成,后两个子任务由参数绑定子模型完成;
参数值抽取子模型的输入为测试用例的测试步骤文本,输出为测试指令类型、测试参数数目和测试参数值列表;由于一个测试步骤文本涉及到的测试参数数目范围在0-3之间,因此将测试参数数目预测问题转化为分类问题,构建一个4分类模型;测试步骤文本在经过BERT编码后输入参数值抽取子模型,参数值抽取子模型分别通过两个全连接层进行测试指令类型分类和测试参数数目预测,通过序列标注模型Bi-LSTM+CRF进行测试参数值抽取;其中,Bi-LSTM表示双向长短时记忆网络,CRF表示条件随机场;
参数绑定子模型的输入为测试用例文本、测试分系统知识库、测试参数数目、测试指令类型和测试参数值列表,输出;参数绑定子模型根据测试步骤文本的语义信息,从对应的航天器测试分系统知识库中筛选出一批标准的候选测试参数名称,对候选测试参数名称进行排序,根据参数值抽取子模型输出的测试参数数目param_num,取得排序得分最高的前param_num个测试参数名称作为航天器测试参数识别结果,结合参数值抽取子模型输出的测试参数值列表,输出测试参数和测试参数值匹配列表;
一个测试步骤经过参数值抽取子模型和参数绑定子模型实现一条测试脚本指令的映射;
步骤3,构建航天器测试脚本自动生成系统;
所述航天器测试脚本自动生成系统包括系统管理模块、测试用例分类模块、测试指令生成模块、测试脚本生成模块、以及模型训练与更新模块;
其中,测试用例分类模块利用步骤1对航天器测试用例文本进行分析,得到对应的测试分系统及测试分系统知识库;测试指令生成模块利用步骤2对航天器测试步骤文本进行分析,将其转化为对应的航天器测试指令;测试脚本生成模块用于对测试指令生成模块输出的航天器测试指令转换为脚本代码,并展示给用户;模型训练与更新模块用于对步骤1和2中所使用到的网络模型进行训练与更新。
2.根据权利要求1所述的方法,其特征在于,所述的步骤1中,包括:
步骤1.1:根据航天器历史测试数据为每个航天器测试分系统构建一个结构化的测试用例数据表;航天器测试用例包括测试描述和测试步骤两部分,测试描述包括功能描述、输入参数和判读参数,测试步骤包括测试步骤文本及对应的测试指令代码;测试指令代码包括测试指令类型、测试设备名称、指令参数名称和参数值;测试指令类型分为参数值设置指令和参数值判读指令;
步骤1.2:遍历对应测试分系统的测试用例数据表,获取知识库的测试实体以及实体间相互关系,为每个测试分系统构建知识库;
步骤1.3:抽取测试用例文本的关键词,并进行知识扩充;
首先,利用所有测试分系统的知识库建立分词词典,包括:将测试分系统名称、设备名称、测试参数名称、测试参数值组成的知识库词加入分词词典,再将其中的设备名称和测试参数名称进行分词,将取得的细粒度词加入分词字典,取细粒度词的2-gram组合也加入分词词典,得到最后的分词词典;
其次,采用前向最大匹配+Trie树的分词方法,对测试用例文本分词抽取关键词;并对只存在于固定测试分系统的设备名称、测试参数名称、测试参数值的测试步骤文本进行知识扩充,加入对应的测试分系统名称,再一同参与分类;
步骤1.4:构建测试用例分类模型,测试用例分类模型利用航天器测试文本分词器抽取测试用例文本的关键词,并进行知识扩充,再将测试用例文本的标题部分和抽取的关键词、知识扩充的步骤列表进行拼接,利用BERT进行分类。
3.根据权利要求1所述的方法,其特征在于,所述的步骤2中,构建参数值抽取子模型如下:
将测试用例步骤文本加上标签[CLS]、[PAD],经BERT编码后输入参数值抽取子模型;其中,[CLS]标签的作用有两个,一是用来对测试指令类型进行预测,一是用来对测试参数数目进行预测;[PAD]标签用于表示句子的填充;
测试指令类型分为两类,分别是参数值设置指令SETP和参数值判读指令GETVALUE;参数值抽取子模型将获得的BERT编码输出输入一层全连接层,得到测试指令类型的每个分类类别的logits值,然后采用softmax函数对输出概率值进行归一化;测试指令类型分类的损失函数采用交叉熵损失函数;
将经过BERT编码后得到的每个字的嵌入向量,再通过BERT模型中Transformer的编码层进行语义信息编码,得到编码向量,将BERT对[CLS]标签的输出向量Encodding[cls]输入到一个全连接层,得到每个分类数目的logits值,再经softmax函数获得参数数目预测的概率值;测试参数数目预测的损失函数采用交叉熵损失函数;
测试指令参数值抽取通过序列标注模型Bi-LSTM+CRF来完成;将测试步骤文本的BERT编码输出输入Bi-LSTM层,来捕捉每个字前后项语义依赖;将Bi-LSTM的输出接一层全连接,预测每个字对应的BIO标签的发射概率,分类的类别数是BIO标签数目;利用CRF层网络捕捉BIO标签内部的跳转概率,维护标签转移概率矩阵以及每个标签起始和终止的概率值;通过loss计算梯度进行反向传播,不断优化发射概率网络和转移概率矩阵的参数值;
参数值抽取子模型对三个子任务的网络进行联合训练,优化函数采用的是AdamW。
4.根据权利要求1所述的方法,其特征在于,所述的步骤2中,参数绑定子模型进行测试参数和参数值匹配的方式如下:
首先,经过Rouge-1和Rouge-L筛选2*param_num个候选测试参数名称CandidatesParam,param_num为参数值抽取子模型输出的测试参数数目;其次,将得到的CandidatesParam与参数值抽取子模型输出的测试参数值param_value进行组合,生成测试参数与参数值的候选匹配对;然后,将候选匹配对与测试步骤文本拼接,在拼接时将步骤文本与候选匹配对用[SEP]标签隔开,并设置步骤文本和候选匹配对的段标号分别为1和0以区分,将拼接文本输入匹配网络,输出分数MatchScore越高表示候选匹配对越符合步骤文本中描述语义;将所有候选匹配对按照匹配分数由高到低排列,优先选择最先匹配的候选测试参数和参数值,再在剩下的候选匹配对里选择次优的配对,直到选择测试参数值匹配对达到param_num个。
5.根据权利要求4所述的方法,其特征在于,所述的步骤2中,参数绑定子模型还基于距离对测试参数和参数值匹配,包括:
采取最长公共子序列的平均索引index下标表示标准测试参数名称的位置,计算标准测试参数名称与参数值之间的距离,选择距离最近候选匹配对作为匹配结果;
所述参数绑定子模型根据距离和匹配模型输出的匹配分数来最终确定候选匹配对的匹配分数,具体最终匹配分数=匹配模型输出的匹配分数+0.3*距离;进一步,根据最终匹配分数对候选匹配对进行排序,选择测试参数和参数值对。
6.根据权利要求1所述的方法,其特征在于,所述的步骤3中,所述的系统管理模块包括:登录与注册子模块,用于对系统的登录进行验证以及注册新的用户;运行结果记录子模块,用于对系统的每一次运行及其结果进行记录。
7.根据权利要求1所述的方法,其特征在于,所述的步骤3中,航天器测试脚本自动生成系统的层级架构分为数据访问层、支撑层、应用逻辑层和应用表示层;
数据访问层为系统整体运行提供数据支撑,提供用户数据管理、系统运行日志记录和测试用例数据存储的功能;
支撑层提供模型训练、模型更新、航天器测试系统知识库构建三部分功能;所述模型是指步骤1和2中所使用到的网络模型;
应用逻辑层包括测试用例分类和测试脚本生成两个功能,测试用例分类为航天器测试指令生成提供测试分系统名称,测试指令识别将每条测试步骤转化成对应的测试脚本指令,通过组合每条测试步骤结果生成最终的航天器测试脚本;
应用表现层是系统和用户的交互页面,应用表现层包括测试脚本生成工作台,将脚本生成过程中的每一个步骤结果进行可视化展示,同时提供结果核对编辑页面,供用户对测试脚本结果进行确认。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111504029X | 2021-12-06 | ||
CN202111504029 | 2021-12-06 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115964273A true CN115964273A (zh) | 2023-04-14 |
Family
ID=87351898
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211553505.1A Pending CN115964273A (zh) | 2021-12-06 | 2022-12-06 | 基于深度学习的航天器测试脚本自动生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115964273A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116155788A (zh) * | 2023-04-19 | 2023-05-23 | 鹏城实验室 | 网络安全测试方法、装置、设备及可读存储介质 |
CN116501650A (zh) * | 2023-06-27 | 2023-07-28 | 航天科工火箭技术有限公司 | 运载火箭测控流程引擎的执行方法、装置及介质 |
CN116804972A (zh) * | 2023-08-23 | 2023-09-26 | 北京遥感设备研究所 | 一种数据库基准测试用例动态生成方法 |
CN117009250A (zh) * | 2023-09-25 | 2023-11-07 | 麒麟软件有限公司 | 一种Linux操作系统的GRUB自动测试方法及系统 |
-
2022
- 2022-12-06 CN CN202211553505.1A patent/CN115964273A/zh active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116155788A (zh) * | 2023-04-19 | 2023-05-23 | 鹏城实验室 | 网络安全测试方法、装置、设备及可读存储介质 |
CN116155788B (zh) * | 2023-04-19 | 2023-06-20 | 鹏城实验室 | 网络安全测试方法、装置、设备及可读存储介质 |
CN116501650A (zh) * | 2023-06-27 | 2023-07-28 | 航天科工火箭技术有限公司 | 运载火箭测控流程引擎的执行方法、装置及介质 |
CN116501650B (zh) * | 2023-06-27 | 2023-09-12 | 航天科工火箭技术有限公司 | 运载火箭测控流程引擎的执行方法、装置及介质 |
CN116804972A (zh) * | 2023-08-23 | 2023-09-26 | 北京遥感设备研究所 | 一种数据库基准测试用例动态生成方法 |
CN116804972B (zh) * | 2023-08-23 | 2023-11-14 | 北京遥感设备研究所 | 一种数据库基准测试用例动态生成方法 |
CN117009250A (zh) * | 2023-09-25 | 2023-11-07 | 麒麟软件有限公司 | 一种Linux操作系统的GRUB自动测试方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110597735B (zh) | 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法 | |
CN111026842B (zh) | 自然语言处理方法、自然语言处理装置及智能问答系统 | |
CN115964273A (zh) | 基于深度学习的航天器测试脚本自动生成方法 | |
CN109471793B (zh) | 一种基于深度学习的网页自动化测试缺陷定位方法 | |
CN113157859B (zh) | 一种基于上位概念信息的事件检测方法 | |
US20050246353A1 (en) | Automated transformation of unstructured data | |
CN113254507B (zh) | 一种数据资产目录智能构建盘点方法 | |
CN114547072A (zh) | 自然语言查询转换sql方法、系统、设备及存储介质 | |
US20220414463A1 (en) | Automated troubleshooter | |
CN113138920B (zh) | 基于知识图谱与语义角色标注的软件缺陷报告分派方法及装置 | |
CN116127090B (zh) | 基于融合和半监督信息抽取的航空系统知识图谱构建方法 | |
CN117389541B (zh) | 基于对话检索生成模板的配置系统及设备 | |
CN114217766A (zh) | 基于预训练语言微调与依存特征的半自动需求抽取方法 | |
CN114881043B (zh) | 基于深度学习模型的法律文书语义相似度评估方法及系统 | |
CN115390806A (zh) | 基于双模态联合建模的软件设计模式推荐方法 | |
CN116861269A (zh) | 工程领域的多源异构数据融合及分析方法 | |
CN117215935A (zh) | 一种基于多维度代码联合图表示的软件缺陷预测方法 | |
CN117648093A (zh) | 基于大模型和自定制需求模板的rpa流程自动化生成方法 | |
Xiao et al. | Information extraction from the web: System and techniques | |
CN117349311A (zh) | 一种基于改进RetNet的数据库自然语言查询方法 | |
CN117473054A (zh) | 基于知识图谱的通用智能问答方法及装置 | |
CN114676258B (zh) | 一种基于症状描述文本的非诊断为目的的疾病分类方法 | |
CN116383414A (zh) | 一种基于碳核查知识图谱的智能文件评审系统及方法 | |
Jubair et al. | A multi‐agent K‐means with case‐based reasoning for an automated quality assessment of software requirement specification | |
CN115906818A (zh) | 语法知识预测方法、装置、电子设备和存储介质 |
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 |