服务组合框架

2024-07-27

服务组合框架(精选八篇)

服务组合框架 篇1

目前, 越来越多的公司、企业将自己的各种应用以Web服务的形式发布在网上, 而随着其应用的复杂性日益增强, 单靠企业内部提供的业务功能越来越难以满足实际的需求。如果我们能够合理设计出一种基于语义的Web服务组合框架, 把已经存在的简单的不能满足需求的服务组合成为全新的能够满足需求的服务, 这对于降低公司运行成本、提高服务的使用效率, 提升企业综合竞争力具有重要的现实意义[1]。

1 组合框架的设计思路

目前来讲, 服务组合方法可以分为静态组合方法和动态组合方法两种。而动态组合方法在日益多变的网络服务环境中能够反映和满足用户的需求, 鉴于此本文主要研究动态服务组合问题。下图1是本文设计的Web服务组合整体框架图, 其主要包括服务的描述、服务的发布、消息的交互、服务的匹配和服务的装载等[2][3]。

图1各模块的功能如下:

协同工作管理器:是各设备之间进行通讯的中转站, 实现对UDDI上各种服务的发布与更新的管理, 完成层次结构生成协议的构造。

服务装载模块:主要负责调用系统设备提供的各种服务以响应用户的个性化需求。此模块在这个系统中处于核心地位。

流程定义文档:完成业务流程组合过程中所需的各种语义需求描述, 有了它, 服务在组合过程就有了语义, 能够更快找到目标服务。

UDDI:服务发布中心和管理中心, 保存了系统发布的所有服务, 并管理着这些服务, 使之形成相应的服务列表, 使得在服务组合过程, 方便这些服务被服务装载模块调用。

组合服务引擎:在服务匹配阶段, 服务引擎将流程定义文档中的Web服务作为目标, 从UDDI上的候选服务中查找匹配的服务, 形成服务组合实例。通过使用OWL逻辑推理, 组合服务引擎可以对使用不同语法和不同模型抽象的候选服务与请求之间进行基于语义的匹配。

消息交互模块:是系统上下模块间进行信息交互的中介。工作时, 此模块根据业务功能的需求, 在建立相应组合规则的基础上判断当前的服务组合结果是否满足用户的要求, 如果得到的结果与所需的结果不一致时, 消息交互模块立即通知服务装载模块, 然后调整服务组合方案。

2 服务发布管理方法

一般来讲, 传统的服务组合平台其服务发布方式不外乎有两种:一是功能分散化, 要求各个设备自己去找到满足需求的业务;二是功能集中化, 即让某一管理控制中心去管理系统上的所有资源, 由它统一去响应客户需求。但是, 一般在网络服务环境中绝大部分计算设备是由多种不同计算资源构成, 它们之间存在很大的差异性, 且由于这些设备具有可移动性和服务的动态性等特点, 采用传统的服务组合方式再也难以满足要求。鉴于此, 本文提出一种层次结构的服务组织方式来进行服务组合, 能很好地克服了网络服务环境存在的问题。

2.1 设备性能差异分类

根据网络服务环境中设备的性能差异, 在这里我们将它划分为四个级别:低级L1、初级L2、中级L3和高级L4。

低级设备:表示服务不具备直接发布服务能力的设备, 它必须借比它更高级别的设备的协助才能完成业务功能的需求。如简单的传感器, 传统的打印机等。

初级设备:表示具有软件模块宿主计算能力的设备, 能够直接向外提供服务。如智能传感器。

中级设备:这些设备一般具有可移动性, 不仅可以直接向外提供服务, 还有发布服务的功能。如手提电脑、智能手机等。

高级设备:跟中级设备有相同的功能, 不同之处是其计算能力更强, 且一般作为固定设备, 没有什么特殊情况不予以移动。如服务器。

2.2 组合框架的生成协议

根据上节给出的设备划分标准, 可以构造出一个层次结构的服务组织方式:当一台设备A进入到服务系统中时, 首先向系统发布广播消息INFO_BROADCAST (包含设备A的分类级别L (A) ) , 等待周围系统的服务设备作出回应。设备B收到的设备A发来的广播消息后, 会跟自身的分类级别L (B) 进行比较, 若L (A) <L (B) , 设备B发出信息INFO_INVITE, 告知设备A可以将自己设置为父节点;如果L (A) >L (B) , 设备B发出消息INFO_REO, 同意自己成为设备A的子节点;如果L (A) =L (B) , 设备B发出消息INFO_ADDBROTHER, 同意自己成为设备A的兄弟节点。实例生成协议时序图如图2所示[3][4][5]。

层次结构的生成的原则是:任一设备有且只有一个父节点, 当某一个设备节点已经有了一个父设备节点之后, 就必须拒绝其他上级设备节点发来的INFO_INVITE邀请消息, 并回复一个INFO_NACK消息告知对方自己已经有父节点了。

2.3 服务查询与组合

服务装载模块 (Service loading Module) 是工作在中级和高级级别设备上的软件模块 (服务使用者直接面对的模块) , 中级设备上的服务装载模块查询服务域包括其同级节点加上其父节点的服务管理域。而高级设备上的服务装载模块查询服务域是所有的高级设备节点上的服务管理域。下面我们来看一下服务管理域和服务查询域的定义。

服务管理域:包括设备本身及其子节点设备发布的所有服务。这些服务都存储UDDI中, 每个中级和高级级别的设备都通过UDDI来管理服务发布的描述信息, 以响应服务的查询请求。当设备节点需要新增或者删除服务时, 可分别通过向上级设备节点发送INFO_ADD消息和INFO_REMOVE消息。

服务查询域:服务装载模块向UDDI发出请求后, UDDI返回的查询结果范围即是服务查询范围。服务装载模块在进行服务匹配的时候, 首先要通过流程定义文档中的用户需求描述同服务系统中所能实际提供的各种服务进行比较和匹配, 然后返回UDDI可能的查询结果。

网络服务环境下服务组合的查询具有位置相关性。比如在层次结构的服务组合框架下, 不同级别设备上运行的服务装载模块程序在进行服务查询和组合时, 首先查询该设备上的UDDI上的服务记录, 也就是服务管理域。若在UDDI上没有找到可组合的服务时, 就将查询范围扩散到该设备节点的服务查询域。

2.4 服务变动与更新

网络服务环境一般具有动态性的特点, 如何维护服务环境的变化减少对系统的影响有重要的意义。环境中的服务可能由于设备的移动性, 如用户的PDA或手提电脑从一个地方移动到另外一个地方, 或是由于移动设备出现电源供应不足的情况, 而停止向外提供服务。由此可见, 网络服务环境下的服务变动和更新一般可分为两种情况:1) .设备由于地方的转移而出现的服务变动和更新;2) .设备由于外在的某种原因 (如突然断电) 而不能持续提供服务。

第一种情况主要是指一些具有移动特性的中级级别的设备。它的父设备节点是动态变更的, 它会定时发送消息INFO_HELLO来检测自身的位置发生变动的情况, 然后决定变更与否。另外, 它在层次架构中的位置也不是一成不变的, 若有来自不同级别设备节点的响应消息INFO_HELLO速度比它快, 它便退出当前位置 (退出后变成了孤立节点) , 然后重新发送广播消息INFO_BROADCAST寻找父节点[6]。

第二种情况设备的变动和更新主要从它的生命周期时间来看。设备一旦注册, 系统都会赋予它一个生命周期时间, 当超过生命周期时间后, 设备就会发送INFO_CKECK消息检测自身设备节点的是否有效。如果收到父设备节点返回的INFO_CHECK消息, 则恢复原来的生命周期时间, 继续提供服务;若没有收到父设备节点返回的INFO_CHECK消息, 就认为与它连接的父设备节点已经离开或者失效。然后像第一种情况一样, 然后发送广播消息INFO_BROADCAST寻找父节点。

3 结语

面对日益复杂的网络服务环境, 孤立的简单的单个服务已在很大程度上不能满足我们的需求。本文首先分析了现行网络服务环境的基本情况, 然后给出了一种层次结构的基于语义Web服务组合框架的设计以及较详细分析与框架紧密相关的一些问题, 这对开发一个语义Web组合系统有很好的借鉴意义。

摘要:根据Web服务组合的特点, 设计了一种层次结构的基于语义的Web服务组合框架, 给出了该框架的服务发布管理方法和层次结构生成协议, 详细分析了该层次结构的生成过程以及服务组合框架对服务的查询、组合和更新等的运行原理。

关键词:Web服务,语义,Web,服务组合,层次结构

参考文献

[1]郑增威.吴朝晕.普适计算综述[J].计算机科学, 2003, 30 (4) :18~29

[2]郑笛, 王俊.普适计算环境下基于中间件的上下文质量管理框架研究[J].计算机科学, 2011.11

[3]徐毅.普适环境下的语义Web服务组合框架的研究与实现[硕士论文], 2007.10

[4]郭颂, 柳春华.语义Web服务组合实现框架研究.信阳师范学院学报[J], 2011.10, 4 (24) :36~40

[5]高俊, 沈才梁.一种面向服务体系结构的服务组合方案求解方法.计算机应用研究[J], 2011, 11 (28) :41~46

