摘 要:為提高軟件的復用程度,采用了基于領域工程的開發方法,提出了領域信息系統設計體系結構和軟件構架。重點討論了領域信息系統模型結構和領域構件庫的設計,初步實現了領域構件庫中對構件的標志、驗證和分類功能,并在組件模型JavaBeans支持下,實現了構件庫分析過程的UML描述。
關鍵詞:構件;JavaBean;領域構件庫;領域信息系統
中圖分類號:TP311.52文獻標志碼:A
文章編號:1001-3695(2007)06-0271-03
20世紀80年代出現了面向對象編程技術,開創了軟件復用技術的新階段。在面向對象編程技術中,對象將數據和過程都封裝起來,對程序員和其他對象隱藏其內部的復雜性,因此具有更高的靈活性,更易于維護;而且通過實現繼承和多態,對象可在不同的程序中重復使用,減少了編程時間。但實現繼承也使得軟件很難管理和維護,它把類的實現綁定在一起。不知道父類中方法是如何實現的,則子類難以實現,不知道子類中的方法是如何繼承的,那么父類難以理解。在一個復雜的類等級中,如果不了解類等級中所有其他的類,那么單個的類變得難以掌握,并且如果要實現重用,單個的類不能從它的類等級中分離[1]。現代商業軟件系統變得更為復雜和龐大,逐漸暴露出現存軟件工程系統的缺點,使得人們轉向基于構件的軟件工程開發。領域構件庫是實現應用工程中快速構建應用系統的一種高效的軟件重用技術。在網絡計算中,軟
件重用技術面臨著新的計算環境。當前面向Internet環境的有代表性的構件模型有JavaBeans、CORBA、ActiveX及COM等。JavaBeans由于建立在Java平臺上,具有Java的各種優勢,已成為主流的構造面向Internet的應用構件重用模型[2]。
1 領域信息系統模型結構
對領域信息系統域模型的視圖可以從需求、靜態結構、動態行為以及實現四個不同方面來描述。這些不同的描述就構成系統的不同視圖,即需求視圖、結構視圖、行為視圖和實現視圖。UML可以用來具體描述域模型視圖[3]。
(1) 需求視圖:指明系統應該“做什么”,即描述了系統的功能需求。用例圖描述系統的需求視圖。
(2) 結構視圖:定義了系統的功能“由誰做”,即定義了系統的靜態結構以及完成功能的實體(類、對象等)。類圖、包圖描述系統的結構視圖。
(3) 行為視圖:描述了“什么時候做”以及“如何做”,即為了完成系統的某項功能,對象之間進行消息傳遞的時序以及完成某項功能的步驟。行為圖描述系統的行為視圖,包括狀態圖、順序圖等。
(4) 實現視圖:描述系統中的功能“在何處”完成,即一方面描述由哪些構件實現類;另一方面描述在什么物理設備上運行構件。實現圖描述系統的實現視圖,包括構件圖和配置圖。
2 領域信息系統分析
2.1 信息系統域需求提出
信息系統域需求提出的分析步驟:⑴列舉候選需求。⑵捕獲系統功能性需求。信息系統基本上是以數據為中心的,它的主要功能都是圍繞數據進行的,如數據更新、信息刪除、數據采集、信息統計和數據查詢通用子系統。而一個完整的通用信息系統,在具備與之相應的信息處理功能的同時,還大都具有一些共同的基本功能,如數據庫通信、系統管理、系統安全、系統退出和數據庫表管理通用子系統。⑶ 捕獲系統非功能性需求和偽需求。主要表現在:系統的界面形式、容錯性、系統實現的語言、執行平臺、易用性等。⑷ 確定用例模型。①領域信息系統系統級用例,如圖1(a)所示。②領域信息系統子系統級用例。領域信息系統中包括數據采集用例圖、信息統計用例圖、信息刪除用例圖等共10個子系統用例,其中信息統計用例圖如圖1(b)所示。
(a) 系統級用例圖(b) 信息統計用例圖
圖1 領域信息系統用例圖
2.2 信息系統域需求分析
信息系統域需求分析是根據通用領域信息系統的特點,對對象進行一般意義上的相似性分析與抽象,利用面向對象的有效機制構架出具有實際應用價值的對象類,最大限度地達到軟件重用的目的。
(1)系統動態結構的分析。對象通過通信的方式相互協作,以及系統中的對象在系統生命周期中改變狀態的方式是系統的動態行為。順序圖以時間順序顯示對象在其生命周期內的交互活動,便于用戶、分析人員更清晰地理解用例對象的行為。領域信息系統中包括主控系統順序圖、數據更新順序圖、數據刪除順序圖、數據顯示順序圖等共15種交互設計。
(2)系統靜態結構的分析。類、對象和它們之間的關聯是面向對象建模技術中最基本的元素。對于一個待描述的系統,其類模型揭示了系統的靜態邏輯結構,即系統中的類及其相互關系。UML類圖描述了組成系統的類和類之間的結構。領域信息系統中包括數據查詢類圖、數據統計類圖、數據采集類圖共16種類結構視圖。例如,數據庫信息類圖如圖2所示。
圖2 數據庫信息類圖
2.3 信息系統域系統設計
(1)領域信息系統框架結構。在利用領域分析技術抽取出信息系統領域的共同部分并建立了領域模型后,接著在信息系統域系統設計階段應該將前面所提取出來的領域共性要素中的不變部分做成通用構件,將其可變部分做成知識庫、數據庫。通過領域分析,依據需求提出階段標識出來的功能子系統將它們分解為模塊,為此領域信息系統總體設計框架如圖3所示。
圖3 領域信息系統總體框架
(2)系統體系結構設計。
①領域信息系統的軟件構架,如圖4所示。在設計領域構架時預留出了足夠的空間以實現將來所需要的用例。所以,在使用這個軟件架構和一些構件組裝成一個具體的應用系統時,可以根據該系統的特殊要求選用不同的構件,也可以增加構件或對構件作一些局部修改。
圖4 領域構架圖
②類/構件設計體系結構。該結構是三層體系結構,如圖5所示。底層是基礎類/構件,是對領域中相應功能范圍內領域知識的共性構成成分的抽取,一般它們只是完成最基本的框架設計、域的各種成分設計并且給中/高層類和構件留出了充分自定義空間。中層為領域通用類/構件,是在基礎類/構件的基礎上加入了對領域中相應功能范圍內領域知識的一般性處理的方法和響應事件。應用系統可以根據實際情況剪裁這些方法和響應事件。同時本層的設計給高層的類/構件的設計留下了一定的設計空間,去滿足一些特殊的要求。高層為領域專用類/構件,是針對領域中的某一特定的應用系統所開發的構件,它是在領域通用類/構件的基礎上加入對系統的某些特性所作的一些特殊處理,如與數據庫通信處理、異常機制的處理等。由于各種應用系統中的領域知識各有不同,所以往往有些專用類/構件需要重新開發,如應用系統計算構件等。總之,類/構件層次越低,功能越簡單,靈活性越高,重用度越大;類/構件層次越高,功能越強,靈活性越差,重用度越小。
基礎類/構件
領域通用類/構件
領域專用類/構件
圖5 類/構件三層體系結構
2.4 信息系統域對象設計
JavaBean包含一些屬性、方法和事件,構件接口設計應遵循JavaBeans的命名慣例。JavaBean組件是由一系列具有相互關系的類組成的,這些類的設計遵守了以下一些基本準則。例如,JavaBean構件是一個public的類;構件中須使用get和set兩個方法;構件中有一個public的無參數的構造方法;構件必須實現Serializable接口等[4]。
2.5 構件編碼
(1)Java API文檔。javadoc文檔就是為特定的程序生成對應的說明文檔,一般是對程序中的類、方法等進行描述。它能將源代碼自動建檔,這樣在源代碼進行一定格式的說明之后,可以將這些說明自動傳輸到HTML文件中,使開發者直接從生成的javadoc文檔中查找到相關類以及相關類的方法、屬性變量并獲得可重用構件的信息[5]。
(2)JavaBean構件的編寫規范。通過建立類/構件代碼編寫規范,形成開發小組編碼約定,提高程序的可讀性、可修改性,可以保證程序代碼的質量。在領域構件庫的開發中,從JavaBean構件的符號與命名、代碼格式等方面規范代碼的編寫。例如,包的命名采用JDK標準;規范類、方法的命名;主要類型變量的命名一般是采取類型名稱縮寫加實際名稱的形式等。
2.6 構件測試
(1)測試案例設計。測試設計的任務有:定義和描述每個建立的測試案例;定義和構建測試過程,具體包括設計集成測試案例、設計系統測試案例和設計回歸測試案例。測試設計的輸入和輸出如圖6所示。
圖6 測試設計的輸入輸出結構
(2)執行測試。① 執行集成測試。執行集成測試的主要任務有:執行每個測試案例定義的測試過程;比較測試和預計的結果,調查它們之間的偏離;向構件負責人報告發現的錯誤并估計測試工作的結果[6]。②執行系統測試。這項任務是執行每個迭代中要求的系統測試,并獲取測試結果。當集成測試指出,系統已經滿足當前迭代測試計劃中設置的集成質量標準時,系統測試就可以開始。
3 領域構件庫設計
3.1 基礎/通用構件打包與發布
JavaBean以Java存檔格式發布。以jar包發布構件,構件的所有類最終和一個manifest文件在一起打包發布,形成一個jar文件。manifest文件來說明構件的實現類和依賴類。系統中使用Jbuilder的程序打包器將構件庫中的構件和可直接運行的應用程序捆綁在一起,這樣便于將經過打包過的jar文件分發到各個用戶中,同時提供了基于Windows GUI和基于Windows Console兩種部署應用系統的方式[7]。
3.2 領域構件庫的設計
領域構件庫的設計采用了刻面分類方法。構件在入庫前須經過標志、驗證和分類三個過程。
(1) 標志過程:標志是指尋找可復用構件的候選者,它是進行軟件復用的前提。系統中用10個獨立、正交的刻面來描述構件的本質屬性。具體對領域構件的描述格式為:領域構件的規格說明(specificationexplanation)SP=
根據領域構件庫的需要還可以增加刻面:CIS(Component Interface Specification)是構件接口描述;CRS(Component Relation Specification)是構件關聯描述;CUS(Component Understanding Specification)是對構件的理解描述;CGUI(Component Graphic User Interface)是構件的圖形界面等。
(2) 驗證過程:可復用構件的可靠性、正確性等是非常重要的,一個可復用構件在入庫前需經過嚴格的測試和審查。
(3) 分類過程:通過對構件的各個刻面賦予適當的刻面術語即可完成構件分類,用戶可根據刻面術語來檢索構件。表1為構件的刻面分類模式。
表1 構件的刻面分類模式
刻面刻面術語
構件語言Java、C#、VC++、VB、Delphi、UML等
構件抽象層次信息系統域需求提出、信息系統域需求分析、信息系統域系統設計、信息系統域對象設計、構件編碼、構件測試等
構件規模1KB、2KB、3KB、4KB、5KB、6KB等
構件名稱statisticsKeyApplication、updateApplication、countRecordApplication、loginApplication、displayResultApplication等
構件類型COM、JavaBean、CORBA等
構件形態狀態圖、順序圖、類、活動圖、用例、協作圖、組件、配置圖、包、文檔等
構件功能“創建數據庫表”“數據顯示”“數據更新”“數據統計”“數據查詢”“系統驗證”等
構件環境Linux、Oracle、Access、Windows、UNIX、SQL Server 等
構件應用領域機場信息系統、地理信息系統等
輔助軟件Rational Rose、Jbuild、ACDSee、HyperSnap-DX等
4 結束語
領域構件庫是實現應用工程中快速構建和重構應用系統的一種高效的軟件重用技術。在運用領域工程分析方法對領域信息系統中通用的對象和行為規則采用UML進行建模和構件抽取后,同時分析了軟件設計的體系結構和系統構架的基礎上,建立了基于JavaBean的領域信息系統的領域構件庫。該領域構件庫具有類繼承度高,類耦合度低,類封裝性高,類多態性低等特點;構件的方法重用效率和類重用效率均比較高。這樣可以大大減少應用系統開發所需的費用和時間,且有利于提高軟件的可維護性和可靠性。
本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。