(计算机科学与技术专业论文)面向方面编程在软件可管理性上的研究与实现.pdf_第1页
(计算机科学与技术专业论文)面向方面编程在软件可管理性上的研究与实现.pdf_第2页
(计算机科学与技术专业论文)面向方面编程在软件可管理性上的研究与实现.pdf_第3页
(计算机科学与技术专业论文)面向方面编程在软件可管理性上的研究与实现.pdf_第4页
(计算机科学与技术专业论文)面向方面编程在软件可管理性上的研究与实现.pdf_第5页
已阅读5页,还剩63页未读 继续免费阅读

(计算机科学与技术专业论文)面向方面编程在软件可管理性上的研究与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国防科学技术大学研究生院工学硕士学位论文 摘要 随着分布式系统规模和复杂度的提高,维护系统运行的难度和成本不断增加, 软件运行的可管理性已成为影响应用实施的突出问题,如何在开发阶段加入管理 和维护代码已被开发人员所普遍关注。由于传统的软件开发方法没有提供运行管 理关注点和业务逻辑关注点的分离机制,两者的实现代码相互纠结,严重影响了 软件的模块性与可扩展性。因此,能否有效地将软件可管理性从业务逻辑中分离, 对增强软件运行管理能力,改善软件开发质量,提高软件开发效率具有重要的理 论意义和实用价值。 面向方面( a s p e c t - o r i e n t c d ) 作为一种新兴的软件开发方法,能够提供不同关 注点的分离机制,对实现软件可管理性具有重要的借鉴意义。本文将关注点分离 的思想应用于软件可管理性的研究中,提出了面向方面的软件管理模型,该模型 在一定程度上解决了软件运行管理关注点和业务逻辑关注点的纠结问题。在此基 础上,本文实现了在应用系统中自动添加管理功能的软件管理能力注入工具。该 工具已在某大规模高可用信息传输系统中得到实际应用。本文研究工作可概述为 如下几个方面: 1 分析了面向方面编程( a s p e c t - o r i e n t e dp r o g r a m m i n g , a o p ) 的基本原理, 研究和比较了几种通过a o p 技术实现软件可管理性的系统,。以及它们存 在的不足。 2 提出了面向方面的软件管理模型s m m a 。该模型由管理单元和受管对象 组成,通过引入a o p 维度使管理单元与受管对象分离。s m m a 能够通过 对象变速机制提供软件运行的控制能力,并以此为基础通过反射机制为软 件提供自主管理能力。 3 基于模型s m m a ,本文设计并实现了软件管理能力注入工具o t m p 。 g t m p 可根据用户需求为目标系统自动生成管理代码,并在不改变源程序 的情况下将其织入系统内部,为原本不具备管理能力的系统提供运行行为 控制、运行状态监视、运行轨迹记录和一定的自主管理能力 4 本文将软件管理能力注入工具实际应用到一个大规模高可用信息传输系 统中,使用结果表明本工具在系统的运行管理中发挥了重要作用,取得了 良好效果。 关键词:面向方面编程,软件可管理性,自主管理,a s p e c t f f h - 国防科学技术大学研究生院工学硕士学位论文 a b s t r a c t a l o n gw i t ht h er a p i dd e v e l o p m e n to ft h en e t w o r kt e c h n i q u e ,t h es c a l ea n d c o m p l i c a t i o no fd i s t r i b u t e ds y s t e mi n c r e a s eg r a d u a l l y t h ec o m p l e x i t ya n dt h ec o s to f m a i n t a i n i n gt h ed i s t r i b u t e ds y s t e mr i s ec o n t i n u o u s l y s o f t w a r er a n t i m em a n a g e m e n ti s c o n s i d e r e da sac h a l l e n g ea n di sw i d e l yc o n c e r n e da tt h ed e v e l o p i n gs t a g e s i n c et h e t r a d i t i o n a ls o f t w a r ed e v e l o p m e n tm e t h o dd o e s n tp r o v i d et h em e c h a n i s mt h a t s e p a r a t i n gt h ec r o s s c u t t i n gc o n c c ma n db u s i n e s sc o n c e r n , t h ei m p l e m e n t a t i o nc o d e so f a l lt h ec o n c e l - n st a n 9 1 c ds e r i o u s l y t h e r e f o r e ,h o wt os e p a r a t ed i f f e r e n tc o n c e r n sh a s i m p o r t a n tt h e o r ym e a n i n ga n dp r a c t i c a lv a l u e a s p e c t - o r i e n t e dm g r a m m m g ( a o p ) c a nm a k es o f t w a r em o r em o d u l a ra n d e a s i e rt oe x p a n d , b yt h ew a yo fs e p a r a t i n gt h ec r o s s c u t t i n gc o n c e r na n dt h eb u s i n e s s c o n c a t l lo fs o f t w a r e ,i nt h i sp a p e r , w ea p p t ya o pi nl 五cr e s e a r c ho ft h es o f t w a r e r u n t i m em a n a g e m e n t , a n dt h e nw ep r o p o s eam o d e lo fs o f t w a r em a n a g e m e n t b a s eo n t h i sm o d e l w ei m p l e m e n tat o o lo fs o f t w a r em a n a g e m e n tw h i c hc a ni n f u s ei n t ot h e s y s t e ma u t o m a t i c a l l y t h i st o o lh a sa k e a d yb e e nu s e di nal a r g e - s c a l ea n dh i g h r e l i a b i l i t yi n f o r m a t i o nt r a n s m i f i o ns y s t e m t h ec o n t e n to f t h i sp a p e r c a nb eg e n e r a l i z e d a sf o l l o w s : li nt h i sp a p e rw es t u d i e da n da n a l r z e dt h et h e o r yo fa s p e c t - o r i e n t e d p r o g r a m m i n g , a l o n g w i t ht h es h o r t a g e so f t h er e l a t i o nw o r k s 2 w ep r o p o s eam o d e lo fs o t h v a r em a n a g e m e n tn a m e ds m m a 1 1 1 i sm o d e l a c q u i r e st h ea b i l i t yo f t h r e a dc o n l x o la n da u t o n o m i cm a n a g e m e n tb yt h es p e e dc o n t r o l m e c h a n i s ma n dt h r e a dr e f l e c t i o nm e c h a u l s m 。 3 b a s e do ns m m a , w ei m p l e m e n tt h ei n f u s i o nt o o lo f t h es o r w a r cm a n a g e m e n t n a m e dg t m p t h i si n f u s i o nt o o lc a na u t o m a t i c a l l yg e n e r a t et h em a n a g e m e n tc o d e , a n di n f u s ei ti n t ot h es y s t e mw i t h o u tc h a n g i n gt h e $ o l l l c ec o d e b yt h i st o o l , t h e a d m i n i s t r a t o r 锄c o n t r o lt h eb e h a v i o ro ft h es y s t e m , m o n i t o rt h ea p p e a r a n c 七o ft h e s o t h v a r e , a n dr e c o r dt h em n n i n gt r a c ka n d o n 4 w eh a v ea p p l i e dg t m pt oal a r g e s c a l ea n dh i g hr e l i a b i l i t yi n f o r m a t i o n w a n s m i t i o ns y s t e m , a n do b t a i ng o o dr e s u l t s k e y w o r d s :a s p e c t - o r i e n t e dp r o g r a m m i n g , s o f t w a r em a n a g e m e n t , s y s t e m m o n i t o r , a u t o m a t i cm a n a g e m e n t , a s p e c t c + + 缩略语 a p p l i c a t i o np r o g r a m m i n gi n t e f f a r 七 a s p e c t - o r i e n t e d a s p e c t - o r i e n t e dp r o g r a m m i n g c o m m o no b j e c tr e q u e s tb r o k e ra r c h i t e c t u r e f r a m e w o r kf o r a s p e c tc o m p o s i t i o nf o ra ne v e n tc h a n n e l i n t e g r a t i o nd e v e l o pe n v i r o n m e n t i n t e r f a c cd e f i n i t i o nl a n g u a g e g e n e r a lt h r e a dm a n a g e m e n tp l a t f o r m o b j e c t - o r i e n t e d o b j e c t - o r i e n t e dp r o g r a m m i n g o b j e c tc o d ei n s e r t i o n q u a l i t yo fs e r v i c e s o f t w a r em a n a g e m e n tm o d e lb a s e do n a 0 m i c r o s o rv i s u a lc + + e x t e n s i b l em a r k u pl a n g u a g e i v 矧舳御一一眦吼一唧沁吣一w舭 国防科学技术大学研究生院工学硕士学位论文 图目录 图1 1 基于o o p 的软件管理代码散布图2 图1 2 唧的内存监视( 左) 和c p u 监视( 右) 图4 图1 3 双r 疆y p l u s 的路径分析图4 图1 4 软件管理代码及其开发时间的百分比图5 图2 1 横切关注点的识剐9 图2 2 不同关注点的分离实现9 图2 3 不同关注点实现的合并1 0 图3 1 传统的软件管理模型1 9 图3 2 面向方面软件管理模型s m m a 2 0 图3 3 线程变速器的工作原理2 l 图3 4 执行点状态迁移2 z 图3 5 一般的反射模型2 3 图3 6 线程反射模型2 3 图3 7 线程自管理模型2 4 图3 8 线程协作模型2 4 图4 1 软件管理能力注入工具g t m p 体系结构图2 8 图4 2 管理单元实现模块的构成2 9 图4 3 管理单元生成部件的构成3 ( 图4 4 管理单元生成部件各内部模块的交互关系3 ( 图4 5 管理仪表的模块构成3 】 图4 6 管理仪表的设计3 : 图4 。7 注入工具各模块间的交互关系3 : 图4 8 线程变速器的构成3 : 图4 9 线程反射引擎的构成3 , 图4 1 0 线程运行的特点3 图4 1 l 基于a o p 技术的空闯管理3 图5 1 线程信息存储模块的构成3 图5 2 线程信息存储模块的实现4 图5 3 线程信息访闯控制模块的构成4 国防科学技术大学研究生院工学硕士学位论文 图5 4 线程变速器的实现4 7 图6 1 基本管理仪表的工作快照4 9 图6 2 扩展管理仪表的工作快照5 1 图6 。3 扩展管理仪表的历史状态显示5 l 图6 4 系统自主调节示意图5 z 图6 5 系统性能对比测试5 3 国防科学技术大学研究生院工学硕士学位论文 表目录 表2 1 名称切入点示例1 1 表2 2 代码切入点示例1 l 表2 3 通知a d v i c e 示例1 2 表2 4a s p e c t 示例1 2 表2 5 运行时信息获取函数1 3 表2 6 运行时信息获取函数示例1 3 表3 1 传统软件管理模型与面相方面软件管理模型的对比2 1 表4 1 注入工具的管理功能2 7 表5 1 管理信息对应的数据结构3 7 表5 2 线程固有信息访问a p i 4 l 表5 3 线程控制信息访问a p i 4 1 表5 4 日志控制a p i 4 1 表5 5 线程基本业务信息访问a p i 4 2 表5 6 线程自定义描述信息访问a p i 4 2 表5 7 信息访闯控制中c o r b a 接口的数据类型4 2 表5 8 信息访问控制中c o r b a 接口的i d l 定义4 3 表5 9 基于a o p 的空间管理实现方法4 4 表5 1 0 基于a o p 的信息获取更新实现方法4 5 表5 。l l 基于a t o p 技术的日志实现方法4 6 表5 1 2 基于a o p 技术的线程变速器实现方法4 7 表6 1 线程反射引擎的实现驳 独创性声明 本人声明所呈交的学位论文是我本人在导师指导下进行的研究工作及取得的研 究成果尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已 经发表和撰写过的研究成果,也不包含为获得国防科学技术大学或其它教育机构的学 位或证书而使用过的材料与我一同工作的同志对本研究所做的任何贡献均已在论文 中作了明确的说明并表示谢意 学位论文题目:亘自友亘缉壁查筮往豆篮垄性土曲盈究盏塞盈 学位论文作者签名:叠蜷日期:功。6 年,月1 6 日 学位论文版权使用授权书 本入完全了解国防科学技术大学有关保留,使用学位论文的规定本人授权国 防科学技术大学可以保留并向国家有关部门或机构送交论文的复印件和电子文档,允 许论文被查阅和借阅;可以将学位论文的全部或部分内容编入有关数据库进行检索, 可以采用影印、缩印或扫描等复制手段保存,汇编学位论文 ( 保密学位论文在解密后适用本授权书) 学位论文题目:亟囱左亘盆焦垄塑佳互篁堡性土煎盈盔复塞理 学位论文作者签名:垒匿缝日期:耐年1 月日 作者指导教师签名二耋选 日期:p 年1 1 月f 占日 国防科学技术大学研究生院工学硕士学位论文 。 第一章绪论 1 1 问题的提出 1 1 1 软件可管理性面临的挑战 2 0 世纪8 0 年代以来,随着网络技术和i n t e r a c t 的迅猛发展,软件运行从封闭、 静态的主机燥面逐步走向开放、多变的分布环境【l 】。应用规模急剧增长的同时, 软件的复杂度也不断提升,表现出开放性、动态性、不可预测性、潜在不安全性 等诸多特性。 为适应软件运行环境和运行模式的变革,提高软件在运行阶段的可管理性成 为软件开发阶段需要关注的问题。相比于后期软件运行管理的资金投入,软件开 发的成本只能算是冰山一角。b a n k e r 等人在1 9 9 3 年得出的统计数据表明:软件 维护的代价已经占到整个软件生命周期总代价的5 0 8 0 嘲。g a r t n e r 对美国公 司的调查显示:软件运营管理在整个软件生命周期总成本的比重,在2 0 世纪7 0 年代为4 0 ,8 0 年代早期为5 5 ,8 0 年代后期达7 5 ,并还将进一步提高1 9 1 。 p r o g r e s s i v es t r a t e g i e s 实施的一项独立研究表明,o r a c l e1 0 9 中出色的软件可管 理性使其日常维护成本比其它同行( 如s q ls e r v e r2 0 0 0 ) 少3 0 到2 0 。越来越 高的维护成本已使人们充分认识到软件可管理性的重要【埘。 大量工程实践表明,软件的可管理性正逐渐成为影响计算机技术应用实施的 关键问题,在新的技术和需求条件下被逐渐放大,成为软件危机自2 0 世纪6 0 年 代以来新的重要表现【1 0 1 。目前,软件开发的主流技术是面向对象技术和软件设计 模式 2 1 。它们虽然在一定程度上提高了软件的质量和开发效率;但仍不能很好解 决管理功能难于扩展、需求变化不易满足等问题。人们迫切需要一种全新的软件 开发技术【珂。 1 1 3 软件可管理性的定义 广义上讲,软件的可管理性主要表现在四个方面【l l l :系统配置,软件能够 方便的安装、部署、配置和集成,并提供机制对整个过程进行有效的规划、监督 和控制。系统优化,通过调整软件自身参数、属性、行为以适应外界不同的计 算环境和应用需求,使软件功能和效能得到最大的发挥。系统诊断,软件出现 故障或潜在隐患时,能够具备某种手段对问题进行定位、报警,并依照一定的策 略在必要时采取措旌补救。系统防护,当软件运行要素被无意的破环或被恶意 的攻击时,软件应能够对其加以识别和采取可能的应对方案,并及时的修复和恢 复。 国防科学技术大学研究生院工学硕士学位论文 狭义上讲,软件的可管理性是指在系统的某些组件上,执行管理操作以及处 理与这些操作相关信息的能力,可分为两个方面【1 5 】:监视,从特定组件中捕获 用于报告和通知的运行时事件和历史事件的能力。控制,改变受管理组件运行 行为的能力 1 1 3 传统实现技术的局限性 软件可管理性作为一种常见的需求,几乎渗透在所有的功能模块中,用以辅 助和支撑软件业务功能的实现。在以面向对象编程( o b j e c t - o r i e n t e d p r o g r a m m i n g , o o p ) 为代表的传统编程技术实现时,可管理性的代码会跨越给定 编程模型中的典型职责界限,不能自然适合单个实现单元或程序模块,从而引发 了以下问题 3 1 1 4 j : 代码混乱:由于传统编程技术的实现模块可能要同时兼顾几个方面的需要, 导致相应需求的实现元素在一个编程模块中同时出现,引起代码的混乱和纠结。 代码分散:由于软件可管理性是一种非功能需求,是众多模块实现所共同需 要的,因此同一方面的实现代码往往会遍布在各个模块之中。 图1 1 展示了基于o o p 技术实现的某系统中可管理性代码的散布情况。每一 个白色矩形代表软件的一个业务功能实现模块。不同的模块有不同的规模,矩形 的长短表示了功能模块的规模大小。每一个白色矩形中的每一条横线段表示相应 模块中的一行用于实现软件可管理性的代码,不同颜色横线代表不同的可管理性 需求。可以看出,一个功能模块中混杂了多种可管理性实现代码,同一类管理性 代码又分散在多个模块中。 图1 1 基于o o p 的软件管理代码散布图 混乱和分散的实现代码会从多个方面影响系统的设计和开发h 司: 1 ) 模块性差:软件可管理性实现代码散布在众多功能模块中,与业务代码相 互纠结,严重影响了软件开发的模块性。 2 ) 难以扩展:狭窄的编程视角和有限的实现维度产生不同需求实现的交织, 严重时,新的需求会导致软件的推倒重来;并且一种需求在实现时可能会 牵涉到多个模块,所以因新需求而修改子系统可能会引起数据的不一致, 第2 页 国防科学技术大学研究生院工学硕士学位论文 而且还需相当规模的测试来保证这些修改不会带来b u g 。 3 ) 代码重用率低:由于一个模块实现多个需求,因此其它需要类似功能的系 统不能马上使用该模块,进一步降低了生产效率。 4 ) 可读性差:一个模块同时实现几种需求模糊了不同的实现边界,使得需求 与其实现之间的对应关系不明显。 5 ) 低产出:同时实现几个关注点把开发人员的注意移到周边关注点,导致生 产效率降低。 6 ) 代码品质差:混乱的代码掩盖了程序中隐藏的问题。而且,由于在处理多 个关注点时的混乱应该特别注意的关注点往往得不到应有的关注。 究其原因,传统的编程技术在实现诸如软件可管理性这一类非功能需求时存 在一定的局限性,它只能用一维的方法学把各种应用需求强行限制在同一实现空 间里。这个一维空间就是功能模块的实现空间,而非功能需求的实现则只能穿插 在这个占统治地位的空间中【5 】网。换句话说,需求空间是n 维的,实现空间是一 维的,这种不匹配导致需求到实现的糟糕映射嗍 为此人们开始探索一种全新的编程技术,在这样的背景下,面向方面编程 ( a s p e c t - o r i e n t e d1 h o g r a m m i n g , a o p ) 诞生了。借助a o p 的关注点分离技术,软 件可管理性将以一种松散耦合的方式注入软件系统,其代码实现也更加灵活、更 具模块化。 1 2 相关研究工作 面向方面的程序设计在问世的近十年里大多归于沉寂嘲这两年来,随着对 软件非功能方面,特别是对软件可管理性的重视程度不断提高,传统的软件开发 方法越来越表现出其固有的局限性。业内越来越多的技术人员逐渐意识到面向方 面程序设计的巨大优势和潜在的力量,并且做出了一些具有探索性的工作。 在开发环境方面,a o p 技术起初由美国国防先进技术研究计划署出资支持, 并最先在j a v a 平台下得到应用【3 l ,他们通过定义一套j a v a 语言的扩展系统,使 开发者可以方便的进行a o p 的开发,这套扩展系统被称为a s p e c t l 3 1 1 。现在加 p e c 已经完美的集成在e c l i p s ef o u n d a t i o n 中,成为目前主流的a o p - i 具。除此之外, 比较成熟的产品还有a s p e c t w e r k z 和j - b o s s 等。与j a v 4 阵营不同,n e t 平台下的各 种a o p 工具基本上还停留在实验室阶段。不过,一些相对成熟的a o p 产品也以 渐露睁蝾,其中主要包括a s p e c t c + + ,a s p e c t # ,a s p e e t d n g ,e o sa o p 等网 在应用研究方面,加拿大大不列颠哥伦比亚大学的a - k e r n e l 开发团队将面向 方面编程运用到f r e e b s d v 3 。3 操作系统中,提高了操作系统代码的模块性,降低 模块问的耦合度 4 6 1 。华盛顿大学的f a c e t ( f r a m e w o r k f o r a s p e c t c o m p o s i t i o n f o r a l le v e n tc h a n n e l ) 项目组利用a o p 技术实现了可定制中间件,由于各种关注点在 国防科学技术大学研究生院工学硕士学位论文 实现上的分离,中间件中不同模块的实现代码更加简单、清晰【4 7 】。比利时k a t h o l i e k e 大学基于a o p 技术开发出一款名为l a s a g n e 的中间件,主要用于分布式系统中服 务定制。借助a o p 技术,l a s a g n e 在不改变原系统代码的情况下,动态加载定制 的服务。清华大学使用a o p 技术在n e t b e i n g 系统中实现了工作异常流控制管理 子系统,并用于北京燕山石化办公自动化控制系统 4 0 l 。 值得一提的是,在软件可管理性的研究上,也出现了一些有价值的相关工作。 德国乌尔姆大学的a s p e c t i x 中间件就是这样的一个典型应用,它通过a o p 的织入机制将管理能力注入系统中,简化了自适应中间件的实现,使中间件内核 与监控模块、q o s 、安全、容错等机制相分离,具有更好的模块性和可扩展性; 并通过与反射技术相结合更可以实现基于环境信息的实时动态织入【l 珂。开发团队 通过对业务流程和功能函数编写方面代码,详细记录了软件的执行轨迹,灵活地 实现了业务函数监测和时间开销计算。方面代码与主要业务逻辑的贴和,使不同 监控需求的实现更加简单、清晰。 图1 2 p u r e 的内存监视( 左) 和c p u 监视( 右) 图 m a g d e b u r g ( 马格德堡) 大学使用面向方面编程技术,为名为p u r e 的操作系 统增加监控功能,并通过松散灵活的编程方式实现功能模块调试、性能指标评测 和运行行为监视,取得了不错效果u 5 】。管理代码的开发特别针对p u r e 的体系结构 和技术特点,为该系统提供了详细全面的监视能力管理员不但可以了解主要业 务函数的执行时间,还可观测到c p u 的使用情况。p u r e 的管理代码还具有内存 监测能力,可以对内存泄漏进行报警,对内存使用量进行统计,如图1 2 所示。 图1 3p u d f y p l u s 的路径分析图 i b m r a t i o n a l p u r i f y p l u s 是目前比较有名的软件测试和调试工具。它不仅可以 在代码中,而且可以在软件使用的构件中,甚至可以在没有源代码的情况下,分 国防科学技术大学研究生院工学硕士学位论文 析软件的运行轨迹、计算执行的时间开销、检狈i 包括内存丢失在内的运行时错误, 如图1 3 所示。与面向方面编程思想类似,它使用对象代码插入( o c i :o b j e c tc o d e i n s e r t i o n ) 技术,向代码中插入用来检测错误和监测覆盖的指令,为开发人员提供 了很好的软件监铡和调试手段,减轻了编码的负担,提高了软件的质量和开发效 率 4 s l 。 我们在表1 1 中对以上三种软件的可管理性实现进行了总结。不难看出,三 种软件实现的控制能力较弱,监视能力较强。它们选取的管理对象主要是系统中 孤立的业务函数,管理方式以人工为主。除软件测试工具p u r i f y p l u s 外,其它软 件的运行管理能力受限于本系统,不具有通用性和可重用性。 表1 1 几个软件中可管理性实现的比较 黢腻疆麟鬟麟嚣夔谶霆震囊黼 a s p c c t i x 较弱 较强关键业务函数人工相关 ! p u r e 无较强关键业务函数 人工 楣关 p i :u i f y p l u s 无较强关键业务函数 人工无关 然而,在软件运行中普遍存在一些独立于业务逻辑之上的管理需求,如:软 件的运行轨迹观测、线程的运行状态监控、业务方法的时间开销计算等l l ”。这些 需求与具体的业务逻辑无关,但却常常是系统开发所共同关注的问题。我们通过 对一个大规模高可用信息传输系统分析发现( 见图1 4 ) ,在其近三十万行代码中, 有百分之六十用于实现业务功能,百分之四十用于实现与软件管理相关的需求, 而在整个代码中共有百分之二十实现了与业务逻辑无关的管理需求,并且完成这 一需求所消耗的开发时间占到整个软件开发时间的百分之十七i 因此,如果能对 这些业务逻辑无关的管理需求加以提取并提供统一的实现手段,则可在很大程度 上增加软件的开发效率、降低开发成本。 图1 4 软件管理代码及其开发时间的百分比图 同时,线程作为软件运行和资源分配的基本单位,全面真实地反映了软件的 运行情况,忽视了线程的管理则会在一定程度上弱化了软件的监控能力。并且, 由于上述软件的可管理性实现主要以运行监测、性能分析、轨迹记录为主,部署 后的系统缺乏控制能力 综上所述,虽然面向方面编程在软件可管理性的实践中已经发挥了一定的作 国防科学技术大学研究生院工学硕士学位论文 用,但在具体应用中还存在着以下不足; 1 ) 通用性不佳:为了实现软件的管理,开发者基于面向方面程序设计技术, 针对具体的业务逻辑编写相应的方面代码;由于开发过程忽视了对公共管 理需求的提取,可管理性的实现代码只能应用于一个特定的系统,通用性 不佳。 2 ) 管理层面不高:部分编程人员对孤立的业务函数关注过多,忽视了软件运 行过程的管理。我们认为,软件系统是一个有机的整体,线程作为软件运 行的基本单位能够充分反映软件的运行过程和运行状态。因此,除监控业 务函数外,还应以线程为单位对软件实施更高层面的管理。 3 ) 控制能力不强;软件的监视是面向方面编程中最常见的,而软件控制的实 现仍多以面向对象编程为主。面向方面编程仅在异常流程控制、安全和事 务管理中得到应用,能够充分控制软件运行,特别是管理线程运行的案例 不多。 1 3 本文的贡献 本文把面向方面编程应用到软件可管理性的实现中,提出了面向方面的软件 管理模型s m m a ,弥补了传统管理模型中的不足,为软件可管理性的实现提供了 新思路。该模型能够通过线程变速机制提供线程运行控制能力,并以此为基础通 过反射机制为软件提供自主管理能力。 基于这一模型,本文设计并实现了软件管理能力注入工具。此工具可以根据 用户需求自动生成管理代码,并在不改变源程序的情况下织入系统内部,实现系 统运行速度变换、运行行为控制、运行状态监视、运行轨迹记录,并通过反射机 制为软件提供一定的自主管理能力。概括起来,该工具有以下特点: 1 ) 本工具能够根据用户需求为目标系统自动生成运行管理代码,提供独立于 业务逻辑的通用软件管理能力。 2 ) 本工具提供的软件可管理性基于a o p 实现,在空间上与目标系统分离, 避免了传统技术实现时的“代码分散”和。代码混乱”等问题 3 ) 本工具可以为一类原本没有管理能力的系统,在不改变其源代码的情况 下。自动注入运行监控能力和一定的自主管理能力。 1 4 论文结构 本文共分七章,各章内容概述如下: 第一章为绪论,介绍了本课题的背景和相关研究工作,讨论了本课题的研究 意义,简述了研究成果。 第6 页 国防科学技术大学研究生院工学硕士学位论文 第二章分析了面向方面编程的基本概念、基本思想和基本原理。 第三章把面向方面应用到软件可管理性的研究中,提出了面向方面的软件管 理模型,并对模型中的变速机制和反射机制进行了介绍。 第四章基于第三章的软件管理模型,设计了软件管理能力注入工具,并从体 系结构和关键技术两个方面加以介绍 第五章在第四章的基础上介绍了软件管理能力注入工具的实现。 第六章对工具实际应用效果进行了分析和评价。 第七章总结了本文工作并提出下一步研究方向。 第7 页 国防科学技术大学研究生院工学硕士学位论文 第二章面向方面编程 面向方面编程是一种全新的编程技术,是面向对象编程技术的补充和完善 4 1 。 它的核心思想是分离系统中横切关注点和核心关注点的实现空间,即横切关注点 通过方面( a s p e c t ) 模块化编程,核心关注点通过类( c l a s s ) 来实现,然后利用方 面编织器( a s p e c tw e a v e r ) 对两类关注点实现进行合并,构造出一个最终系统1 4 5 。 借助于面向方面编程的先进理念,程序员能够灵活、高效的实现软件可管理 性所囊括的众多横切关注点。a o p 技术也因此被人们所接受,成为目前实现软件 可管理性的前沿技术。 2 1 面向方面编程的起源 面向方面编程是美国施乐公司帕洛阿尔托研究中心( x e r o xp a r e ) 上世纪9 0 年代创建的一种全新的编程思想【4 】,它能够用于解决关注点的代码纠缠问题,为 开发者提供了一种有效描述横切关注点的方法【3 0 】。人们可以单独实现横切模块, 并通过a o p 所提供的织入机制将核心模块和横切模块融合在一起,构造出最后的 实际系统。a o p 用一种边界清晰的方式把横切关注点模块化,产生出更容易设计、 实现和维护的系统架构6 j 。 闯世的近十年里,除了极少数时间,a o p 在大多数情况下都是归于沉寂。然 而这两年来,随着计算机技术的快速发展和应用的不断普及,传统的整体设计和 集中控制软件开发方法越来越显示出其固有的局限性。业内许多人开始谈论 a o p ,越来越多的技术人员逐渐意识到a o p 的巨大优势以及它潜在的力量。 2 2 1 基本概念 2 2 面向方面编程的基本思想和基本原理 关注点( c o n c e r n ) ;关注点是软件开发中的一个特定目标、需求、概念或者兴 趣域,根据关注需求的特点不同可以分为核心关注点和横切关注点 4 7 1 。 核心关注点:核心关注点是系统要完成的业务需求。从技术的角度,一个典 型的软件系统分别包含若干个核心关注点,软件的核心关注点构成了软件的功能 方面。 横切关注点( c r o s s c u t t i n gc o n e e l t a ) :与程序核心业务逻辑无关的,用于支持、 辅助核心关注点实现的、跨越多个功能模块的关注点。软件的横切关注点构成了 软件的非功能方面。核心关注点是系统需要的业务功能,与核心关注点不同,日 志、安全、监控等横切关注点是各个功能模块所共同需要的,它们横向穿插在几 国防科学技术大学研究生院工学硕士学位论文 乎所有的模块中”7 ,这就是为什么叫做横切关注点的原因 围2 1 横切关注点的识别 软件的开发是一个将需求映像到实现的过程,软件的需求具体地由若干核心 关注点和横切关注点组成。为了更加清楚地说明,可以将整个系统需求比喻为一 束自然光,用三棱镜法则来形容它的组成。如图2 1 所示,需求光束穿越三棱镜 后被分为不同的颜色,不同的颜色光束就是不同的关注点。除了图中“业务1 ” 和“业务2 ”外,其它的关注点都是横切关注点。 2 2 2 基本思想 a o p 是一种横切关注点分离技术,它的基本思想是“将应用程序中的业务逻 辑同对其提供支持的通用服务进行分离”【4 】,即将横切关注点与核心关注点分离。 开发者通过运用a o p 提供的程序设计单元。结构化的设计和编写横切关注点的实 现代码,从根本上分离了不同类型关注点的实现空间。通过这种技术设计出的程 序更加模块化、更具结构化,从而将关注点局部化而不是分散于整个系统中。同 时,关注点和系统其它部分也保持着良好定义的接口,真正达到“分离关注点, 分而治之”的目的刚。 图2 2 不同关注点的分离实现 所谓“分而治之”是指对识别出的不同关注点分别对待,核心关注点在面向 对象编程提供的程序设计单元( 类) 中实现,横切关注点通过a o p 提供的程序设 计单元;方面( a s p e c t ) 加以实现,如图2 2 所示。由于不同类型的关注点对应 的实现空间不同,从而在根本上避免了关注点间代码实现的相互纠结嗍。 2 2 3 基本原理 在o o p 编程中,程序员通过“类”对关注点进行编码、封装和实现,开发出 的程序交给相应的编译器( c o m p i l e r ) 或者集成开发环境o d e ) 编译、链接,最 终生成目标代码和二迸制文件。 在a o p 编程中,核心关注点按照传统的o o p 思想开发,横切关注点通过a o p 提供的程序设计单元加以实现。实现后的两种代码由a o p 开发环境提供的方面编 国防科学技术大学研究生院工学硕士学位论文 织器合并。合并后的代码交由o o p 开发环境中的编译器处理,最终生成融入方面 功能目标系统。 以c _ h 为例,由于c - h 编译器都只对应一个实现空间的代码,所以基于c 阡 开发的a o p 横切关注点必须首先注入、合并到o o p 的实现空间,并最终依靠o o p 开发环境中的c _ h 编译器。横切关注点的注入、合并是通过a o p 编译器实现的。 我们把这一注入过程叫做织入( w e a v i n g ) ,a o p 编译器中实现这一机制的工具称 为织入器( w e a v e r ) 。 因此,模块化的对横切关注点进行编码,并通过适当的织入机制使两种代码 混合,就成了a o p 的基本工作原理,也构成了a o p 解决代码纠结问题的基石 2 4 1 , 如图2 3 所示。通过a o p 编译器织出的代码是中间代码,中间代码进一步提交给 开发环境中的编译器进行编译,最终编译出的代码就是同时实现两种关注点的目 标代码。 图2 3 不同关注点实现的合并 2 3 面向方面的编程语言 任何一种编程思想都需要通过编程语言来实现,面向方面编程也不例外【蛔。 本节以一个具有代表性的a o p 编程成语言a s l x :c t c + + 为例,详细讲述面向方面编 程的语言组成和语言特点。本文所应用的a s p e 圮t c - h - 语言及编程工具是集成在 v c 7 开发环境下的a s p c c t c + + a d d - i n 3 习。 2 3 1 连接点j o i n p o i n t 连接点是程序中一个精确的执行点,是系统中任何一个可以识别的执行点 嘲。这个执行点可以是一个方法的调用或者执行,也可以是个对象的构造或者 析构,甚至可以是一个函数执行的返回点。 程序中存在大量的连接点,但并不是所有的连接点都是有用的,真正有用的 连接点是那些供横切代码选择和作用的连接点,我们把它称为暴露连接点 ( e x p o s e dj o i np o i n t ) d 3 1 。在缸p e c t c + + 中,连接点是一个抽象的概念,是程序的 固有属性,不用主动定义一个连接点,明确指示连接点位置信息的任务是由 p o i n t c u t s 完成的。 里堕型兰堇查盔堂婴窒圭堕三竺巫主堂垡丝塞 2 3 2 切入点p o i n t c u t 在使用c + + 实现核心关注点和使用a s p e c t c + + 实现横切关注点时,由于两种 关注点的代码处于不同的实现空间,为了合成供编译环境使用的代码,横切关注 点代码需要织入到核心关注点的实现中。为了完成织入工作,a o p 编译器需要明 确知道待织入的横切代码对应着核心模块的什么位置。通过严格清晰地描述和定 义这些织入位置信息,a o p 织入器就能合并两个实现空间,整合所有功能。 待织入的位置就是连接点,被准确定义和描述的连接点就是切入点 ( p o i n t c u t s ) 。每一个连接点的位置都可以通过a s p e c t c + + 的关键字p o t u t c u t 指示, 并且一个切入点可以对应多个连接点。在a s p e c t c + + 中有两类切入点,一种叫做 “名称切入点”( n a m e p o i n t c u t s ) ,一种叫做“代码切入点”( c o d e p o i n t c u t s ) 1 3 4 1 。 名称切入点用于描述代码中的实体信息,这些信息包括:类型,函数,变量, 属性,名字空间等。为了更方便灵活的描述这些实体信息,a s p e c t c + + 提供了通 配符的描述手段,即使用“”来表示任意的类型和名称,用“”表示任意的 函数参数。举例说明: 表2 1 名称

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论