服务组合框架 篇2

关键词:国际游资流动台阶心理账户国际游资成因

国际游资的流动是金融资本在全球范围内根据风险收益状况进行资产配置或组合的产物。本文尝试从国际游资所有者个体行为角度,借助行为资产组合理论对国际游资流动的成因进行解释。

本文认为国际游资流动存在“台阶”现象,国际游资持有人存在“权重调整式多重动态心理账户”,也就是说,国际游资会根据资本流入国经济基本面情况进入不同的台阶,在每一台阶,国际游资的动机是不同的或多重的,这是促使国际游资在全球范围内根据风险收益状况进行资产配置或组合,因而促成国际游资流动的根本原因。

一、国际游资流动“台阶”现象

所谓“国际游资流动台阶”现象,是指由于发展中国家金融中介的无效率和作用的不连续性,使国际游资的流动呈现阶段性的数量变化。1就某一具体国际游资流入国而言,根据国际游资流动的特征,大致可分为四个阶段,直观的描述可见图1。

图1中,横轴方向代表国际游资流动的时间,纵轴方向代表国际游资流动的数量,虚线代表国际游资流入的阈值(临界值),在此水平之上代表有国际游资净流入,在此水平之下代表有国际游资净流出。其中,从t0到t3为第一阶段、从t3到t5为第二阶段、从t5到t6为第三阶段、从t6到t8为第四阶段。

从t0到t3为第一阶段,在该阶段国际游资较为平缓的流入。一般来讲,在发展中国家的经济起飞阶段,经济基本面良好(经常项目盈余、财政盈余、通货膨胀水平较低、汇率稳定、国际储备较多),需求大量资金,政府也会推出各种优惠政策吸引国际资本,但由于长期的金融抑制,政府的直接借贷、监管的不充分、缺少竞争、缺少透明度、信息的不对称等导致金融机构的无效率或效率低下,因而不发达的金融体系阻碍了资金的顺畅流动,加上市场缺乏多元化的投机品种,在国际游资流动的初始阶段国际游资只是会试探性地进入目标国,这一阶段持续的时间较长,但数量却相对较少。如果用图表来表示的话,此时的外资流入就是一条几乎和横轴平行的缓慢上升的曲线(为便于直观表达,这里全部描绘为直线),在该阶段国际游资流入数量由A台阶向B、C台阶提升,而且从一个台阶跨向另一个台阶的时间会越来越短、幅度却会越来越大。

从t3到t5为第二阶段,该阶段国际游资较为迅速涌入和积聚。国际游资流入国经济已有一定的发展,市场被经济增长的潜力激发了无数的想象力、金融市场的投资品种有所增加、金融机构的中介作用也有所加强,加之市场预期的改变,如预期资本流入国货币升值等,国际游资会在一个很短的时期内通过各种渠道大量流入,在图形上表现为向上陡然升高并维持在较高的水平,看上去像一个向上的台阶。从图形上不难看出,从D台阶向E、F台阶的迈进是在很短的时间内完成的,而且台阶的高度越来越大。

从t5到t6为第三阶段,该阶段国际游资的流动处于相对均衡状态。但是,由于发展中国家的金融和经济结构具有重大的缺陷,国际游资的大规模流入通常会导致资本流入国的宏观经济过热,这种过热具体表现为:实际汇率上浮、经常账户赤字增大、储备增加、货币扩张、通货膨胀压力增大。国际游资的流入还会使流入国金融体系的脆弱性增加,如加剧金融中介资产负债的不匹配,形成货币错配现象;金融中介过度风险承担,导致不良资产增加;资产价格“泡沫化”等,因而该阶段国际游资停止进入或少量进入目标国,台阶F较为平缓。

从t6到t8为第四阶段,该阶段国际游资会迅速撤离流入国,甚至会带动流入国资本外逃。当国际游资积聚到一定阶段以后,或当流入国经济基本面恶化到一定水平时,如果其流动目标已实现,或形成了不好的预期,一旦触发事件发生,国际游资就会立即撤离流入国,这时国际游资表现为一个向下的台阶并可能引發金融危机。当流入国政府发现资本外流倾向时,可能会积极采取一些措施进行干预,国际游资在外流后可能会短暂稳定,在图形上表现为国际游资从t6阶段撤到t7阶段,并形成极短的台阶G,一旦政府干预失败,国际游资的撤退就将是不可逆的。“羊群效应”和“传染效应”的存在,加之大投机者操纵市场的获利行为,可能会加速国际游资的撤退和危机的爆发。图形上表现为,国际游资由F台阶向G台阶撤退,由于政府的干预,国际游资在G台阶可能会短暂停留,而后就直线下跌,直至突破临界值,到达H台阶,市场形成新的均衡。

当然,上述阶段划分并不是绝对的。国际游资有过程型和即时型之分,上述分析对于预期流入国货币升值时进入贬值时退出的过程型国际游资比较适用;对于短期内大量进入目标国市场进行直接冲击,意图在短期内改变或扭转市场资本移动方向,以期获得正常投资收益以外资本利得的即时型国际游资而言,可能只存在第二和第四阶段,该类国际游资瞬间进入目标国进行投机尔后便旋即离开。

图2 列出了巴西、印度利西亚、菲律宾等国在金融危机爆发前后的国际游资流动图,其中国际游资的测算口径采用经济增长前沿课题组(2005)的粗略算法,即:国际游资=外汇储备增加-贸易顺差-FDI流入。图中数据单位为百万美元。从图中不难看出,国际游资流动的台阶现象在经济生活中确实客观存在。

二、国际游资持有者的心理账户

行为金融理论认为,人们通常会根据资金的来源、资金的所在和资金的用途等因素对资金进行归类,这种现象被称为“心理账户”。传统的经济理论假设资金是“可替代的”(fungible),也就是说所有的资金都是等价的。然而,在人们的眼里资金通常并不是那样可替代的,人们倾向于把他们的投资武断地分配到单独的心理账户中,并根据投资所在的账户分别做出决策。在决策中,人们通过三种心理账户对他们所面对的选择的得失进行评价:A、最小账户,仅仅与可选方案间的差异有关,而与各个方案的共同特性无关;B、局部账户,描述的是可选方案的结果与参考水平之间的关系,这个参考水平由决策的产生背景所决定;C、综合账户,从更广的类别对可选方案的得失进行评价。

国际游资持有者有避险保值、套利和投机三种基本动机。三者都必须依据对流入国基本面和市场走势的判断来确定交易的方向,选择买卖时机的方法及操作手法也基本相同;虽然实际经济活动中很难对其进行绝对地区分,但三者又有一定区别:第一,交易目的不同,避险保值目的是为了逃避因战争、国内通货膨胀、汇率管制等所引发的潜在损失或风险;套利则是为获取较为稳定的价差收益(如汇差、利差和资产价格差等);投机的目的是为赚取风险利润。第二,承担的风险不同,避险保值承担的风险最小,套利次之,投机最大。

因而,我们认为国际游资持有者至少具有三个心理账户,分别对应低、中、高三个期望值,代表国际游资既想避免资金本金损失,又希望赚取利润的愿望。高、中、低期望值兼而有之的资产组合常常被描述为分层的金字塔,国际游资持有者在底层、中层和顶层之间分配资金,底层的资金是为了避险保值,中层和顶层的资金是为了套利和赚取风险利润。本文借鉴Wall(1993)的基本思想,构造了一个国际游资持有者行为资产组合的金字塔结构,具体情况可见图3。

金字塔是在避险保值、套利和投机这三种动机基础上构建起来的。金字塔的底部是为国际游资持有者提供安全性而设计的,这里的安全性可以从两个角度去理解,其一,国际游资持有者为逃避因战争、国内通货膨胀、汇率管制等所引发的潜在损失或风险而把资金转移到流入国;其二,在资本流入的初始台阶,把资金投入到现金、银行存款和货币市场基金等流动性极强的保值产品。中间层主要是债券类金融产品,在资本流入的不同阶段,国际游资持有者可能会根据风险和收益的对比状况,赋予该类产品不同的比例。最上层为股票、金融衍生产品和房地产等风险较高类产品。金字塔结构从底部到顶部是按其风险程度排列的,从右到左是按其收入价值由低到高的顺序来排的,其中金字塔的最顶部是最具投机性的资产。

结合前面已经分析过的国际游资流动“台阶”现象,我们认为国际游资在不同的台阶会给三个心理账户分配不同的权重,在国际游资流入的第一阶段,避险保值账户和套利账户分配的权重会比较大,投机账户的权重会相对较小;随着国际游资由D台阶向E、F台阶的迈进,避险保值账户和套利账户分配的权重会逐步减小,投机账户的权重会越来越大;在由F台阶向G、H台阶撤退的过程中,国际游资持有者会把避险保值账户的权重逐步调整为零,投机账户的权重会达到最大,即时型国际游资从进入到退出的整个过程,其投机账户的权重可能都会为1,因而我们可以把国际游资持有者的心理账户称为“权重调整式多重动态心理账户”。

三、避险、套利和投机驱动下的三重动机国际游资流动模型

