已阅读5页,还剩55页未读, 继续免费阅读
(计算机应用技术专业论文)自动代码生成技术在td—scdma基站系统开发中的研究与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
自动代码生成技术在t d - - s c d m a 基站系统开发中的 研究与实现 摘要 现代计算机应用系统中,软件的地位日益重要和突出。在计算机 应用领域的不断拓展和深入的过程中,对软件产品的数量、种类、功 能、性能的需求在不断攀升。如何满足日益增长的软件需求,如何维 护应用中的大量已有软件,已经成为了计算机应用系统进一步发展的 瓶颈。 从技术角度考虑,应当开发和使用更好的软件开发工具,提高软 件开发效率和开发工作过程的规范化程度。在计算机软件开发的各个 阶段,都有大量的繁琐重复的工作要做,在适当的软件工具的辅助下, 开发人员可以把这类工作做的既快又好。计算机辅助软件工程 ( c a s e ) 成为目前备受重视的一个旨在实现软件开发自动化的新的 领域。 作者在论文期间参与了西门子公司t d s c d m a 基站操作与维 护系统的设计开发工作,编写了大量基站程序,深刻体会到了c a s e 工具在软件项目开发中的重要作用。论文工作以此为背景,分析了 c a s e 工具与c a s e 环境,着重对其中的代码生成技术进行研究。分 析比较了几种代码生成器的模型,根据项目开发中的实际情况与特 点,开发出了用于西门子t d - - s c d m a 基站系统开发的基于状态机 的自动代码生成c a s e 工具。此工具已经成功的应用到实际项目的开 发过程中,大大地提高了开发人员的工作效率。论文对此工具的设计 与实现进行了分析与阐述。 关键词 计算机辅助软件工程代码生成状态机正向工程逆向工程 i t h er e s e a r c ha n dr e a l i z a t l 0 n0 f c o d e g e n e r a t i o nt e c h n o l o g i e si nt d s c d m an o d eb s y s t e m a b s t r a c t i nm o d e m c o m p u t e rs y s t e m ,s o f t w a r e i sh o l d i n gam o r ea n dm o r e i m p o r t a n tp o s i t i o n a l o n gw i t h t h ee v o l v e m e n to f c o m p u t e ra p p l i c a t i o n , t h ef u n c t i o n ,p e r f o r m a n c e r e q u i r e m e n t so f s o f t w a r e k e 印i n c r e a s i n g h o w t om e e tt h e s e r e q u i r e m e n t s a n dm a i n t a i nt h el e g a c ys o f t w a r eh a sb e c o m e ab o t t l e n e c k f r o mt h et e c h n o l o g y p o i n t o f v i e w , m o r ee f f i c i e n ta s s i s t i n gt o o l s s h o u l db ed e v e l o p e da n d i m p l e m e n t e d t oi m p r o v et h ee f f i c i e n c ya n d r e g u l a r i z a t i o no f s o f t w a r ed e v e l o p m e n t a g r e a t d e a lo f r e p e t i t i o u sw o r k i si n v o l v e di ne a c hs t a g eo fs o f t w a r ed e v e l o p m e n t p r o c e s s w i t h t h e h e l p o fc a s et o o l s t h ed e v e l o p e r sc a nf u l f i l lt h ew o r ki nam o r ea c c u r a t ea n d e f f i c i e n tw a y c o m p u t e r - a i d e ds o f t w a r e e n g i n e e r i n g t o o l sh a v eb e c o m e an e wa r e aw h i c hi sp l a y i n ga l li m p o r t a n tr o l ei nt h es o f t w a r ei n d u s t r y t h ea u t h o ro ft h i sp a p e rh a sp a r t i c i p a t e di nt h ed e s i g na n d d e v e l o p m e n t o ft d - s c d m an o d eb o p e r a t i o n a n dm a i n t e n a n c e s y s t e m i ns i e m e n sl t d ,c h i n a ,w o r k e do u tl a r g eq u a n t i t i e so fn o d eb p r o g r a m s , a n dw a s d e e p l yi m p r e s s e db y t h ei m p o r t a n c eo fc a s et o o l s b a s e do n t h i se x p e r i e n c e ,t h ed e v e l o p m e n to f c a s et o o l sa n dc a s ee n v i r o n m e n t i sa n a l y z e di nt h i sp a p e rw i t hf o c u so l lt h ec o d eg e n e r a t i o nt e c h n o l o g i e s t h ea u t h o r a n a l y z e da n dc o m p a r e d s e v e r a lm o d e l sf o rc o d e g e n e r a t i o n , a n dw o r k e do u tac o d eg e n e r a t i o nc a s et o o lf o rs i e m e n st d s c d m a n o d eb s y s t e mb a s e d o ns t a t em a c h i n em o d e l t h i st o o lh a sb e e n s u c c e s s f u l l ya d o p t e db y t h er e a lp r o j e c t s ,a n dt h e p e r f o r m a n c eo f d e v e l o p e r sh a sb e e nd r a m a t i c a l l yi m p r o v e d t h ed e s i g n a n d d e v e l o p m e n t o ft h i sc a s et o o li sp r e s e n t e di nd e t a i l si nt h i sp a p e r k e yw o r d s c o m p u t e r - a i d e d s o f t :w a r ee n g i n e e r i n g ,c o d eg e n e r a t i o n ,s t a t em a c h i n e , f o r w a r d e n g i n e e r i n g ,b a c k w a r de n g i n e e r i n g i i i 独创性( 或创新性) 声明 本人声明所呈交的论文是本人在导师指导下进行的研究工作及取得的研究 成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不 包含其他人已经发表或撰写过的研究成果,也不包含为获得北京邮电大学或其他 教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任 何贡献均已在论文中作了明确的说明并表示了谢意。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 本人签名:日期: 关于论文使用授权的说明 学位论文作者完全了解北京邮电大学有关保留和使用学位论文的规定,即: 研究生在校攻读学位期间论文工作的知识产权单位属北京邮电大学。学校有权保 留并向国家有关部门或机构送交论文的复印件和磁盘,允许学位论文被查阅和借 阅;学校可以公布学位论文的全部或部分内容,可以允许采用影印、缩印或其它 复制手段保存、汇编学位论文。( 保密的学位论文在解密后遵守此规定) 保密论文注释:本学位论文属于保密在一年解密后适用本授权书。非保密 论文注释:本学位论文不属于保密范围,适用本授权书。 本人签名: 导师签名: 日期: 日期: 北京自i 皂大学硕士研究生学位论文 第章绪论 第一章绪论 本章主要介绍论文的研究背景情况以及研究工作的目的和意义,然后介绍了 本人在研究生期间的一些工作研究情况、论文的研究目标和内容,最后介绍了一 下论文结构的组织安排。 1 1 研究背景 在过去的几十年中,涌现出了许多软件设计方法的理论和技术。从结构化程 序设计概念的提出,到模块化( m o d u l a r i z a t i o n ) 、面向对象( o b j e c t - o r i e n t e d ) 技术 的深入人心,泛型技术( g e n e r i cp r o g r a m m i n g ) 的日渐受重视等等,这些技术都已 被逐渐应用到软件设计实践中,为推动软件生产力的发展发挥了巨大的作用。此 外,多种设计理论,如设计模式( d e s i g np a t t e r n s ) ,面向方面的设计 ( a s p e c t - o r i e n t e d ) ,以及再生式程序设计( g e n e r a t i v ep r o g r a m m i n g ) 等等也逐渐受到 重视。这些技术涵盖了代码复用到软件架构复用等多种层次上的软件复用。 随着软件开发对软件复用的迫切需求,代码自动生成技术作为软件复用常用 的一种技术手段也越来越受到研究人员的关注。各种各样的代码生成器层出不 穷。 平心而论,代码自动生成技术并不是一个全新的概念,只是近年来它的作用 又重新得到了认识。尤其随着企业级软件应用的蓬勃兴起,软件开发技术的一系 列变革,代码自动生成技术的市场也得到了快速发展。 可以举个常见的应用代码自动生成技术的例子。分布式系统e j b 规范中 定义了容器( c o n t a i n e r ) 的设计规范。在设计实体b e a n 时,开发人员只需要设计 远程接口( r e m o t e ) 、主接口( h o m e ) ,或者本地接e l ( l o c a l ) 、本地主接口( l o c a l h o m e ) 以及b e a n 本身等要素,容器会自动生成实现这些接口的实现类,以及实际的b e a n 类。e j b 的这种架构,很好的将系统级的服务和具体业务应用分隔开来。e j b 容 器提供如事务、安全等系统级的服务,而开发人员只需要关注和自己业务相关的 具体事物。最终,由容器自动生成的那些实现类和容器的紧密粘合来完成整个的 企业应用。 需要特别指出的是,本论文所论及的代码自动生成技术和编译器设计领域中 的中间代码等的生成技术并不完全相同。后者通常的产物是可在一定平台上可直 接执行的代码;本文所指的代码自动生成技术通常是生成源代码,然后利用现成 的编译器生成可执行代码,而并不直接生成可执行代码。 本论文讨论研究的重点是就是指上述概念的代码自动生成技术。这方面的研 究非常多,有基于模型的代码自动生成( m o d e l b a s e dc o d eg e n e r a t i o n ) 、基于模式 第1 页 北京自i 皂大学硕士研究生学位论文 第一章绪论 的代码自动生成( p a n e n 卜b a s e dc o d e g e n e r a t i o n ) 、基于模板的代码自动生成 ( t e m p l a t e b a s e dc o d eg e n e r a t i o n s ) 等等。m d a ( m o d e ld r i v e n a r c h i t e c t u r e ) 是o m g 组织的标准,是一种组织和管理被自动化工具支持的企业体系架构和用于定义模 型和推动不同模型之间的转换服务的方法。 1 。2 研究目的和意义 如何减低软件开发成本,提高生产效率,保障软件质量是软件复用的主题, 也是代码自动生成技术的内在要求。 代码自动生成技术有着很广泛的应用,从w e b 页面生成,站点生成,到企 业级应用中都有其身影。从实际项目开发的角度来说,使用代码自动生成技术是 为了节省软件开发的成本。使用代码自动生成技术可以批量生成所需要的代码, 对于软件工程化开发有着很实际的意义。 此外,软件架构的设计中也使用代码自动生成技术。例如e j b 架构,减轻 了应用开发人员的负担。 从目前的代码生成技术,尤其是通常的基于模板语言的代码生成技术来看 其开发的成本较高,大多需要从定义文法,编写词法和语义文件,然后使用编译 器的编译器( c o m p i l e r - c o m p i l e r ) 来生成代码生成器。所以,提供一种快速而正确的 选择或者开发一种生成器的途径就有着比较实际的意义。 作者研究了几种代码生成器的基本模型,比较了它们的优缺点,在此基础上 结合所参加的t d s c d m a 基站项目开发的实际情况,开发出了适合予项目特点 的用于西门子t d s c d m a 基站应用程序开发的自动代码生成工具,具有很强的 创新性与实用价值。 1 3 工作介绍 作者在研究生的学习期间有幸在西门子( 中国) 有限公司进行实习,参加了 西门子t d - - s c d m a n o d e bo & m 系统( 即t d - - s c d m a 基站的操作与维护系 统) 的研发工作,在其中参与了软件的设计、编码、测试等诸多工作。在这个大 型的项目的,公司使用了许多的c a s e 工具来保证和控制软件开发的过程、软件 的质量与项目的进度等。本人深刻体会到了软件工程的理论知识和c a s e 工具在 大型的软件开发项目中所起到的及其重要的作用以及可复用的代码对于提高项 目开发效率的重要性。 因为作者参加了大量基站程序的编写,经过深入的思考发现西门子公司的基 站程序因其要遵守公司严格的编码规范,有许多共性与重复性,通过程序员的手 工完成很容易出现错误,可以编写一个工具自动完成框架的代码的编写。作者的 篇2 _ 甄 北京自i 皂大学硕士研究生学位论文 第一章绪论 这个想法得到了公司领导和同事的大力支持,结合研究生期间对c a s e 技术理论 和c a s e 工具的研究,重点放在了对其中自动代码生成技术的研究,开发出了用 于西r 丁子基站系统开发的自动代码生成工具a u t o c o d e ,并成功的应用到 了实际项目的开发过程中,提高了项目开发的效率与进度,得到了公司领导和同 事的好评。因此也有了这篇论文。 1 4 论文结构 第一章,为论文的绪论部分,介绍了本论文的研究背景,研究的目的与意义, 以及作者在研究生学习期间的一些工作情况。 第二章,对计算机辅助软件工程中的自动代码生成技术进行讨论,并比较几 种代码生成器的基本模型,讨论其优缺点。 第三章,介绍作者在西门子公司所参与的项目的背景与工作内容的基本情 况,并以此为契机阐述开发a u t o c o d e 的需求和它的应用环境: 第四章,介绍作者所开发的a u t o c o d e 的功能特点、总体结构、模型建立 与关键功能的实现的机制。 第五章,以作者在项目中负责开发的i c 子系统为例,说明a u t o c o d e 在 实际项目中的应用情况。 第六章,总结全文。 第3 页 垄塞堑皇奎兰堡圭里壅竺堂垡堡壅 苎三! 垡受生壁垫查 第二章代码生成技术 代码生成技术涵盖面很广泛,高级语言到中间代码的过程也是一种代码生 成。本论文论及的其实是特指高级代码的生成过程,例如源代码的生成技术。本 章介绍了代码自动生成技术的理论背景、基本概念,代码自动生成技术的衡量标 准,以及常见的代码自动生成技术模型。 2 1 域工程 从根本上说,实际项目中采用代码自动生成技术并不是凭空而生的。其基本 的理论依据是项目的域工程( d o m a i n e n g i n e e r i n g ) 。项目的域分析有时候会导 致代码生成器的开发和使用。 域工程是创建一族相似系统应用工程的过程。域工程覆盖了所有构建软件核 心价值的活动。域工程包括域分析( d o m a i na n a l y s i s ) ,域设计( d o m a i nd e s i g n ) 和域实现( d o m a i n i m p l e m e n t a t i o n ) 。 在整个域领域应用范围中,各个应用之问存在着相同点和不同点。这些称之 为共性( c o m m o n a l i t y ) 和可变性( v a r i a b i l i t y ) 。 共性是指在域工程期间关于什么是整个域的共同性问题所做出的决策或假 设。共性可以确定域的范围、软件的功能、与其它域的分界面、操作环境、软件 的限制、标准以及应用软件公共部分实现的细节。共性的重要性在于它说明了 个应用程序族中什么是共同的或共享的。它代表着正在被使用的“域知识”。这 种域知识可以被分析并封装成工具、组件、模板、模式以及框架等等。 而可变性是一个需要在域分析期间确认,而直到构建或运行时间才确认的决 策。可变性代表了一个应用程序族内部之间的差别。构建时的可变性集合是为建 立一个程序生成器所需要的信息中最重要的部分。这个集合可用于定义一个规范 语言和一个结构或框架。运行时的可变性则是在运行时间内确定的决策,这些信 息包括配置文件、数据库、用户定制等等。可用于建立应用软件的公共部分。 2 2 什么是代码生成器 代码生成器,顾名思义是指可以自动生成代码的程序。代码生成器的范围非 常广,从简单的解析器到功能齐全的生成器如m a t l a b 。 代码生成器的基本功能是读取元数据( m e t a - d a t a ) ,例如数据库模型,然后 根据一定的模式和规则生成相应的源代码。 第4 页 苎垄堕型型塑堑生望塑塑生兰些堡苎一 墨三兰垡里圭壁堇查 代码自动生成的基本模型图如下所示: 图2 1 代码生成器基本模型 模式模板:代码生成中的不变关系或模式。代表了代码生成域工程中的共 。睦。 域元数据:是指将在生成代码中模型化的元数据。通常被开发人员所提供的 外部数据所参数化。 域规则:用以约束域数据结构和行为的规则,通常被代码生成器所封装。 2 3 代码生成器的衡量指标 在实际的项目开发中决定使用代码生成器或者选择已有的代码生成器需要 从以下的几方面来进行衡量。 质量( q u a l i t y ) :是指生成代码的质量。在一个项目的开发周期中,由于软 件工程师的编码能力的不同,手工编码会形成代码质量上的参差不齐。而使用代 码生成器则可以在整个开发周期中提高代码质量,这是因为程序的许多b u g 可以 通过修订代码模板来完营整个代码库。生成代码的质量直接影响到生成器的可用 性。 一致性( c o n s i s t e n c y ) :是指所设计的生成器的生成a p i 的类结构,变量命 名以及方法签名的是否容易保持其稳定性,从而使得软件设计人员可以在较高层 次上进行使用,而不太需要考虑底层的变动。一致性决定了个生成器向下的兼 容性,是否设计得稳定可靠。不会因为引入了生成器反而增加了系统的太多不确 定性。 效率( p r o d u c t i v i t y ) :是指生成器可以在多大程度上替代人工的编码工作能 力。代码生成器可以节省大量的人工时间,可以使软件工程师尽可能避免烦琐的 重复开发工作从而可以把精力放在更需要创造性的任务当中。效率的大小决定 了是否需要创建或选择生成器的决策。 第5 页 型皇盔兰壁堕篓生兰堡堡兰 墨三兰垡里圭壁堇查 抽象性( a b s t r a c t i o n ) :是生成代码所具有的层次性,是否清晰,是否容易 划分业务逻辑等能力,而不是将代码混作一团。代码生成器在软件的设计和代码 基( c o d e b a s e ) 之间提供了个抽象层。在实际的软件开发应用中,常常会发现 会比较容易陷入到代码的各种细节中,从而忽视了业务逻辑规则。生成器所产生 的确定代码可以以一种明确的形式来保持这些业务模式和业务规则。同时,这些 文件可以独立出来并且文档化。此外,这些代码和文件也可以被域专家检查和分 析。抽象性使得生成代码可以运用其它的c a s e 技术来进行分析,例如可以导入 到r a t i o nr o s e 中进行0 0 分析等。 有人认为代码生成是一种不好设计观念。认为它其实是一种反模式 ( a n t i p a t t e r n ) 。他们认为代码生成仅仅是另外一种形式上的拷贝一粘贴式的编 程方式。虽然从某种角度上来看的确如此,但相比拷贝一粘贴而言它依然有着许 多的可取之处。 我们在编程实践中发现一些类似的功能模块或方法函数时,总会想着去某个 地方把它拷贝一粘贴过来,并做一些必要的改动。至此,这两处的代码其实己经 失去了相关性的联系,虽然它们是很相似。通常拷贝一粘贴的代码中如果发现有 b u g ,就需要对所有拷贝一粘贴的代码进行修订,这很容易遗漏和疏忽。而由一 个设计良好得代码生成器所产生的代码则可以保持这些代码间的有机联系,从而 比较容易的修正这些错误。 此外,在现代软件开发中,开发框架的应用的越来越普遍,同时也越来越复 杂,人们不得不加入更多的手工代码。这也导致代码的复杂性。选择代码生成器 可以减低复杂性。 再则,代码生成器用抽象的设计模型来产生代码,这种方式具有即使是最好 的纯手工编制系统也很难具有的便利性和可维护性。如果需要业务规则写到代码 中的话,最好就是将它们重构( r e f a c t o r i n g ) 到独立的一层中。 事实上,如果使用代码生成器的理由并不充分和必要的话,就不应该使用它 来生成大量的代码一个良好设计和实现的生成器并不应该只用来替换眼前烦琐 的代码编制,更应该从整个应用域的角度来考虑和设计。 2 4 代码生成器的基本模型 2 4 1 小代码生成器 最常见的代码生成器是小代码生成器( c o d em u n g e r ) 。它处理一个或多个 源代码文件来生成相关的输出文件。j a v a d o c 就是的一个实例。它通过分析j a v a 源文件中特定标识的注释,利用一系列的模板来创建h t m l 文档。另外一个例 第6 页 苎垄堕堕型塑堑生望堕塑生兰些堡苎 墨三兰垡里圭壁堇查 子是x d o c l e t ( h t t p :x d o c l e t s o u r c e f o r g e n e t ) ,它主要是用来生成e j b 的 类和接口。 可以用下图来展示j a v a d o c 的流程。 2 4 1 1 模型评估 图2 2j a v a o o c 的处理流程 i 质量j a v a d o c 是遗过分析特定杯记的注释而将源代码秀路,可以准确控 制输出文档。 a v a o o c 也不需要处理j a v a 代码中的变量等。 致性j a v a d o c 通过d o c l e ta p i 来输出h t m l 文件,这个a p i 是稳定的, 可以进行管道处理。 效率把源代码和文档组合,开发人员可以同时编写代码和文档。从而也 避免了之间的不致性。 i 抽象性j a v a d o c 只有很少的抽象性。 表格2 1j a v a o o c 模型评估 第7 _ 页 北京邮电大学硕士研究生学位论文 第二章代码生成技术 2 4 1 2 处理流程 图2 3 小代码生成嚣处理流程 小代码生成器读入源文件,分析后生成一个或多个输出文件。 2 4 2 内嵌代码生成器 构建一个内嵌代码生成器( b f l m ec o d ee x p a n d e r ) 通常需要设计一种新语言。 毅语言通常是扩展现有语言的语法。然后内嵌代码生成器将该语言扩展生成高级 语言( 例如c + + ,j a v a ,p e r l ,c 等等) 。 一个例子是内嵌s q l 的c 。s q l 语句使用特殊的标记嵌入到c 源文件中。 生成器以这些文件为输入,创建相对应使用c 代码替换s q l 语句的“c ”文件。 例如: i n tm a i n ( i n t a r g c ,c h a r a r g v b ) r e t u r no : ) 使用生成器创建的c 文件可以示意为: # i n c l u d e “d b h ” i n tm a i n ( i n ta r g c ,c h a r + a g r v t - j ) ( d b c o n n e c t i o n + d b - c o m 2 d b _ c o r m e c t i o n o ; d b d a t a s e t + d b _ d a t a 2 d b _ q u e r y ( d b _ e o n n ,“s e l e c t + f r o mo r d e r s ”) ; f o r ( i n ti - 0 ;i l e n g t h ;i + + ) 第8 页 苎室坚里盔兰堡主竺塑皇兰堕堡苎 蔓三兰垡塑竺堕垄查 l e t c hal e c o r d p r o c e s st h er e c o r d ) r e t u r no ; j 该生成器的流程可以图示为: 嚣据库 图2 4 内嵌s q l 的c 扩展流程 生成器扩展特殊标记段并用根据模板而生成的代码来替换。 2 。4 2 1 梗型评估 质量 数据库存取代码需要大量的s q l 命令或查询的底层实现。虽然熟练 的程序员可以写出精巧的代码,但是通常很难兼顾到程序的健壮性 以及可调试性,并且需要写许多相类似的代码。如果使用s o lc 的 话,这类问题就比较容易排除了,因为生成器会管理所有的底层代 码。实际上,生成器开发人员可以将额外的错误检测代码和调试支 持加入到模板当中,从而代码很容易管理和调试。 一致性生成器维护所有存取数据库的代码,从而代码即可以很清晰并且可 以适应数据库需求的发生改变或者数据库存取框架有变动的情况。 效率由于节省了大量构建和调试数据库底层代码的时间,对于提供数据 库应用的收益是显而易见的。 第9 页 北京邮电大学硕士研究生学位论文第二章代码生成技术 抽象性通过标识应用程序中的所有s q l 代码t 从而将s q l 调用层抽象了 出来,可以很容易利用其他手段来检测s q l 命令和语句的有效性, 例如可以通过语法分析等等手段。再比如,可以很容易通过d b a 来生成需要检测的s q l 查询列表。也可以自己建立套询和创建列 表。 2 4 2 2 处理流程 其流程如下所示。 表格2 2 内嵌s q l 的c 生成器模型评估 图2 5 内嵌生成器流程 其输入是一种新语言的源文件,而输出是更高层次语言的源文件。 这种生成器最大的缺点是软件的调试依赖输出。这意味着,在调试结束后所 有针对输出代码的改变必须要和输入的文件保持一致。 2 4 3 混合代码生成器 混合代码生成器( m i x e dc o d eg e n e r a t o r ) 是以源代码文件作为输入,改变 或者替换其内容。使用这种技术有以下几个目的: 1 ) 构建用户界面的辅助代码,从而将变量附加到用户的界面控制中 2 ) 从注释中的测试用例数据中构建测试用例代码。 3 1 从注释中的数据库存取规范中创建数据库。 例如有一种混合代码生成器有些类似于内嵌代码扩展器代码生成器,它可以 用于内嵌的s q l 语句。 # i n e | u d e “d b h , 第1 0 页 北京邮电大学硕士研究生学位论文 第二章代码生成技术 i n tm a i n ( i n t a r g c ,c h a r + a r g v f l ) ( s q l :s e l e c t + f r o mu s e r s s q le n d r e t u r no : 在使用生成器以后,原始文件如下所示: # i n c 【u d e “d b ,h ” i n tm a i n ( i n t a r g c ,c h a r 4a r g v 口) s q l :s e l e c t + f r o mu s e r s d b c o n n e c t i o n + d bc o n l a = d b _ c o n n e c t i o n o ; d b d a t a s e t + d bd a t a 2 r i b _ q u e r y ( d b _ c o r m ,“s e l e c t + f r o m u s e r s ) ; f o r ( i n ti = o ;i l e n g t h ;i + + ) 1 f e t c har e c o r d p r o c e s st h e r e c o r d ) s q le n d r e t u r n0 ; ) 代码生成器用所需要的s q l 语句的实现语句填写在注释之间的空白中。原 来的注释将保留以便生成器再次运行时也还可以再次进行上述的替换。 第“页 数据库 苎垄堕堕型塑堑生望堕塑兰! 堡堡苎 墨三童垡里圭壁堇查 图2 6 混合s q l 的c 处理流程 2 4 3 1 模型评估 质量 由于s q l 语句的底层实现代码是自动生成的,所以它可以进行健壮 性的错误检测以及调试。调试是在产生的代码中进行的,所以没有 和内嵌代码生成器类似的b u g 修复集成步骤。如果代码可以更容易 调试的话,这种生成器可以有更高的代码质量。 一致性 由于任何s q l 存取语句都是由相同的模板所产生的,所以s q l 存 取代码是一致可靠的。 效率 和内嵌代码生成器一样,由于它们维护s q l 语句底层代码,所以可 以节省大量的开发时间。 抽象性 s q l 命令和查询的代码是从原始文件的注释中提取。这意味着s q l 语句更加轻便易用。 2 4 3 。2 处理滚程 模型流程如下 表格2 3 混合s q l 的c 生成器模型评估 图2 7 混合代码生成器处理流程 生成器的输入文件也是输出文件。生成器读取文件中的特殊注释,然后用生 成的代码来取代这些内部的注释。同时,调试也直接依赖于输入文件 因为源代码可以直接调试,所以混合代码生成器模型要比内嵌代码扩展器模 型更好些。混合代码生成器也可以作为外部工具很好的集成到d e 中。 第1 2 页 苎曼堕堕型塑堑生望堕塑生兰些堡苎 墨三兰垡里圭壁堇查 2 4 4 局部类生成器 局部类生成器( p a r t i a lc l a s sg e n e r a t o r ) 构建了一系列由特定文件所定义的 设计规范的实现类。这些基本类是作为构建生成类的平台。基本类主要是用来处 理全部类的底层工作,使得衍生类可以根耜具体的情况自由的重载特定的行为。 局部类生成器的一个示倒是构建数据摩的存取类。生成器为每个类及其字段 构建基本的持久性代码。而子类则负责所有的客户行为。 如下图所示: 数据厍 图2 8 生成数据库存取粪流程 生成器采用一个定义文件,然后构建和数据库通讯的类。子类可以为基类添 加特定的客户行为。子类则是由应用程序赢接使用的。 2 4 4 1 模型评估 质量生成器控制着所有的数据库存储类的结构,所以代码质量是由构建 类所使用的模板直接控制。如果生成器也可以为物理模式构建s q l 的话,那么在对象层和数据库层问映射时发生错误的可能性会显著 减少。 一致性由于数据库存取层的a p i 是由生成器所创建,所以结构、方法签名 和变量命名在所有的类里是一致的。这使得很容易根据a p i 标准类 构建代码。这也意味着当新的结构元素需要时,可以很快的实现。 第1 3 页 北京邮电大学硕士研究生学位论文第二章代码生成技术 效率 生成器负责所有的底层持久性处理工作,从而使得开发人员可以更 多的考虑应用程序的高层处理。此外t 由于持久性代码更少的b u g , 开发人员可以花很少的时间在调试生成代码上。 l 抽象性数据库逻辑的基本结构已经从基本代码中分离出来,并胃抽象成志 义文件。这意味着生成器也可以用其他语言来构建层,这会带来许 多的便利。同时,这也意味着可以更容易的通过域输出来检测生成 代码。 2 4 4 2 处理渍| 哥呈 处理流程 表格2 4 生成数据库存取类模型评估 图2 9 局部类生成器流程 生成器读入定义文件,然后用一系列的模板来构建一个或多个基本类。这些 基本类可以由子类特定化。所以这些类随后一起编译生成最终的产品a 2 4 5 屡生成器 层生成器( t i e r g e n o r a t o r ) 构建和维护应用程序中的一个完整的层。在w e b 应用服务器中,这意味着层生成器将处理应用的n t i e r s 中的一层,例如数据库存 取、业务逻辑或用户界面。 层生成器的一个例子是操纵和维护w e b 应用的数据库存取层。如下图所示: 第1 4 黄 苎垄堕型型塑塑型鎏旦羔壁型! 坚 墨三兰垡里圭壁堇查 教姑昨 图2 一l ow e b 数据库存取层生成 层生成器是以描述数据库模式的定义文件作为输入,使用一系列的模板来构 建数据库存取类的。一些生成器也可以为数据库服务器构建相应的实际的物理存 取模式。 2 4 5 1 模型评估 质量和局部类生成器相类似,所生成的基本代码的质量等价于在模板中 实现代码的质量。 致性当代码生成器负责生成全部的数据库存取时,类是可用的。这使得 类易于编码。 效率因为所有需要做的事情就是修改模板和再生成代码,所以生成器的 效率是指可以采用不同的风格和结构的类来进行试验。 抽象性由于层的所有逻辑是由外部基本代码所限定的,所以层生成器是抽 象程度最高的。这包括了所有的那些没有被局部类生成器所覆盖的 应用范围。个完全抽象的定义意味着语言和框架便利性对于数据 库而言是确定的。 表格2 5w e b 数据库存取层模型评估 第1 5 页 北京邮电大学硕士研究生学位论文 第二章代码生成技术 2 4 1 5 _ 2 处理流程 图2 一层生成器流程 层生成器以抽象的定义文件作为输入,使用一系列的模板构建一个或多个输 出文件,这些输出代码是作为应用的完整的功能层。 局部类生成器和层生成器之间的关键差别在于层生成器更大范围的作用。层 生成器维护层的所有代码,包括所有的边界用例。局部生成器则把这些边界用例 延迟到子类来处理。 管理完全层的优点主要有两方面: 1 ) 所有的业务规则抽象出来便可以由域专家来检测规则的有效性。 2 1 由于生成器维护整个层,处理逻辑可以通过改变模板来导出到其他的平 台。 局部类生成器常常可以是形成层生成器的良好开始。局部类生成器遵循着 8 0 2 0 规则。生成器处理8 0 的常规用例,而把2 0 的客户定制延迟到子类来 处理。随着代码逐渐固定化,以及对问题域的更好理解,2 0 会越来越小,直到 生成器处理所有的代码。 2 5 代码生成器的基本应用 代码生成器的应用非常广泛,最常用的应用领域有: 1 ) 生成h t m l 页面。这是代码生成器最常应用的领域,甚至生成完整的 w e b 站点。 2 ) 封装数据库的操作。数据库的操作繁琐而重复的工作量比较大,而且比 第1 6 页 北京邮电大学硕士研究生学位论文 第二章代码生成技术 较容易出错a 这方面的生成器的应用主要包括建立业务对象,以及数据 库事务处理等。 3 ) 构建e j b 部署描述文件。通常这是比较繁琐的设覆过程,众多的应用服 务器供应商都提供了相应的配置部署工具来自动生成这一描述文件。 4 ) e j b 远程接口和主接口以及本地接口和本地主接口的实现类。这些都是 e j b 容器服务器自动生成的。 5 ) s q l 语句的实现。一些c a s e 工具根据数据库的实体模型来生成创建数 据库就需要使用自动生成技术。此外,在一些内嵌的代码生成工具中, 常常需要将s q l 语句翻译成特定的宿主语言。等等这些,都可以使用 代码自动生成技术来完成。 6 ) x m l 的数据绑定( x m ld a t ab i n d i n g ) 。x m l 数据绑定需要将x m l 描述的对象生成实际语言的对象代码。 2 6 代码生成器的优点与不足 使用代码生成器有着以下的优点: 1 ) 可保证的一致性。由于代码的自动生成,所以如果选择或设计合适的代 码生成器,就能够保证生成代码的一致性,而不会有手工代码所导致的 相关代码间的不同步。 2 ) 改变了软件设计人员的工作方式。由于代码只需要完成它所必须完成的 功能,所以变得更加清晰而且更加简单。如果以后需求发生了变化,只 需要简单更改代码生成器并且重新生成新的源代码文件就可以了。 3 ) 稳定而尽可能免除b u g 。由于代码生成器往往是在最终项目代码生成之 前所编写,所以从这个意义上来说,这时候整个项目的调试过程已经开 始。生成器的正确选择和设计可以对最终项目的正确可靠性提供最重要 的保障。 4 ) 生产效率高。由于生成器的设计和选择源自于问题域的分析,所以可以 形成可保证的最新的生成器a p i 。 5 ) 可定制。通常各种生成器都会提供定制的功能,用户可以根据模板定制 特定的输入,从而生成相应的代码。 6 ) 使得代码可以快速的更新。例如,如果数据库需要更动的话,可以修改 后重新运行生成器从而可以生成新的源代码,这只需要很少的时间。 7 ) 软件开发人员可以更加集中精力于开发领域,更容易发挥他们的聪明才 智。开发人员的积极性也会得到很大的提高。 8 ) 形成良好的代码开发习惯。由于生成器生成的代码有着更好的规范,从 第1 7 页 北京邮电大学硕士研究生学位论文 第二章代码生成技术 足 而软件开发人员可以学习这种开发的代码风格,这有助于形成整个项目 的代码规范的统一性。 虽然生成器有着以上的种种优点,但它也不是万能的。它也有着以下一些不 1 ) 根据生成器的使用,它必须最先开发。而由域工程的分析来形成良好的 代码生成器的选择或设计是一件很困难的事情。 2 ) 需要有特定的可应用的条件。作为域分析的产物,如果设计生成器的代 价过高的话,实际上它并不可行,这在项目开始时是必须要考虑的。 3 ) 不是所有的程序代码都可以用代码生成器来生成,总是需要手工编写一 定的代码。实际上,代码生成器的真正作用是作为手工代码的支持作用, 例如提供特定的a p i ,在e j b 的开发过程中,容器提供了支撑代码的自 动生成,但是具体的业务规则的b e a n 总是需要软件开发人员来设计和 实施的。 4 ) 对于数据库代码而言,数据库必须是规范化的,有着正确的设计和形式 化。通常代码生成器不会处理专有的设计特性。从另一方面,这实际也 是代码生成器的一个优点,即可以跨越多种数据库平台,而不必绑定在 某一特定的平台上。 第1 8 页 北京邮电大学颀士研究生学位论史 第三章a u t o c o d e 的应用环鹭与需求分析 第三章a u t o c o d e 的应用环境与需求分析 近年来,随着面向对象程序设计和网络技术的兴起,一批新的程序设计语言 开始流行,如s u n 的j a v a 、微软的c 撑语言和n e t 平台、网页编程流行的p h p 、 a s p 、通用的x m l 等等。但再怎么说程序开发语言也只是让人们越来越易读懂 程序,在软件日益庞大的今天,动辄几万行的源码全靠手工编写,非把人累趴下, 因此各种各样的开发工具就成为编程的必需品。 本章介绍一下我在西门子公司所从事的研究开发项目,我在其中所做的工作 也是我研究开发a u t o c o d e 的起因。在此基础上对a u t o c o d e 的需求进行了 分析。 3 1a u t o c o d e 的应用环境t d - - s c d m an o d ebo & m 系统 t d - - s c d m a 系统是t d m a 和c d m a 两种基本传输模式的灵活结合,是由 中国无线通信标准化组织( c w t s ) 提出并得到i t u 通过的3 g 无线通信标准。 在3 g p p 内部,它也被称为低码片速率t d d 工作方式( 相对于3 8 4 m h z 的u t r a t d d ) 。t d - - s c d m a 系统特别适合于在城市人口密集区提供高密度大容量话 音、数据和多媒体业务。系统可以单独运营,也可与其他无线接入技术配合使用。 圈3 一lt d dl c rr a n 网络结构 如图4 一l 所示,r a n ( 无线接入网) 由r n c ( 无线网络控制器) 、n o d e b 第1 9 页 北京邮电大学颀士研究生学证论芟第三章a u t o c o d e 的应用环鹭与需求分析 ( 无线基站子系统) 和u e ( 用户终端) 组成。r n c 与核心网络部分通过i u 接 口进行交互,r n c 与n o d e b 通过i u b 接口进行交互。n o d e b 与u e 通过u u 接 口进行交互。 在t d - - s c d m a 系统中,o & m ( 操作与维护) 系统是运行在n o d eb 上, 确保n o d eb 在用户呼叫过程中的可用性,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 入孵合同协议书模板
- 体育场中标合同范本
- 全款买新房合同范本
- 2026年喷绘机市场环境分析
- 铝合金铸造工艺优化方案
- 代采代加工合同范本
- 争议地皮协议书范本
- 入股协议还入股合同
- 与律所战略合同协议
- 丧事承办协议书模板
- 国开《机电一体化系统设计基础》形考作业12答案
- 【完美精致】宁夏大学毕业论文答辩课件模板
- 2025人教版小学3-6年级英语共8册单词表(带音标)
- 2025年春季学期国开电大本科《马克思主义基本原理》在线形考(专题检测一至八)+国家开放大学《公共政策概论》形考任务1-4
- 妇产科制度完整版本
- 《江西省城市体检工作技术指南(2024版)》
- 2025年入团考试的小窍门试题及答案
- 碳晶板安装合同协议
- 2025年全国焊工作业人员职业技能理论考试练习题库(900题)含答案
- 百世快运加盟合同协议
- 经桡动脉神经介入术后护理
评论
0/150
提交评论