文献综述内容

时间:2024-03-06 点赞:40050 浏览:72084 作者原创标记本站原创

本文是一篇数据库论文范文,关于数据库大学毕业论文,关于文献综述内容相关毕业论文的格式范文。适合数据库及管理系统及档案管理方面的的大学硕士和本科毕业论文以及数据库相关开题报告范文和职称论文写作参考文献资料下载。

文献综述内容

(包括国内外现状,研究方向,进展情况,存在问题,参考依据等)

学生档案管理系统

1.引言

档案管理是一项重要性的工作,在不同的历史时期产生了不同的,相对于当时最完备的档案管理技术与管理制度.近代档案学已经是一门完善的,体系严密的科学.虽然档案学面临信息化的冲击与挑战,但是新一代档案学尚未产生,档案管理信息化还存在大量未解决的难题.因此,处理好档案管理信息化中的管理创新和原有档案管理制度之间的矛盾是目前面临的问题.

随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用.计算机技术的迅速发展和广泛应用,电子文件和电子档案在国内外都已普遍存在,档案资料的数字化,光盘存储,计算机管理和网上检索查询利用是档案管理发展的必然趋势.作为计算机应用的一部分,使用计算机对学生档案信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速,查找方便,可靠性高,存储量人,保密性好,寿命长,成本低等.这些优点能够极大地提高学生档案管理的效率.

学生档案管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生档案管理系统应该能够为用户提供充足的信息和快捷的查询手段.但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低,保密性差,另外时间一长,将产生大量的文件和数据,这对于查找,更新和维护都带来了不少的困难.因此开发一套合理可行的学生档案管理系统是具有非常现实的意义.

2.国内外现状

与发达国家相比,我国将新兴计算机技术引入学生档案管理领域起步晚,应用程度较为滞后,目前主要用于案卷的总体管理.随着计算机技术的发展和普及,档案存储电子化已成为必然趋势.

随着近年教育事业的大发展,各院校不断扩招,档案信息量剧增,电子文件的大量出现,传统档案管理手段已不能适应新形势,现代化管理势在必行,档案部门必须加强自身现代化建设,才能与学校改革发展相适应,才能及时,准确,高效地管理好学生的档案信息资源.

由于历史的原因,目前高校档案管理方面存在设施落后,原始资料不齐甚至无档,信息未及时归档甚至不归档等现象.虽然近几年有较大的改观,但与高等教育改革和发展的需要还很不适应.目前高校学生档案管理,从档案材料收集,整理,鉴别,编排,装订,保管,利用,均依赖传统的手工操作技术,保管条件和保管技术简陋单一,与科学化,现代化的要求差距甚大,很难适应高校形势发展的需要.因此大力发展高校学生档案管理工作中的计算机技术是当前的一个重要课题.

3.研究方向

3.1数字化

创建无法篡改的,完整的数字化学生档案系统不但可以简化学校对学生档案的管理,还可以防止人为的销毁档案,提高学生档案的可信度.数字签名是笔迹签名的模拟,有如下性质:

能够证实是作者本人的签名以及签名的日期和时间

在签名时必须能对内容进行鉴别

签名必须能被第三方证实以便解决争端

如何在容易修改的环境下创建难以修改的文档是建立学生档案管理系统的关键.上世纪70年代,美国斯坦福大学的两名学者DiSc和Hellman提出了公钥系统,其目的是实现在不安全的信道中信息的安全传送.其基本思想是给出两个可逆的变换,一个称为私钥,一个称为公钥,由公钥加密的密文只有通过私钥才能,同样由私钥加密的密文只有通过公钥才能,通过公钥推出私钥是困难的.我们可以利用相同的方法来管理学生的档案.首先找到一对合适的密钥,向社会公布自己的公钥,保留自己的私钥(保密).用私人密钥加密学生档案对外发布,经加密的档案任何人都可以用公钥解密.这样既实现了学生档案信息的共享,又有效地保证了学生档案的原始性,真实性和完整性.


3.2网络化

以计算机网络技术和多媒体通讯为基础,将全球各地的人们联结在一起,组成一个集各部门,各领域的各种信息资源为一体,供网上用户共享的数据网.档案信息一旦进人信息高速公路,与国际交互网Inter相接,即能成为资源的海洋.网络信息化下的档案信息,主要包括数字档案馆和各类档案网站,网页,其所面向的对象已不再局限以往的服务于领导决策,服务于学术研究的狭小范围,而是整个互联网.

随着社会不断发展,学校档案室势必也要走网络化道路,要保证网络上所有成员都能自由进行信息交换,实现信息资源共享.这就要求档案工作者在网络化信息时代,不仅要懂档案专业知识.还要精通网络技术,多媒体技术及具备信息处理分析能力有人认为,未来的档案工作者,要同时充当档案信息工程师,信息决策专家,信息教育家三重角色.未来的档案工作者不仅要运用网络为用户提供档案信息,还要选择适当的信息站,并使用适当的检索方法,找出适当的信息提供给适当的用户,因而信息决策判断正确是档案工作者所必须具备的能力.另外,未来检索人员的工作将由检索服务转变为指导检索,也就是指导使用者如何更有效地联机,输人检索指令及操作计算机.