假设国际游资的总量为W0,其持有者的目标就是根据国际游资流动时所处的不同台阶将其在三个账户间进行分配,以使整体效用达到最大。假设期望账户的效用函数采取常用的Cobb-Douglas函数形式,则安全动机(以s表示)也即低期望账户的效用函数为:,其中Ps代表达不到低期望水平As的概率,Ws代表低期望账户的最终财富,Eh为最大期望值,α为一个非负权重参数。类似的,套利动机(以a表示)也即中等期望账户的效用函数为:;投机动机(投机意味着高风险,以r表示)也即高期望账户的效用函数为: ,其中各参数含义与前式对应。则可假定国际游资持有者的效用函数是低期望账户的效用函数、中等期望账户的效用函数与高期望账户的效用函数的联合体,则整体效用为:

(1)

其中Kd為国际游资持有者对待风险的态度,μ为独立于、

和 的随机扰动。国际游资流动的目的就是为了获得较高的期望效用,因而我们假设 、和都大于零。

当国际游资持有者赋予避险保值账户以最大权重,而套利账户和投机账户的权重时,则都为1,两账户达不到低期望水平的概率Pa和Pr也都为1,即

,这时模型(1)就可以简化为纯避险行为驱动下的国际游资流动模型(2);同理当 时,可以得到纯套利行为(如汇差、利差和资产价格差等)驱动下的国际游资流动模型(3);当 时,可以得到纯投机行为驱动下的国际游资流动模型(4)。

(2)

(3)

(4)

其中,由于在做各种组合时国际游资持有者对待风险的态度可能是变化的,也就是说、 、 并不是固定的值,所以各模型系数的K值也不尽相同。

同理,模型(1)中,当权重变量α、β和γ三者中有且仅有一个为0时, 则分别可得避险套利模型、避险投机模型以及套利投机模型,分别由式(5)、(6)和(7)表示。

(5)

(6)

(7)

以上构建的基于避险、套利和投机的三重模型可以较全面地解释国际游资流动及其动机。

(注:本文受“2007年度上海高校选拔培养优秀青年教师科研专项基金”项目资助。)

参考文献:

[1] 经济增长前沿课题组(2005):国际资本流动、经济扭曲与宏观稳定──当前经济增长态势分析,《经济研究》第4期。

[2] Wall, Ginita (1993), “The Way to Save,” New York: Herry Holt.

服务组合框架 篇3

近几十年来, 在研究发挥钢结构稳定性能的潜力和完善稳定计算的理论方面, 国内外都取得了长足的进步。计算长度法在目前的框架稳定设计中仍被广泛地应用。但到目前为止, 对于考虑楼板组合效应的框架分析及设计方法, 还处于起步阶段。

本文结合组合框架实际结构特点, 在总结钢框架、组合框架及组合梁已取得的理论基础上, 根据塑性铰弯矩重分布原理, 并考虑半刚性连接特征, 探讨柱连续及组合梁连续这两种框架结构体系设计方法的不同之处, 分别提出有侧移和无侧移组合框架柱的稳定设计方法。

1 考虑组合效应的组合框架屈曲荷载

1.1 基本假设

1) 钢柱与组合梁皆为各向同性的弹性体;

2) 钢梁与混凝土板之间无竖向掀起, 即变形后两者的转角相同, 两者的曲率亦相同;

3) 忽略梁柱剪切变形的影响;

4) 考虑组合梁效应对框架整体受力性能的影响。

1.2 框架组合梁刚度

对于组合框架整体稳定分析时组合梁的刚度评价, 清华大学[3,4]在对组合框架受力性能进行广泛分析的基础上, 提出了一种新的框架组合梁刚度评价方法:

EIeq=Es (0.6Ipos+0.4Ineg) (1)

Ipos=Ie/ (1+ζ) (2)

Ineg的计算方法如下 (如图1所示) :

x= (AstH+AsH1) / (Ast+As) (3)

Ineg=Is+Ast (H-x) 2+As (x-H1) 2 (4)

其中, Es为钢材的弹性模量;Ie为组合梁的换算截面惯性矩;Ast为有混凝土板有效宽度内钢筋面积;As为钢梁的截面面积;ζ为刚度折减系数。

2 组合框架梁、柱的转角位移方程

2.1 基本假设

1) 框架屈曲时同层的各横梁两端转角大小相等, 正对称失稳时方向相反, 反对称失稳时方向相同;

2) 组合梁的抗弯刚度考虑滑移以及负弯矩区刚度的折减用式 (2) 进行计算;

3) 组合梁中的轴力对组合梁本身的抗弯刚度的影响可以忽略不计。文献[6]分析得到如下结论, 即使是轴心压力较大的情况, 对组合梁的抗弯刚度以及变形的影响也较小, 因此不需要对梁线刚度进行修正;

4) 各层柱按比例加载;

5) 考虑组合框架节点半刚性连接的影响。

2.2 钢柱的转角位移方程

对于组合框架柱, 需要考虑轴力对其刚度的影响, 如图2所示, 以无侧移框架柱为例, 转角—位移方程如下:

MA=EI/l[A+B] (5)

MB=EI/l[A+B] (6)

C=μ (tanμ-μ) /[tanμ (tanμ2) -μ] (7)

S=μ (μ-sinμ) /[sinμ (tanμ2) -μ] (8)

μ=kl=lΡ/ (EΙ) =Ρ/ΡE=/μ (9)

其中, EI为柱的抗弯刚度;l为钢柱的长度;μ为柱的计算长度系数。

2.3 组合梁的转角位移方程

取RkA, RkB为组合梁两端连接的初始转动刚度。节点和梁端的相对转角为:

θrA=MA/RkA, θrB=MB/RkB (10)

根据经典的构件转角位移方程[6], 可得到半刚性连接梁单元的转角位移方程如下:

MA=EIeq (SiiθA+SijθB) /L (11)

MB=EIeq (SjiθA+SjjθB) /L (12)

Sii=[4+12EIeq/ (LRkB) ]/R (13)

Sjj=[4+12EIeq/ (LRkA) ]/R (14)

Sij=2/R* (15)

R*= (1+4EΙeqLRkA) (1+4EΙeqLRkB) - (EΙeqL) 24RkARkB (16)

3 组合梁远端约束的修正

下面以图3中有侧移框架AD梁为例, 并假设梁近端 (A点) 刚接, 梁远端 (D点) 半刚性连接, 根据组合梁的转角位移方程可得:

