软件复用技术及其在嵌入式系统中应用的可行性

时间:2022-05-01 10:41:21

软件复用技术及其在嵌入式系统中应用的可行性

摘要:随着计算机应用领域的迅速扩大,软件规模及复杂性的不断提高,软件危机愈加明显地暴露出来。软件复用是在软件开发中避免重复劳动的解决方案,软件复用是软件工程的重要研究领域,被认为是解决软件危机,提高软件生产率和软件质量的主要途径。基于构件的软件复用是当前复用研究的焦点,被视为是实现成功复用的关键技术之一。该文将对软件复用技术的作一全面综述,介绍基于构件的软件复用的基本概念及其在嵌入式系统中的简单应用。

关键词:软件复用;软件构件;模块;嵌入式系统

中图分类号:TP311文献标识码:A文章编号:1009-3044(2009)26-7432-02

Software Reuse in the Embedded System and its Application in the Feasibility

WU Wen-gen,WANG En-liang

(Beijing Xinganxian Network Technology Development Co. Ltd,Hefei 230001, China)

Abstract:With the rapid extension of computer application domain,and the continuous increase of software scale and complexity,the software crisis is exposed more obvious,Software reuse offers a solution to eliminate repeated work,Software reuse is the important domain of software engineering. It is the main route to solve software crisis and enhance software productivity,quality.At present. the research about software reuse based on software component is one of the key factors to realize reuse successful.This paper is a summarization of software reuse technology,It presents fundamental concepts and use in embedded system of the software reuse based on software component.

Key words: software reuse; software component; model; embede system

软件复用的过程,就是使用现存软件系统的人工制品或工程知识来构造新的软件系统的过程。实现软件复用的关键技术因素主要包括:软件构件技术、领域工程、软件构架、软件再生工程、开放系统、软件过程、CASE技术等因素。该技术可以使得在应用系统开发中充分地利用已有的开发成果,消除了包括分析、设计、编码、测试等在内的许多重复劳动,从而提高了软件开发的效率和质量。软件服用技术已经成为当前软件开发工程中的研究热点,被视为解决软件危机,提高软件生产效率和质量的现实可行的途径。它通常可分为产品复用和过程复用两条途径。基于构件的复用是产品复用的主要形式,也是当前复用研究的焦点。同时,在嵌入式的工业控制研究领域,软件构件技术也是一个重要内容。当前软件构件技术被视为实现成功复用的关键因素之一。其特征是在应用程序中功能独立、可以明确辨识的构成成分,具有规范的接口描述,可以提供给第三方进行组装。软件复用技术的广泛应用将促进软件产业的变革,使其重组分工,软件构件生产必将成为独立的行业而存在。这种变革对我国软件产业的发展将是一个很好的机遇。软件构件(Component)是应用程序中功能独立、可以明确辨识的构成成分,具有规范的接口描述,可以提供给第三方进行组装。本文将对软件复用技术作一全面综述,介绍基于构件的软件复用的基本概念及其在嵌入式系统中的简单应用。

1 软件复用技术综述

1.1 软件复用技术的概念

软件复用应该是指充分利用过去软件开发中积累的成果、知识和经验,去开发新的软件系统,使人们在新系统的开发中着重于解决出现的新问题、满足新需求,从而避免或减少软件开发中的重复劳动。大多数情况下所讨论的软件可复用性指软件本身的可重用性,即软件代码实现的可重用性。而实际上,软件复用远不止这些,软件开发的全生命周期都有可重用的价值,包括项目的组织、软件需求、设计、文档、实现、测试方法和测试用例都是可以被重复利用或借鉴的有效资源。

软件较强的可复用一直是软件工程所追求的目标之一,软件工程界希望有一天能和其它工业领域一样,利用标准化的软件模块快速构建特定的应用系统。事实上,这种努力也取得了相当大的进展,但是与人们所期望的目标还是有不少差距,软件模块还远没有机械设备的零部件那样拆卸、维修、更换方便和简单。

1.2 软件复用技术的意义

软件复用使人们在软件开发中不必“重新发明轮子”或“一切从零开始”,提高了软件生产率和质量,缩短开发周期,降低开发成本。软件的重用中没有材料的消耗,而且软件通过多次重用后其质量和可靠性越来越高。据统计资料显示,软件系统的开发中若复用程度达到50%,则其生产率提高40%,开发成本降低约40%,软件出错率降低近50%。软件工程专家Bohem认为,近十年来软件复用已成为解决软件危机、提高软件生产率和质量的最有效、最具潜力的手段。

在企业中软件复用技术的运用,不仅可以规范企业的业务流程,发现业务流程中不合理的环节,进而对企业的业务过程进行优化重纽,而且构建可复用的软件系统本身就是企业非常重要的知识库和规则库,可以成为指导企业实施和扩展管理信息系统的模型。在深入分析企业需求基础上建立可复用的企业业务模型可以在最大程度上提高企业实施ERP或者其他管理信息系统的成功率。所以大力发展并推广软件复用对于促进企业管理规范和信息化有重要的现实意义。