4.存在问题

实现科技档案管理的数字化管理,并不意味着废弃对传统科研档案原件的收藏与保管工作.一些档案原件(如科研人员的手稿,科学实验的原始记录等)是极为珍贵的文献,管理者除了应对其进行专业技术性加工保存或呈送上级档案馆收藏之外,还应利用现代科技手段(如声像技术)输人计算机,使之转化为电子文档.同时档案格式必须标准化,当电子档案仍然以主机电脑产生的数据,数据库,文字,图形为主的时候,档案人员是可以把格式进行标准化的要实现档案信息在网络环境下的共享,标准化是必不可少的前提.加强电子档案利用中的标准化体系是提供网络档案利用服务的前提和基础这一标准化体系应当包括电子档案形成的标准化和电子档案存储与交换的标准化.在制定标准时还必须与国际标准接轨,如档案着录项目的名称,数据类型和长度,主题词库,分类号库及基本的表格等.

4.1高校档案管理工作要解放思想,更新观念.

实行网络化管理,广泛运用计算机和网络技术,这对给高校档案工作提出了更新,更高的要求,高校档案界必须更新观念,树立资源共享意识.为解决档案信息资源的分散性和利用者对档案信息需求的综合性矛盾,高校的档案管理工作必须树立为整个社会服务的意识和分工协作,资源共享的新观念.为满足各个行业,各种层次的刊用需求,要提倡和鼓励档案系统内外部之间的棚互信息交流与合作,逐步做到在信息资源服务整体化.另外要强化服务意识.高校档案管理工作足一项保管和提供档案为社会服务的工作,高校如果能够紧紧围绕着为学校发展和学生成长服务,为社会服务这一主题来开展工作,高校档案事业生存发展的空间就会拓宽.

4.2培养档案业务和计算机管理专用人才

高校档案管理工作者除了有强烈的事业心和历史责任感外,还要不断进行理论和实践探索,要成为既懂档案业务,又懂现代化科技知识的新型档案管理人员.要彻底改革学生档案工作的程序,敢冒风险,推陈出新,加速学生档案实现网络化管理的进程以适应高校发展的需要.

4.3运用新技术处理电子文件归档与泄密问题

电子文件日益增加,电了文件与纸质文件的归档问题已不容忽视.为防止电子文件的失真,清除不安全隐患,如非法增加,删除,修改等,电子文件与纸质文件应按时归档,对重要文件要及时打印.电子文件寿命的短暂性及对环境的依赖性决定其不能轻易取代纸质文件.重要的电了文件需要同时保存纸质备份.同时,应注意网络化后,电于文挡的保密问题.传统的纸质文件在固定的阅览用户被提供利用,专人负责接待,更宜于做到保密.电子文件因问和技术范畴,则不宜做到保密.当电子文件在网上运行时,档案的内容易被第三者了解,第三者可在短时间内查到.为此,高校档案在网上运行时易泄密.这要求我们加强对信息防范技术增加投入,不断完善技术保障.

5.参考文献

[1]林杰斌刘明德MIS管理信息系统[M]清华大学出版社,2006鲁晓莹傅德彬MIS解决方案[M]国防工业出版社,200JSP信息系统开发实例精选[M].清华大学出版社,2004尹丽梅谈高校档案管理多媒体信息系统[J]佳木斯教育学院学报,20061:97-98.

[5]徐海平.浅谈学生档案管理系统[J].《中国科技信息》,200王雯张李义陈雄基于模式的企业档案管理系统研究[J]机电产品开发与创新,200-25.

[7]赵红波申源数字化档案管理系统[J]机电兵船档案,200-12.

[8]LIANG.INTRODUCTIONTOJAPROGRAMMING-COMPREHENSIVEVERSION6/E[M].全华出版社,200JACKSON.WEBTECHNOLOGIES:ACOMPUTERSCIENCEPERSPECTIVE[M].全华出版社,200 开题报告内容

(包括选题的背景与意义,研究的基本内容与拟解决的主要问题,研究的方法与技术路线,研究的总体安排与进度,主要参考文献)

学生档案管理系统

1.选题的背景与意义

档案是国家机关,团体及企事业单位在从事各种社会活动,生产活动和科研活动过程中,形成的具有一定价值的材料或实物.档案管理无论对档案馆还是基层单位,都是一项不可或缺的重要工作,档案管理的任务是科学地保管和有效地利用.随着科学技术的不断发展,学生档案管理的现代化显得越来越迫切,越来越重要.现代化管理是相对传统管理而言的.它是以系统论为基础,以数学方法为工具,借助计算机,数字通信等技术,组成最佳的有机体系,并充分发挥管理人员的积极性,以取得被管理对象在确定目标下,其整体动态达到最佳效果.