ΜAD=EΙeqL[4θA+2 (θD-ΜDARkD) (17)

ΜDA=EΙeqL[2θA+4 (θD-ΜDARkD) (18)

在有侧移框架中, 由假定知θAθD相等, 则由方程 (16) 可得:

ΜAD= (1+2EΙeqRkDL1+4EΙeqRkDL) 6EΙeqLθAβ=1+2EΙeqL1+4EΙeqL (19)

其中, β为梁远端约束的修正系数。

同理, 可推导其他梁端约束情况下的修正系数, 在此不再详述。对于钢柱远端约束的修正, 本文不再详述。

4 考虑半刚性连接的组合框架柱计算长度系数

以多层无侧移框架为例求解AB柱的计算长度系数, 如图4所示, 梁柱连接为刚接, 取出与柱两端连接的所有梁、柱作为计算模型, 利用组合梁和钢柱的转角位移方程建立与节点A有关的梁端和柱端弯矩建立节点A的平衡方程。

令:Κ1=AβΙb/lb/AΙc/lc

可得:

(C+2K′1) θA+B=0 (20)

同理令:Κ2=BβΙb/lb/BΙc/lc

可得到B点的平衡方程为:

A+ (C+2K′2) θB=0 (21)

由式 (20) , 式 (21) 可得到无侧移组合框架的屈曲方程为:

将式 (7) , 式 (8) 以及K′1, K′2代入上式可得无侧移组合框架柱的屈曲特征方程:

πμ2+2 (K′1+K′2) -4K′1K′2πμ·sinπμ-

2 (K′1+K′2) πμ2+4K′1K′2cosπμ+8K′1K′2=0 (23)

同理可得有侧移组合框架的屈曲方程:

[36Κ1Κ2- (πμ) 2sinπμ+6 (Κ1+Κ2) πμcosπμ=0 (24)

因此, 求解组合框架柱的计算长度系数, 只需先求解柱上下端连接的系数K′1, K′2并代入方程 (23) 或方程 (24) 中, 便可解得柱的计算长度系数。

5 实例分析

以4层两跨有侧移组合框架为例, 求解框架柱的计算长度系数。组合梁采用完全抗剪连接设计, 钢梁尺寸为250×160×7×10, 钢柱尺寸为250×250×8×12, 混凝土板内的纵向钢筋配置为8ϕ12, 节点采用平端板半刚性连接, 初始转动刚度Rki=49.6×103kN·m/rad

首先用本文方法, 考虑梁钢与混凝土的组合效应以及连接半刚性的影响, 求解AC, BD, DF柱的计算长度系数;再用规范计算长度法对其进行计算, 计算结果见表1。

6 结语

通过比较, 说明考虑组合效应后, 框架的整体刚度和柱的极限承载力都得到较大幅度的提高, 整体稳定性得到加强。

参考文献

[1]童根树, 施祖元.计算长度系数的物理意义及对各种钢框架稳定设计方法的评论[J].建筑钢结构进展, 2004, 6 (4) :1-8.

[2]GB 50017-2003, 钢结构设计规范[S].

[3]聂建国.钢—混凝土组合梁刚度的研究[J].清华大学学报 (自然科学版) , 1998, 38 (10) :38-41.

[4]聂建国, 沈聚敏, 余志武.考虑滑移效应的钢—混凝土变形计算的折减刚度法[J].土木工程学报, 1995, 28 (6) :11-17.

[5]蒋丽忠, 汤裕坤.二阶弯矩对钢—混凝土组合梁变形的影响[J].铁道科学与工程学报, 2006, 4 (8) :8-11;1995, 28 (6) :11-17.

服务组合框架 篇4

面向Aspect编程AOP(Aspect-Oriented Programming)[1]可以提高软件的设计水平及可复用性,实现关注点的分离(Separation of Concerns)。关注点的分离是软件工程所要解决的问题,它将有助于更好地对系统进行分析和理解,增强软件系统的自适应性、可维护性和高度的可复用性[2]。

在基于构件软件开发和面向Aspect的软件开发AOSD(Aspect-Oriented Software Development)结合的研究中,国外主要采用的方法和技术有Aspectual Component[3]、JAsCo语言[4]等。在国内,AOP的研究也已经兴起,文献[5]对AOP进行了综述,并讨论了几种主流的AOP技术;文献[6]在基于软件体系结构、面向构件的软件开发方法ABC基础上引入了面向Aspect软件开发中的概念——通知,提出了一种构件化软件关注点的分离技术ABC-S2C。

到目前为止,AOP已经有了一些工具和语言的支持,但是它还缺乏大型实际系统的应用验证,而且在AOP理论支持方面还有待于进一步研究。研究表明,将CBSD和AOSD的研究结合起来是一件对双方都有益的事情,而在两者结合的研究道路上,Aspect和构件的组合就显得尤为重要。虽然目前的EJB容器提供了一些非功能属性服务,如:安全性和日志服务等,但是EJB管理非功能属性的能力已达到了极限[7],而且它提供的非功能属性服务比较固定,不易于扩充。

本文首先通过形式化方法对构件和Aspect的组合关系进行了描述。在此基础上提出了一个构件和Aspect的交互框架,并通过消息队列和消息截获技术建立了框架的运行支撑环境。

1 构件和Aspect的组合关系

在给出框架之前,首先讨论构件和Aspect的组合关系,构件和Aspect组合框架提出的前提是构件和Aspect之间能够进行组合。

在Aspect的编织问题上,许多学者提供了多种方法来编织Aspect,一些方法是在源代码级的编织,这种方法在面向对象的环境中已经得到了实现,并且证明是十分有效的,例如:AspectJ[8],但这种方法较为白盒。在基于构件的软件开发环境下,构件通常都是一些预先编译好的独立封装体,或者出于技术保密的原因,有些构件的源代码是不公开的,在这种情况下源代码级的编织就不适用了。另一种方法是使用消息拦截器,Aspect可以在消息到达时进行触发,这种方法相对于源代码级的编织来说,比较适合于基于构件的软件开发环境,而且它允许把Aspect应用到黑盒的构件上。在组合关系的定义中,主要是基于消息截获来定义的。

定义1构件C=(P,M,β),这里P是构件端口的集合,M是端口上出现的消息集合,β是映射:

对于∀p∈P,若β(p)=-1,则p为构件的输出端口;若β(p)=+1,则p为构件的输入端口。

在构件模型中,定义了构件的端口,端口被分为输入端口和输出端口,主要和外界进行交互。端口及端口上出现的消息构成一个事件,所有事件构成事件集合E,对于∀p∈p,m∈M,e e E,则(p,m)→e。

定义2 Aspect:A=(Adv,M,γ),这里Adv是Aspect通知(Advice)的集合,M是Aspect的消息集合,γ是映射:

对于V∀a∈Adv,若γ(a)=Ak,则a为Aspect的目的端通知;若γ(a)=Ac,则a为Aspect的源端通知。

在Aspect模型中,通知被分为目的端通知和源端通知,通知用于描述和构件交互相关的横切特性行为。Aspect的通知及通知产生的消息构成一个事件。如果有事件集合E,对于∀a∈Adv,m∈M,e e E,则(adv,m)→e。

构件的端口与Aspect的通知之间的连接关系描述了构件和Aspect的静态组合,在静态组合关系里,构件和Aspect的连接主要由Apply原语来完成。

定义3设有构件C=(P,M,β)和Aspect A=(Adv,M,γ),那么构件和Aspect之间的静态组合关系描述为映射:

对于V a∈Adv,p∈P,如果Apply(p,a)=1表示Aspect与构件之间存在连接关系;Apply(p,a)=0表示Aspect与构件之间不存在静态的连接关系。当Apply(p,a)=1时,如果β(P)=-1,则γ(a)=A。,表示如果构件的端口为输出端口时,作用其上的为Aspect的源端通知;如果β(p)=+1,则γ(a)=Ak,表示当构件的端口为输入端口时,作用其上的为Aspect的目的端通知。

动态组合关系通过事件组合轨迹来描述。

定义4 E是一个构件或者Aspect的事件集合,对于∀e1∈E,e2∈E,为一个事件对,表示事件e1的发生先于事件e2的发生。如果E=,则称E为构件或者Aspect的事件轨迹。

事件轨迹描述了一个构件或Aspect上事件发生的先后次序。对于组合轨迹而言,事件轨迹只是组合轨迹的一部分,组合轨迹描述了构件和Aspect组合事件之间的先后次序。

定义5设n个构件和m个Aspect组成的系统,Ci=(Pi,Mi,βi)、Cj=(Pj,Mj,βj),pi∈Pi,pj∈Pj,mi∈Mi,mj∈Mj,(pi,mi)→ei,(pi,mj)→ej,在构件的两个端口pi和pj连接的情况下,可能存在Aspect Ak=(Advk,Mk,γk),ak∈Advk,(ak,m1)→ek1,(ak,m2)→ek2使得Ec={},称Ec为构件与Aspect的组合轨迹。

定义5中,ek1和ek2可以为空,当ek1和ek2可以为空时,表示构件之间没有经过Aspect的干预直接进行交互。组合轨迹的图示如图1所示。

2 构件和Aspect的组合框架及其支撑环境

2.1 组合框架

以组合关系的定义为基础,本文设计了一个构件和Aspect的组合框架。这个框架被分为三层:构件一Aspect层、接口和信息描述层以及连接层。组合框架采用UML进行了描述,由于目前UML中还没有对Aspect的描述符号,所以这里通过类的符号代替。如图2所示。

(1)构件—Aspect层

把构件和Aspect分别作为一个独立的实体,构件用来实现主要的功能属性,Aspect用来实现和构件相关的横切属性。

(2)接口和信息描述层

在框架当中,构件和Aspect作为一个单独的实体,它们的实现体本身与其接口(ComponentIF和AspectIF)和描述信息都是分离的。构件和Aspect实现了它们与外界交互的接口,这些接口可以分为输入接口和输出接口。此外,构件还要在其定义的输入接口和输出接口中标示出非功能接口。Aspect除了要定义输入接口和输出接口以外,还要定义输入接口规则和输出接口规则,这相当于在AOP里面的前置条件和后置条件的定义,输入接口规则规范了消息送入Aspect之前应进行的一些操作,输出接口规则定义了Aspect执行后应进行的一些操作。

构件和Aspect的描述信息都记载在各自的信息类ComponentInfo和AspectInfo中,CompositionInfo将由构件和Aspect的相关信息组成,为将来决定将构件的消息截获后调用哪个Aspect提供依据,这样构件实体本身并不知道要和那个Aspect交互,可以具有更好的复用性。CompositionInfo定义了系统组合的一系列角色,这些角色由相应的构件和Aspect来填充,同一角色可以由不同的构件或Aspect来实现。当向系统中加入新的Aspect和构件的时候,需要把构件和Aspect的相关信息记录在CompositionInfo类中,这样增强了框架的可扩展性。

(3)连接层

当构件的非功能接口发送一个消息到框架,框架的AspectM anager类接收到消息后,通过MsgInterceptor()把该消息截获下来,然后通过Aspect选择类(AspectChoose())调用CompositionInfo选择合适的Aspect,最后将消息交给Aspect处理。

不仅Aspect和构件的交互存在着次序约束关系,而且Aspect之间也存在次序约束关系,从Aspect出来的消息也可能被截获再交给其它Aspect处理。对于Aspect之间的次序组合关系,通过CompositionInfo记录Aspect到Aspect的交互信息。在连接层,AspectManager和CompositionInfo完成了构件和Aspect的组合。

2.2 支撑环境

在分布式环境中,引入消息队列管理器,消息队列管理器负责消息的发送和接收以及入队和出队操作。在消息队列技术的基础上引入了消息的截获机制,通过两者的协作建立构件和Aspect交互框架的支撑环境。

构件和Aspect之间通过消息进行交互,消息截获器建立在消息队列管理器之上,对消息队列进行监控,当消息被截获以后,首先注册一个回调函数(Callback),调用相关的Aspect进行处理,Aspect(例如:权限验证)处理完成后根据消息处理的结果,决定是继续发向目的构件,还是返回源构件。

3 示例

通过图书管理系统的例子演示了框架的实现(如图3所示),在构件—Aspect层,放置了一个图书借阅构件和两个Aspect:安全性Aspect和日志Aspect。在接口信息层,实现了构件和Aspect的所有接口,并标示I1为构件非功能接口,构件和Aspect通过这些接口提供或者请求服务,例如在图3中,图书借阅构件可以通过接口I2访问安全性Aspect,接口I2提供了安全性Aspect的服务和相关信息,所有访问这个接口的请求都转换成一个横切行为。接口之间的通信在连接层完成,Aspect的管理通过连接子(如:C1和C2)完成,它不仅可以实现构件与Aspect之间的连接,还可以实现Aspect之间的连接。

4 结论

本文在基于构件的软件开发和面向Aspect的软件开发两种开发方法的结合上开展工作,提出了一个构件和Aspect的组合框架,并建立了框架运行的支撑环境,支撑环境的建立为框架的应用提供了支持。该框架相对于使用容器技术而言,不再局限于要提前预置Aspect,从而使构件和Aspect能够动态地组合,框架本身的可扩展性更强。

下一步的工作是通过大型系统的实际应用继续对组合框架加以验证,除此之外,还要对支撑环境的性能作进一步分析。

参考文献

[1]Kiczales G,Lamping J,Mendhekar A,et al.Aspect-oriented program- ming[C].11th European Conference of Object-Oriented Program- ming,LNCS 1241,1997:220-242.

[2]Duclos F,Estublier J,Morat P.Describing and Using Non Functional Aspects in Component Based Applications[C].Proceedings of the 1st international conference on Aspect-Oriented software development En- schede,The Netherlands,ACM Press,2002:65-75.

[3]Lieberherr K,Lorenz D,Mezini M.Programming with aspectual compo- nents[R].Technical Report,NU-CSS-99-01,March 1999.

[4]Suvée D,Vanderperren W,Jonckers V.Towards a symbiosis between aspect-oriented and component-based software development[C].In Proceedings of the SCI 2003 international conference,Orlando,USA, 2003:442-447.

[5]曹东刚,梅宏.面向Aspect的程序设计——一种新的编程范型[J].计算机科学,2003,30(9):5-10,

[6]梅宏,曹东刚.ABC-S2C:一种面向贯穿特性的构件化软件关注点分离技术[J].计算机学报,2005,28(12):2036-2044.

[7]Lafferty D,Cahill V.Language-independent aspect-oriented program- ming[C].OOPLSA'03,October 26-30,2003,Anaheim,Califor- nia,USA.

服务组合框架 篇5

优秀的软件开发过程需要协作和沟通, 在开发过程中, 客户需要知道他们的程序员如何正确处理了事情, 而程序员需要知道客户究竟想的是什么, 测试人员也需要知道什么是正确的而什么又是错误。让这些小组能有效和精确地交流应该是团队创建伟大软件的一个目标。基于以上几点, FIT应运而生。

FIT (Framework for Integrated Test) 集成测试框架[1]是由Ward Cunningham等提出的一个用于增强交流和协作的工具。FIT创建了一个在客户和程序员之间的反馈循环。FIT让客户和测试人员可以使用诸如Microsoft Office之类的工具来给出程序应当如何表现的例子, 而无需成为直接编码的程序员。FIT自动针对实际的程序检测那些例子, 这样就在业务世界和软件工程世界之间建立了一个简单而且有效的桥梁。但是, FIT测试用例仍需手工填充, 如何高效地组织测试用例决定了测试的质量。

另一方面, 在软件测试工作中, 由于输出空间, 特别是输入空间的无限性, 使得无法对软件进行全面的测试。测试用例自动生成技术期望自动从大量的输入数据中挑选适量的具有代表性、典型性的数据, 生成较少的测试用例, 但又对软件进行较全面的测试。但是, 无论从生成测试用例的数量和质量上, 测试用例生成技术都有待进一步的改进。

本文针对目前FIT和自动生成测试用例中的一些缺点, 使用FIT框架对系统进行规约, 结合基于接口参数的测试用例自动生成算法而得到的测试用例表, 来实现真正的测试先行开发过程。该方法将实现从接口参数边界值的确定, 到以HMTL形式显示集成测试结果过程的半自动化。

1 FIT及组合算法概述

自从计算机诞生以来, 软件工程师就关心着两个主要问题:第一, 业务如何通过应用程序与其所需内容通信;第二, 工程师如何验证他们是否正在构建满足业务需要的正确软件。多年来, 为了解决这些关心的问题, 已探索了许多方法和框架, 但直到出现 FIT以后, 才找到了解决这些问题的简便而直观的方法。

FIT解析了HTML的标签, 获取测试用例并在运行后显示结果。FIT实例存储在表里。FIT通过查询HTML的

, 和

标记得到它们。FIT从文档的第一个表开始, 接着处理每个表, 每个表都有一个Fixture和它相关。Fixture类的作用相当于驱动程序, 确定如何根据待测系统来测试表中的示例数据集。每个客户创建的表需要一个Fixture, 多个表也可以共用一个Fixture。ColumnFixture是最简单的一种编程Fixture, 它适用于需要进行各种测试计算的环境, 如表1所示。

但是, 在FIT过程中, 尤其是在使用ColumnFixture时, 每一行对应的测试用例需要手工填充, 如何高效地组织测试用例决定了测试的质量。由于手工填充测试用例, 极有可能遗漏边界情况, 因此, 测试用例如何填充成了急待解决的问题。通过组合覆盖生成的测试用例刚好能解决此问题。

Mandl早在1985年就率先提出参数两两组合覆盖的概念, 并将此概念应用于Ada编译器的测试, 利用正交拉丁方来产生测试用例集[2]。此后, 国内外许多科学家对两两组合覆盖的生成算法和应用效果进行大量的研究[3,4,5,6]。

两两组合覆盖表的定义[6]如下:

设A是一个n×m矩阵, A= (aij) n×m, 其第j列表示第j个参数, 它的元素取自有穷符号集合Tj (j=1, 2, …, m) , 即aij∈Tj, i=1, 2, …, n。且tj=|Tj|表示集合Tj中符号元素个数或者第j个参数的取值个数为tj, 如果A的任两列第i列和第j列都满足:Ti的符号和Tj符号的全部组合都在第i列和第j列形成的二元有序对中等概率出现, 那么称A是正交表;如果只要求出现而不要求等概率出现, 那么称A是一个测试用例表, 其中n是测试用例的个数, 如果它是能保证上述条件成立的最小正整数, 那么A可以称为最小两两组合覆盖表。A的每一行就是一个测试用例。

两两组合覆盖表的构造问题是一个NP-C问题, 现有算法多均为近似算法, 算法的性能往往无法满足需求。而且, 对于生成完成的测试用例表, 还要进行一系列的转化, 才能真正地用于测试, 不能满足实际测试的要求。

2 集成测试用例自动生成的FIT

对于需要根据业务规则进行计算来得出结果的功能单元的测试, FIT使用了ColumnFixture进行测试。在这种处理的过程中, 需要指定测试的ColumnFixture类, 并指定该类的参数名和验证方法, 同时, 还需要手工填充测试用例。由于测试用例的选择对测试人员的要求较高, 如何用更少的测试用例来覆盖更多的被测代码成了一个主要的问题。

国内外研究表明, 实际的软件系统中, 各个外部接口参数不是孤立的, 经常出现几个参数之间存在相互作用的情况。其中, Kuhn和Reilly研究了组合测试的可能性[7], 发现大约70%的故障是由两个以下参数的相互作用引起的, 由此说明了两两组合测试的应用价值。

为解决测试用例效率问题, 我们采用确定各参数边界值后通过两两组合覆盖算法自动生成测试用例, 并且集成该方法至FIT中, 对原ColumnFixture计算表的结构进行修改, 避免测试用例的填充, 降低其构造复杂度。

2.1 FIT边界值识别

FIT中, ColumnFixture所识别的HTML的table表结构如表2所示。表中的第一行显示要测试的Fixture名称, ColumnFixture将第二行的各列值映射为Fixture中的变量和方法。当一个列头以括号结尾, Fixture调用一个方法, 而不是设置一个变量, Fixture检查从方法返回的值, 把其与表里的值进行比较, 然后根据情况着色, 绿色表示一致, 红色表示不一致。该表中, 每一行都为一个测试用例。行数决定了测试用例的数量。

针对表2中测试用例是逐行填充的缺点, 通过对上述表的结构进行改进, 得到结构如表3所示的测试用例表。表中第一行仍是待测Fixture类的完整路径。从第二行开始, 每一行的第一列为参数的名称, 其后各列中的值为该参数的值。参数的值通过等价类划分和边界值确定等方法获取。方法必须用“ () ”标记, 并且其后不跟参数。

对于如表3结构的测试用例表, 我们编程实现了BoundaryFixture来解析和运行此表。BoundaryFixture运行的结果将生成如表2结构的测试用例表, 其中, 各参数将以满足两两组合覆盖的形式出现。对于方法的预期值, 可以在此期间进行填充。

由于表3中并不是直接给出测试用例, 而是仅仅确定各个参数的边界值, 相比直接填充测试用例的表2而言, 这大大降低了填充表3的难度系数。同时, 通过表3所给出的边界值, 可以产生满足两两组合覆盖的测试用例组, 这组测试用例可以更高效地覆盖整个功能单元的测试。高效的测试用例生成算法在此起了关键的作用。

2.2 测试用例生成算法

测试用例生成算法由主体用例生成, 覆盖性检查, 追加用例生成和手工追加测试用例四个步骤组成。此生成算法结合组合设计的测试数据启发式生成方法, 充分考虑了生成结构的最优性。

(1) 主体用例生成

主体用例生成引用了聂长海和徐宝文在文献[6]中提到的主体用例生成算法。该主体用例生成算法被证明在特定情况下可以产生正交表性质的主体测试用例, 算法的性能和效率比较高。

(2) 覆盖性检查

由于通过步骤 (1) 生成的主体用例并不是满足两两组合覆盖, 所以需要进行覆盖性检查, 并识别出所有的遗漏项。

算法1 两两组合覆盖覆盖性检查算法。

算法输入:由主体用例生成算法产生的测试用例表table, 维数N。

算法输出:以遗漏项中参数id作为键值的所有遗漏项组成的哈希表omited。

算法步骤:

1) Initialize omitted; //初始化遗漏项结果集omited

2) for i=1 to N-1{ //以i作为遗漏对的第一个参数进行循环

3) for j=i+1 to N{ //以j作为遗漏对的第二个参数进行循环

4) 产生所有以i作为第1参数, 以j作为第2参数的组合项, 并存入pairs数组

5) for k=1 to table.size () { //对主体用例集中的组合项进行遍历

6) Remove (pairs, k, table, i, j) ;}//从pairs中移除第k组测试用例中对应的组合

