基于UML的实用软件体系结构描述方法的应用研究
2012-02-19陈景霞
陈景霞,李 萌
(陕西科技大学 电气与信息工程学院, 陕西 西安 710021)
0 引言
软件体系结构是指软件系统的高层抽象,用来描述整个软件系统的结构和行为模型[1],包含对组成系统组件的描述、组件之间的交互关系,以及系统组合的模式和应该满足的约束等.形式化的、规范化的体系结构描述对于体系结构的设计和理解非常重要.目前主要的描述方法包括基于UML的面向对象的可视化描述方法和以体系结构描述语言ADL为代表的形式化描述方法.
软件体系结构描述首先要解决的问题是如何对软件体系结构进行建模.常见的体系结构模型包括结构化模型、框架模型、功能模型、过程模型、动态模型和多视图模型[2].其中,较为流行且实用的多视图模型体现了关注点分离原则,通过定义不同的视图刻画软件的体系结构,每一个视图只关心系统的一个侧面,多个视图结合在一起可以反映软件体系结构的全部内容.
本文提出并验证了一种基于UML2.0的实用软件体系结构描述方法,将软件体系结构设计、描述和表示同UML2.0系统建模方法有机结合在一起,并以异构网络平台的数据集成中间件(Data Integration Middleware,简称DI)开发为例,通过构建大量UML构造型对软件体系结构的多个视图模型进行规范化描述,避免了传统的结构化数据流设计导致的功能耦合和代码冗余,有效地提高了软件的可扩展性和可重用性.
1 基于UML的实用软件体系结构描述方法
1.1 UML面向对象系统建模
UML2.0是一种定义良好、易于表达且功能强大的面向对象系统建模语言.UML2.0定义的14种图形标记、语义化的元模型描述规范以及静态和动态两种建模机制,从不同的应用层次和角度对系统建模提供了有力的支持[3].UML建模过程及其分析、设计和实现阶段的关系如图1所示.利用UML的半形式化特性及嵌入的扩充机制,可以从多个视图描述软件的体系结构.
图1 UML模型的分析、设计与实现
1.2 基于UML的实用软件体系结构描述方法
为了从实用角度将软件体系结构设计、描述和表示与软件系统建模融为一体,形成了实用软件体系结构描述方法.该方法用概念视图(Concept View)、模块视图(Model View)、执行视图(Execution View)和代码视图(Code View)等4个不同的视图来分析软件体系结构[2].其中,概念视图按照系统的主要设计元素之间的关系来描述系统;模块视图用于系统分解并将模块进行层次划分;执行视图用于将功能组件分配给运行实体,侧重于软件的动态结构问题,代码视图用于将源代码组织成目标代码、运行库和二进制文件.这4个视图均采用UML2.0描述,并大量使用UML构造型描述.
软件体系结构分析是一个不断反复的过程,在各个视图的设计过程中,都有可能存在着反馈,有时需要返回到上一个视图或前一个任务进行重新设计,以求满足不断出现的新需求.图2显示了软件体系结构的4个视图及它们之间的关系.
图2 软件体系结构的4个视图及其关系
2 应用实例
2.1 数据集成中间件体系结构描述
数据集成中间件(DI)是目前比较流行的数据集成方法之一,支持不同来源、格式和性质的数据源进行逻辑上或物理上有机集成,为Internet/Intranet环境中分布、自治、异构的数据源提供可靠的转换、加载与统一访问服务.它通过在中间层提供一个统一的数据逻辑视图来隐藏底层的数据细节,使得用户可以把集成数据源看为一个统一的整体.DI体系结构设计的关键问题是如何构造这个逻辑视图,并使不同数据源之间能映射到这个中间层.
传统的以体系结构描述语言ADL为代表的形式化描述方法适合在DI设计的初级阶段对有关性质进行分析和推理,而以UML2.0为代表的实用软件体系结构描述方法不仅能够直观的表现DI体系结构的4大视图和关系,而且能够实现从体系结构设计到具体编码的平滑过渡.
在DI的数据发送端,用户选择要发送的数据来源(包括数据库数据、带格式的文本文件或XML文件等),然后提交数据发送任务.在DI的接收端,系统按照用户配置好的通信方式定时监控新数据的到来,并指定新到达数据的目标形态.用户可以指定系统在新数据到达时按主题自动接收数据,对于超时未到的数据,系统可以自动发送电子邮件通知发送方.DI在发送端和接收端都提供相应的操作向导引导用户的操作行为.下面详细说明用UML2.0描述DI体系结构的方法.
2.2 DI概念视图描述
在概念视图设计阶段,首先对系统进行全局分析,然后将系统的功能映射到体系结构的概念组件,将协调这些组件并进行数据交换的元素设计成连接器.概念视图可以用UML类图来描述,图3显示了概念视图的元模型.其中,概念配置由组件和连接器组成.一个组件可以包含一系列组件、连接器和端口.端口定义组件收到和发出的消息,是组件之间的交互作用点;端口可以有自身的实现,可以处理组件之间的交互操作;端口还可以拥有自身的协议,并由协议安排进行消息交换.
图3 概念视图元模型
作为传输工具,DI包括发送端组件和接收端组件两部分.以发送端组件为例,为了分离发送任务定义和发送控制,组件采用客户/服务器结构,为此设计了组件ExportWizard和ExportServer,ExportWizard用于接收用户的数据导出定义,ExportServer负责数据编码和发送.为了保持组件元素的简洁性和分离控制的要求,将组件ExportServer再次分解成两个组件DataEncode和Transfer,分别用于对编码方式和通信方式进行控制.进一步确定具体的连接器,ExportWizard和ExportServer之间用客户/服务器方式连接,ExportServer和DataEncode之间以及ExportServer和Transfer之间采用方法调用.DI发送端组件的概念视图如图4所示.其中,SendDef端口负责接收用户的数据导出定义,并经Client/Server连接器传递给ExportServer组件.DataIn端口用于获得源数据,源数据经过指定的编码器由DataControl端口传给ExportServer,Transfer组件负责打包进行传输,然后通过DataOut端口输出数据.
DI发送端组件的概念视图是一个扩展的UML类图,其中的组件、连接器和角色都是构造型类.UML构造型可以引入自身的图形符号,这里用矩形表示组件,组件边缘正方形的小黑块表示端口,拉长的六边形表示连接器,连接器边缘的小黑圆圈表示角色.对于概念视图的组件和连接器,还可以用UML状态图来定义它们基于消息的状态变换.如果概念视图包含协议,还可以用UML顺序图描述协议内部消息的交互[4].
图4 DI发送端组件概念视图
图5 模块视图元模型
2.3 DI模块视图描述
模块视图设计包含了3个紧密耦合的设计任务:模块划分、层次划分和全局评价,即在全局分析的基础上,将概念视图的组件和连接器等元素映射到子系统和模块,建立层次并定义层次与模块的接口.模块视图的元模型可以用UML的类图描述,如图5所示.其中,子系统可以包含其它子系统和模块,一个模块对应于一个或一组概念视图中的元素,模块也可以进一步划分为子模块.模块提供的服务被定义为接口,模块之间通过接口进行交互,这种模块间的关系被定义为Use关系.表1显示了DI发送端概念视图中的元素与模块视图中元素的对应关系.将整个发送端组件Export定义为一个子系统SExport,其他元素则映射成相应的模块或子系统.
表1 DI发送端的模块设计
2.4 DI执行视图描述
执行视图按照系统的运行平台元素来描述系统的结构.执行视图的运行实体及配置关系可用UML类图表示;运行配置到硬件设备的映射可用UML的部署图描述,配置的动态行为可用UML顺序图描述.图6所示为DI发送端的执行视图,将组件ExportWizard和ExportServer分别映射到两个进程上,进程EExport对应客户端的用户数据导出定义,进程EExportServer处理服务器端数据编码和发送任务.发送端的数据自动发送映射为服务器上的守护线程TAutoSendDaemon,用于完成自动的数据发送;而自定义发送过程封装于线程TSendNode中.该视图还标识出了运行实体间的通信方式和对应的拓扑关系.通过IPC调用,一个服务器进程EExportServer可以对应多个客户端进程EExport,而MSchedule模块通过过程调用对应多个发送守护线程和自定义发送线程.
图6 DI发送端的执行视图
2.5 DI代码视图描述
代码视图设计的主要任务是组织源代码组件、中间代码组件(如二进制目标文件和静态库)和部署组件(如可执行文件和动态链接库).在代码视图中,需要将模块视图的模块映射到源代码组件,可用适当的存储结构,如目录或文件组织这些代码;还要将执行视图的运行实体和相互依赖关系映射到部署组件和它们之间的关系上,部署组件在运行时刻实例化运行实体.中间代码组件起到连接源代码组件和部署组件的作用.最后,还要设计构建系统的过程,包括编译顺序、编译脚本和安装程序等,用于有效的构建整个系统或部分系统.可以用UML的组件图表示代码视图中的组件、组件的组织及组件之间的关系,而模块和源文件的对应关系、运行实体和部署组件的对应关系可用表格方式直接给出.
3 结束语
从以上DI体系结构描述实例可以看出, UML2.0对软件体系结构的绝大部分概念都提供了强有力的支持,可以更好地描述UI端口和组件的行为,以及组件之间的交互行为特征.该描述方法避免了传统的结构化数据流设计导致的功能耦合和代码冗余,能有效地提高软件的可扩展性和可重用性;同时,为DI软件体系结构设计提供了有益参考,使开发者在此基础上可以容易地的进行DI的详细设计和编码,也为以后DI功能的变化和体系结构设计的重用提供了良好的支持.
[1] 黄正宝,张广泉. 一种新型的软件体系结构描述方法的研究[J]. 微电子学与计算机,2006,23(12):82-84.
[2] 冯玉琳,黄 涛,金蓓弘.网络分布计算与软件工程[M]. 北京:科学出版社,2011.
[3] 刘 宁,郑东霞.基于UML的多视图软件体系结构描述方法的研究[J].计算机应用研究,2008,25(11):3 367-3 369.
[4] 马重明,张学旺,范时平. 基于UML的软件体系结构开发方法[J]. 计算机工程与应用,2006,12(4):118-120,148.