学生档案管理系统对档案进行综合管理,实现了档案数据的等功能,提高了档案整理,编目和保管水平,减轻了档案工作人员的劳动强度,提高了工作效率,提高档案行业的信息化MIS),就整个系统的技术构成上来看,它是一个属于基于B/S开发模式的数据库应用类的系统.其基本操作是通过浏览器对在服务器上的数据库进行数据添加,删除,查找,编辑,运算等.数据库方面没什么大的技术问题,B/SJSP和Bean模式,暂不存在太大的技术问题.

2.3经济可行性

通常,搭建一个基于C/S技术的管理系统,需要购买服务器,客户机,操作系统,相关管理软件的服务器端和客户端,配置网络,以及服务器端和客户端的维护需要不少的资金投入,而且日后的维护管理,系统的升级等将是非常大的一笔费用.而采用B/S技术,特别是JSP技术,只用搭建不依赖于操作系统,数据库及Web服务器.例如可采用性能稳定的开放源代码Linux操作系统,免费的MySQL数据库及Apache(内嵌Tomcat)服务器.实践证明,这些开源软件的品质和性能都是非常稳定可靠的.

总体而言,采用B/S的开发模式对本项目有以下几点好处:

较低廉的开放的非专用的标准,B/S技术所&

本文是一篇数据库论文范文,关于数据库大学毕业论文,关于文献综述内容相关毕业论文的格式范文。适合数据库及管理系统及档案管理方面的的大学硕士和本科毕业论文以及数据库相关开题报告范文和职称论文写作参考文献资料下载。

#22522;于的标准是开放的,非专有的,

低开发,管理成本:C/S结构的应用,无论是安装,配置还是升级都需要在所有的客户机上实施,而B/S技术较为低廉,一般只需安装,配置在服务器上,

对信息及应用系统的自由访问,

在已经建立的网络基础上,用户均可自由,主动地访问信息和系统资源,

培训成本低:浏览器的技术简单易用,一旦用户掌握了浏览器的用法,也就可以掌握如何运用系统上各种信息资源,

日后升级可以本系统为模板,增加其他相关模块,节省开发时间,难度及金钱.

3.研究的基本内容

3.1Eclipse开发环境

Eclipse是一个开放源代码的基于Ja的软件开发项目,专注于为高度集成的工具开发提供一个全功能的,具有商业品质的工业平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境.Eclipse附带了一个标准的插件集,包括Ja开发工具(JaDevelopmentTools,JDT).虽然大多数用户很乐于将Eclipse当作JaIDE来使用,但Eclipse的目标不仅限于此.Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具.由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所.session对象中,而在后续页面中,都会进行相应的处理之前检查用户名是否存在,如果用户名为空,则意味这是一个没有经过登录页面身份验证的非法闯入者,将不允许进行后面的处理.

4.研究的方法与技术路线

本系统是基于B/S模式的,考虑到兼容性,跨平台性,可行性等多方面因素,因此将采用JSP+JaBean或者JSP+JaBean+Severlet.JaBeanMVC(Model-View-Controller)设计模式的JaWeb前端应用,MVC模式最重要的思想就是业务代码与视图代码分离.能有效地理清系统结构,降低系统复杂度与维护难度,使日后的升级再开发成为可能.

开发环境:数据库决定采用SQLServer,在JSP中访问SQLServer数据库的方式有以下三种:

通过JDBC驱动连接,

通过JDBC-ODBC桥接方式连接,

配置数据库连接池连接SQLServer数据库,

本系统暂时考虑用数据库连接池来连接SQLServer数据库.开发工具方面暂定为TomCat+J2SDK1.4.2+eclipse3.2用于开发JaBean,Jacript,Dreamweer8.0用于JSP页面的具体布局和美观性.运行环境:服务器端:p41.8GHz以上+256MB+40GB+10/100MWINDOWS2000/2003SERVER,IE6.0,TOMCAT5.0,J2SDK1.p3500MHZ(以上)+128MB+10GB10/100M自适应网卡.windows98/2000/xp/2003+IE6.0.Eclipse环境的熟悉与开发,

客户通过IE顺利访问服务器,

利用JABean建立与数据库的连接,查询,修改,插入,删除数据,

用Dreamweer来解决JSP页面的布局,美化,

系统通过JABean来实现模块化,

6.研究的总体安排与进度

时间毕业设计(论文)阶段工作安排2.13-3.8查阅文献和调研,收集资料进行归纳与概括,拟定开题报告3.8-3.23开题报告修改,准备开题3.23-3.28总体设计3.28-4.3详细设计4.3-4.25编码实现4.26-5.5测试5.6-5.20撰写毕业论文5.21-5.31修改毕业论文,准备答辩7.预期结果

通过一定安排,预计在5月底之前能完成所有毕业设计,包括开题报告,总体设计,详细设计,学生档案管理系统的编码和相应的PPT,同时对整个系统的各个功能模块的测试.

8.主要参考文献

[1]曹广鑫,数据库项目开发宝典[M]电子工业出版社,2006[M].人民邮电出版社,2004耿详义,张跃平JSP实用教程[M]清华大学出版社,2004JSP信息系统开发实例精选[M].清华大学出版社,2004JSP信息系统设计与开发实例[M].机械工业出版社,2004 外文翻译稿

用模拟对象和AOP来单位试验Struts的应用

