CN115904946A - 一种基于MoMuTUML的测试用例自动生成方法及系统 - Google Patents
一种基于MoMuTUML的测试用例自动生成方法及系统 Download PDFInfo
- Publication number
- CN115904946A CN115904946A CN202211365919.1A CN202211365919A CN115904946A CN 115904946 A CN115904946 A CN 115904946A CN 202211365919 A CN202211365919 A CN 202211365919A CN 115904946 A CN115904946 A CN 115904946A
- Authority
- CN
- China
- Prior art keywords
- mutation
- model
- coverage
- conversion
- operator
- 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
Abstract
本发明公开了一种基于MoMuTUML的测试用例自动生成方法及系统,对原有的功能重叠的变异算子进行删减,并增加3种与原有变异算子功能不重叠的新变异算子,减少了语法等效变异模型的生成,降低了测试用例生成时间成本;通过根据变异模型集合和被测模型生成测试用例,并根据测试用例删除等效变异模型,获取有效变异模型,避免了MoMuTUML中等效变异模型数量过多的问题,提高了测试用例的生成效率;通过基于反馈的变异方法,对有效变异模型对应的变异算子进行评分,构建最优变异算子集合,选择集合中变异算子对被测模型进行变异操作,解决了MoMuTUML变异方法低效的问题,进一步提高测试用例的生成效率。
Description
技术领域
本发明涉及软件测试技术领域,具体涉及一种基于MoMuTUML的测试用例自动生成方法及系统。
背景技术
MoMuTUML采用基于模型故障的测试用例自动生成方法,依赖于被测系统的模型来创建测试用例,是一种黑盒测试方法。在将故障插入被测系统模型后,它会生成揭示该故障的测试用例,这使得基于模型的测试用例生成方法成为可用的最强大和通用的测试用例生成方法之一,因为它创建了保证揭示某些故障的测试用例,使用其生成的测试用例进行测试既能够证明不存在某些故障,也能够揭示产生故障情况下的行为信息。但MoMuTUML目前仍存在如下几点局限性:
(1)MoMuTUML现有变异算子的功能可能重叠,容易产生语法等效的变异模型,增加了测试用例生成的开销,导致测试用例生成效率低。
(2)MoMuTUML当前变异方法较为低效,无法选择最适合被测模型的变异算子集合,导致测试用例生成效率低。
(3)MoMuTUML整体流程设计不灵活,为顺序执行,无法接收测试用例生成结果的反馈且无法根据反馈对变异过程进行调整,导致测试用例生成效率低。
发明内容
有鉴于此,本发明提供了一种基于MoMuTUML的测试用例自动生成方法及系统,能够高效地生成测试用例,并将测试用例生成结果反馈到变异过程,对变异过程进行调整,提高测试用例生成效率。
本发明采用的具体技术方案如下:
一种基于MoMuTUML的测试用例自动生成方法,包括:
步骤一、建立被测模型,并根据所述被测模型获得初始全局状态覆盖统计表和初始全局转换覆盖统计表;
步骤二、根据变异算子集合中每个变异算子对所述被测模型进行变异操作,构建对应的变异模型集合;
步骤三、根据所述变异模型集合和所述被测模型生成测试用例,并根据所述测试用例删除所述变异模型集合中的等效变异模型,获取有效变异模型,根据所述有效变异模型更新所述初始全局状态覆盖统计表和初始全局转换覆盖统计表,获得全局状态覆盖统计表和全局转换覆盖统计表;
步骤四、根据所述全局状态覆盖统计表和全局转换覆盖统计表及所述有效变异模型对每个变异算子评分,构建所述被测模型最优变异算子集合;
步骤五、统计连续未产生新的测试用例的轮数n,若n<N,以步骤四中的所述最优变异算子集合替换步骤二中的所述变异算子集合,重复步骤二至步骤四;若n≥N,停止测试用例的生成过程,获取已生成的测试用例集合。
进一步地,步骤一中,根据所述被测模型获得初始全局状态覆盖统计表和初始全局转换覆盖统计表,包括:
按照谓词逻辑对所述被测模型进行统计分析,根据统计分析结果建立初始全局状态覆盖统计表和初始全局转换覆盖统计表。
进一步地,步骤二中,根据变异算子集合中每个变异算子对所述被测模型进行变异操作,包括:
增加三个变异算子分别是:更改转换的源头状态的变异算子、更改转换的目标状态的变异算子、移除某状态的随机转换的变异算子;
删除四个变异算子分别是:设置警戒条件为假、设置警戒条件为真、设置布尔类型OCL子表达式为假、设置布尔类型OCL子表达式为真;
根据修改后的变异算子对所述被测模型进行变异操作。
进一步地,步骤二中,根据变异算子集合中每个变异算子对所述被测模型进行变异操作,还包括:
对所述修改后的变异算子进行分组,将更改转换的源头状态的变异算子和更改转换的目标状态的变异算子作为状态覆盖增益组,将其它变异算子作为转换覆盖增益组。
进一步地,步骤三中,所述根据所述变异模型集合和所述被测模型生成测试用例,并根据所述测试用例删除所述变异模型集合中的等效变异模型,获取有效变异模型,根据所述有效变异模型更新初始全局状态覆盖统计表和初始全局转换覆盖统计表,获得全局状态覆盖统计表和全局转换覆盖统计表,包括:
选取一个所述变异模型集合中的一个变异模型,与所述被测模型进行一致性检查,搜索所述变异模型与所述被测模型的行为差异,如存在差异则根据所述行为差异生成测试用例,将所述变异模型作为有效变异模型,并标记与所述有效变异模型对应的变异算子;如不存在差异则继续从所述变异模型集合中选取变异模型,直至选择到一个与所述被测模型存在行为差异的变异模型或所述变异模型集合遍历完成;
将所述有效变异模型覆盖到的被测模型的状态及转换在初始全局状态覆盖统计表及初始全局转换覆盖统计表中标记更新,获得全局状态覆盖统计表及全局转换覆盖统计表。
进一步地,步骤四中,根据所述全局状态覆盖统计表和全局转换覆盖统计表及所述有效变异模型对每个变异算子评分,构建所述被测模型最优变异算子集合,包括:
根据所述全局状态覆盖统计表与所述全局转换覆盖统计表计算所述已生成的测试用例对所述被测模型的状态覆盖率与转换覆盖率:
状态覆盖率:
其中,|S′|为已被覆盖的状态数量,|S|为被测模型全部状态数量;
转换覆盖率:
其中,|T′|为已被覆盖的转换数量,|T|为被测模型全部转换数量;
根据所述状态覆盖率和所述转换覆盖率以及有效变异模型的比例对所述变异算子进行评分,选取评分前b名(b<count(i),i指变异算子)的变异算子,构建所述被测模型的最优变异算子集合。
进一步地,所述根据状态覆盖率和所述转换覆盖率以及有效变异模型的比例对所述变异算子进行评分,包括:
对于状态覆盖增益组中的变异算子,先根据所述状态覆盖率计算状态覆盖率增益:
再根据所述状态覆盖率增益以及有效变异模型的比例对所述变异算子进行评分:
其中,Fi为编号为i的变异算子的评分,|mi|为编号为i的变异算子派生的有效变异模型个数,|Mi|为编号为i的变异算子派生的所有变异模型个数,表示编号为i的变异算子生成的有效变异模型的比例,α、β为权重因子,α>β,StateCovGain为状态覆盖增益;
对于转换覆盖增益组中的变异算子,先根据所述转换覆盖率计算转换覆盖率增益:
再根据所述转换覆盖率增益以及有效变异模型的比例对所述变异算子进行评分:
其中,Fj为编号为j的变异算子的评分,|mj|为编号为j的变异算子派生的有效变异模型个数,|Mj|为编号为j的变异算子派生的所有变异模型个数,表示编号为j的变异算子生成的有效变异模型的比例,Y、δ为权重因子,Y>δ,TransCovGain为转换覆盖增益。
一种基于MoMuTUML的测试用例自动生成系统,包括:
建模模块,用于建立被测模型,并根据所述被测模型获得初始全局状态覆盖统计表和初始全局转换覆盖统计表;
变异模块,用于根据变异算子集合中每个变异算子对所述被测模型进行变异操作,构建对应的变异模型集合;
用例生成模块,用于根据所述变异模型集合和所述被测模型生成测试用例,并根据所述测试用例删除所述变异模型集合中的等效变异模型,获取有效变异模型,根据所述有效变异模型更新所述初始全局状态覆盖统计表和初始全局转换覆盖统计表,获得全局状态覆盖统计表和全局转换覆盖统计表;
反馈及覆盖统计模块,用于根据所述有效变异模型及所述全局状态覆盖统计表和全局转换覆盖统计表对每个变异算子评分,构建所述被测模型最优变异算子集合;并用于统计连续未产生新的测试用例的轮数n,若n<N,将所述最优变异算子集合返回所述变异模块,替换所述变异算子集合,重新进行变异操作;若n≥N,停止测试用例的生成过程,获取已生成的测试用例集合。
进一步地,在所述变异模块中,根据每个变异算子对所述被测模型进行变异操作,包括:
增加三个变异算子分别是:更改转换的源头状态的变异算子、更改转换的目标状态的变异算子、移除某状态的随机转换的变异算子;删除四个变异算子分别是:设置警戒条件为假、设置警戒条件为真、设置布尔类型OCL子表达式为假、设置布尔类型OCL子表达式为真;
根据修改后的变异算子对所述被测模型进行变异操作。
进一步地,在所述变异模块中,对所述修改后的变异算子进行分组,将更改转换的源头状态的变异算子和更改转换的目标状态的变异算子作为状态覆盖增益组,将其它变异算子作为转换覆盖增益组。
有益效果:
(1)一种基于MoMuTUML的测试用例自动生成方法,通过根据变异模型集合和被测模型生成测试用例,并根据测试用例删除等效变异模型,获取有效变异模型,避免了MoMuTUML中等效变异模型数量过多的问题,提高了测试用例的生成效率;通过基于反馈的变异方法,根据有效变异模型及状态及转换覆盖情况对变异算子进行评分,构建最优变异算子集合,选择最优变异算子集合中变异算子对被测模型进行变异操作,解决了MoMuTUML变异方法低效的问题,提高了测试用例的生成效率。
(2)对原有的功能重叠变异算子进行了删减,并增加了3种与原有变异算子功能不重叠的新变异算子,减少了语法等效变异模型的生成,更高效模拟建模过程中可能出现的错误,降低了时间成本。
(3)对修改后的变异算子进行分组评分,同时采用状态覆盖率、转换覆盖率以及有效变异模型作为评分标准,能够动态依据测试用例生成的结果和覆盖情况对每种变异算子评分并反馈。同时,考虑变异算子生成的有效变异模型的比例与覆盖情况的优先级,对应调整评分公式中权重大小,可以更加准确的对每种变异算子进行评分,选择针对被测模型的最优变异算子集合,进而优化变异过程,提高测试用例生成效率。
(4)通过对原有测试用例生成流程进行修改,新添加了反馈及覆盖统计模块,将评分结果反馈到变异模块,变异模块根据反馈调整变异过程,提高测试用例生成效率。
附图说明
图1是现有技术中MoMuTUML的基本流程图;
图2是本发明实施例的测试用例自动生成方法的流程图;
图3是根据本发明实施例的测试用例自动生成系统的结构框图。
具体实施方式
基于故障的测试也称为变异测试,其概念最早起源于1971年,DeMillo等在1978年的工作被认为是变异测试领域的开创性研究。作为一种基于缺陷的软件分析技术,变异测试通过对被测程序注入特定类型的缺陷,评估测试数据的缺陷检测能力,基本思想如下:首先,基于一定的规则,对被测程序实施微小的修改,产生一个仍然满足语法要求的新程序,称这个新程序为变异体;然后,给定同样的测试数据,运行被测程序和变异体,如果它们的最终输出结果相同,说明变异没有被发现,该测试用例无法检测到缺陷,否则,认为测试数据检测到了变异,说明该测试用例检测到了缺陷。
MoMuTUML是由奥地利理工学院研发的基于统一建模语言(Unified ModelingLanguage,UML)模型的变异测试工具,属于黑盒测试工具,它从被测系统的模型派生测试用例,并且不依赖于被测系统的源代码。与大多数其他测试用例生成工具不同,MoMuTUML的主要重点是基于故障的测试,即将变异算子应用到被测模型上派生出一系列变异模型,通过查找变异模型与原始模型的行为差异,依据差异生成测试用例,生成的测试用例保证能够检测出包含已有变异算子故障类型的模型。在基于模型的UML变异测试(Model-basedMutation Testing for UML,MoMuTUML)中,这些错误的模型被称为变异模型,因此测试用例生成策略被称为“变异驱动的测试用例生成”或“基于模型的变异测试用例生成”。
图1是现有技术中MoMuTUML的基本流程图,如图1所示,主要包括以下步骤:1.创建要测试的被测系统的输入/输出行为的模型并进行验证;2.将变异算子(修改、反转等)应用于模型,派生出一些变异模型,其中,支持的变异算子包括:(1)更改动作中的整型文字、(2)更改对象约束语言(Object Constraint Language,OCL)表达式中的整型文字、(3)更改时间触发器、(4)反转具有更改触发器的转换表达式、(5)反转具有警戒条件的转换、(6)反转布尔类型OCL子表达式、(7)移除动作语句、(8)删除带触发器转换中的触发器、(9)移除带结果的转换中的结果、(10)删除进入动作、(11)删除退出动作、(12)删除信号触发器、(13)删除时间触发器、(14)替换转换结果、(15)替换进入动作、(16)替换退出动作、(17)替换OCL表达式中的枚举、(18)更改OCL操作符、(19)更改信号事件、(20)设置警戒条件为假、(21)设置警戒条件为真、(22)设置布尔类型OCL子表达式为假、(23)设置布尔类型OCL子表达式为真;3.依次获取原始模型和一个变异模型,进行一致性检查,确定变异模型与原始模型的输入/输出序列是否存在差异,如存在则依据序列的差异,生成能够揭示差异的测试用例。
MoMuTUML采用基于模型的变异测试技术实现自动化的测试用例生成,但其当前存在如下问题:
(1)MoMuTUML现有的23种变异算子的功能可能重叠,容易产生语法等效的变异模型,例如,变异算子“6反转布尔类型OCL子表达式”与变异算子“22设置布尔类型OCL子表达式为假”、“23设置布尔类型OCL子表达式为真”在同时应用到被测模型时,存在功能重叠情况,会生成语法等效的变异模型,这些变异模型无法生成有价值的测试用例,且增加了测试用例生成的开销。
(2)MoMuTUML当前变异方法低效,无法选择最适合被测模型的变异算子集合,在测试用例生成过程中,由于MoMuTUML没有针对被测模型选择合适的变异策略,MoMuTUML将全部变异算子应用到被测模型上,产生数量庞大的变异模型后,再逐个比对原始模型与变异模型行为差异以生成测试用例,这些变异模型中不乏众多无效变异模型,这将耗费大量的时间,导致测试用例生成效率低。
(3)MoMuTUML整体流程设计不灵活,变异模块将全部变异算子应用到被测模型派生出数量庞大的变异模型集合之后,才进行测试用例的生成,无法接收根据测试用例生成结果获得的反馈且无法根据反馈结果对变异过程进行调整,导致测试用例生成效率低。
针对上述不足,本发明提出如下改进方法:
针对局限性(1),本发明对MoMuTUML现有变异算子进行了删减,并增加了3种与原始变异算子功能不重叠的新变异算子,减少了语法等效变异模型的生成,降低了时间成本。
针对局限性(2),本发明提出了基于反馈的变异方法,依据反馈的变异算子评分,选取评分较高的变异算子作为该被测模型的最优变异算子集合,选择最优变异算子集合对被测模型进行变异操作,提高测试用例生成效率。为对变异算子评分,本发明提出了状态覆盖、转换覆盖两种新的覆盖标准,动态依据测试用例生成的结果和覆盖情况对每种变异算子评分并反馈到变异过程。
针对局限性(3),本发明对原有测试用例生成流程进行修改,新添加了反馈及覆盖统计模块,将评分结果反馈到变异模块,变异模块根据反馈调整变异过程,提高测试用例生成效率。
下面结合附图并举实施例,对本发明进行详细描述。
首先对本发明实施例中的技术用语进行解释:
测试用例:测试用例是指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。其内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等。简单地认为,测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,用于核实是否满足某个特定软件需求。
MoMuTUML:MoMuTUML是自动化的基于模型的测试用例生成工具,属于黑盒测试工具。它从被测系统的模型派生测试用例,并且不依赖于被测系统的源代码。与大多数其他测试用例生成工具不同,MoMuTUML的重点是基于模型的变异测试,即生成的测试用例保证能够检测出包含已有变异算子故障类型的模型。
UML:UML是一种可视化建模语言,主要用于软件系统的规约书写、系统构造、文档形成等,是第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。
基于模型的变异测试:变异测试是一种通过将错误注入代码并查看测试是否检测到错误来评估软件质量的方法。随着大规模计算能力的提升,变异测试有了新的发展,出现了针对面向对象编程语言、非过程化语言(XML等)、有限状态机等的变异分析,以支持新兴的软件测试。基于模型的变异测试是通过在UML模型上应用特定的变异算子,生成一系列模型“变异体”,通过比较原始模型与“变异体”之间的行为差异进行软件测试的方法。
变异算子:基于模型的变异测试过程中,需要对原始模型进行一系列合乎语法的微小改动,模拟建模过程中可能发生的错误,这些对模型进行合乎语法的微小改动的操作称为变异算子。
变异模型:将变异算子应用到原始模型上,产生的一系列错误模型称为变异模型。
状态图:描述类的对象所有可能的状态,以及事件发生时状态的转换条件。可以捕获对象、子系统和系统的生命周期。它们可以告知一个对象可以拥有的状态,并且事件(如消息的接收、时间的流逝、错误、条件变为真等)会如何随着时间的推移来影响这些状态。一个状态图应该连接到所有具有清晰的可标识状态和复杂行为的类;该图可以确定类的行为,以及该行为如何根据当前的状态变化,也可以展示哪些事件将会改变类的对象的状态。
本发明实施例提供了一种基于MoMuTUML的测试用例自动生成方法,图2是本发明实施例的测试用例自动生成方法的流程图,如图2所示,包括如下步骤:
步骤一、建立被测模型,并根据被测模型获得初始全局状态覆盖统计表和初始全局转换覆盖统计表;
在一具体实施例中,根据被测模型获得初始全局状态覆盖统计表和初始全局转换覆盖统计表,包括:按照谓词逻辑对被测模型进行统计分析,根据统计分析结果建立初始全局状态覆盖统计表和初始全局转换覆盖统计表。
步骤二、根据变异算子集合中每个变异算子对被测模型进行变异操作,构建对应的变异模型集合;
在一具体实施例中,根据变异算子集合中每个变异算子对被测模型进行变异操作,包括:
增加三个变异算子分别是:更改转换的源头状态的变异算子、更改转换的目标状态的变异算子、移除某状态的随机转换的变异算子;删除四个变异算子分别是:设置警戒条件为假、设置警戒条件为真、设置布尔类型OCL子表达式为假、设置布尔类型OCL子表达式为真;同时,对修改后的变异算子进行分组,将更改转换的源头状态的变异算子和更改转换的目标状态的变异算子作为状态覆盖增益组,将其它变异算子作为转换覆盖增益组。
根据修改后的变异算子对被测模型进行变异操作。
步骤三、根据所述变异模型集合和所述被测模型生成测试用例,并根据所述测试用例删除所述变异模型集合中的等效变异模型,获取有效变异模型,根据所述有效变异模型更新所述初始全局状态覆盖统计表和初始全局转换覆盖统计表,获得全局状态覆盖统计表和全局转换覆盖统计表;
在一具体实施例中,上述步骤三具体包括:
选取一个所述变异模型集合中的一个变异模型,与所述被测模型进行一致性检查,搜索所述变异模型与所述被测模型的行为差异,如存在差异则根据所述行为差异生成测试用例,将所述变异模型作为有效变异模型,并标记与所述有效变异模型对应的变异算子;如不存在差异则继续从所述变异模型集合中选取变异模型,直至选择到一个与所述被测模型存在行为差异的变异模型或所述变异模型集合遍历完成;
将所述有效变异模型覆盖到的被测模型的状态及转换在初始全局状态覆盖统计表及初始全局转换覆盖统计表中标记更新,获得全局状态覆盖统计表及全局转换覆盖统计表。
步骤四、根据所述有效变异模型及所述全局状态覆盖统计表和全局转换覆盖统计表对每个变异算子评分,构建所述被测模型最优变异算子集合。
在一具体实施例中,上述步骤四具体包括:
根据所述全局状态覆盖统计表与所述全局转换覆盖统计表计算所述已生成的测试用例对所述被测模型的状态覆盖率与转换覆盖率:
状态覆盖率:
其中,|S′|为已被覆盖的状态数量,|S|为被测模型全部状态数量;
转换覆盖率:
其中,|T′|为已被覆盖的转换数量,|T|为被测模型全部转换数量;
根据所述状态覆盖率和所述转换覆盖率以及有效变异模型的比例对所述变异算子进行评分,选取评分前b名(b<count(i),i指变异算子)的变异算子,构建所述被测模型的最优变异算子集合。
在一具体实施例中,根据所述状态覆盖率和转换覆盖率以及所述有效变异模型的比例对所述变异算子进行评分,包括:
对于状态覆盖增益组中的变异算子,先根据所述状态覆盖率计算状态覆盖率增益:
再根据所述状态覆盖率增益以及有效变异模型的比例对所述变异算子进行评分:
其中,Fi为编号为i的变异算子的评分,|mi|为编号为i的变异算子派生的有效变异模型个数,|Mi|为编号为i的变异算子派生的所有变异模型个数,表示编号为i的变异算子生成的有效变异模型的比例,α、β为权重因子,α>β,StateCovGain为状态覆盖增益;在实际实施过程中,考虑到在整体的测试用例生成过程中,生成更多有效变异模型的影响比增加覆盖率的影响大,所以取α>β。
对于转换覆盖增益组中的变异算子,先根据所述转换覆盖率计算转换覆盖率增益:
再根据所述转换覆盖率增益以及有效变异模型的比例对所述变异算子进行评分:
其中,Fj为编号为j的变异算子的评分,|mj|为编号为j的变异算子派生的有效变异模型个数,|Mj|为编号为j的变异算子派生的所有变异模型个数,表示编号为j的变异算子生成的有效变异模型的比例,Y、δ为权重因子,Y>δ,TransCovGain为转换覆盖增益。在实际实施过程中,考虑到在整体的测试用例生成过程中,生成更多有效变异模型的影响比增加覆盖率的影响大,所以取γ>δ。
步骤五、统计连续未产生新的测试用例的轮数n,若n<N,以步骤四中的所述最优变异算子集合替换步骤二中的所述变异算子集合,重复步骤二至步骤四;若n≥N,停止测试用例的生成过程,获取已生成的测试用例集合。
N为停止测试用例生成过程的阈值,当连续N轮生成过程未产生新的测试用例,则认为变异过程不再能够生成新的测试用例,可终止生成过程,N为正整数。
本发明实施例还提供了一种基于MoMuTUML的测试用例自动生成系统,图3是根据本发明实施例构造的测试用例自动生成系统的结构框图,如图3所示,包括:
建模模块,用于建立被测模型,并根据被测模型获得初始全局状态覆盖统计表和初始全局转换覆盖统计表;
在实际实施过程中,建模模块完成对被测模型的各项元素进行分析统计,便于后续的覆盖率等的统计。
在实际实施过程中,建模模块中的工作流程如下:
步骤(一):通过UML模型的Papyrus插件工具,基于OCL约束和对象管理组织(Object Management Group,OMG)OMG标准,得到UML模型的XML格式UML模型文件。
步骤(二):按照谓词逻辑,对被测UML模型文件进行分析,表示为如下形式:
SUTMode1={S,Pentry,Pexit,A,B,T}
其中,S是一组有限个状态的集合;Pentry为进入节点;Pexit为退出节点;A是一个关于输入动作的有限集;B是一个关于输出动作的有限集;T是一组有限的形如(q,p,c,g,e,r)的转换集合,其中q代表原始的源头状态,p代表转换的目标状态,c代表转换伴随的动作,g代表转换的警戒条件,e代表转换后的结果,r代表转换触发器。
步骤(三):建立初始全局状态覆盖统计表,记录所有状态s∈S是否被覆盖。
步骤(四):建立初始全局转换覆盖统计表,记录所有转换t∈T是否被覆盖。
建模模块中的步骤(二)、(三)、(四)均为在原MoMuTUML工具基础上新增的步骤,这几步统计了被测系统模型的状态和转换等信息,并建立覆盖统计表,为后续模块工作提供支撑。
变异模块,用于根据变异算子集合中每个变异算子对被测模型进行变异操作,构建对应的变异模型集合;
在一具体实施例中,在变异模块中,根据变异算子集合中每个变异算子对被测模型进行变异操作,包括:增加三个变异算子分别是:更改转换的源头状态的变异算子、更改转换的目标状态的变异算子、移除某状态的随机转换的变异算子;删除四个变异算子分别是:设置警戒条件为假、设置警戒条件为真、设置布尔类型OCL子表达式为假、设置布尔类型OCL子表达式为真;根据修改后的变异算子对被测模型进行变异操作。
在一具体实施例中,在变异模块中,对修改后的变异算子进行分组,将更改转换的源头状态的变异算子和更改转换的目标状态的变异算子作为状态覆盖增益组,将其它变异算子作为转换覆盖增益组。
在实际实施过程中,变异模块用于接收反馈及覆盖统计模块的指导,将针对被测模型构建的最优变异算子集合中的变异算子,应用于被测模型,生成一系列的变异模型。
在实际实施过程中,变异模块中的工作流程包括如下步骤:
步骤(一):在首轮变异过程中,将修改后的变异算子应用到原始模型当中,每个变异算子i派生出a个(a数值可依据被测模型的复杂程度调整,被测模型越复杂,a的取值越大)变异模型,形成变异算子i的一组变异模型集合Mi={mi1,mi2,...,mia},将变异模型集合发送到生成模块进行测试用例生成。
本发明对变异算子进行如下修改:
(1)新增更改转换的源头状态的变异算子,编号24,源头状态可替换为除原始源头状态及目标状态的其他任意状态。
(2)新增更改转换的目标状态的变异算子,编号25,目标状态可替换为除原始目标状态及源头状态的其他任意状态。
(3)新增移除某状态的随机转换的变异算子,编号26,随机选取某一状态的任意一条转换。
(4)删除变异算子“20设置警戒条件为假”、“21设置警戒条件为真”、“22设置布尔类型OCL子表达式为假”、“23设置布尔类型OCL子表达式为真”。
(5)将变异算子分为两类,编号24、25的变异算子为状态覆盖增益组,剩余变异算子为转换覆盖增益组。
步骤(二):首轮变异完成后的每轮变异过程中,选取最优变异算子集合中的变异算子对被测模型进行变异操作,每个变异算子仍派生出a个变异模型,形成该轮变异模型集合,将变异模型集合发送到生成模块进行测试用例生成。
用例生成模块,用于根据所述变异模型集合和所述被测模型生成测试用例,并根据所述测试用例删除所述变异模型集合中的等效变异模型,获取有效变异模型,根据所述有效变异模型更新所述初始全局状态覆盖统计表和初始全局转换覆盖统计表,获得全局状态覆盖统计表和全局转换覆盖统计表;
在实际实施过程中,用例生成模块通过对比原始模型与变异模型之间的行为差异,生成测试用例,并将生成的测试用例应用于变异模型集合中的剩余变异模型,进行变异模型筛选。
在实际实施过程中,用例生成模块中的流程包括如下步骤:
步骤(一):在每轮生成过程中,接收来自变异模块的变异模型集合。
步骤(二):选取一个变异模型集合当中的变异模型,对比原始模型进行一致性检查,并搜索原始模型与变异模型行为的差异,依据行为差异生成测试用例。若成功生成一个测试用例则将生成该测试用例的变异模型视为有效变异模型,对应的生成该变异模型的变异算子生成的有效变异模型数量加1。将该测试用例对应的有效变异模型覆盖到的被测模型的状态及转换在全局状态覆盖统计表及全局转换覆盖统计表中标记,更新全局状态覆盖统计表及全局转换覆盖统计表。
步骤(三):将生成的测试用例应用到变异模型集合中剩余的变异模型,将可以被该测试用例检测到与原始模型存在行为差异的变异模型过滤,减少等效变异模型数量。
步骤(四):重复步骤(一)、(二)、(三),直到变异模型集合为空。其中,变异模型集合为空的含义是对于每个变异算子的变异模型集合中的每个变异模型都测试一遍。
反馈及覆盖统计模块,用于用于根据所述有效变异模型及所述全局状态覆盖统计表和全局转换覆盖统计表对每个变异算子评分,构建所述被测模型最优变异算子集合;并用于统计连续未产生新的测试用例的轮数n,若n<N,将所述最优变异算子集合返回所述变异模块,替换所述变异算子集合,重新进行变异操作;若n≥N,停止测试用例的生成过程,获取已生成的测试用例集合。
在一具体实施例中,在反馈及覆盖统计模块中,根据所述有效变异模型及所述全局状态覆盖统计表和全局转换覆盖统计表对每个变异算子评分,包括:
对于状态覆盖增益组中的变异算子,先根据状态覆盖率计算状态覆盖率增益,再根据状态覆盖率增益以及有效变异模型的比例对变异算子进行评分:
其中,Fi为编号为i的变异算子的评分,|mi|为编号为i的变异算子派生的有效变异模型个数,|Mi|为编号为i的变异算子派生的所有变异模型个数,表示编号为i的变异算子生成的有效变异模型的比例,α、β为权重因子,StateCovGain为状态覆盖增益;
对于转换覆盖增益组中的变异算子,先根据转换覆盖率计算转换覆盖率增益,再根据转换覆盖率增益以及有效变异模型的比例对变异算子进行评分:
其中,Fj为编号为j的变异算子的评分,|mj|为编号为j的变异算子派生的有效变异模型个数,|Mj|为编号为j的变异算子派生的所有变异模型个数,表示编号为j的变异算子生成的有效变异模型的比例,Y、δ为权重因子,TransCovGain为转换覆盖增益。
在实际实施过程中,反馈及覆盖统计模块针对每一个变异算子,统计其产生的有效变异模型的数量及各项覆盖率信息,并依据公式对各个变异算子进行评分,构建被测模型最优变异算子集合,计算连续未产生新的测试用例的轮数n,若n<N,将最优变异算子集合发送到变异模块,继续测试用例生成过程,否则,停止生成过程,获取已生成的测试用例集合,其中,n和N均为正整数。
在实际实施过程中,反馈及覆盖统计模块中的流程包括如下步骤:
由于首轮测试用例生成过程中没有测试用例生成相关信息,该模块从第二轮测试用例生成过程开始执行。
步骤(一):将生成模块生成的测试用例应用到原始模型,通过全局状态覆盖统计表与全局转换覆盖统计表计算现有测试用例集对模型的状态覆盖率与转换覆盖率。
状态覆盖率计算公式:
其中,|S′|为已被覆盖的状态数量,|S|为被测模型全部状态数量。
转换覆盖率计算公式:
其中,|T′|为已被覆盖的转换数量,|T|为被测模型全部转换数量。
步骤(二):对每个变异算子评分。
对于状态覆盖增益组中的变异算子,采用如下公式对变异算子进行评分:
其中,Fi为编号为i的变异算子的评分,|mi|为编号为i的变异算子派生的有效变异模型个数,|Mi|为编号为i的变异算子派生的所有变异模型个数。α、β为权重因子,考虑到在整体的测试用例生成过程中,生成更多有效变异模型的影响相比增加覆盖率的影响大,所以取α>β。StateCovGain为状态覆盖增益,考虑到状态覆盖增益应随覆盖率增加而减少,其计算公式为:
对于转换覆盖增益组中的变异算子,采用如下公式对变异算子进行评分:
其中,Fj为编号为j的变异算子的评分,|mj|为编号为j的变异算子派生的有效变异模型个数,|Mj|为编号为j的变异算子派生的所有变异模型个数。Y、δ为权重因子,考虑到在整体的测试用例生成过程中,生成更多有效变异模型的影响相比增加覆盖率的影响大,所以取Y>δ。TransCovGain为转换覆盖增益,考虑到转换覆盖增益应随覆盖率增加而减少,其计算公式为:
步骤(三):选取评分前b名(b<count(i),i指变异算子,在本实施例中count(i)=22,所以取b<22)的变异算子作为该被测模型的最优变异算子集合,该集合依据每轮变异算子的评分情况动态更新。
步骤(四):计算连续未产生新的测试用例的轮数n,若n<N,将最优变异算子集合发送到变异模块,继续测试用例生成过程,否则,停止生成过程,获取已生成的测试用例集合,其中,N为正整数。
综上,本发明针对现有的MoMuTUML工具流程不灵活、变异算子功能重叠、变异方法低效等问题,提供了一种基于MoMuTUML的测试用例自动生成方法及系统,本发明完善了变异算子集合,提出了基于反馈的变异方法,设计了变异算子评分机制,提出了状态和转换覆盖率度量标准,并对MoMuTUML的执行流程做了修改,增加了反馈及覆盖统计模块。
本发明主要是针对MoMuTUML中的派生变异模型的处理以及整体流程的改进,提出了:(1)新的变异算子、变异方法以及覆盖率标准,并对测试用例生成流程进行了重新设计。删减原始变异算子以及新增变异算子可以有效减少语法等效的变异模型数量,更高效模拟建模过程中可能出现的错误,提升测试用例生成效率;(2)基于反馈机制的变异方法,可以选择最适合被测模型的变异算子集合,快速定位模型中较可能出现缺陷的位置,提升测试用例生成效率;(3)对测试用例生成流程的重构,改变了原始流程无法根据测试用例生成结果的反馈灵活调整变异过程的设计,使得测试用例生成更加高效。
与本发明相近的技术方案虽然提出基于模型检测技术的变异测试用例生成方法,但其提出的变异算子、覆盖标准等与本发明有明显不同,且其并未设计反馈策略,针对的被测系统模型也与本发明不同,本发明提出的变异算子、变异方法、覆盖率标准、测试用例生成流程与其他方法均不同。
本发明对MoMuTUML现有变异算子进行了删减,并增加了3种与原始变异算子功能不重叠的新变异算子,减少了语法等效的变异模型的数量,提升了测试用例生成效率。本发明提出的基于反馈的变异方法,依据反馈的变异算子评分,选取评分较高的变异算子作为该被测模型的最优变异算子集合,优先选择最优变异算子集合对模型进行变异操作,提升测试用例生成效率。为对变异算子评分,本发明提出了状态覆盖、转换覆盖两种新的覆盖标准,动态依据测试用例生成的结果和覆盖情况对每种变异算子评分并反馈。本发明对原有测试用例生成流程进行修改,新添加了反馈及覆盖统计模块,并集成了对变异算子及变异方法的改进,实现了根据测试用例生成结果的反馈对变异过程按需灵活调整,进一步提升测试用例生成效率。
本发明的重点在于:(1)在MoMuTUML流程中新增反馈及覆盖统计模块;(2)对MoMuTUML中变异算子的修改;(3)在MoMuTUML中变异算子评分方法的设计;(4)对MoMuTUML中基于反馈的变异方法的设计;(5)在MoMuTUML中状态覆盖率及转换覆盖率的提出。
以上的具体实施例仅描述了本发明的设计原理,该描述中的部件形状,名称可以不同,不受限制。所以,本发明领域的技术人员可以对前述实施例记载的技术方案进行修改或等同替换;而这些修改和替换未脱离本发明创造宗旨和技术方案,均应属于本发明的保护范围。
Claims (10)
1.一种基于MoMuTUML的测试用例自动生成方法,其特征在于,包括:
步骤一、建立被测模型,并根据所述被测模型获得初始全局状态覆盖统计表和初始全局转换覆盖统计表;
步骤二、根据变异算子集合中每个变异算子对所述被测模型进行变异操作,构建对应的变异模型集合;
步骤三、根据所述变异模型集合和所述被测模型生成测试用例,并根据所述测试用例删除所述变异模型集合中的等效变异模型,获取有效变异模型,根据所述有效变异模型更新所述初始全局状态覆盖统计表和初始全局转换覆盖统计表,获得全局状态覆盖统计表和全局转换覆盖统计表;
步骤四、根据所述全局状态覆盖统计表和全局转换覆盖统计表及所述有效变异模型对每个变异算子评分,构建所述被测模型最优变异算子集合;
步骤五、统计连续未产生新的测试用例的轮数n,若n<N,以步骤四中的所述最优变异算子集合替换步骤二中的所述变异算子集合,重复步骤二至步骤四;若n≥N,停止测试用例的生成过程,获取已生成的测试用例集合。
2.如权利要求1所述的方法,其特征在于,步骤一中,根据所述被测模型获得初始全局状态覆盖统计表和初始全局转换覆盖统计表,包括:
按照谓词逻辑对所述被测模型进行统计分析,根据统计分析结果建立初始全局状态覆盖统计表和初始全局转换覆盖统计表。
3.如权利要求1所述的方法,其特征在于,步骤二中,根据变异算子集合中每个变异算子对所述被测模型进行变异操作,包括:
增加三个变异算子分别是:更改转换的源头状态的变异算子、更改转换的目标状态的变异算子、移除某状态的随机转换的变异算子;
删除四个变异算子分别是:设置警戒条件为假、设置警戒条件为真、设置布尔类型OCL子表达式为假、设置布尔类型OCL子表达式为真;
根据修改后的变异算子对所述被测模型进行变异操作。
4.如权利要求3所述的方法,其特征在于,步骤二中,根据变异算子集合中每个变异算子对所述被测模型进行变异操作,还包括:
对所述修改后的变异算子进行分组,将更改转换的源头状态的变异算子和更改转换的目标状态的变异算子作为状态覆盖增益组,将其它变异算子作为转换覆盖增益组。
5.如权利要求1所述的方法,其特征在于,步骤三中,所述根据所述变异模型集合和所述被测模型生成测试用例,并根据所述测试用例删除所述变异模型集合中的等效变异模型,获取有效变异模型,根据所述有效变异模型更新初始全局状态覆盖统计表和初始全局转换覆盖统计表,获得全局状态覆盖统计表和全局转换覆盖统计表,包括:
选取一个所述变异模型集合中的一个变异模型,与所述被测模型进行一致性检查,搜索所述变异模型与所述被测模型的行为差异,如存在差异则根据所述行为差异生成测试用例,将所述变异模型作为有效变异模型,并标记与所述有效变异模型对应的变异算子;如不存在差异则继续从所述变异模型集合中选取变异模型,直至选择到一个与所述被测模型存在行为差异的变异模型或所述变异模型集合遍历完成;
将所述有效变异模型覆盖到的被测模型的状态及转换在初始全局状态覆盖统计表及初始全局转换覆盖统计表中标记更新,获得全局状态覆盖统计表及全局转换覆盖统计表。
6.如权利要求1所述的方法,其特征在于,步骤四中,根据所述全局状态覆盖统计表和全局转换覆盖统计表及所述有效变异模型对每个变异算子评分,构建所述被测模型最优变异算子集合,包括:
根据所述全局状态覆盖统计表与所述全局转换覆盖统计表计算所述已生成的测试用例对所述被测模型的状态覆盖率与转换覆盖率:
状态覆盖率:
其中,|S′|为已被覆盖的状态数量,|S|为被测模型全部状态数量;
转换覆盖率:
其中,|T′|为已被覆盖的转换数量,|T|为被测模型全部转换数量;
根据所述状态覆盖率和所述转换覆盖率以及有效变异模型的比例对所述变异算子进行评分,选取评分前b名(b<count(i),i指变异算子)的变异算子,构建所述被测模型的最优变异算子集合。
7.如权利要求6所述的方法,其特征在于,所述根据状态覆盖率和所述转换覆盖率以及有效变异模型的比例对所述变异算子进行评分,包括:
对于状态覆盖增益组中的变异算子,先根据所述状态覆盖率计算状态覆盖率增益:
再根据所述状态覆盖率增益以及有效变异模型的比例对所述变异算子进行评分:
其中,Fi为编号为i的变异算子的评分,|mi|为编号为i的变异算子派生的有效变异模型个数,|Mi|为编号为i的变异算子派生的所有变异模型个数,表示编号为i的变异算子生成的有效变异模型的比例,α、β为权重因子,α>β,StateCovGain为状态覆盖增益;
对于转换覆盖增益组中的变异算子,先根据所述转换覆盖率计算转换覆盖率增益:
再根据所述转换覆盖率增益以及有效变异模型的比例对所述变异算子进行评分:
8.一种基于MoMuTUML的测试用例自动生成系统,其特征在于,包括:
建模模块,用于建立被测模型,并根据所述被测模型获得初始全局状态覆盖统计表和初始全局转换覆盖统计表;
变异模块,用于根据变异算子集合中每个变异算子对所述被测模型进行变异操作,构建对应的变异模型集合;
用例生成模块,用于根据所述变异模型集合和所述被测模型生成测试用例,并根据所述测试用例删除所述变异模型集合中的等效变异模型,获取有效变异模型,根据所述有效变异模型更新所述初始全局状态覆盖统计表和初始全局转换覆盖统计表,获得全局状态覆盖统计表和全局转换覆盖统计表;
反馈及覆盖统计模块,用于根据所述有效变异模型及所述全局状态覆盖统计表和全局转换覆盖统计表对每个变异算子评分,构建所述被测模型最优变异算子集合;并用于统计连续未产生新的测试用例的轮数n,若n<N,将所述最优变异算子集合返回所述变异模块,替换所述变异算子集合,重新进行变异操作;若n≥N,停止测试用例的生成过程,获取已生成的测试用例集合。
9.如权利要求8所述的系统,其特征在于,在所述变异模块中,根据每个变异算子对所述被测模型进行变异操作,包括:
增加三个变异算子分别是:更改转换的源头状态的变异算子、更改转换的目标状态的变异算子、移除某状态的随机转换的变异算子;删除四个变异算子分别是:设置警戒条件为假、设置警戒条件为真、设置布尔类型OCL子表达式为假、设置布尔类型OCL子表达式为真;
根据修改后的变异算子对所述被测模型进行变异操作。
10.如权利要求8所述的系统,其特征在于,在所述变异模块中,对所述修改后的变异算子进行分组,将更改转换的源头状态的变异算子和更改转换的目标状态的变异算子作为状态覆盖增益组,将其它变异算子作为转换覆盖增益组。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211365919.1A CN115904946A (zh) | 2022-10-31 | 2022-10-31 | 一种基于MoMuTUML的测试用例自动生成方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211365919.1A CN115904946A (zh) | 2022-10-31 | 2022-10-31 | 一种基于MoMuTUML的测试用例自动生成方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115904946A true CN115904946A (zh) | 2023-04-04 |
Family
ID=86473601
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211365919.1A Pending CN115904946A (zh) | 2022-10-31 | 2022-10-31 | 一种基于MoMuTUML的测试用例自动生成方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115904946A (zh) |
-
2022
- 2022-10-31 CN CN202211365919.1A patent/CN115904946A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Karampatsis et al. | How often do single-statement bugs occur? the manysstubs4j dataset | |
Padgham et al. | Model-based test oracle generation for automated unit testing of agent systems | |
US8898635B2 (en) | System and method for automatic impact variable analysis and field expansion in mainframe systems | |
CN108804326B (zh) | 一种软件代码自动检测方法 | |
Granda et al. | What do we know about the defect types detected in conceptual models? | |
CN109408385B (zh) | 一种基于缺陷规则和分类反馈的缺陷发现方法 | |
CN110704065B (zh) | 基于非法程序输入的编译器前端差分测试方法 | |
Marinescu | How good is genetic programming at predicting changes and defects? | |
Kolchin et al. | An approach to creating concretized test scenarios within test automation technology for industrial software projects | |
Liuying et al. | Test selection from UML statecharts | |
CN115080448B (zh) | 一种软件代码不可达路径自动检测的方法和装置 | |
CN115904946A (zh) | 一种基于MoMuTUML的测试用例自动生成方法及系统 | |
Singhal et al. | A critical review of various testing techniques in aspect-oriented software systems | |
Nicolaescu et al. | The ARAMIS Workbench for Monitoring, Analysis and Visualization of Architectures based on Run-time Interactions. | |
US10585779B2 (en) | Systems and methods of requirements chaining and applications thereof | |
CN113282495A (zh) | 一种基于轨迹监控的Java软件故障定位方法 | |
CN111562937A (zh) | 一种代码方法级缺陷预警方法 | |
CN117472641B (zh) | 数据质量的检测方法、装置、电子设备及存储介质 | |
JP2019144873A (ja) | ブロック線図解析装置 | |
CN110990281B (zh) | 一种自动化静态分析方法 | |
Mehrpour et al. | Programming tools for working with design decisions in code | |
Sneed | Source Animation as a means of Program Comprehension for object-oriented Systems | |
CN117435502A (zh) | 软件质量检测方法、系统和存储介质 | |
Sharma et al. | 11 Study and Estimation of Existing Software Quality | |
Jha | Automatic Benchmark Generation for Object Constraint Language |
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 |