7) if Empty (pairs) != false then{ //如果pairs非空

8) Add (omitted, pairs, i, j) ;}}} //以i和j作为键值把pairs存入omited

(3) 追加用例生成

对于识别出的遗漏项, 需要在主体测试用例的基础上进行追加用例, 以覆盖所有的遗漏项。

算法2 追加用例生成算法。

算法输入:由主体用例生成算法产生的测试用例表table, 通过覆盖性检查后得出的所有遗漏项omited, 维数N

算法输出:为使table满足两两组合覆盖而追加的测试用例表fillOmited

算法步骤:

1) Initialize fillOmited; //初始化追加测试用例表fillOmited

2) while (omitted.size () > 0) { //仍存在遗漏项

3) Initialize tc; //初始化待追加的测试用例

4) position=GetNextPosition (omited, tc) ;//根据启发性函数获得此次tc待填充的两个参数

5) while (position != null) { //tc还存在待填充的参数

6) RemovePair (position, tc) ; //从omited中移除因为添//加了tc中填充的参数而不再遗漏的遗漏项

7) position=GetNextPosition (omitted, tc) ;}//根据启发性函数再次获得tc待填充的两个参数

8) FillRest (tc) ; //随机填充tc中其余的参数

9) fillOmited.add (tc) ;} //把追加的测试用例tc添加至fillOmited

