
908
Journal of Software 软件学报 Vol.28, No.4, April 2017
开发的自动化.
现有的工作大多都将研究重点放在了转换语言和算法上,如讨论如何实现模型重构
[1,2]
、实现代码生成
[3,4]
和模型同步
[5,6]
等.这些研究增强了模型转换的处理能力,使之能够实现许多复杂的操作.
当把模型转换技术运用到工业生产中时,可伸缩性成为左右其成败的关键因素之一.在被开发(或维护)的
系统比较复杂的情况下,被转换的模型可能具有较大规模.如果转换程序不能快速地处理“大模型”,那么这个开
发(或维护)过程就可能失败.此外,在大数据时代,高效地处理“大模型”的能力也变得越来越重要.
例如,在基于运行时模型的软件管理技术中,模型同步(即双向模型转换)常常被用于实现系统状态和抽象
管理视图之间的连接
[7]
.当系统状态发生改变时,通过正向转换将其映射到管理视图上;系统管理员在管理视图
上进行系统调整,并利用逆向转换将系统变化传播到运行时系统上.在这一过程中,模型同步的执行效率至关重
要.如果同步操作不能及时将系统状态转换成管理视图,那么管理员则可能无法观测到系统最新的运行情况,从
而无法对系统进行正确调整.同理,如果同步操作不能将管理视图上的变化及时传播到运行时系统上,系统状态
可能在转换过程中发生改变,从而导致系统调整的错误和失败.
因此,在应用模型转换之前,应该对其性能进行系统化的测试.一方面,可以明确转换程序的执行效率和极
限,从而确定其应用范围;另一方面,还可以进一步确定其中的性能瓶颈,从而可以对其进行优化改进.为了进行
性能测试,一个关键问题在于如何有效地生成较大规模的输入数据,即模型.模型生成需满足下面 4 个基本需求.
• 语法正确性:自动生成的模型需要符合语法约束;
• 高效性:生成模型的过程必须是高效的;
• 随机性:模型必须被随机生成,以便衡量转换程序的平均执行时间;
• 可配置性:模型生成的过程必须是可配置的,比如,应允许用户限制模型元素的数量等等.
目前主要存在两种类型的自动化模型生成方法——基于求解器的方法和基于算法的方法.在基于求解器
的方法中,元模型和生成需求被编码成某种约束表达式,如 Object Constraint Language(OCL)
[8]
表达式.之后,这些
约束表达式会被代入到一个约束求解器中进行求解.如果约束可解,求解器会返回一个符合条件的模型.基于求
解器的模型生成方法能够处理复杂的约束条件,但其效率十分低下,无法快速生成较大规模的模型,因此不能很
好地支持性能测试.基于算法的模型生成方法通常会使用某种算法生成模型,这类方法能够随机、快速地生成
模型.但大部分算法往往忽略了生成过程的可配置性以及一些基本语法约束,这就导致它们生成的模型可能包
含语法错误.
本文提出一种针对模型转换性能测试的模型生成算法,该方法具有随机性和可配置性,能够在合理的时间
内生成正确的模型.在该方法中,所有的模型元素及关系都将被随机生成.为了生成正确的模型,该方法考虑了
元模型中定义的全部语法约束和一部分语义约束.该方法还允许用户自定义约束来指导生成过程,以便具有更
好的可配置性.最后,通过一组实验证明该方法能够正确、高效地生成较大规模的模型数据.本文的初步想法已
经发表在 COMPSAC 2014 上
[9]
,本文完善了方法描述,并对方法进行了更多的实验评估.
本文方法的主要目标是生成规模较大、语法正确的模型,但并不直接处理用 OCL 描述的语义约束.这样做
有以下 3 个原因:(1) 不同于白盒测试,用于性能测试的输入模型对于 OCL 语义约束的要求较低;(2) 在生成过
程中处理 OCL 约束会极大地影响模型生成效率;(3) 对于某些转换程序而言,如模型一致性修复程序,不符合
OCL 约束的模型反而是有效的输入.本文方法可以看作模型生成的基线方法,并可以结合其他技术构造满足复
杂约束的模型:从理论上看,只要能够快速地生成足够数量的随机模型,一定可以从中选出符合 OCL 约束的结
果;从实践上看,可以利用模型修复技术
[10]
对随机生成的模型进行后处理,使其符合 OCL 约束.
本文第 1 节介绍该算法支持的约束条件.第 2 节讨论该算法的技术细节.第 3 节对本文方法进行实验评估.
第 4 节讨论相关的工作.最后是结论和未来工作.
1 模型生成的约束
在本文中,模型生成是一个根据语法约束(即元模型)和用户选项(配置参数)生成模型的过程.语法约束和用
评论