软件的复用技术及开发方法

时间:2020-11-13 19:47:08 其他毕业论文 我要投稿

软件的复用技术及开发方法

软件的复用技术及开发方法

2.1软件的复用技术
软件复用是指在开发新的软件系统时,对已有的软件或软件模块重新使用,该软件可以是己经存在的软件,也可以是专门的可复用组件〔8〕。软件可复用性的高低影响到生产效率的高低、软件质量的好坏和系统可维护性的好坏。在软件工程中面临的问题不是缺乏复用,而是缺乏广泛的、系统的复用。软件复用包括构造可复用软件和用可复用软件进行构造。构造可复用软件,一方面可以从现存的软件系统中抽取,另一方面通过改写或重新设计来实施。
Jones将软件复用的对象分为4种数据复用、体系结构复用、设计复用和程序复用。这样,软件复用可在实现层、设计层和体系结构层三个层次上实现。实现层软件复用是指对己有的程序代码进行复用,它包括源代码组件形式。设计层软件复用是指对已有的软件系统的设计信息进行复用。而体系结构层软件复用是最有效的软件复用,它主要是软件体系结构形式化的复用,即将软件的框架组织,全局结构设计作为复用对象。可复用的软件体系结构则通常是显式地复用软件体系结构,并通过集成其他软件体系结构,建立新的更高层次的体系结构。   
面向对象的软件复用机制主要有两种:继承和对象组合。
(1)继承
继承是指子类可以从父类中直接获得某些特征和行为的能力,继承可作为代码复用和概念复用的手段。作为代码复用的手段是指:子类通过继承父类的行为,一些代码就不必重写;作为概念复用的手段是指:子类共享父类的方法定义。作为代码复用和概念复用手段的继承机制,在面向对象技术中,通过面向对象技术的一些主要机制来实现对“支持可维护性的可复用性”的支持。这些面向对象的主要机制是:数据的抽象化、封装和多态性。通过运用这些机制,继承可以在高层次上提供(相对于传统的低层次复用)可复用性:数据的抽象化和继承关系使得概念或定义可以复用;多态性使得实现和应用可以复用;而抽象化和封装可以保持和促进系统的可维护性。这样一来,复用的焦点不再集中在函数和算法等具体实现细节上,而是集中在最重要的含有宏观商业逻辑的抽象层次上。换言之,复用的焦点发生了“倒转”。发生复用焦点的倒转并不是因为实现细节的复用并不重要,而是因为这些细节上的复用己经做的很好了,并且这种复用在提高复用性的同时提高了软件的可维护性。由于继承关系直接继承的是接口,同时也继承实现,因而实际上父类的内部实现对子类而言是可见的,属于白盒复用方式。
(2)对象的组合
对象组合是指新的复杂功能可以通过组装或组合对象来获得。这种复杂的功能由对象组合来获得的设计思想与过程化程序设计思想是相似的,在过程化程序设计中,一个复杂的功能模块可以分解为更细小的和更简单的功能模块,整体功能是各个局部功能的聚集。在面向对象系统中,系统是由对象构成,因此复杂的功能或者说能完成更复杂功能的对象,可以通过功能较简单的对象的组装或组合来实现。对象组合方式是从整体与局部的角度来考虑软件复用思想的。
对象组合要求对象具有良好的接口定义,使用对象的接口来使用对象的功能,并往往运用赋值多态来获得具体对象,对象的内部功能是不可见的,对象只以“黑盒”的形式出现,属于黑盒复用方式。
面向对象的软件复用过程有以下步骤:
①抽象:对软件制品进行抽象,抽象层次越高,复用的'机会就越大;
②选择:一般通过分类和编目方案组织和检索可复用的软件制品;
③特殊化:即将上步选定了的一个一般化的软件制品进行特殊化,以满足特定领域的要求;
④集成:集成需要在软件体系结构或框架的指导下,将选定的、特殊化了的模块集合组成一个完整的软件系统。要有效地将可复用制品集成为一个软件系统,使用者必须清楚地理解该模块的接口。
而从复用的使用角度上看,软件复用的使用行为可能发生在三个维上。
①平台维:以某平台上的软件为基础,修改它与运行平台相关的部分,使其能够运行在新的平台,即软件移植;
②时间维:使用以前的软件版本作为新版本的基础,加入新功能,适应新需求,即软件维护;
③应用维:将某软件或其中构件用于其他系统中,新系统具有不同功能和用途,即真正的软件复用。
这三种行为中都重复使用了现有的软件,但是真正意义的软件复用指的是应用维上的软件复用,即“使用为复用而开发的软件”来更快更好地开发新的应用系统。通过软件复用,消除了许多重复劳动,降低了软件开发的时间。同时,复用高质量的己有开发成果,避免了重新开发可能引入的错误,从而提高了软件的质量。
2.2软件的开发方法
2.2.1结构化开发方法
结构化方法是把现实世界描绘为数据在信息系统中的流动,以及在数据流动的过程中数据向信息的转化。其基本思想为:基于功能分解设计系统结构,通过把复杂的问题逐层分解,进行简化(即自顶向下,逐层细化),将整个程序结构划分成若干个功能相对独立的子模块直至最简,并且每个模块最终都可使用顺序、选择、循环三种基本结构来实现,它是从系统内部功能上模拟客观世界。
结构化方法强调系统开发过程的整体性和全局性,强调在整体优化的前提下来考虑具体的分析设计问题。结构化方法严格地区分开发阶段,强调一步一步地严格地进行系统分析与设计,每一步工作都及时地总结、发现问题,从而避免了开发过程的混乱状态。
结构化方法是目前被广泛采用的系统开发方法之一,但是结构化方法也存在的许多问题,其局限性有以下几点:
(1)难以解决软件重用问题。结构化方法从功能抽象出发进行模块划分,所划分出的模块千差万别,模块共用的程度不高。
(2)结构化方法在需求分析中对问题域的认识和描述不是以问题域中固有的事物作为基本单位,而是打破了各项事物之间的界限,在全局范围内以数据流为中心进行分析,所以分析结果不能直接反映问题域。同时,当系统较复杂时,很难检验分析的正确性。因此,结构化分析方法容易隐藏一些对问题域的理解偏差,与后继开发阶段的衔接也比较困难。
(3)结构化方法对需求变化的适应能力比较弱,软件系统结构对功能的变化十分敏感,功能的变化会引起相关联的许多数据流的修改,同时设计出的软件难以重用,延缓了开发的过程。
(4)结构化方法中设计文档很难与分析文档对应,因为二者的表示体系不一致。结构化方法的结果-数据流图(DFD)和结构化设计结果-模块结构图(MSD)是两种不同的表示体系,从分析到设计的“转换”使得设计文档与问题域的本来面貌相差甚远。