AOP如何补足OOP来缩小整合间隙

作者WalterJia,JaWorld.,11/09/06

试驱动开发减少发展努力提高软件质量作为一个整体试策略的基础单试必须是全面设置简单执行但是依赖于环境和达到上述目标部署放慢代码和试验周期此外与其他会导致更加复杂试设置较慢的测试整合两个流行测试架StrutsTestCase和EasyMock,和单元试Struts的应用导致试设置的试但是这两个框架留下缺口,在这篇文章中我检查对象办法方面解决比较也显示的程序设计(AOP)补对象编程(OOP)整合的Struts应用执行环境因为Struts的Servlet的容器典型其他要求模拟对象测试方法,有助于消除不必要的附庸trutstestcase的试框架一个模拟的Servlet的执行ockstrutstestcase课堂,延伸JUnit的试用例有利于科装箱检验单位检验周期Easymock,另一个测试框架很容易地模拟动态的协作代替真正的逻辑论证单Struts的应用你要下列步骤实施这个单MockStrutsTestCase,以便于模拟Servlet的容器模拟这一行为取决于使用asymock,

规定模拟预期,

在测试时把模拟注入到行为,

继续试验与论证,

第四步履行了注入依赖,这种注入在试验下,指导Struts的行为远离其真正合作者EasyMock产生的模拟注入到行为,你需要进入试验班的行为事例不幸的是这是一个障碍因为不易进入ockstrutstestcase.

OOP解决方案

你能从ockstrutstestcase进入行为事例ockstrutstestcase和Struts的控制器组成部分之间的关系.

图1突出主要关系有可能导致一个解决办法

图1.关系可能导致一个的办法ActionServlet和RequestProcessor来给MockStrutsTestCase提供行为的通路吗随之发生呼叫链条将是:

myActionTest.getActionServlet().getRequestProcessor().getActions().

当你看着那种把MockStrutsTestCase和Struts行为联系起来的呼叫的序列,这种方法就不管用了.

图2说明了MockStrutsTestCase和Struts组成部分的主要关系.

图2MockStrutsTestCase和Struts组成部分之间的相互影响

如图2所示,问题包括Struts行为创造的定时.模拟注入到行为要在对MockStrutsTestCase.actionPerform()的呼叫之前发生.然而,只有在对actionPerform()进行访问之后,actionPerform()才创造行为事例.因为你不能容易地向MockStrutsTestCase传播行为事例,为什么不访问基类RequestProcessor,不考虑processActionCreate()方法呢在不考虑方法中,你可以使用所有的行为事例,所以为正确的行为事例创建,配置,设定一个模拟变得简单直接了.因为MockControl.verify()应该在actionPerform()之后被呼叫,你也需要不去考虑processActionPerform()来确认这次访问.

这种方法来试验重大的Struts的应用是不切实际的.即使所有的行为都与一个简单的模拟相互影响,相互作用,测试一个行为很可能需要多样的试验方法,每个都伴随着不同的预期.建议的解决方案不会再创建不同的RequestProcessor基类,每个都设立不同的模拟预期.多样的Struts配置文件也需要详细说明不同的RequestProcessor基类.管理许多的试验会成为一件头痛的事.

AOP解决方案

因此,不知是什么原因,在行为执行之前使行为事例可用于MockStrutsTestCase仍然是可取的.如果你熟悉AOP,你认出向这要求直接被安置的简单解决方案.关键是要定义一个捕获行为执行连接处点的pointcut,然后在把模拟注入到行为之前详细说明一个建议.

在这里,我选择AspectJ来实现这个解决方案.其它AOP工具,比如SpringAOP,应该正常工作.SpringAOP要求一个额外的委派Struts行为管理为代表来触发Spring'sDelegatingActionProxy的措施.

图3用以AOP为基础的解决方案,展示了单位试验例子的静止模型.

图3.以AOP为基础的解决方案,展示了单位试验例子的静止模型

SimpleAction是一个Struts行为的基类,与ActionService合作.SimpleActionTest来自MockStrutsTestCase去测验SimpleAction.

SimpleActionTest用EasyMock创造,建立一个模拟ActionService.

当SimpleAction的执行方法将要运行时,SimpleActionTest也执行StrutsActionPreExecuteListener界面来接收通知.作为通知的一部分,SimpleActionTest收到SimpleAction例子来注入ActionService模拟.它是通知任何试验组的方面课StrutsActionPreExecuteNotifier,这些班级执行听者界面,使行为事例可用.

StrutsActionPreExecuteNotifier的执行步骤如下:

首先,一个pointcut选择测试方法施行点.这种测验方法在等着听行为预执行的事件的试验种类过程中存在.pointcut暴露当前的执行测试组对象:pointcutmockStrutsTest(StrutsActionPreExecuteListeneractionTest):

execution(publicvoidStrutsActionPreExecuteListener+.test*())&,&,this(actionTest),

