摘要:针对煤质管理系统不断变化的业务逻辑、软件开发成本过高并难以维护的问题,提出了一种基于模型驱动架构的模型测试方法。通过建立测试模型,在加入动作规约语言的基础上执行测试用例和反馈测试结果,发现模型缺陷并及时重构,从而提高系统质量。结合煤质管理系统回采和掘进工作面绘制进行建模和测试,验证了该方法的可行性。
关键词:煤质管理系统;模型测试;模型驱动架构;动作规约语言
0 引言
在煤炭行业中,煤炭品质(简称煤质)是影响企业效益的关键因素之一,煤质管理贯穿于煤炭的生产、运输、销售等各个环节。目前,煤质管理系统的建设取得了很 大 进 展,但 仍 存 在 一 些 不 足:① 煤 质管理系统在规模和复杂度上不断增加,不能很好地与业务关联;② 煤质模型中潜藏的业务逻辑错误不能及早被煤质领域专家发现;③ 不断变化的业务逻辑导致了系统低层次的重复编码;④ 错误的业务逻辑决策下进行煤质软件项目,成本过高难于修复。
针对上 述 问 题,本文提出基于模型驱动架构(ModelDrivenArchitecture,MDA)[1]的 模型 测 试方法,为煤质管理系统的开发和测试提供了一个新方向。在 MDA 中,模型是所构建系统在功能、行为和结构的形式化表示[2]。基于 MDA 的模型测试在产生任何代码之前,对需求规约进行充分的演练,即在开 发 早 期 用 UML(Unified ModelLanguage,统一建模语言)图结合业务逻辑的形式建立测试模型、执行测试用例并且反馈测试结果[3]。将煤质管理系统开发过程中基于模型的测试集成到总体的测试进程中,提供跨越整个开发生命周期的动态测试,在测试的保护下,不断重构模型,以消除重复设计,优化设计结构,提高模型的重用性,更好地指明设计模型上的缺陷以及需求实施失误,从而提高煤质管理系统质量。
1 大型煤炭企业煤质管理系统建模
无论煤质管理系统是采用 WebService,EJB或其他构件技术 和 平 台,基 于 MDA 的 软件 开 发 首 先要 建 立 平 台 无 关 模 型 (Platform IndependentModel,PIM)用 于 描 述 软 件 系 统 的 业 务 功 能 和 逻辑,并用 UML等建模语言来表示 PIM。建立 PIM的目的是为了理解问题域,详述能够满足一组需求的系统行为。它获取和表达了正在建立的所有煤质管理系统的业务需求,并且包含了对系统的所有规约,但中立于任何实现(平台)。作为测试对象,煤质管理系统 PIM 主要包含域模型图、用例图、顺序图、类图、协作图、状态图等,建立步骤如下:
(1)域模 型 图 的 建 立。在 域 模 型 图 中,将 系 统按主题划分为不同的域,每一个域表示系统中一个独立的主题事务。煤质管理系统层次架构如图1所示,在服务层将煤质管理系统划分为煤质数据管理、煤质计划下达、煤层信息展示、煤质系统后台管理等域。以上域属于业务逻辑部分的内容,无需依赖具体的平台或者实现。对域的划分将测试控制到具体的模型空间,增加了业务之间的内聚性。域之间存在依赖关系,对 域 间 的 交 互 分 析 可 以 借 助 UML 顺序图来完成。
(2)类图及协作图的建立。类图组成了域的静态视图,是用来显示煤质管理系统中的类、接口及它们之间的静态结构和关系的一种静态模型。协作图描述了特定行为的参与对象的静态结构,以及参与对象之间的动态交互。以煤质预测功能为例,煤质预测基础数据包括:① 采制样员对工作面煤质煤样进行采取、制备,通过化验分析生成的煤样检测基础数据;② 煤质科根据生产计划制定年度、月 度 以 及月度分解的计划数据;③ 运销中心根据各质检站对商品煤销售数据进行统计,形成各月商品煤煤质数据等。
(3)状态图的建立。状态图是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处状态对不同的时间做出反应。状态图由状态组成,各状态由转移链接在一起。状态是对象执行某项活动或等待某个事件时的条件,转移是2个状态之间的关系,它由某个事件触发,然后执行特定的操作或评估并导致特定的结束状态。工作面(回采工作面和掘进工作面)绘制状态图如图2所示。首先根据工作面要素,按画图比例来绘制工作面示意图。根据毛煤月度分解计划数据和工作面要素,计算出每月的开采位置,并按颜色来区分已采和未采部分。当用户点击某个采样点位置时,以资料卡的形式弹出该采样点的煤质柱状和相关信息。然后根据煤层煤样采样点信息,计算出每个采样点在该工作面上的对应位置,绘制出采样点。根据煤层采样点的煤质数据绘制出沿通风巷和运输巷煤质折线趋势图。最后根据煤质预测的开采计划和煤层采样点的各分层数据,绘制出工作面,若数据获取错误则绘制失败。
2 模型测试基本框架
尽管 UML规 范在 MDA 过 程中 是 必 要 的,但却没有包含可执行语义,不足以进行可执行建模,因此需要扩展更多的机制来支持精确建模和分析模型。动作规约语言(ActionSpecificationLanguage,ASL)的出现弥补了这一缺陷,它是一种符合 UML动作语义标准的语言,提供了操纵模型元素的能力,为部分 UML模型增 加 了 可 执 行 行 为 的 定 义,并 且又不 偏 向 于 任 何 实 现 技 术。ASL 语 句在 MDA 过程中总是与常 规 UML 模 型元 素 关 联,例 如 与 类 的方法或状态图中信号发送关联。各抽象层之间的行为是相互映射的,每一句 PIM 中的 ASL 语句都 可以在平台相关模型(PlatformSpecificModel,PSM)和代码层中找到相应的实现[4]。
基于 MDA 的模型测试框架通过对测试过程的抽象化,分离测试模型和测试执行,模型测试流程如图3所示。测试设计人员侧重于对被测试系统需求和业务层面的理解,从而通过正向或逆向手段建立针对某方面特征的测试模型,并重用有针对性的测试执行手段。测试模型是基于 MDA 的模型测试的核心概念,它在测试的不同阶段表现为不同视图。
(1)需求模型:需求的形式化就是对需求的表述从自然语言转换成为 UML的形式。在进行功能测试时,输入需求,对需求进行约束和形式化,以便将需求模型转 换 为 测 试 模 型,主 要 采 用 UML 的 用例图和活动图来表述。
(2)测试模型:被测系统需求模型中加入 ASL,完成对模型中动态属性(包括动作以及方法的行为)的描述。描述后的模型具有了可执行语义,形成测试模型。
(3)测试用例集:ASL提供了操纵模型的能力,可以根据业务逻辑和功能点建立测试用例集。
(4)测试场景:在测试执行之前,通过相应 ASL语句描述测试的执行环境以及执行流程,将测试用例按次序组合成互为因果的测试流程。在测试场景中更多的是体现需求对流程的描述,对需求中各个业务流程、业务功能的测试[5]。通过该方法,能够覆盖到应用系统的各个流程和不同的测试数据分支。
3 建模过程中的测试
加入 ASL,煤质模型具有可执行能力。完成对测试环境和测试用例构建,MDA 开 发过 程 利 用 模型的可执行能力来测试煤质管理系统的业务需求是否准确,模型中是否存在潜在问题。在煤质业务逻辑中,根据煤质基础信息以及采样员提供的煤层中煤、矸主要元素的位置、高度数值,绘制工作面煤质信息 图 件,其中绘制工作面展开图包括 3 部 分: ① 沿通风巷和运输巷煤质变化折线趋势图,主要反映灰 分、硫 分、发热量等煤质指标的变化情况。 ② 通风巷和运输巷煤层展开图,主要反映煤层夹矸的分布情况。③ 开采进度示意图和煤层煤质柱状图。工作面展开图绘制所涉及的类图如图4所示。
3.1 测试初始化环境的构建
MDA 不涉及 具 体 技 术,也 不 依 赖 于 特 定 平 台信息,因此不能将数据库引入作为测试一部分,转而由测试初始化块负责对各类测试数据和对象赋值。测试初始化环境控制着测试初始状态以及所有测试预期,它是否模拟了真实环境将决定测试结果的真实性和正确性。完整的工作面展开图包含以下几种类型的对象:掘进工作面要素、回采工作面要素、毛煤月度分解 计 划、煤 层 煤 样、回 采 煤 样 以 及 煤 质 预测。其中2种要素是必须的,而煤质预测数据由系统自动生成。上述对象生成顺序没有严格要求,对象生成后可自动绘制工作面展开图。
想了解更多煤质方向的文献还可以查看:煤质管理论文文献3篇
对象和数据的创建方式有2种:① 在类的静态方法中初始化,将对象的初始化放入方法体内进行,数据初值以方法参数的方式传入。② 直 接 给 对 象属性赋值,过程更加直观,但是缺少初始化过程细粒度的控制。
上述测试用例中涉及到的公式为公式1:煤层净 煤 量=分 煤 层 厚 度×单 循 环 进尺×工作面倾斜长度×比重;公式2:分煤层矸量=(各架对应分煤层厚度总和×分煤层长度)×单循环进尺比重。在测试 用 例 中,通 过find-only操 作,确保 模 型中只 提 供 了 唯 一 的 有 效 句 柄,判 断 actual不 为UNDEFINED则 向 类 对 应 状 态 图 发 送 信 号 PT1:Request_Data(),激 发状 态 跳 转 并 执 行 入 口 动 作。入口动作中通过关联漫游导航对象关系,验证对象属性值并进行业务的处理。若测试用例执行过程中报错或者被测系统的行为与模型期望不一致,针对错误类型修改模型或者调整测试用例,直到模型反映出系统的预期行为。
4 结语
模型作为 MDA软件开发过程中的核心部分,包含了所有系统需求规约,对模型的测试研究,可以从早期针对业务需求进行验证,避免将重大缺陷遗留在系统中,对后期的系统造成重大隐患。ASL语言对模型动作语义部分进行了完善的补充,它操纵模型元素的能力,可以有助于完成对基于模型测试中初始化环境的创建,并且调用各个模型元素,组织测试用例,模拟出真实场景来精确地完成对模型的测试。——论文作者:张小艳, 杨阳, 文辉
参考文献:
[1] RAISTRICKC,FRANCISP,WRIGHTJ,etal.MDA与可执行 UML[M].赵建华,张天,译.北京:机械工业出版社,2006.
[2] 刘静,何积丰,缪 淮 扣.模型驱动架构中模型构造与集成策略[J].软件学报,2006,17(6):1411-1422.
[3] 刘扬,李亚芬,王 普.模型驱动的测试用例自动生成框架[J].计算机工程,2011,37(1):39-40.
[4] 张浩华,赵海,赵 明.大型水电仿真系统的模型驱动架构设计[J].计算机工程与应用,2009,45(4):72-75.
[5] 王瑞雪,张涛.UML模型驱动的划分测试用例生成方法研究[J].计算机应用研究,2012,29(9):3334-3337.
* 稍后学术顾问联系您