一种基于强化学习的类集成测试序列生成方法技术

技术编号:30017809 阅读:24 留言:0更新日期:2021-09-11 06:29
本发明专利技术公开了一种基于强化学习的类集成测试序列生成方法,属于软件测试技术领域。包括下列步骤:1)定义强化学习任务;2)程序静态分析;3)度量测试桩复杂度;4)设计奖励函数;5)设计值函数;6)生成类集成测试序列。本发明专利技术解决了目前已有的基于强化学习的类集成测试序列生成方法评估确定类集成测试序列花费的总体代价的指标不够精确的问题,为实际生产生活中测试人员开展测试工作提供了更为准确的度量方法,提升了集成测试的效率,可以更好地控制产品的质量。制产品的质量。制产品的质量。

【技术实现步骤摘要】
一种基于强化学习的类集成测试序列生成方法


[0001]本专利技术属于软件测试
,且特别是有关于一种基于强化学习的类集成测试序列生成方法。

技术介绍

[0002]软件测试阶段主要包括单元测试、集成测试、系统测试、验证和确认以及回归测试等。其中,集成测试是在单元测试的基础上,将所有的软件单元组装成模块、子系统或系统,检测各部分工作是否达到或实现相应技术指标及要求,以保证各单元组合之后能够按既定意图协作运行,确保增量的行为正确。但是,面向对象的程序没有明显的层次划分,其间的调用关系表现为错综复杂的网状结构,传统的集成测试策略并不能很好地应用其中。所以,需要提出符合面向对象程序特点的新的集成测试策略,这种新的策略以类为对象,以生成最优的类集成测试序列为目的,进而确定测试方式。
[0003]根据面向对象程序的类间依赖性,软件工程领域的研究者们提出了基于类集成测试序列的集成策略。在测试过程中,这些策略往往需要为面向对象程序中的某些类构造所需的测试桩,以代替其完成某些功能。这项任务的代价很大,并且一般来说没有办法避免,因而如何降低代价成为了集成测试中的一项关键性的问题。研究过程中,学者们通过计算测试桩复杂度衡量测试桩的代价,不同的类集成测试序列,它们的测试桩复杂度不尽相同,测试代价也不相同。合理地对测试程序中的类进行排序,得到可行的类集成测试序列,可以大大降低需要构建的测试桩的总体复杂度,进而尽可能使测试代价减小。
[0004]已有的基于强化学习的类集成测试序列生成方法忽略了测试桩复杂度这一评价指标,这些方法假设每个类间依赖关系依赖程度相同,即,每个测试桩具有相同的复杂度。然而,不同的测试桩具有不同的复杂度,测试桩越少不能表示确定一个类集成测试序列花费的测试桩代价越低。因此,已有的基于强化学习的类集成测试序列生成方法以类测试桩数量作为衡量标准,来确定类集成测试序列需要花费的总体代价,这种指标不够精确。所以,提出合理的类集成测试序列生成技术以及将评价指标精确化对于集成测试来说具有相当重要的意义。

技术实现思路

[0005]本专利技术的目的在于提供一种基于强化学习的类集成测试序列生成方法,解决已有的基于强化学习的类集成测试序列生成方法评估确定类集成测试序列花费的总体代价的指标不够精确的问题。这可以为实际生产生活中测试人员开展测试工作提供更为准确的度量方法,进而提升集成测试的效率。
[0006]本专利技术按以下技术方案实现:一种基于强化学习的类集成测试序列生成方法,具体过程为:步骤1、定义强化学习任务:强化学习的任务就是使智能体在环境中不断地进行尝试,根据获得的奖励值不断调整策略,最终生成一个较好策略,智能体根据这个策略便能够
知道在什么状态下应该执行什么动作;步骤2、程序静态分析:对源程序进行静态分析,将获取的信息用于计算类间的属性和方法复杂度,通过属性复杂度计算类间的属性耦合,通过方法复杂度计算类间的方法耦合;步骤3、度量测试桩复杂度:依据前面得到的属性和方法复杂度计算测试桩复杂度,为后面奖励函数的设计提供信息;步骤4、设计奖励函数:将测试桩复杂度的计算融入奖励函数的设计中,指导智能体向测试桩复杂度更低的方向学习;步骤5、设计值函数:通过奖励函数反馈值函数,通过值函数的设定保证累计奖励最大化;步骤6、生成类集成测试序列:当智能体完成设定的训练次数,选出整体奖励值最大的动作路径,即为本次学习得到的类集成测试序列。
[0007]具体的方案,步骤1的具体步骤如下:1.1、将要分析的软件系统视为一组在测试时进行需要进行集成的类的集合;1.2、保留智能体在路径中执行的动作序列,即动作历史,作为集成测试类序列的候选解决方案;1.3、从候选解决方案中找到一条总体奖励最大的动作历史,即为本次学习过程所求的类集成测试序列。
[0008]具体的方案,步骤2的具体步骤如下:2.1、分析类间关系,通过属性复杂度计算类间的属性耦合,使用A(i, j)代表,i,j分别表示程序中的类,属性复杂度数量上等于i调用j的成员变量数、方法参数类型与方法的返回值数目三者之和;2.2、通过方法复杂度计算类间的方法耦合,使用M(i, j)代表,方法复杂度数目上等于i调用j中方法的数目。
[0009]2.3、对属性和方法复杂度进行标准化。
[0010]具体的方案,步骤3的具体步骤如下:3.1、通过熵权法计算类间的属性和方法复杂度的权值;3.2、结合属性和方法复杂度计算得到测试桩复杂度;3.3、当得到类集成测试序列时,对过程中产生的测试桩复杂度进行累加,得到总体测试桩复杂度。
[0011]进一步的方案:测试桩复杂度其中,,,A(i, j)代表类i和j之间的属性复杂度,M(i, j)代表类i和j之间的方法复杂度,熵权法最先进行的就是对连个指标进行标准化,这样得到的结果均在0到1之间,标准化之后的类间的属性复杂度是,方法复杂度是。
[0012]具体的方案,步骤4的具体步骤如下:
4.1、设计当智能体探索并集成到的类越优,其得到奖励值越高的奖励函数;4.2、当过程中任意一个动作类重复出现两次,给予这条路径一个最小值