其次,另一个pointcut捕获行为施行点.pointcut结合起来,匹配的范围被限制在行为测试方法的流程之内.被减少的范围过滤掉测试方法触发的行为施行.结果方面不影响生产代码.行为和它对应的测试组事例通过pointcut参量被暴露pointcutstrutsActionExecute(Actionaction,StrutsActionPreExecuteListeneractionTest):

execution(publicActionForwardAction+.execute(..))&,&,this(action)&,&,cflow(mockStrutsTest(actionTest)),

最后,一个以前的与早先的pointcut相关的建议通知行为事件的听者before(Actionaction,StrutsActionPreExecuteListeneractionTest):

strutsActionExecute(action,actionTest){actionTest.preActionExecuteOccurred(action),}

图4说明

图4组之间的动态的相互作用

从行为到方面

本文是一篇数据库论文范文,关于数据库大学毕业论文,关于文献综述内容相关毕业论文的格式范文。适合数据库及管理系统及档案管理方面的的大学硕士和本科毕业论文以及数据库相关开题报告范文和职称论文写作参考文献资料下载。

340;虚线代表行为施行接合点的捕获.把这第二张程序表与第一张比较,重大区别是三个步骤发生在行为施行之前pointcut捕获行为执行连接处点,由从SimpleAction到StrutsActionPreExecuteNotifier奔忙的箭头表明.

方面的以前的建议通知试验组,把相应的行为事例传给它.

试验组把模拟对象注入到即将要开始执行的行为事例.

现在你可以根据先前概述的五个步骤来继续写行为试验.下面代码显示了为SimpleActionTest列出的部分代码,有一列式的注释来强调每个步骤:

使用MockStrutsTestCase和EasyMock的行为试验的部分列表

publicclassSimpleActionTestextendsMockStrutsTestCase

implementsStrutsActionPreExecuteListener{

//2.MocktheclassthatActiondependson

privateMockControlmockControl等于MockControl.createControl(ActionService.class),

privateActionServiceserviceMock等于(ActionService)mockControl.getMock(),

//1.SetupMockStrutsTestCase

protectedvoidsetUp()throwsException{

super.setUp(),

setRequestPathInfo("/action/simpleAction"),

}

protectedvoidtearDown()throwsException{

super.tearDown(),

mockControl.reset(),

}

//4.InjectthemockintotheAction

publicvoidpreActionExecuteOccured(Actionaction){

((SimpleAction)action).setService(serviceMock),

}

publicvoidtestSuccess(){

//3.Setmockexpectations

serviceMock.serveAction(),

mockControl.setReturnValue(true),

mockControl.replay(),

//5.Proceedwithtestandverifications

actionPerform(),

verifyForward("success"),

verifyNoActionErrors(),

mockControl.verify(),

}

publicvoidtestFailure(){

//detailsskipped

}

}

四种可能的多重性关系存在于行为和它们所依赖的服务之间:

1,每个行为依赖一个服务.

2,每个行为依赖多个服务.

3,多个行为依赖一个服务.

4,多个行为依赖多个服务.

我这里介绍的解决方案有灵活性,相对不费力地支持所有四种方案.因为模拟创造,期望计划,和模拟注射能完全在个人试验组中执行.

你能避免使用听者界面,以便模拟注射在StrutsActionPreExecuteNotifier内执行吗它似乎使试验课执行变得甚至更简单.然而,与初期的OOP解决方案相似,写多重方面来创建不同的模拟,制定不同的模拟期望将会证明是必然.使模拟创造和在由于听者方法成为可能的个人试验组中的计划局部化变得更加方便.

AOP的力量

有人可能会提出一个好的OOP解决方案来解决我们的整合问题.然而,它很可能要求对Struts和StrutsTestCase有深入的理解,还要有很大的努力.存在于两个试验框架之间的整合间隙是在它的执行以前获得使用Struts行为事例的权利的难点.在确定基本原因之后,AOP解决方案自然地从问题描绘出现.代替用传统OOP要求更复杂解决方案,AOP允许我们更紧密把我们解决方案映射到有问题的空间.AOP的魅力在于它的连接处点样式.它让你穿透媒介物,例如ActionServlet和RequestProcessor,直接到达问题的中心.忙于横切关注的省时间的方式给开发者表现的力量去设计直觉的和更简单的解决方案.AOP是一填充由传统OOP留下的洞的有功效的编程方法.当正确适用于正确的类型的问题的时候,它改进代码组件性,导致更干净,更容易理解的代码.有希望地,这文章不仅帮你单位试验你的Struts的应用,也给你对一些AOP给予的重要利益的新的评价.

作者Bio

WalterJia是加拿大温哥华的一个专门从事企业应用程序开发的独立顾问.当用一个实际的方法来帮助客户建设品质软件,避开不必要的成本时,他总是能给出最好的解决方案.

外文原稿

UnittestStrutsapplicationswithmockobjectsandAOP

HowAOPplementsOOPtobridgetheintegrationgap

ByWalterJia,JaWorld.,11/09/06