1.3 软件复用的形式分类

根据复用活动所跨越的领域可分为垂直式(纵向)复用和水平式(横向)复用;根据实现复用的途径可分为组装式(compositional)复用和生成式(generative)复用;根据复用的对象, 可以分为产品复用和过程复用,其中基于构件的复用是产品复用的主要形式, 也是当前复用研究的焦点;根据对可复用信息进行复用的方式, 又可以分为黑盒复用和白盒复用。软件复用作为软件工程中一个研究热点, 其实现涉及的关键技术主要包括: 软件构件技术( Software Component Technology ) 、领域工程( Domain Engineering ) 、软件架构( Software Architecture ) 、软件再生工程( Software Reengineering) 、开放系统( Open System)、软件工程( Software Process ) 、CASE 技术等。

软件复用被视为解决软件危机的现实可行的途径。抽象层次越高,复用的可能性越大,实现需求分析的复用,将从更抽象的层次上实现软件复用。 构件技术是实现软件复用的关键技术,基于构件的软件工程强调领域工程和应用工程的同时进行。领域分析是领域工程的关键阶段,通过领域分析获取的领域模型是对领域中各系统的共同需求的描述和分析,提高领域模型的复用性,有利于实现需求分析的复用。目前,无论何种形式的软件复用, 都离不开面向对象方法和技术。构件是核心和基础,复用是手段,这种模式才是软件产业工程化、工业化的必由之路。

2 软件复用的扩展

首先,我觉得软件的复用也是具有层次性的。其复用层次与软件架构的层次相对,以常见的应用软件为例,一般都具有底层、中间层和上层。

底层一般是通信、绘图、数据访问、加解密等。底层通常与平台相关,所以复用性往往限制在一个平台上。这不表示说平台之间就没有复用,虽然在一个平台上的代码很难直接移植到另一个平台,但很多思路是一致的,所以思路可以复用。因为即使在底层,也是有层次的。比如通信引擎,数据层、传输层、协议层、应用层。在不同的平台只是使用的套接字不一样,但其它层基本上是可以复用的。如果是在同一平台的各个项目之间,那这些底层的引擎更是复用性最强的部分,基本上可以不加修改的使用。

中间层多是功能逻辑层。在这一层面上,各个系统的功能差异大,要想复用与扩展是有一些难度。我还是那句话,复用也是具有层次性的。前辈们在这一层上给了我们很多方法。设计模式就是典型,此层复用的主要对象是框架与功能。一个好的应用程序框架在很多同类型的系统中是可以很方便的重复使用的。因为框架做的是一些基础的,与应用关系松散的功能。框架应该是一类型应用程序的处理方式与流程的总结。框架面向同平台,同类型的应用程序进行复用。其次是功能上的复用,虽然每一个系统差别很大,但每一个系统总是由很多个小功能组合而成的。我们可以把它分细并分开封装成类或函数,然后再去组合它。显然负责组合的代码不具备很好复用特性,但是封装过的功能函数或类是可以做到的。

上层是指和用户界面相关的部分。用户界面的主要作用是负责人机交互,它把数据输出给人并接收人的输入。当 UI(User Interface用户界面) 接收用户的输入后,把数据交给逻辑功能层。在UI与功能层交换数据时有一些要注意的,UI最好不要直接把数据交给要处理的类或者函数,而是统一交给一个负责数据流中转类,专门负责对逻辑数据的传递,也可以顺便做一些数据检验的功能,这样我们的系统就有了可复用的基础。UI层的框架部分在每一个同类型的系统中也是不会变的,比如我们可以用同一个MFC开发很多应用程序的界面。

3软件复用在嵌入式系统中应用的可行性

要探讨在嵌入式系统中引入软件复用的概念,首先,我们需要大致了解一下嵌入式系统的特点以及其硬件和软件的架构。嵌入式系统有着系统内核小、专用性强、软硬件可裁剪可配置、高实时性、多任务操作、专门的开发环境和工具等特点。嵌入式软件的专用性决定了其不可能象PC环境软件的通用性那样容易达到复用的目的。在组成结构上,嵌入式系统分为硬件和软件两个部分。嵌入式系统硬件其核心部件是嵌入式处理器,以及围绕处理器而搭建的各种功能控制模块,诸如存储器、I/O端口、图形控制器、各种外设器件等;嵌入式软件系统包括操作系统软件(OS)、驱动程序和应用程序编程,操作系统管理应用软件和硬件的交互,应用软件控制操作系统的运作和行为。在硬件系统搭建完毕后,软件的操作系统部分需要根据硬件的条件裁剪,而驱动程序和应用软件部分需要很好的规划,以达到复用的目的。本文主要是讨论就是驱动程序和应用软件部分的复用的可行性问题,对于操作系统的裁剪则略过不提。