∞,以便继续探索时进行避免;4.3、通过以上两点结合测试桩复杂度,设计奖励函数。
[0013]进一步的方案:其中,智能体经过i

1次状态变换到达σ
i
,σ
i
表示状态路径,r(σ
i
)表示该状态路径会得到的奖励值,Max表示最大奖励值,这里取1000,c为一个正整数值,这里取100,a
σi
表示与状态路径对应的动作历史,SCplx()表示测试桩复杂度。当过程中出现任何不符合要求的情况,则环境会赋予智能体一个惩罚值。
[0014]具体的方案,步骤5的具体步骤如下:5.1、根据环境的交互产生的状态和选择的动作,得到一个即时回报的Q值,用Q(s, a)表示,其中,s表示状态,a表示动作;5.2、根据下一个状态s

选择最大的Q(s

, a

)并将其乘以一个折扣因子γ;5.3、再加上智能体在状态s下执行动作a得到的奖励值r;5.4、整体乘以一个学习率α;5.5、再加上刚才即时回报的Q值得到现在的Q值。
[0015]进一步的方案:其中,α表示学习率,r表示智能体在状态s下执行动作a得到的奖励值,γ表示折扣因子。
[0016]具体的方案,步骤6的具体步骤如下:6.1、智能体根据动作选择机制选择动作;6.2、智能体完成训练次数的时候,系统选择最大整体奖励值的动作序列返回,即为所求的最优类集成测试序列。
[0017]与现有技术相比,本专利技术有益效果:本专利技术解决了目前已有的基于强化学习的类集成测试序列生成方法评估确定类集成测试序列花费的总体代价的指标不够精确的问题,为实际生产生活中测试人员开展测试工作提供了更为准确的度量方法,提升了集成测试的效率,进而更好地控制产品的质量。
附图说明
[0018]附图作为本本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于强化学习的类集成测试序列生成方法,其特征在于:步骤1、定义强化学习任务:强化学习的任务就是使智能体在环境中不断地进行尝试,根据获得的奖励值不断调整策略,最终生成一个较好策略,智能体根据这个策略便能够知道在什么状态下应该执行什么动作;步骤2、程序静态分析:对源程序进行静态分析,将获取的信息用于计算类间的属性和方法复杂度,通过属性复杂度计算类间的属性耦合,通过方法复杂度计算类间的方法耦合;步骤3、度量测试桩复杂度:依据前面得到的属性和方法复杂度计算测试桩复杂度,为后面奖励函数的设计提供信息;步骤4、设计奖励函数:将测试桩复杂度的计算融入奖励函数的设计中,指导智能体向测试桩复杂度更低的方向学习;步骤5、设计值函数:通过奖励函数反馈值函数,通过值函数的设定保证累计奖励最大化;步骤6、生成类集成测试序列:当智能体完成设定的训练次数,选出整体奖励值最大的动作路径,即为本次学习得到的类集成测试序列。2.根据权利要求1所述的一种基于强化学习的类集成测试序列生成方法,其特征在于:步骤1的具体步骤如下:1.1、将要分析的软件系统视为一组在测试时进行需要进行集成的类的集合;1.2、保留智能体在路径中执行的动作序列,即动作历史,作为集成测试类序列的候选解决方案;1.3、从候选解决方案中找到一条总体奖励最大的动作历史,即为本次学习过程所求的类集成测试序列。3.根据权利要求1所述的一种基于强化学习的类集成测试序列生成方法,其特征在于:步骤2的具体步骤如下:2.1、分析类间关系,通过属性复杂度计算类间的属性耦合,使用A(i, j)代表,i,j分别表示程序中的类,属性复杂度数量上等于i调用j的成员变量数、方法参数类型与方法的返回值数目三者之和;2.2、通过方法复杂度计算类间的方法耦合,使用M(i, j)代表,方法复杂度数目上等于i调用j中方法的数目,然后对属性和方法复杂度进行标准化。4.根据权利要求1所述的一种基于强化学习的类集成测试序列生成方法,其特征在于:步骤3的具体步骤如下:3.1、通过熵权法计算类间的属性和方法复杂度的权值;3.2、结合属性和方法复杂度计算得到测试桩复杂度;3.3、当得到类集成测试序列时,对过程中产生的测试桩复杂度进行累加,得到总体测试桩复杂度。5.根据权利要求4所述的一种基于强化学习的类集成测试序列生成方法,其特征在于:测试桩复杂度

【专利技术属性】
技术研发人员:张艳梅丁艳茹姜淑娟袁冠张颖辉
申请(专利权)人:中国矿业大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1