Test-drivendevelopmentimprovessoftwarequalitywhilereducingdevelopmentefforts.Asthefoundationofanoverallteststrategy,unittestustbeprehensive,easytosetup,andquicktoexecute.However,thedependencyontheexecutionenvironmentandoncodeoutsidetheclassundertestplicatesourabilitytoachievethesegoals.Deployingtheapplicationinacontainersignificantlyslowsdownthecode-and-testcycle.Furthermore,theneedtocollaboratewithotherclassesusuallyleadstomoreplextestsetupsandslowertestruns.

Integratingtwopopulartestframeworks,StrutsTestCaseandEasyMock,tounit-testStrutsapplicationsleadstoeasiertestsetupsandfastertestruns.However,thesetwoframeworksleeagapthatpreventsanidealintegration.Inthisarticle,Iexaminebothanobject-orientedsolutionandanaspect-orientedsolutiontothisproblem.Theparisonalsodemonstrateshowaspect-orientedprogramming(AOP)plementsobject-orientedprogramming(OOP)bysimplifyingthesolutiontoaseeminglydifficultproblem.

Theintegrationneed

Non-trivialStrutsapplicationsexhibitbothexecutionenvironmentandclassdependenciesbecauseStrutsactionsexecuteinaservletcontainerandtypicallycallotherclassestoprocesstherequests.Themockobjecttestingapproachhelpsremovetheunwanteddependencies.TheStrutsTestCasetestingframeworkprovidesamockimplementationoftheservletcontainerwiththeMockStrutsTestCaseclassthatextendsthebaseJUnittestcase.Itfacilitatesout-containertestingthatspeedsupunittestingcycles.EasyMock,anothertestingframework,makesiteasytodynamicallymockthecollaboratingclasses.Themockssubstituterealclasseswithsimplerimplementationsandaddverificationlogictosupportunittesting.

Clearly,itisadvantageoustobinethetwoframeworkssothatStrutsapplicationscanbetestedintrueisolation.Ideally,youwanttoimplementsuchaunittestwiththefollowingsteps:

SetupMockStrutsTestCasesothatitsimulatestheservletcontainer.

MocktheclassthattheactiondependsonusingEasyMock.

Setmockexpectations.

Injectthemockintotheactionundertest.

Proceedwiththetestandverifications.

Step4performsdependencyinjectionthatsteerstheStrutsactionundertestawayfromitsrealcollaboratortointeractwiththemockedone.ToinjectthemockgeneratedbyEasyMockintoactions,youneedaccesstoactioninstancesinthetestclasses.Unfortunately,thispresentsanobstacle,asaccessisnoteasilyobtainedfromMockStrutsTestCase.

TheOOPsolution

HowcanyouaccesstheactioninstanceromMockStrutsTestCaseLet'slookattherelationshipsbetweenMockStrutsTestCaseandthecontrollerponentsofStruts.

Figure1highlightsthekeyrelationshipsthatcouldpotentiallyleadtoasolution.

Figure1.RelationshipsthatcouldleadtoanOOPsolution.

MockStrutsTestCasehasapublicgettermethodforretrievingActionServlet.

ActionServlethasaprotectedgettermethodforRequestProcessor.

RequestProcessorstorestheactioninstancesasaprotectedmember.

CanyousubclassbothActionServletandRequestProcessortoprovideMockStrutsTestCasetheaccesstotheactionsTheresultingcallchainwouldbe:myActionTest.getActionServlet().getRequestProcessor().getActions().

Thisapproachdoesn'tworkwhenyoulookatthesequenceofcallsthatlinkMockStrutsTestCasetoStrutsactions.

Figure2illustratesthekeyinteractionsbetweenMockStrutsTestCaseandStrutsponents.

Figure2.InteractionsbetweenMockStrutsTestCaseandStrutsponents.

Theproblem,asshowninFigure2,involvesthetimingofStrutsactioncreation.MockinjectionintotheactionsneedstohappenbeforethecalltoMockStrutsTestCase.actionPerform().However,theactionsarenotyetailablebecauseonlyafterthecalltoactionPerform()doesRequestProcessorcreatetheactioninstances.

SinceyoucannoteasilypropagatetheactioninstancetoMockStrutsTestCase,whynotjustsubclassRequestProcessorandoverridetheprocessActionCreate()methodIntheoverriddenmethod,youheaccesstoalltheactioninstances,socreating,configuring,andsettingamocktotherightactioninstancebeesstraightforward.BecauseMockControl.verify()shouldbecalledafteractionPerform(),youalsoneedtooverrideprocessActionPerform()tomaketheverificationcall.

Thissolutionisimpracticalfortestingnon-trivialStrutsapplications.Evenifallactionsinteractwithasinglemock,testingoneactionwouldlikelyrequiremultipletestmethods,eachwithdiffe

本文是一篇数据库论文范文,关于数据库大学毕业论文,关于文献综述内容相关毕业论文的格式范文。适合数据库及管理系统及档案管理方面的的大学硕士和本科毕业论文以及数据库相关开题报告范文和职称论文写作参考文献资料下载。

rentmockexpectations.TheproposedsolutionwouldendupcreatingdifferentRequestProcessorsubclasses,eachsettingdifferentmockexpectations.MultipleStrutsconfigurationfilesarealsoneededtospecifythedifferentRequestProcessorsubclasses.Managingalargenumberoftestswouldbeeaheadache.

