一种基于强化学习的simulink软件测试方法
技术领域:
:1.本发明涉及软件测试领域,尤其涉及一种基于强化学习的simulink软件测试方法。
背景技术:
::2.cps(信息物理系统)是实现了计算、通信与物理系统的一体化设计的多维复杂系统,它被广泛应用于汽车、航空航天等安全关键领域的设计、仿真过程,因此测试并发现它们中的bug至关重要。目前针对cps工具链的bug测试工作,不论是通过构建新的cps模型,还是通过对已有cps模型进行变异,目的都是生成对编译器施压的模型。3.例如对cps最常用的开发工具——mathworks的simulink的测试,关注其构建模型的方法,该方法的相关工作分为两部分,一部分如文献[1]的slforge,通过轮盘赌算法随机选择某些块,并随机的将这些块连接起来构建新模型,另一部分如文献[2]的deepfuzzsl,通过使用长短期记忆网络lstm学习现有开源模型中的语言规范,以指导模型的生成。[0004]以上两类simulink软件的测试方法都针对真实的模型案例进行分析,能够生成一个较有效的模型,并且也检测到了bug。但是以上方法中,随机生成法由于缺乏指导,一定概率导致生成的模型编译不通过,频繁的迭代修复错误极大降低了编译器测试效率,而采用深度学习方法训练一个网络以指导模型生成的方法,需要大量的真实模型作为训练数据,而现实中并不存在如此多的真实模型,导致学习到的信息不足以生成理想的网络,进而难以生成理想的测试模型。因此,设计一个既能对模型生成提供指导又不需要大量训练数据的方法是有意义的。技术实现要素:[0005]根据现有技术存在的问题,本发明公开了一种基于强化学习的simulink软件测试方法,具体包括如下步骤:[0006]收集测试用例:使用simulink模型的随机生成工具生成测试用例,构建测试用例库,分别打开测试用例库的模型,检测其是否正常编译,并将不能正常编译的模型删除;[0007]构建强化学习代理:验证在simulink软件测试过程存在时序关系,将深度强化学习算法与simulink软件测试背景相结合,定义状态、动作、策略和奖励要素;[0008]新待测用例生成过程:按顺序打开测试用例库的一个模型,将其状态特征输入至强化学习代理,强化学习代理根据输入信息选择模型下一步要执行的动作,并将动作输出至模型,模型执行该动作,重复该步骤对该模型进行编译测试,若不通过则通过动作回溯进行修复,若修复不成功,则放弃该模型,若能通过编译测试或修复成功,则将该模型设置为新待测用例;[0009]对新待测用例进行差分测试:对新待测用例分别选择普通仿真模式和加速仿真模式进行编译运行,若编译出现错误,则记录该错误信息,否则分别保存用例中每个模块的输入输出值,比较普通模式和加速模式的输入输出值,如果二者等价,则完成该用例的测试过程,如果存在差异,则记录差异信息,并认定为发现bug;[0010]更新强化学习代理:根据差分测试结果,对强化学习代理进行更新,使强化学习代理趋向于生成易触发bug的模型。[0011]构建强化学习代理时:验证simulink模型的生成过程可以建模为马尔科夫决策过程,将试用例的实际图结构定义为状态s、为某个测试用例选择某个模块进行连接的过程作为一个动作a、通过该测试用例是否能通过编译及是否发现bug来衡量强化学习中的奖励值r。[0012]新待测用例的生成过程中,动作选择的方式为:[0013]强化学习代理根据状态特征的输入选择动作at时,采取ε-greedy策略,其中0《ε《1,按概率ε选择一个随机的动作,或按概率1-ε选择一个回报最大的动作,从而平衡环境学习过程中环境探索和利用的关系,[0014][0015]在训练前期阶段,设置随机概率值,以较低概率选择代理指导的动作,随着训练的进行,探索环境的知识逐渐积累,ε值不断衰减,以较大的概率选取最大行为价值的动作,以利用学习到的知识。[0016]新待测用例的生成过程中,通过动作回溯修复错误的方式为:对模型进行编译测试时,若出现编译不通过,则保存错误提示信息,使用正则表达式提取导致错误的模块名称,并将该模块及与其相连的线从模型中删除。[0017]强化学习代理更新的具体方法为:将每个测试用例的状态st传递给当前值网络,当前值网络反馈出行为价值最大的动作a,在获得奖励rt后,将当前动作选择的结果作为数据组合《st,a,rt,st+1》存到回放记忆单元中,其中st+1代表选择动作后的状态;[0018]从回放记忆单元中随机抽取已保存的组合《st,a,rt,st+1》,从而进行神经网络的更新,将当前值网络产生的当前值和目标值网络产生的目标值用于计算dqn的损失函数,以更新当前值网络的参数,每隔固定的时间步n,将当前值网络的参数拷贝给目标值网络以对其更新。[0019]衡量强化学习中的奖励值r时:将发现simulink的bug作为具体目标,将奖励值r设定为-1,0和100,分别代表无法通过编译、能通过编译但未触发bug、能通过编译且触发bug。[0020]由于采用了上述技术方案,本发明提供的一种基于强化学习的simulink软件测试方法,该方法对simulink软件进行测试时,在模型生成的过程中,采用强化学习方法,强化学习代理通过对当前模型的状态特征进行分析,指导模型选择下一步要执行的动作,如随机添加块、端口跳转、添加子系统等,解决了现有模型生成方法缺乏指导的缺点。而使用强化学习生成模型的每一步,强化学习代理都在不断积累经验,趋向于指导生成对simulink施加压力的模型,因此模型生成不需要大量的真实模型,解决了现有训练数据短缺的限制。[0021]综上,本发明可以应用到cps开发工具链最常用的开发工具即simulink的软件测试领域。在测试用例生成过程中引入强化学习方法,解决了现有simulink测试技术存在的生成模型的随机性和训练数据短缺的问题,提高了测试模型生成效率和bug检测性能。基于我们的测试技术,在已有的测试条件下已经可以测试出simulink的bug,这对simulink测试和cps开发工具链测试具有一定的指导意义。附图说明[0022]为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0023]图1为本发明中方法的流程图[0024]图2为本发明中强化学习代理的更新过程示意图具体实施方式[0025]为使本发明的技术方案和优点更加清楚,下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚完整的描述:[0026]一种基于强化学习的simulink软件测试方法,具体包括如下步骤:[0027]s1:收集测试用例:使用simulink模型随机生成工具生成测试用例,构建测试用例库,分别打开测试用例库的模型,检测其是否能正常编译,如不能正常编译则将其删除;[0028]s2:构建强化学习代理:首先验证simulink软件测试过程存在时序关系,可以建模为马尔科夫决策过程(mdp)。将深度强化学习算法dqn与simulink软件测试背景相结合,定义状态、动作、策略、奖励等要素。[0029]a)状态(state):模型的状态state即为当前模型中实际存在的块以及块之间的线,可以将其视为一个有向图结构,通常用s表示,块为图的顶点,块间连线为图的有向边。[0030]b)动作(action):强化学习代理根据当前模型的state指导模型执行下一个action,如端口跳转、分支、随机添加块、添加子系统等。[0031]c)策略(policy):mdp的解是一系列的决策策略,每个策略为一个动作添加方案,本文将这些策略定义为π,π=s-》a,它将一个状态映射到一个动作。其主要思想是在simulink模型生成与测试环境中,确定能够尽可能生成能发现simulink的bug的模型,为每个现有模型选择能使其测试效果最好的动作,这也正是强化学习需要学习的地方。[0032]d)奖励(reward):我们以发现simulink的bug作为具体目标,同时尽量减少在matlab测试时出现编译运行不通过的情况(即产生error),因此我们将每个动作的执行结果分成三种情况:error(无法通过编译)、normal(能通过编译但未触发bug)、bug(能通过编译且触发bug),对应的奖励分别为:-1,0,100。[0033]s3:新测试用例生成:按顺序打开测试用例库的一个模型,将其状态特征输入至强化学习代理,代理根据输入选择模型下一步要执行的动作,并将动作输出给模型,模型执行该动作。[0034]选择动作at时,采取ε-greedy策略(0《ε《1),即即按概率ε选择一个随机的动作,或按概率1-ε选择一个回报最大的动作,以平衡环境学习过程中环境探索和利用的关系,[0035][0036]在训练前期阶段,由于缺乏对环境的先验知识,我们设置较高的随机概率值,较低概率选择代理指导的动作,以增强对环境的探索,避免陷入局部最优。随着训练的进行,探索环境的知识逐渐积累,ε值不断衰减,逐渐以较大的概率选取最大行为价值的动作,以利用学习到的知识。[0037]重复该步骤多次后,对该模型进行编译测试,若不通过,则通过动作回溯进行修复,即保存错误提示信息,使用正则表达式提取导致错误的模块名称,并将该模块及与其相连的线从模型中删除。若修复不成功,则放弃该模型,若能通过编译测试或修复成功,则将该模型设置为新待测用例。[0038]s4:对新待测用例进行差分测试:逐个打开新待测用例模型,对模型分别选择普通仿真模式和加速仿真模式进行编译运行,若编译出现错误,则记录该错误信息,否则分别保存用例中每个模块的输入输出值,比较普通模式和加速模式的输入输出值,如果等价,则完成该用例的测试过程,如果存在差异,则记录差异信息,并认定为发现了simulink的bug。[0039]s5:更新强化学习代理:根据差分测试的结果,对强化学习代理进行更新,使强化学习代理趋向于生成易触发bug的模型。[0040]由于在simulink模型生成的环境中,状态和动作都是高维的,若使用传统的q-learning算法,q-table将过于庞大而难以建立,显然不适用。因此我们使用深度强化学习dqn(deepq-network)算法,将q-learning与神经网络相结合,可以有效解决传统q-learning算法的此类缺陷。[0041]在强化学习的迭代过程中,代理以当前模型状态st作为输入,通过一组真实标签可以预测出当前状态st对应的不同动作at的q(st,at)值(表示的是代理在状态st下选择动作at的累计回报期望),然后根据ε-greedy策略进行动作at的选择,即按概率ε选择一个随机的动作,或按概率1-ε选择一个回报最大(即q(st,at)值最大)的动作,以进行状态转换。q(st,at)不使用表格存储,而是训练一个神经网络,输入st和at,输出q(st,at)的值。根据当前状态选择动作得到的回报,q网络会随之更新,每个时间步t的更新公式为:[0042]q(st,at)←q(st,at)+α[r+γmaxaq(st+1,at+1)-q(st,at)][0043]其中,q(st,at)表示代理在状态st选择执行动作at的值函数。γ称为折扣因子(γ∈[0,1]),它定义了未来奖励的衰减值,值为1是意味着更重视长期奖励,值为0时意味着只考虑短期奖励。α称为学习率(α∈[0,1]),它代表一次学习的影响比重,α越大,对之前训练的效果保留的就越少,值为1时意味只考虑新学习到的信息,值为0时意味着代理不会学习任何新信息。r代表基于状态st和动作at得到的奖励。[0044]我们的目标是学习网络q,记录为当前值网络。根据上述公式,在更新时需要求解q(st,at)←rt+1+γmaxaq(st+1,a),这里的q(st+1,a)是网络在st+1的输出,由于当前值网络一直在更新,导致q(st,at)和q(st+1,a)始终在变化,而使训练不稳定。我们设置了一个与当前值网络结构相同的目标值网络来更新q(st,at),目标值网络使用当前值网络数次更新前的参数,每训练固定的时间步n,将当前值网络的参数拷贝给目标值网络以对其更新,提高了训练的稳定性。[0045]在代理不断与环境交互过程中,使用经验回放方法,每次根据ε-greedy策略选择动作at并获得奖励rt后,将当前动作选择的结果作为一个数据组合《st,a,rt,st+1》到回放记忆单元中,其中st+1代表选择动作后的状态。[0046]从回放记忆单元中随机抽取一个之前保存的组合《st,a,rt,st+1》,以进行神经网络的更新,当前值网络产生的当前值与目标值网络产生的目标值将计算dqn的损失函数,以更新当前值网络的参数。[0047]实施例:如图1所示的一种基于强化学习的simulink软件测试方法,分为两个部分:用例生成部分和用例测试部分;[0048]用例生成部分:①在测试用例库中选择一个初始模型,②将其状态特征输入至强化学习代理,③代理根据输入在动作库中选择模型下一步要执行的动作,④并将动作索引输出给模型,模型执行该动作。[0049]用例测试部分:⑤matlab对执行动作后的模型进行编译测试,⑥若编译不通过,则对编译错误进行修复,⑦对编译通过后的模型进行差分测试,⑧判断测试结果在功能上是否等价,若等价则认为没有发现bug,若存在差异,认为发现了bug,⑨基于测试结果,更新强化学习代理,使代理趋向于指导生成对simulink施加压力的模型。[0050]如图2所示的强化学习代理的更新过程,具体包括如下步骤[0051]在代理不断与环境交互过程中,使用经验回放方法,每次根据ε-greedy策略选择动作a并获得奖励rt后,保存获得的数据组合《st,a,rt,st+1》到回放记忆单元中,其中st代表选择动作前的状态,st+1代表选择动作后的状态。每隔固定时长的时间步,会从回放记忆单元中随机抽取一个之前保存的组合《st,a,rt,st+1》,以进行神经网络的更新,当前值网络产生的当前值与目标值网络产生的目标值将用于计算dqn的损失函数,以更新当前值网络的参数。随着网络的不断更新,代理将逐渐趋向于指导生成易触发bug且更容易通过编译的模型。每隔固定的时间步n,将当前值网络的参数拷贝给目标值网络以对其更新。[0052]以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域:
:的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。当前第1页12当前第1页12
技术特征:1.一种基于强化学习的simulink软件测试方法,其特征在于包括:收集测试用例:使用simulink模型的随机生成工具生成测试用例,构建测试用例库,分别打开测试用例库的模型,检测其是否正常编译,并将不能正常编译的模型删除;构建强化学习代理:验证在simulink软件测试过程存在时序关系,将深度强化学习算法与simulink软件测试背景相结合,定义状态、动作、策略和奖励要素;新待测用例生成过程:按顺序打开测试用例库的一个模型,将其状态特征输入至强化学习代理,强化学习代理根据输入信息选择模型下一步要执行的动作,并将动作输出至模型,模型执行该动作,重复该步骤对该模型进行编译测试,若不通过则通过动作回溯进行修复,若修复不成功,则放弃该模型,若能通过编译测试或修复成功,则将该模型设置为新待测用例;对新待测用例进行差分测试:对新待测用例分别选择普通仿真模式和加速仿真模式进行编译运行,若编译出现错误,则记录该错误信息,否则分别保存用例中每个模块的输入输出值,比较普通模式和加速模式的输入输出值,如果二者等价,则完成该用例的测试过程,如果存在差异,则记录差异信息,并认定为发现bug;更新强化学习代理:根据差分测试结果,对强化学习代理进行更新,使强化学习代理趋向于生成易触发bug的模型。2.根据权利要求1所述的方法,其特征在于:构建强化学习代理时:验证simulink模型的生成过程可以建模为马尔科夫决策过程,将试用例的实际图结构定义为状态s、为某个测试用例选择某个模块进行连接的过程作为一个动作a、通过该测试用例是否能通过编译及是否发现bug来衡量强化学习中的奖励值r。3.根据权利要求1所述的方法,其特征在于:新待测用例的生成过程中,动作选择的方式为:强化学习代理根据状态特征的输入选择动作a
t
时,采取ε-greedy策略,其中0<ε<1,按概率ε选择一个随机的动作,或按概率1-ε选择一个回报最大的动作,从而平衡环境学习过程中环境探索和利用的关系,在训练前期阶段,设置随机概率值,以较低概率选择代理指导的动作,随着训练的进行,探索环境的知识逐渐积累,ε值不断衰减,以较大的概率选取最大行为价值的动作,以利用学习到的知识。4.根据权利要求1所述的方法,其特征在于:新待测用例的生成过程中,通过动作回溯修复错误的方式为:对模型进行编译测试时,若出现编译不通过,则保存错误提示信息,使用正则表达式提取导致错误的模块名称,并将该模块及与其相连的线从模型中删除。5.根据权利要求1所述的方法,其特征在于:强化学习代理更新的具体方法为:将每个测试用例的状态s
t
传递给当前值网络,当前值网络反馈出行为价值最大的动作a,在获得奖励r
t
后,将当前动作选择的结果作为数据组合<s
t
,a,r
t
,s
t+1
>存到回放记忆单元中,其中s
t+1
代表选择动作后的状态;从回放记忆单元中随机抽取已保存的组合<s
t
,a,r
t
,s
t+1
>,从而进行神经网络的更新,
将当前值网络产生的当前值和目标值网络产生的目标值用于计算dqn的损失函数,以更新当前值网络的参数,每隔固定的时间步n,将当前值网络的参数拷贝给目标值网络以对其更新。6.根据权利要求2所述的方法,其特征在于:衡量强化学习中的奖励值r时:将发现simulink的bug作为具体目标,将奖励值r设定为-1,0和100,分别代表无法通过编译、能通过编译但未触发bug、能通过编译且触发bug。
技术总结本发明公开了一种基于强化学习的Simulink软件测试方法,分为两个部分:用例生成部分和用例测试部分;用例生成部分:
技术研发人员:李辉 尚修为 李宇龙 陈荣
受保护的技术使用者:大连海事大学
技术研发日:2022.03.18
技术公布日:2022/7/5