在算法2中, GetNextPosition () 函数为启发式函数, 每次根据omited中遗漏项最多的组确定tc下两个待填充的参数。该启发式函数并不确定, 有很多种实现方法, 并且此函数决定了生成测试用例的数量。

按上述算法, 此测试用例表分两个部分:由主体用例生成得到的table和由追加用例生成得到的fillOmited。两部分测试用例结合得到最终的测试用例表。

(4) 手工追加测试用例

在实际测试的过程中, 因为自动生成的测试用例是满足两两组合覆盖的极小测试用例组, 存在忽略与业务相关的特殊用例的情况。因此, 在完成上述各步后还需要手工追加业务相关的特殊测试用例, 来充实和完善测试用例表。

实际上, 可以去除步骤 (1) , 而直接根据步骤 (2) 和步骤 (3) 产生符合两两组合覆盖的测试用例表, 但实践证明这种方式产生的测试用例表规模比较大, 算法效率不高。通过步骤 (1) , 大大减少了测试用例表生成的规模, 降低了测试的成本。

3 应用实例分析

应用上述方法, 本节对“系统登录”这个具有普适性的模块进行了从边界值确定, 测试用例生成, 到FIT运行结果显示的实践。

“系统登录”模块有三个输入参数:用户名、密码、模式。“用户名”和“密码”为输入框, “模式”为单选框。根据需求规格说明书, 用户名是字符型字段, 其长度为[1, 20], meteor是一个合法用户;密码是字符型字段, 其长度为[1, 20], 000000是meteor用户的初时密码;模式的可选值为“标准”或“安全”。

在进行等价类划分和边界值分析后, 确定了各个参数, 然后通过运行BoundaryFixture得到了满足两两组合覆盖的测试用例, 在通过填充方法预期值和运行FIT后, 得到如图1所示的结果。在对不同参数及相当参数不同特征值数等情况进行了大量的测试后, 得出如表4所示的实验数据。当系统有4个参数, 每个参数有3个取值时, 生成算法生成9个测试用例, 而如果对这4个参数的各种情况进行全面覆盖测试时, 则需要81个测试用例。表中第5行表示一个系统有7个参数, 其中1个参数有17个取值, 3个参数有7个取值, 2个参数有5个取值, 1个参数有4个取值时, 要达到全面覆盖的测试用例要583100, 而通过我们的生成算法生成的满足两两组合覆盖的测试用例数仅为134个。从表4中的几个例子可以看出, 此种方法生成的测试用例数远远小于全面覆盖测试要求的测试用例数。

实验证明:通过两两组合覆盖算法生成的测试用例在尽量不降低测试效率的情况下大大减少了测试用例的数量, 而FIT的集成让软件测试的自动化程度大大提高, 并可以把测试结果当作“可执行的需求说明”[8]来指导系统的下一步开发。通过把FIT和测试用例自动生成算法结合, 可以大大提高软件的测试效率, 降低软件的测试成本。

4 结束语

本文涉及了当前软件测试中的两大重要研究领域:敏捷测试方法和测试用例的选择与生成技术。根据“敏捷”的集成测试框架FIT需要人工构造表格形式的数据作为输入的前提, 本文进一步进行了深入的研究:如何自动生成FIT需要的表格数据?据此, 本文对FIT进行了扩展, 为FIT嵌入测试用例表格自动生成功能。其中测试用例集的生成将依据各参数两两覆盖的原则, 以求达到对测试域的最大限度覆盖。

参考文献

[1]Rick Mugridge, Ward Cunningham.Fit for Developing Software:Frame-work for Integrated Tests.Prentice Hall PTR, 2005.

[2]Mandl R.Orthigonal latin squares:An application of experimental de-sign to compiler testing.Communications of the ACM, 1985, 28 (10) :1054-1058.

[3]Cohen D M, Dalal S R, Fredman ML, et al.The AETG system:An ap-proach to testing based on combinatorial design.IEEE Transactions onSoftware Engineering, 1997, 23 (7) :437-444.

[4]Tai K C, Lei Y.A test generation strategy for pairwise testing.IEEETransactions on Software Engineering, 2002, 28 (1) :109-111.

[5]聂长海, 徐宝文.一种最小测试用例集生成方法[J].计算机学报, 2003, 12:1690-1695.

[6]聂长海, 徐宝文.基于接口参数的黑箱测试用例自动生成算法[J].计算机学报, 2004, 3:382-388.

[7]Kuhn D R, Reilly MJ.An investigation of the applicability of design ofexperiments to software testing/Proceeding of the 27thNASA/IEEESoftware Engineering Workshop.NASA Goddard Space Flight Center, 2002:91-95.

服务组合框架 篇6

传统的结构设计方法中[1],将节点假定为铰接或刚接,节点特性直接融入结构分析中,节点设计根据结构分析对节点所作的假定(铰接还是刚接)作为设计的最后一步来完成。虽然所有框架梁柱节点实际上都是半刚性的,不存在理论上的铰接或刚接,但以往的规范总是采用刚接或铰接的假定进行结构设计。实际上对于低层建筑不需设置水平支撑而框架本身就能提供足够的水平抗力以抵抗风荷载的作用,半刚性节点所具有的转动刚度使之能对结构中的弯矩分布进行优化,从而优化重力荷载及弯矩分布,采用半刚性节点可使钢框架结构更有效、更经济。

1 半刚性连接组合梁框架设计步骤

结合我国GB 50017-2003规范的内容,给出如下较为简单实用的半刚性连接组合梁钢框架设计建议。其设计步骤如下:

1)根据建筑布置,按竖向荷载组合考虑梁的承载能力初步设计节点,确定框架柱和钢梁及组合梁的尺寸;2)根据初步确定的组合梁尺寸,求得梁的等效刚度,按王静峰[4]建议的方法进行竖向荷载作用下框架的正常使用极限状态及承载能力状态的验算。如不能满足要求,重新调整构件尺寸及相应的节点刚度;3)框架侧移验算;4)框架整体结构极限水平承载力验算;5)根据GB 50017-2003钢结构设计规范[5]进行柱的极限承载力验算;6)节点设计:根据所确定的梁、柱尺寸及相应的节点刚度和承载力,进行半刚性连接组合节点设计。