TheAOPsolution

Thus,somehowmakingtheactioninstanceailabletoMockStrutsTestCasebeforetheactionexecutesisstilldesirable.IfyouarefamiliarwithAOP,yourecognizethesimplesolutionthatdirectlymapstothisrequirement.Thekeyistodefineapointcutthatcapturestheactionexecutionjoinpointandthenabeforeadvicetoinjectthemockintotheaction.

Here,IchoseAspectJtoimplementthesolution.OtherAOPimplementationssuchasSpringAOPshouldworkaswell.SpringAOPwouldrequireoneextrastepthatdelegatesStrutsactionmanagementtoSpringwithSpring'sDelegatingActionProxy.

Figure3showsthestaticmodeloftheunittestexamplewiththeAOP-basedsolution.

Figure3.StaticmodeloftheunittestexamplewiththeAOP-basedsolution.

SimpleActionisasubclassofaStrutsactionandcollaborateswithActionService.SimpleActionTestderiveromMockStrutsTestCasetotestSimpleAction.

SimpleActionTestcreatesandsetsupamockActionServiceusingEasyMock.SimpleActionTestalsoimplementstheStrutsActionPreExecuteListenerinterfacetoreceivenotificationwhenSimpleAction'sexecutemethodisabouttorun.Aspartofthenotification,SimpleActionTestreceivestheSimpleActioninstancetoinjecttheActionServicemock.ItistheaspectclassStrutsActionPreExecuteNotifierthatnotifiesanytestclassthatimplementsthelistenerinterfaceandmakestheactioninstanceailable.

HereishowStrutsActionPreExecuteNotifierisimplemented:

First,apointcutselectsthetestmethodexecutionjoinpoint.Thetestmethodresidesinthetestclassthatlistenortheactionpre-executeevent.Thepointcutalsoexposesthecurrentexecutingtestclassobject:

pointcutmockStrutsTest(StrutsActionPreExecuteListeneractionTest):execution(publicvoidStrutsActionPreExecuteListener+.test*())&,&,this(actionTest),

Next,asecondpointcutcapturestheactionexecutionjoinpoint.Combiningitwiththefirstpointcut,thematchingscopeislimitedtowithinthecallflowoftheactiontestmethod.Thereducedscopefiltersoutactionexecutionthatisnottriggeredbythetestmethods.Asaresult,theaspectdoesnotaffectproductioncode.Boththeactionanditscorrespondingtestclassinstancesareexposedviapointcutparameters:

pointcutstrutsActionExecute(Actionaction,StrutsActionPreExecuteListeneractionTest):

execution(publicActionForwardAction+.execute(..))&,&,

this(action)&,&,

cflow(mockStrutsTest(actionTest)),

Finally,abeforeadviceassociatedwiththepreviouspointcutnotifiesthetestclasses,whoarelistenersoftheactionevent,andpassesalongtheactioninstanceformockinjection:

before(Actionaction,StrutsActionPreExecuteListeneractionTest):

strutsActionExecute(action,actionTest){

actionTest.preActionExecuteOccurred(action),

}

Figure4illustratesthedynamicinteractionsamongtheclasses.

Figure4.Dynamicinteractionsamongtheclasses.

Thedottedlinegoingfromtheactiontotheaspectrepresentsthecaptureoftheactionexecutionjoinpoint.Comparingthissecondsequencediagramtothefirstone,thesignificantdifferencesarethethreestepsoccurringjustbeforeactionexecution:

ApointcutcapturestheactionexecutionjoinpointindicatedbythedashedarrowgoingfromSimpleActiontoStrutsActionPreExecuteNotifier.

Theaspect'sbeforeadvicenotifiesthetestclassandpassesthecorrespondingactioninstancetoit.

Thetestclassinjectsthemockobjectintotheactioninstancethatisabouttostartexecuting.

Youcannowproceedwithwritingtheactiontestollowingthefivestepsoutlinedpreviously.ThecodebelowshowsthepartialcodelistingforSimpleActionTest,withinlinementshighlightingeachstep:

PartiallistingoftheactiontestusingbothMockStrutsTestCaseandEasyMock

publicclassSimpleActionTestextendsMockStrutsTestCase

implementsStrutsActionPreExecuteListener{

//2.MocktheclassthatActiondependson

privateMockControlmockControl等于MockControl.createControl(ActionService.class),

privateActionServiceserviceMock等于(ActionService)mockControl.getMock(),

//1.SetupMockStrutsTestCase

protectedvoidsetUp()throwsException{

super.setUp(),

setRequestPathInfo("/action/simpleAction"),

}

protectedvoidtearDown()throwsException{

super.tearDown(),

mockControl.reset(),

}

//4.InjectthemockintotheAction

publicvoidpreActionExecuteOccured(Actionaction){

((SimpleAction)action).setService(serviceMock),

}

publicvoidtestSuccess(){

//3.Setmockexpectations

serviceMock.serveAction(),

mockControl.setReturnValue(true),

mockControl.replay(),

//5.Proceedwithtestandverifications

actionPerform(),

verifyForward("success"),

verifyNoActionErrors(),

mockControl.verify(),

}

publicvoidtestFailure(){

//detailsskipped

}

}

