0 引 言 基于組件的開發(Component Based Development,CBD)技術在軟件工程中占有舉足輕重的地位,并且在許多工程應用領域已經取得了重大的成功。在通用計算機軟件、電子商務、Internet和分布式計算環境中CBD技術已經得到了成熟的應用。但是,在其他一些領域,如嵌入式系統中,CBD的應用還及其有限。由于不同嵌入式系統的需求和硬件平臺各異,要開發出適用于所有系統的通用組件是極其困難的,目前只能夠針對特定應用領域和平臺研究開發適用的組件。正是由于嵌入式系統的差異性、專門性與組件技術的通用性之間的矛盾,所以要利用組件進行嵌入式軟件開發,就必須采取適用的組件技術和系統開發方法。 在此,主要介紹了面向組件軟件工程的總體原則及其在嵌入式系統中的應用。通過分析嵌入式系統中對組件的要求和通用組件技術的差異,提出了嵌入式組件的設計原則,并基于嵌入式組件的特點,提出一種面向組件的嵌入式軟件系統開發方法。表明盡管嵌入式系統與通用計算平臺具有很大的差異,但是組件技術仍然可以成功地應用于嵌入式領域。 1嵌入式系統和組件技術 1.1嵌入式系統 嵌入式系統是滿足專門需求的小型計算機系統。例如,車載控制系統、工業控制系統、移動電話或者傳感控制系統。嵌入式系統的范圍極其廣泛,從微型計算設備到復雜的大型監控設備都屬于嵌入式系統的范疇。實時性是大多數嵌入式系統的特性,是在系統設計時需要考慮的重要概念。對于實時性的要求,不同嵌入式系統可以分為軟實時系統(Soft Time System)和硬實時系統(Hard Time System)。嵌入式系統一般還要求有很好的穩定性和可靠性。由于功能專一,需求多樣和系統小型化,這就要求系統的成本低廉,從而限制了系統的硬件性能。由于嵌入式系統的資源限制和實時性要求,軟件開發人員往往不能夠利用先進的通用軟件工程技術,而必須使用一些非正規的方法,利用高效的程序語言進行開發。隨著系統復雜性不斷增加,對系統的需求分析,模型設計,早期的錯誤檢測,開發周期,可維護性等方面提出了新的要求。因此推動了先進的軟件工程方法向嵌入式開發領域的轉移。 1.2組件技術 組件技術就是一種軟件工程中的先進技術。組件可以認為是能夠用于構建大型系統的自包含的部件或子系統。在軟件工程中,一個組件與一個微型應用程序類似,即都是已經編譯鏈接好,并可以使用的二進制代碼,應用程序由多個這樣的組件打包而得到。在需要對應用程序進行修改或改進時,只需要將構成此應用程序組件中的某個用新版本替換掉即可。這樣,使用組件技術的系統就具有很好的靈活性和可移植性。另外強大的組件庫能夠為開發人員提供功能豐富的組件支持,從而大大縮短軟件的開發周期。使用組件的種種優點直接來源于可以將它們動態地插入或卸出的應用。為了實現這種功能,所有的組件必須滿足兩個條件:一是組件必須動態鏈接;二是它們必須隱藏其內部實現細節。另外,利用組件還能幫助開發人員根據所使用的組件功能預測和驗證系統的功能特性。正是由于組件具有諸多優點,基于組件的開發技術才引起了軟件工程領域的廣泛應用,并且逐漸將它引入迅猛發展的嵌入式軟件開發領域中。 2嵌入式系統組件的設計原則 2.1接口設計原則 適用于嵌入式系統中的組件遵從大部分的通用組件設計原則,特別是組件的接口和實現相分離的封裝特性。組件的接口是組件功能的體現,系統中的其他部分或者組件正是通過接口使用組件提供的功能。但是對于嵌入式系統而言,有一些額外的系統特性或約束和系統功能是同樣重要的(如實時性),那么接口僅包含組件本身的功能特性就不完備,它還必須包含額外的系統特性,即加入約束條件。這樣在系統設計階段,利用組件進行設計不但能夠驗證功能需求,而且還能預測和分析系統特性需求。 2.2組件綁定與發布原則 在通用組件的設計中,接口是以支持運行期綁定的多態對象接口方式實現的。組件完全以動態形式綁定,獨立于接口的定義。這樣為組件復用、系統升級提供了強大的靈活性。但是,這種靈活性在嵌入式系統中會帶來性能的下降和風險的上升,影響系統的實時性和穩定性。因為所有組件都在運行期綁定,這樣必然會增加冗余代碼,并且讓系統行為變得難以預測。因此,通用組件的動態特性在嵌入式系統中特別是小型系統中是不可行的。由于實時性和硬件資源限制,在嵌入式系統中,組件鏈接和組合最好在系統設計期靜態而不是運行期動態地進行。進行組件的靜態綁定,可以通過系統建模工具對一個基于組件的系統設計產生一個總體視圖,這樣能夠對系統性能有更好的預測和優化。所以組件的形式不應該再使用通用組件中的二進制可執行文件形式發布,而應該采用高級語言或更為抽象的建模語言(如UML)定義組件的形式,這樣可以讓組件在編譯期或者在設計的早期就可以綁定鏈接,而不是像通用組件那樣的遲綁定(Late Binding)。 2.3 大型嵌入式系統中的組件原則 隨著嵌入式技術的不斷發展,許多功能復雜的大型嵌入式系統也隨之出現。對于這些系統硬件資源和實時性已經不是首要的考慮因素,如何有效控制系統復雜性和降低高昂的開發成本已成為最主要的問題。所以對于這樣的大型嵌入式系統,通用組件幾乎可以毫無障礙地在系統中發揮作用,極大地簡化了開發難度,減少了開發工作量和開發周期。如微軟的嵌入式系統Windows CE就是這項技術的成功應用,系統功能和應用功能完全以組件方式列出,開發人員只需要簡單地添加和刪除就能將一項復雜功能加入或移除系統鏡像,并且支持功能強大的COM組件庫,為應用程序的開發提供了非常便利的工具。當然,那些要求強實時的大型嵌入式系統也不應該使用通用組件技術,應該根據具體的系統特性使用精簡版本來進行系統開發。 3面向嵌入式組件的系統開發過程 由以上分析可以看出,由于嵌入式系統的功能和性能要求,以及硬件資源限制和復雜性控制需求,適用于嵌入式軟件系統的組件體現了接口定義約束、靜態綁定和抽象語言的發布形式等特性。那么正是由于這些特性的存在,適用于通用組件的軟件開發方法就不能直接應用于嵌入式軟件開發過程,而需要一種適合于嵌入式組件特性的系統開發方法。下面介紹面向嵌入式組件的開發過程,它能夠有效地利用和體現嵌入式組件的特性。 整個開發過程如圖1所示。根據組成與分解、抽象與具體的兩個基本開發思想建立了一個二維坐標系,橫坐標為抽象與具體;縱坐標為分解與組合。兩個坐標軸將整個開發空間分成了4部分,即建模過程的4個基本步驟:分解、實體化、組合、確認。 分解 整個開發過程從圖1的左上角開始。黑色方框代表了最初的待實現系統,即開發人員經過需求分析所建立的系統模型。通過系統功能域的劃分,將系統進行分解,在每一個功能域都包含了與該功能相關的所有邏輯組件。每一個邏輯組件再作為一個子系統遞歸地進行分解,直到組件達到了可重用組件的粒度。分解過程只是從抽象和邏輯角度決定組件的功能形式。 實體化 將具有最小粒度的不能再分解的邏輯組件進行實體化。由于這些邏輯組件已經具有了明確的功能或者直接就是已有的組件,所以可以很容易地將這些邏輯組件轉化為實際組件,如圖1中右下角的黑粗線方框所示。 組合 將重用的或者是將實現的實際組件,根據抽象模型,通過組件接口組合起來,該過程完全是分解的逆過程。如圖2所示。 驗證 對實體化以后再構建起來的系統與最初的待實現系統進行對比,利用組件的功能和約束特性預測整個系統的功能和性能,從而驗證系統設計的正確性。 面向嵌入式組件開發的整個過程體現為一個樹形結構,相當于一棵組件樹。樹的每一片葉子都代表一個組件,而每一個組件都可以視為一棵子樹,遞歸地利用該開發過程。整個過程總是不斷利用已有組件或者明確可實現的小粒度組件的組合對設計進行驗證,由于組件接口和實現已經靜態綁定,每一個組件在運行時的功能在設計期就能完全確定,這樣能幫助開發人員在最早的時間內發現設計上的缺陷,及時對設汁進行修改。 4 結 語 如今,嵌入式系統已經被廣泛地應用于生活的方方面面。CBD技術無疑會對嵌入式領域的發展起到重要的作用。這里通過深入分析通用組件的設計原則和嵌入式系統的特性要求,提出了適合于嵌入式系統的組件設計原則和開發方法,使組件技術的優點在嵌入式系統中得到了很好的體現,為CBD技術向嵌入式領域的轉移提供了一種有效的途徑。 當然,要使CBD技術得以在嵌入式系統中充分的利用,還有一些問題有待推進和解決。例如,目前還缺乏廣泛使用的適合于嵌入式系統的組件技術標準,大多數的組件技術還不能夠支持對嵌入式系統性能特性(如實時性)的定義和分析,并且應用于具有特定系統性能要求的嵌入式系統的組件組合方法和系統設計時的功能預測和驗證手段都還有待于發展。此外,幫助嵌入式開發人員進行組件和系統建模、分析和驗證的輔助工具還需要進一步的開發和引入。 |