通过对嵌入式软硬件结构的大致了解,我们知道,由于嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常紧密,软件往往是针对特定的硬件进行开发的。因此,即使在同一品牌、同一系列的产品中移植也需要根据系统硬件的变化和增减不断进行修改;而且即使是相同的操作系统,其应用配置也有差别。作为应用程序开发者就不得不要来熟悉不同的硬件平台和操作系统才能进行有效的应用开发,从开发的周期、过程等来说,不仅增加了开发的难度,也增加了实现软件的复用的难度。

为了解决这些问题,有必要在嵌入式软件开发中引入软件复用技术。我们在将应用程序分为应用层和驱动层之外,可以参考微软公司对驱动程序采用的分层的模式,即较下层的硬件相关层(Platform Dependent Driver(PDD),也即是平台相关层)和较上层的硬件无关层(Model Device Driver(MDD),也即是模型驱动层)。PDD层是和硬件以及平台相关的代码组成,根据硬件模块的类型和特点,实现基本的初始化等函数集(DDSI)。MDD层实现的是和平台无关的功能,它描述了一个通用的驱动程序模型。MDD层调用PDD层中实现的特定的接口(DDSI函数集)来获取硬件相关的信息,并处理复杂的事件(如中断等),向操作系统实现DDI接口函数集,供应用层编程调用。程序员在应用层可以编程通过对DDI接口函数的操作,诸如打开、关闭等操作,从而达到对该硬件设备的资源的支配,其工作流程见下图1。然后,我们将该硬件模块的驱动程序封装成一个标准的功能模块(或者说是一个构件的形式),在移植到新的嵌入式系统时,我们可以直接将该驱动软件应用在新的环境中,其中涉及的改动量将会很少,我们只需要针对新的、特定的硬件环境修改PDD程序,MDD所建立的模型可继续使用。诸如嵌入式系统的SPI、IIC、LCD等模块都可以按照这个方法来实现模块化,达到软件复用的目的。当然,软件复用不仅仅是实现代码的可重复利用,还应该考虑到在多环境下的应用,参考PC机环境下很多软件可以同时支持多个操作系统,达到了很好的兼容性的例子。同样在嵌入式系统下,一个成熟的软件也有可能能够实现支持多个不同的硬件环境,这就需要程序人员在实现代码的时候对硬件环境进行类似枚举方式处理,在不同的环境下通过检测硬件平台来自适应系统。

上升到在应用层的角度。通过前面对软件复用的意义的阐述,我们知道,将软件代码按其功能和对象特征封装成一个模块的形式,实现其可重复利用十分有必要,既可供其他工程师使用,又可以增强了软件的可维护性。应用层的软件编写受硬件约束的程度大大降低,程序员的发挥空间加大,为实现软件复用增加了可能。基于对嵌入式系统特点的了解,嵌入式软件应该具有灵活的适用性,以达到复用的目的。嵌入式硬件可以按照模块化的概念来理解,同样嵌入式软件也可以认为是一种模块化软件,它应该能非常方便灵活的运用到各种嵌入式系统中,而不能破坏或更改原有的系统特性和功能。举例说明,在嵌入式导航系统都需要有个GPS导航的软件,那么在编写该软件的时候我们就应该有意识的将该软件按模块化的方式来处理,目的使这个软件最终可以在很多不同的嵌入式系统环境运行。一般,应用软件的复用性不仅仅是系统环境相关或无关中的一个方面实现就可以的,只有两方面都实现,才能够按模块的方式封装的。GPS导航软件和系统环境相关(比如对GPS硬件模块)的操作实现复用较难,而系统环境无关(比如对导航地图)的操作是很容易实现复用的。运行GPS导航软件的时候通常涉及到的操作会包括:设备连接、断开、设备搜索等,这些操作都是和系统的硬件环境相关的。考虑到在不同的嵌入式系统中GPS设备的硬件接口不尽相同,在软件实现中,我们需要对GPS设备所连接的端口进行判断,而不是直接对应某一个系统的情况写死。这样不管GPS设备硬件接口的区别,软件最终都可以识别到GPS设备。在对该软件封装后,就可以方便的应用到不同嵌入式系统里,从而实现了应用软件的良好复用。

本文对软件复用及软件构件的基本概念、分类和扩展方向进行了详细的阐述,并对软件复用技术在嵌入式系统中的应用的可行性进行了探讨,发现其在嵌入式系统中应用的非常必要性,为以后在该方向上进行细致的、具体的课题研究奠定基础,并找到了开展研究工作的依据。

参考文献:

[1] 魏忠,蔡勇,雷红卫.嵌入式开发详解[M].北京:电子工业出版社,2003.

[2] Stallings W.Operating systems:Internals and design principles[M].北京:电子工业出版社,2001.

[3] 张路,谢冰,梅宏,等.基于构件的软件配置管理技术研究[J].电子学报,2001,29(2):266-268.

[4] 黄靖.软件复用、软件合成与软件集成[J].计算机应用研究,2004(9):118-120.

上一篇:企业网络构架及安全探讨 下一篇:一种基于门限多重盲签名的电子投票方案