Fourpossiblemultiplicityrelationshipsexistbetweenactionsandtheservicestheydependon:

Eachactiondependsononeservice.

Eachactiondependsonmultipleservices.

Multipleactionsdependononeservice.

Multipleactionsdependonmultipleservices.

ThesolutionIpresentherehastheflexibilitytosupportallfourscenarioswithrelativeeasebecausemockcreation,expectationsetup,andmockinjectioncanallbeperformedintheindividualtestclasses.

CanyouoidusingthelistenerinterfacesothatmockinjectionisdoneinsideStrutsActionPreExecuteNotifierItseemstomaketestclassimplementationevensimpler.However,similartotheearlierOOPsolution,writingmultipleaspectstocreatedifferentmocksandsetupdifferentmockexpectationswouldprovenecessary.Localizingthemockcreationandsetupinindividualtestclassesaadepossiblebythelistenerapproachioreconvenient.

ThepowerofAOP

SomeonemayeupwithagoodOOPsolutiontoourintegrationproblem.However,itwouldlikelyrequirein-depthunderstandingofStrutsandStrutsTestCase,andanon-trivialamountofeffort.TheintegrationgapbetweenthetwotestingframeworksisthedifficultyingainingaccesstotheStrutsactioninstancebeforeitsexecution.Afteridentifyingthefundamentalcause,theAOPsolutionnaturallyemergeromtheproblemdescription.InsteadofthemoreplexsolutionrequiredwithtraditionalOOP,AOPallowsustomapoursolutionmorecloselytotheproblemspace.

AOP'agiclieswithitsjoinpointmodel.Itletsyoucutthroughintermediaries,suchasActionServletandRequestProcessor,andgostraighttotheheartoftheproblem.Theeconomicalwayofaddressingcrosscuttingconcernsgivesdeveloperstheexpressivepowertodesignintuitiveandsimplersolutions.AOPisapowerfulprogrammingapproachthatfillstheholesleftbytraditionalOOP.Whenappliedcorrectlytotherighttypeofproblems,itimprovescodemodularity,resultingincodethatiscleanerandeasiertounderstand.Hopefully,thisarticlenotonlyhelpedyouunittestyourStrutsapplications,butalsogeyounewappreciationforsomeofthesignificantbenefitsthatAOPoffers.

AuthorBio

WalterJiaisanindependentconsultantspecializinginenterpriseapplicationdevelopment.Heisalwaysonthelookoutforbettersolutionswhiletakingapragmaticapproachtohelpingclientsbuildqualitysoftwareandoidunnecessarycosts.HeisbasedinVancouverCanada.

开题报告(含文献综述,外文翻译)评语表

姓名学号班级指导教师对文

本文是一篇数据库论文范文,关于数据库大学毕业论文,关于文献综述内容相关毕业论文的格式范文。适合数据库及管理系统及档案管理方面的的大学硕士和本科毕业论文以及数据库相关开题报告范文和职称论文写作参考文献资料下载。

献综述的评语:

指导教师对开题报告的评语:

指导教师对译文的评语:

指导教师签名:

年月日答辩小组对开题报告(含文献综述,外文翻译)的评语:

答辩小组负责人签名:

年月日

相关论文

建筑文文献综述的基本内容要求

本文关于参考文献及文献综述及建筑设计方面的免费优秀学术论文范文,关于参考文献方面论文范文数据库,与建筑文文献综述的基本内容要求相关。

有关财务危机预警的文献综述

本文是一篇财务危机论文范文,关于财务危机类本科毕业论文范文,关于有关财务危机预警的文献综述相关毕业论文题目范文。适合财务危机及统计类。

会计政策选择动机文献综述

本文是一篇文献综述论文范文,关于文献综述方面毕业论文开题报告范文,关于会计政策选择动机文献综述相关学年毕业论文范文。适合文献综述及会。

财务管理目标文献综述

本文是一篇财务管理目标论文范文,财务管理目标方面毕业论文参考文献格式,关于财务管理目标文献综述相关学士学位论文范文。适合财务管理目标。

开题报告文献综述范文

本文是一篇规模经济论文范文,关于规模经济相关在职研究生毕业论文,关于开题报告文献综述范文相关研究生毕业论文开题报告范文。适合规模经济。

关于思想政治教育学对象的文献综述

本文是一篇思想政治教育学论文范文,关于思想政治教育学方面自考毕业论文开题报告,关于关于思想政治教育学对象的文献综述相关本科论文范文。。

我国社会医疗保险改革文献综述

该文为社会医疗保险有关函授毕业论文范文,与我国社会医疗保险改革文献综述相关论文参考文献哪里找,可作为参考文献专业社会医疗保险论文写。

上市公司高管离职文献综述

这篇公司金融论文范文属于参考文献免费优秀学术论文范文,公司金融相关毕业论文格式范文,与上市公司高管离职文献综述相关论文参考文献标注。。