2 设计示例

某3层两跨框架,跨度6 m,层高3 m,荷载标准值为:恒荷载、活荷载分别为:30 kN/m及12 kN/m;柱顶恒载3层为15 kN,其余为30 kN;风荷载、地震荷载1层为9 kN及15 kN,2层为18 kN及15 kN,3层为24 kN及10 kN。钢材采用Q345B,螺栓10.9级M22,钢—混凝土组合楼盖,混凝土强度等级为C30,ϕ19圆柱头焊钉作连接件,采用平端板半刚性连接组合梁框架,试设计该框架。

1)初步确定框架梁采用HN300×150×6×10,柱采用HW250×250×9×14,柱腹板设有加劲肋,配筋率0.8%,压型钢板波高76 mm,波距344 mm,现浇75 mm厚混凝土,如图1所示,有关参数如表1所示。

2)根据初步确定的组合梁尺寸,得Ieq=2.428×108 mm4,对于半刚性连接组合梁框架而言,取r=0.6~0.8比较经济合理,在此取r=0.7,得ieq=4.49×103 kN·m[6]。

采用底部剪力法对各楼层进行计算见表2。

Geq=0.85j=13Gj=0.85×(477+522+522)=1 293 kN。

FEK=Geqα1=1 293×0.04=51.7 kN。

根据表1,表2的有关参数,计算等效刚接框架的侧移,见表3。

在风荷载及地震荷载作用下均满足规范要求(见表3)。根据规范要求,判断是否需考虑二阶效应,其计算结果见表4。

由计算结果可知本例不用考虑二阶效应。

3)框架整体结构极限承载力验算。

节点有关参数取值如下[6]:

M-p,conn=140 kN·m,M+p,conn=139 kN·m。

计算半刚性连接组合梁框架的内功为:

Wint=3×(M-p,conn(ext)+M+p,conn(ext))+3×(M+p,conn(int)+M-p,conn(int))+3Mp,col=2 559。

外力所作功为:Wext=24×9+18×6+9×3=351<Wint;

半刚性连接组合梁框架整体极限承载力满足要求。

4)组合梁正弯矩承载能力验算。

M+beam=178.6 kN·m<399 kN·m,满足要求。

5)柱的极限承载力及稳定验算。

边柱总的轴向力为:N=604 kN;中柱总的轴向力为:N=1 040 kN。

强度复核(中柱):ΝAn+ΜxγxWnx=1040×1039218+140×1061.05×864×103=266MPa<f=310 MPa,满足要求;

同理可得边柱强度亦能满足要求。

稳定复核(中柱):φx=0.955,φy=0.890,NEX=21 709 kN;

平面内稳定:ΝφxA+βmxΜxγxW1x(1-0.8Ν/ΝEX)=279ΜΡaf=310MPa;

弯矩作用平面外稳定:ΝφyA+ηβtxΜxφbW1x=296ΜΡaf=310MPa。

同理,边柱亦能满足要求。

6)节点设计:根据所确定的梁、柱尺寸及相应的节点刚度和承载力,半刚性组合梁、柱连接节点平端板采用200×14×330,节点构造见图2。

进行半刚性连接组合梁框架组合节点有关参数计算,所选用的节点满足刚度、弯矩承载能力及转动能力的要求[6]。

3 经济评价

为了分析半刚性连接组合梁框架良好的经济性,将上例分别按不同结构形式进行设计,在满足相同要求的条件下,对其各自用钢量进行比较见表5。

4 结语

通过分析可以得出以下结论:1)对于半刚性连接组合梁框架可以采用简化设计方法进行设计;2)在水平荷载作用,满足相同要求的条件下,半刚性连接组合梁框架比其他形式钢结构框架具有较明显的经济优势,与常规刚接钢框架结构相比可节约钢材48%,具有良好的经济性。

摘要:在总结国内外研究的基础上,结合我国有关刚接框架的设计方法及钢结构设计规范,给出了半刚性连接组合梁框架在水平荷载作用下的简化设计流程及方法,并通过设计算例说明本文推荐的简化设计方法简便易行,同时通过对不同类型框架的经济性比较,说明半刚性连接组合梁框架结构具有较好的经济性及应用前景。

关键词:半刚性连接,组合梁框架,水平荷载,简化设计

参考文献

[1]J.M.Cabrero,E.Bayo.Development of practical design meth-ods for steel structures with semi-rigid connections[J].Engi-neering Structures,2005(27):1125-1137.

[2]Comite European de Normalisation(CEN).Eurocode No.3:de-sign of steel structures,part 1.8,Design of Joints,prEN,1993-1-8.

[3]Steenhuis M,Weynand K,Gresnigt AM.Strategies for econom-ic design of unbraced steel frames[J].Journal of ConstructionalSteel Research,1998,46(1-3):88-89.

[4]王静峰.竖向荷载作用下半刚性连接组合框架的实用设计方法[D].上海:同济大学博士学位论文,2005.

[5]GB 50017-2003,钢结构设计规范[S].

服务组合框架 篇7

1 模型表达式

基于构件损伤指标的加权组合模型:在构件层级的局部损伤指标的基础上, 按照各个构件的破坏对结构整体影响程度的大小, 对构件损伤指标进行加权组合, 从而得到结构整体的损伤指标。

式中, D是整体损伤指标;Dm为第m个构件的损伤指标;λm为第m个构件的加权系数;n为构件总量。

2 加权系数的确定

上述模型的主要系数为加权系数m, 结合国内外的研究成果, 文献[2, 3]总结了常见的几种加权系数。常用的加权系数如下:

3 算例分析

某5层钢筋混凝土框架结构边柱跨度6 m, 中跨2.4 m, 底层高3.9 m, 其余层高3.3 m, 设防烈度为8度, Ⅱ类场地土。采用Open Sees作为研究平台, 整体结构采用中心线模型。梁和柱采用基于位移的非线性纤维梁柱单元模拟。输入El Centro地面运动记录, 持时为128 s, 峰值加速度调整为0.2 g以计算中震下结构的反应。基于Kunnath等提出的改进的Park-Ang损伤指标[1,4]得到中震作用下结构构件的局部损伤指标见图1。

在上述构件损伤指标计算的基础上, 结合该文介绍的加权组合方式进行整体损伤指标的计算, 不同地震作用下基于不同损伤指标的楼层加权系数见图2。由图2可知, 各加权系数沿层高的分布较为近似。基于上述分析在中震作用下各个损伤指标按照不同的组合方式所得到的整体损伤指标见表1。

按照Park等给出的损伤指标在不同状态下的取值范围, 根据该文计算的DMPA的结果, 可知中震时结构处于轻微破坏的状态, 符合理论预期。

4 结论与展望

该文介绍了加权组合法在结构整体损伤指标研究中的应用, 然后结合算例分析了Park、杜修力、Chung、欧进萍等不同加权方法所计算的整体损伤指标。经分析可知, 该文可有效地对结构整体损伤指标进行计算, 针对后续研究工作可提出以下建议。

(1) 研究不同局部损伤模型对加权结果的敏感性。

(2) 对比加权组合法与其他整体损伤模型计算结果的差异, 并进行合理性分析。

参考文献

[1]万正东.RC框架结构基于概率损伤模型的地震易损性与风险分析[D].哈尔滨工业大学, 2009:45-47.

[2]刘光明.基于新规范的八、九设防烈度去RC框架地震反应特征及损伤分析[D].重庆大学, 2004.

[3]范立础, 卓卫东.桥梁延性抗震设计[M].人民交通出版社, 2001.

服务组合框架 篇8

1 关键技术介绍

1.1 Struts2

Struts最早于2000年5月作为Jakarta项目的组成部分, Struts1框架是在JSP Model2基础上实现的MVC (Model-ViewController) 框架, 它是世界上第一个发布的MVC框架。由于Struts1与JSP和Servlet的紧耦合性导致它存在很多缺陷, 也制约了其发展, 从而呼唤Struts2的出现。

Struts2与Struts1在本质上有很大的区别, 它没有使用Struts1的设计核心, 而是基于Web Work进行架构设计, 它是第二代基于MVC模型的Web应用框架。Struts2不仅拥有功能强大的表达式语言和丰富的标签库, 还可以通过拦截器对用户请求进行处理, 从而对业务逻辑控制器和Servlet进行分离, 降低程序的耦合性。

1.2 Spring

Spring是为了解决Web应用程序开发复杂性而创建的, 极大地简化了企业级系统的开发过程。它的核心技术包括两个方面, 一是反转控制 (Inverser of Control, Io C) , 另一个是面向切面编程 (Aspect-Oriented Programming, AOP) 。Spring是一个轻量级分层架构框架, 由7个模块组成, 分别是:Spring Core (核心容器) 、Spring Context (应用上下文模块) 、Spring AOP模块、Spring DAO (JDBC抽象和DAO支持模块) 、Spring ORM (对象/关系映射集成模块) 、Spring Web模块、Spring Web MVC模块, 这些模块可以单独使用, 也可以与其他一个或多个模块组合使用。

