摘要:隨著計算機應用領域的迅速擴大,軟件規模及復雜性的不斷提高,軟件危機愈加明顯地暴露出來。軟件復用是在軟件開發中避免重復勞動的解決方案,軟件復用是軟件工程的重要研究領域,被認為是解決軟件危機,提高軟件生產率和軟件質量的主要途徑。基于構件的軟件復用是當前復用研究的焦點,被視為是實現成功復用的關鍵技術之一。該文將對軟件復用技術的作一全面綜述,介紹基于構件的軟件復用的基本概念及其在嵌入式系統中的簡單應用。
關鍵詞:軟件復用;軟件構件;模塊;嵌入式系統
中圖分類號: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.