软件再工程的深层研究与应用
摘 要:随着计算机日异月新的发展,当今的软件并非如上世纪那样仅仅满足当前的需求就可以,当代的客户对软件的要求也越来越高,所以现在的软件工程师在研发软件时就必须考虑到软件的回收问题,而软件再工程则是对遗产系统的再利用,如何更好地利用遗产系统进行开发新系统,是软件再工程现在重要的研究课题,件再工程正是在这种情况体现出了它无可替代的地位。软件再工程面临的遗留系统往往都是十分复杂的。想完全依靠程序员的手动完成系统的重构件时十分困难的。所以很多软件组织就致力在如何研究出一些自动化的工具。而且也取得了一定的效果,所以对软件再工程的研究在国内也越来越重视,并且意义重大。
关键词:软件;再工程;深层研究
1.软件再工程的概念
软件工程是针对软件危机而诞生的,它是一种工程即:把理论上的知识结合经验应用到实践中得出结果以便于解决软件研发中的各种矛盾。简单点的来说,软件工程就是一种工具的体现,是用来解决软件开发过程中出现的实际问题,反而言之,如果再软件研发中没有任何问题的出现,则软件工程就是无用的,但是这样的情况在概率上是几乎为零,所以软件工程则是不可缺少的。软件工程不是一个固定的框架结构,而是一个具有弹性的概念,所以,如果不是要去申请iso或者是cmm的认证,万群不必要按早两者的规范去做。所谓的“由企业特色的软件工程”则完全可以吸收现有的模式和规范去完善自身。所以软件工程的意义在于对开发阶段的划分,以及分工和管理。在开发过程中把一个大的项目划分为若干个小的模块,对这些模块在接着划分为更小的模块以便于开发。如果每个小模块又是功能独立的,那么软件工程则提高了他们的重用性。节省了部分时间和开发人员的精力,提高了开发的效率。
2.软件再工程的类型
软件再工程发生于软件生命周期的软件维护极端,因此软件再工程主要可以分为4类,即改正性再工程、适应性维护的软件再工程、完善性维护的软件在工程和预防性维护的软件再工程。
其中改正性再工程:在任何大型软件的寿命期间,软件系统的使用方总会发现软件的错误的地方,并且他们把遇到的错误告诉软件的开发方,其确认错误和修改错误的过程称为改正性再工程。这个方面的再工程占到整个再工程中的五分之一左右;
适应性软件再工程的的特点为:a:由于硬件和操作系统的更新换代而到时的软件维护;b:由于业务环境、业务流程变化导致的软件维护;c:由于系统软件的欲行环境改变和以前带来的修正;d:为了适应软件系统开发环境的变化而采取的软件维护;
完善性维护的软件再工程的特点:这是为了扩充功能和改善性能而进行的再工程。主要是针对已有的系统在分析和设计阶段增加一些新的功能以便于完善整个系统。这个方面占据了系统在工程的百分之五十左右,也是其中最大一部分,关系到软件开发质量决定性因素。当然这个部分就相当的重要,其各个步骤都显得尤其的中要了例如其中的系统分析和结构的完善。
预防性维护的软件再工程:这样的再工程是为了以后的再工程打下了良好的基础,把此次的再工程的所有步骤做成详细的报表存档,以便于以后遇到相似的问题或者软件运行中的各种类似情况的发生得到更为迅速与完美的解决。
3.软件再工程的目标
软件是应用在计算机上,按照计算机能识别的语言即机器语言的规则进行组合而成,而又能够完成用户某些要求的计算机指令集合。一般对软件的划分有系统软件和应用软件,前者是运行在计算机的底层的,平常的用户是很少对他进行接触,它是计算机正常工作的必要的东西。但是不能完成某些特定的功能。而后者即应用软件则正好和前者相反。它是在不同领域不同的人对某一个特定的领域内的知识进行某类操作的集合。例如一些数学公式软件。编写代码软件等。同时从哲学上说软件也是客观世界的一种反映,是知识的提炼和升华,客观世界是在不断的发展和变化,所以软件也要跟着变化、升级。
而本文所叙述的软件再工程都是基于后者(应用软件)的基础之上,对其进行的重用。它的目的就是改善软件的结构性、增强软件的进化型。它所实行的对象是使用中的系统即前文所说的“遗留系统”,这些系统缺少良好的编码风格和设计结构,所以对它们的修改时会耗费大量的人力和物力。而且有些软件的使用单位对其的依赖性很也大,不愿意或者不能够及时的跟换新的软件,所以软件再工程所面对的挑战就是如何对这些遗留系统的研究分析,总结归纳,在遗留系统的基础上重新构造一个新软件系统。一般来说,软件再工程的具体目标有如下几个方面:
(1)付出较低的开发成本。即在遗留系统的基础做开发工作会减少一些基础性的研发,降低了大量的开发时间。从而降低开发成本。
(2)达到要求的软件功能。当然对客户提出的新的要求,作为软件开发者必须要满足这个最低的要求。
(3)取得较好的软件性能。这点对于当今的软件开发者来说是很重要的,在当下的竞争力极强的社会,只有你的软件在低成本,高效果的情况下才能有更好的效果,然而低成本来说对于各个开发商来说都差不多,原因在于大家所拥有的都是同一个遗留系统。所以只有自己的软件有更好的性能已经各个方面的效果才能带来更高的效益。
(4)开发的软件易于移植。对于不同的平台来说现在很多的开发工具都支持平台移植。
(5)需要较低的维护费用。这点就充分利用到了软件工程方面的知识,软件的维护对于使用方还是开发方来说都是一件非常麻烦并且浪费时间的。所以在对遗留系统的冲构造就要做更好的架构,更模块化的开发,以便于减少以后的软件维护。
(6)能按时完成开发任务,及时完成开发任务,及时交付费用。
(7)开发的软件可靠性高。这当然要求开发出来的系统要有稳定的能。有些软件的使用方是某些金融业。如果出现错误则会导致很严重的后果,而这对于开发者来说也是要负责任的。所以在开发的过程中就必须保证软件系统的可靠性。
从上面的各个方面本人的作者做了如下的总结与归纳:在基于遗留系统和客户提出修改要求或意见上对遗产系统进行一定的功能或者体系结构上的增加或者完善。
4.遗留系统架构
遗留系统主要是由HTML、JSP和Java Bean三种类型的文件组能。在系统的工作的过程中,一般系统是根据用户的链接请求来打开有关的JSP网页,接到请求过后把有关的处理结果再通过JSP的形式
返回给用户。使用人员在其权限范围内可以查出所需要的信息,但全部通过JSP的来回调用,由于现在业务量的增加,各个方面的调用越来越多,导致JSP和数据库的操作紊乱,对其进行总结性的分析过后可以发现原有的系统在运行的时候会导致如下问题的发生:
(1)JSP网页的java代码过多,导致刻度性非常差;
(2)由于第一个的原意到时系统的可扩充性能很低;
(3)在结构上没有分层,导致在程序员的时候必须来回往返于JSP和java Bean指点调用;
(4)当过多的链接发出请求时,会影响到服务器的执行效果,严重可能导致系统的崩溃。
经过对遗留系统的认真分析和理解之后,我对原有系统的逆向工程的工作可以说有一个大概的完善了。那么在接下来的步骤,就是如何的对遗留系统的再工程即从遗留系统到新系统的转换,也是软件再工程中的正向工程的步骤。
经过我们对遗留系统使用单位的认真分析,考虑到可以把其分为大致的几个部门进行管理(在第五章将会详尽介绍该单位的情况)而J2EE规范定义了一下四层:应用的客户组件(Application client components)、网络层(Web Tier)、业务层(Business Tier)和企业信息系统层(Enterpris Information System Tier)。各个层次之间的关系如下图所示:
1.客户层:由于J2EE的应用层有基于Web和不基于Web开发的两种情况,对于前者来说是有AWT或者Swing开发出来的用户应用界面运行在客户端,由用户对Servelt进行访问,而对于后者是用户从Web下载静态的页面,而动态的跟新是由JSP或者Servlet生成。
2.网络层:web层可以是JSP页面也可以是Servlet。而后者是编程语言。他们是有区别的,JSP是基于文本并且一般的JSP页面含有Java代码段。有用户在JSP页面提出请求然后传递到后台服务器完成操作在返回JSP页面。
3.业务层:在这个层次上主要是由EJB组成。它主要完成用户的业务逻辑处理。所以业务的工作量是非常庞大的。但是有EJB container对EJB的管理来对其进行分工工作达到满足客户需求。从而一般不会出现问题。
4.企业信息系统层:这个层次主要是处理企业信息系统软件。
根据对遗留系统的代码分析,系统中的Java Bean总体分为两大类:其中只包含setter和getter函数的和包含了上述两种函数过海后有其运用的商业函数的两类,前者称之为value bean后者为process bean。在遗留系统中是Java Bean和JSP页面的组合来完成客户的请求,而在新系统里则是使用Session Bean 来完成。把遗留系统中Java Bean中的程序放进新系统中Session Bean的Bean 类中。在移交的时候我们把Value Bean类中的代码是全部的移交过去,对process bean中的代码则是根据bean的性质来决定是否移交。在移交的构成中我们加入了两个方法:是回调方法和标准模板(包含了目标系统中Session Bean组件应当继承接口)。组成方法如下图:
在新系统中的所有EJB是根据Weblogic协议部署的。每一个在服务器上部署完成后的应用程序都会有一EAR(Enterprise Application Archive file)文件,他包含了JAR(Java Archive file)、WAR(Web Application Archive file)和XML文件,其中JAR包含了EJB,WAR包包含了Web Componet。
由于在各个步骤都是按照J2EE的规格进行的。所以新系统中的各个组件都是很相邻的组件进行通信,提高了同一层次内各组件之间的内聚力。降低了系统不同层次的耦合度。
参考文献
[1] 王超,陈力军,赵洪兵等,一个软件再工程的实例分析,计算机工程与应用
[2]林治,软件重构在软件开发中的作用分析,扬州教育学院学报
上一篇:电子支付的安全手段
下一篇:软件代码可视化技术探讨