Spring中包含了非常丰富的内容, 包括表示层和数据层, 它提供了许多原来只有EJB才能提供的功能 (如声明式的事务管理等) , 但Spring又无需运行在EJB容器中。Spring本身就是一个容器, 它可以对系统对象的生命周期进行配置和管理。在SSH2组合框架中主要将Spring应用于中间的业务层, 使用接口松散耦合的Java Beans实现的对象模型可以通过XML配置文件进行组合。

1.3 Hibernate

Hibernate是一个开源的对象关系映射 (Object-Relation Mapping, ORM) 框架, 是JAVA类与数据库表进行映射的工具, 映射后持久化类的每个实例对应数据库表中的一行数据。Hibernate对JDBC进行了轻量级封装, 以前使用JDBC将数据持久化到数据库的过程是:先得到Connection, 再得到Statement, 然后调用Statement的execute方法执行sql语句。这样写出的程序类似面向过程, 而非面向对象, 并且程序中嵌套了很多sql脚本, 使得程序员将大量精力放在如何编写SQL语句上。现在使用Hibernate框架通过面向对象的方式对数据进行持久化, 可以让Hibernate帮我们生成相应的SQL语句, 程序员只需要操作对象就可以对数据库表进行增删改查操作。

2 SSH2组合框架

在进行软件开发时使用成熟的框架就相当于让别人帮你完成了一些基础的工作, 使用Struts2、Spring和Hibernate这3种优秀的轻量级框架组成的SSH2组合框架可以充分发挥各个框架在Web应用不同层面的作用。

2.1 SSH2组合框架详细架构

SSH2组合框架分为三层:分别是持久层、业务层和表现层。每层具有明确的责任, 数据层使用Hibernate对数据库进行增删改查操作, 业务层使用Spring框架实现松耦合, 表现层使用Struts2负责页面的请求和转发等。SSH2组合框架示意图如图1所示。

持久层:通过Hibernate的ORM将关系型数据库的数据映射成对象, 从而实现以面向对象方式操作数据库。具体过程是, 首先分析模块所要涉及的表, 确定表之间的关系后进行数据库设计, 然后用Hibernate提供的工具将数据表转化为POJO对象, 再用面向对象的方式进一步操作这些对象以达到对数据的持久化控制。

业务层:位于三层架构的中间层, 主要由Spring负责业务层处理。利用Spring的IOC容器实现功能模块的松耦合相连, 利用Spring的AOP将业务逻辑从系统服务 (如监控和事务处理) 中分离出来, 从而实现内聚开发。

表现层:表现层采用Struts2框架对用户请求进行响应。Struts2提供了丰富的Taglib标记库, 极大地提高了开发效率, 并且具有页面导航优势, 通过一个配置文件struts.xml就可以把握整个系统各部分之间的关系, 便于后期的维护和管理。

2.2 SSH2框架的优点

基于SSH2的Web应用架构整合了Struts2、Spring和Hibernate这3个轻量级的开源框架, 具有如下优点:

1) 属于开源架构, 开发者可以更深入了解其内部实现机制和原理。

2) 符合典型的三层架构模式, 表现层、业务层和数据层架构层次分明, 降低了层与层之间的耦合性。

3) 采用MVC模式对业务逻辑层、数据层和表现层进行分离, 所有业务逻辑都在Service中处理, 有利于系统的开发和维护。

4) SSH已经把底层实现封装好了, 软件开发者不仅可以在此基础上实现快速, 而且可以更专注于业务逻辑的实现。

5) 配置灵活, 支持国际化, 并且具有很高的重用性。

6) 扩展性强, 通过配置文件的形式实现扩展。

3 采用SSH2组合框架构建Web应用程序

使用SSH2组合框架进行程序开发, 需要开发人员在IDE (例如My Eclipse) 环境中正确导入并配置好Struts、Spring和Hibernate。搭建SSH2架构的Web应用环境, 通常有两种方式, 一种方式是采用自底向上的方式搭建, 即先导入Hibernate、再添加Spring支持, 然后集成Struts2。另一种方式是采用自上而下的方式搭建, 即先加载Struts2, 然后添加Spring支持, 再集成Hibernate。下面我们着重介绍采用自上而下的方式搭建SSH2开发架构的过程。

3.1 新建工程, 并创建数据库连接

开始一个新的项目, 通常需要先新建工程, 另外大多数Web项目都需要用到数据库, 故而新建工程后要创建数据库连接。首先在My Eclipse开发环境中新建Web Project工程, 然后添加数据连接。以创建oracle数据连接为例, 过程如下:

1) 点击图标, 选择“My Eclipse Database Explorer”视图, My Eclipse开发环境左侧窗口变为DB Browser;

2) 在左侧的DB Browser中, 点击鼠标右键, 选择“New”, 弹出如图2所示菜单;

3) 在图2中, 填写数据库相关信息并添加驱动类库ojdbc14.jar;

4) 点击图2中的“Test Driver”, 提示数据库连接成功即可。

3.2 添加Struts2支持

1) 添加Struts2的jar包

首先在新建的工程中添加Struts2的jar包struts2-core-2.1.6.jar

2) 创建struts.xml文件

在工程的src目录下创建struts.xml文件, 该文件是Struts2的核心配置文件, 用于管理和配置Action拦截器和逻辑视图映射等, 在程序运行时该文件会被Struts2框架自动加载。

3) 添加核心过滤器

在工程的web.xml文件, 添加Struts2的核心过滤器FilterDispatcher, 代码如下:

3.3 添加Spring支持

1) 通过IDE环境添加Spring的jar包

在My Eclipse视图下, 点击IDE环境左侧的工程名, 然后选择”My Eclipse”→”Add Spring Capabilities…”, 为新建的工程添加Spring支持, 如图3所示, 主要添加Spring 2.5 AOP Librabries、Spring 2.5 Core Librabries、Spring 2.5 Persistence Core Librabries、Spring 2.5 Persistence JDBC Librabries、Spring 2.5 web Librabries这5个包。

点击图3中的“Next”按钮, 打开图4所示窗口添加Spring bean的配置文件application Context.xml, 该文件必须放置到Web Root/WEB-INF目录下, 以便于通过web.xml进行加载。

2) 配置web.xml文件, 添加Spring监听器

在web.xml文件, 添加Spring监听器的代码如下:

3.4 添加Hibernate支持

1) 通过IDE环境添加Hibernate的jar包

在My Eclipse视图下, 点击IDE环境左侧的工程名, 然后选择“My Eclipse”→”Add Hibernate Capabilities…”, 为新建的工程添加Hibernate支持, 如图5所示。

2) 配置Hibernate

点击图5中“Next”按钮, 进入图6所示的“Hibernate Configuration”页面, 对Hibernate进行初步配置。选中“Spring configuration file (application Context.xml) ”单选框, 意味着我们将会使用Spring中的application Context.xml文件对Hibernate Bean进行管理。

点击图6中的“Next”按钮, 对Hibernate进行进一步配置, 如图7所示, 选中“Exiting Spring Contfiguration file”单选框, 文本框中输入“Session Factory”。

1) 添加数据源

点击图7中的“Next”按钮, 弹出图8所示的添加数据源窗口, 指定一个新的Spring数据连接。具体配置如图8所示, DB Driver处选择我们前面配置好的数据源oracledriver即可。

点击图8中的“Next”按钮, 在弹出的图9窗口中取消勾选”Creattee SSeessssiioonn FFaaccttoorryy ccllaassss”选项, , 点击”FFiinniisshh”按钮即完成HHii--bbeerrnnaattee添加。

这时, 我们的工程完整的添加了Struts、Spring和Hibernate支持, 开发环境搭建完毕, 就可以进一步编写业务需求的实现代码了。

4 结束语

在进行JAVA Web工程开发时, Web应用框架的选择非常重要。本文在深入研究和细致分析开源框架Struts2、Spring和Hibernate的基础上, 根据Web应用的分层原则, 提出采用SSH2组合框架自上而下构建Web应用程序的方式。使用这种优秀的解耦架构不仅可以提高开发效率, 缩短开发周期, 节约开发成本, 而且对后期不断的需求变更能够更好地适应, 在多个项目实施过程中, 该组合框架也表现出了良好的性能。

摘要:该文分析了JAVA开源架构Struts2、Spring和Hibernate各自的特点, 提出了将这三种架构进行整合的SSH2组合框架, 介绍了该组合框架的详细架构和框架优点, 并详细描述了采用SSH2组合框架构建JAVA Web应用程序的过程。

关键词:Struts,Spring,Hibernate,框架,SSH

参考文献

[1]Oh snap![EB/OL].http://hibernate.org/hibesdocs/reference/zh-cnlhtml.

[2]孙鑫.Struts2深入详解[M].北京:电子工业出版社, 2009.

[3]王福强.Spring揭秘[M].北京:人民邮电出版社, 2009.

[4]孙卫琴.精通Hibernate:Java对象持久化技术详解[M].2版.北京:电子工业出版社, 2010.

上一篇:川芎/治疗应用下一篇:权力性质