一個基于可重用構件的軟件開發過程模型
摘要:基于構件的開發(CBD)觀念已廣泛應用于軟件開發中,便于構件的重用。眾所周知的CBD體系結構有 ActiveX, CORBA, RMI以及 SOAP 等。文章主要通過與傳統軟件開發方法的比較研究支持基于CBD的實踐,同時也評價了面向對象的過程模型以及提出了一種新型的基于 CBD 的軟件開發過程模型,并探討了倉儲的重要概念。
關鍵字:構件重用;基于構件的開發;軟件開發過程;倉儲
1.引言
軟件重用的觀念起源于制造業和土木工程領域,通過配件組裝汽車、磚瓦搭建房屋就是很好的例子,基于配件的產品在市場上已取得了很大的成功。
軟件公司采用同樣的方式開發軟件,通過軟件配件的方式使他們在市場上取得了成功,軟件配件是通過包的形式同軟件一同發售的。軟件配件被叫做組件或構件,很多學者從不同的角度給出了定義。一般認為可重用的二進制代碼即為組件,組件觀念和面向對象編程的對象思想很相似。一個組件是為了服務特定用途,具有獨立功能的系統部件,比如:命令按鈕,文本輸入框等。組件就像模式一樣強制開發人員采用已定義好的過程,將其插入到新軟件系統中以滿足的需求。
微軟公司和SUN公司是主要的軟件工具提供商,他們的工具被廣泛用于應用軟件開發。這兩家公司和其他廠商也提供大量的組件使他們取得了成功。第二部分描述CBD相關的工作,第三部分描述比較過程模型,第四部分涉及到CBD過程模型的動機,第五部分提出一個CBD過程模型,第六部分描述倉儲在CBD中的重要性,第七部分表述CBD相比傳統軟件開發的優越性。
2.相關工作
Lycett and Giaglis[1]認為評估信息系統方面的重用是極度困難的。他們認為所有
的開發方法都會在軟件重用上存在風險。主要的重用風險可以通過下面的方式避免:
(1). 在組件選擇的早期階段整合業務驅動評估可以減小評估和選擇組件的風險。
(2). 評估和選擇在一個不斷迭代的過程中進行。
作者討論了貼現現金流(DCF)、凈現值(NPV)、投資回報率(ROI)、內部收益率(IRR)、
成本效益分析(CBA),但沒有提供任何事實和數字。他們沒有提供適當的評價標準來評估和整合已開發的組件,以便重復使用。他們提出了一個內容,背景和過程(CCP)的分析,以評估一個組件重復使用,這是不切合實際的,因為CCP非常主觀的選擇和評價組件重用。Boehmet al[2]提出的建設性成本模型二能夠很好的評估基于重用組件的軟件成本。
Merijn de Jonge[3]認為一個可重用的需求將被開發成獨立的、可整合的組件。他提出了重用最佳實踐和過程的要求以及在一個系統和跨系統中整合可重用的獨立的組件技術。他提出了一個源代碼樹組成技術用于整合:
(1) 核心模塊的組成部分。
(2) 依據不同系統范圍,包開發允許同步開發一個以上的組件。
基于包的軟件開發是一個熱門的研究領域。作者集中在源代碼樹組成技術,可用于一個以上的系統的軟件配置管理,這一個重用組件庫管理上的問題。作者并沒有討論跨領域開發組件和他們在多個系統中的整合問題。
軟件重用的程度取決于重用策略,他們通過收集71 軟件開發組織的數據總結了一套六維度的軟件重用方法,這些維度分別是規劃、改善、正規過程、管理支持、項目相似性、對象技術、公共架構。在這些維度的基礎上,他們發現了被軟件開發組織實踐的重用策略。五個策略分別是:基于高重用潛能的特定重用、基于低重用潛能的不協調重用、基于高重用潛能的不協調重用、缺乏管理下的系統重用、強化管理下的系統重用。他們主要研究的觀念是分類重用策略,因此,開發組織能夠得利并完成開發項目。作者支持最后一個策略---強化管理的下系統重用,但是在得出結論前還需要更詳細的分析不同領域不同軟件組織的數據。
選擇可重用的組件對于提高軟件開發效率是很重要的[4]。他們提出了便于 EJB 組件重用的組件倉庫概念,便于可重用組件的存儲和管理。通過組件倉庫可以使軟件開發獲得很大的效益:規格觀看、適應、測試、部署。作者提出的倉庫沒有版本控制和變更控制的功能,而這些對組件倉庫是很重要的兩個概念。軟件組織不得不投入巨資才能在組件重用方法上取得成功,這對他們來說是個障礙,他們認為重用的核心是源代碼。據作者提到的一個評估:“領域組件占整個應用的65%,組件重用應該聚焦在領域組件上”。他提出了基于組件的開發到支持領域組件的整合方法,這個整合方法是軟件開發環境中的可重用組件的集合。
作者也討論了接口的概念,描述了接口包裝機制,他用來管理和控制可重用組件之間的接口。他的主要研究目標是為軟件組織開發標準,以便他們開始重用實踐,強調主要是編程
效果,而不是管理和業務觀點。作者主要研究點在于開發領域特定可重用組件,而不是構建不同領域組件,這個問題可以通過軟件設計的適應性和子管理型解決。
Arndt and Dibbern 的研究[5]揭露了構建軟件系統的兩種傳統方式: 定制和使用標準的
軟件包。他們提出定制組合和領域軟件包方法來達到兩個效益。有許多對立的因素抵制實踐這一新的領域。作者解釋組合方法的變更過程已采取了一個合理的方法。他們還引入了創新的觀念,如何模塊化開發可以得到領域變更帶來的好處。
基于組件的軟件開發的優點已經在很多論文中有論述,這雖然是一個理論上的概念,但
能夠很好的指導 CBSD 實踐,對于CBSD的驗證本文不做論述。
3. 幾種經典過程模型的比較
瀑布模型是軟件開發中的傳統和經典模型。溝通、計劃、建模、構建和部署是瀑布過程模型的主要階段,從系統開發生命周期階段來說這種模型是基于迭代的。這種模型只適合需求全面確定,并依據現有軟件重新設計。他不適用于商業軟件,因為他的階段迭代。這種模型需要大量時間和高額成本才能完成軟件開發任務。另一個障礙就是可工作的軟件版本在開發階段才可見,如果客戶需求含糊不清的話會給軟件帶來致命的災難。在軟件開發初始階段是很難完完整整的收集需求的,而這恰恰是瀑布模型的基礎。
原型過程模型被提出來用于整合其他方法學,比如瀑布模型,以使他們發揮效果。開發演示模型和需求評估是原型模型的主要階段。他是一個很自然的周期,不斷的迭代知道軟件開發完成。在短周期和低成本內快速開發軟件。沒有為現在和未來的項目做大量的文檔。快速開發經常帶來質量的低劣。所以原型過程模型從來沒有被獨立的用來開發軟件。它依賴于最終用戶方面的功能和接口,這可能會導致效率低下。最終用戶有時候可能不希望項目成功,因為威脅到他們的工作,他們可能會評估一些關鍵的軟件特性和功能。
快速應用開發( RAD)過程模型,是適合商業軟件開發的模型之一。需求和規劃、用戶設計、構建和收尾是RAD模型的主要階段。他帶來的好處就是快速開發和低成本。完整的用戶需求是RAD模型的核心優勢,這是因為在設計和構建階段對原型模型的應用。RAD模型關注用戶視角的主要特性,他涵蓋了瀑布模型的所有階段,但很有效率。所有的原型模型的缺點被納入到了RAD模型中。RAD模型不適合于涉及到安全方面的關鍵項目,比如涉及到生命風險等。
演化和增量過程模型支持軟件工程是開發出更完整和全面的軟件。溝通、規劃、分析、設計、測試和客戶評價是演化過程模型的主要階段。他適合模塊化,增量,WEB開發以及小規模團隊。軟件開發組織可以雇傭更多開發人員,當核心功能確認之后。
Rational統一過程( RUP的)模型結合了幾乎所有演化模型的特性,但他重點是純粹面向對象的。他的主要階段是,初始化階段,設計階段,構建階段和產品化階段。構建階段支持現有組件的重用。RUP的主要局限性是過高的時間和成本,強調文檔寫作而不是軟件開發。
Highsmith and Cockburn 認為[6]所有的敏捷過程都強調了質量上的設計。極限編程(XP)是被廣泛應用的敏捷過程模型(動態系統開發(DSDM), SCRUM, crystal, 特征驅動)。XP模型的主要階段是計劃,設計,編碼和測試。敏捷關注點在于用兩周的時間提價第一個軟件增量,用兩個月完成整個軟件開發任務。
所有模型的局限和利益在于快速開發和成本節約??焖匍_發帶來了低劣的質量以及RAD所有缺點的引入,表1是對瀑布模型,原型模型,RAD模型,演化模型,OO模型,RUP模型,敏捷模型以及本文提出的基于 CBD 的過程模型。
4. CBD過程模型研究現狀
Bailey and Basili[7]為組件重用和重設計提出了軟件生命周期模型,模型提出的組件重用的五個策略:
(1) 分析現有程序,對可重用組件排序。
(2) 重新設計,消除特定領域的問題。
(3) 將可重用組件保存在倉庫中。
(4) 以重用的方式構建獨立狀態組件并保存在倉庫中。
(5) 利用組件開發新系統。
該模型還不是CBD的完整模型,但他的核心關注點在重用活動上。粗略的收集需求可能
是一個項目最終失敗,這是由于需求的自然缺陷決定的。作者提出了構建軟件的方法—基于知識的組件分類。通過知識將現有的組件表示、選擇和整合到新的系統中。對重用工件的不同分類也有論述。這些是枚舉,關鍵字,面和超文本,這邊論文的目的是緩解基于知識的需求收集,但未提出全面的基于CBD的過程模型。
Eduardo Santana de Almeida等人[8]提出了分布式CBD的漸進方法。這種方法基于兩個階段,第一階段是組合問題域的需求并用面向對象的語言設計可用的組件,這些組件保存在倉庫中,第二階段是設計師根據需求從倉庫中選擇適當的組件來構建軟件。作者沒有提出一個足夠清晰的過程模型,而且也需要特殊的工具支持。
Luiz Fernando Capretz等人[9]提出了一種軟件生命周期可用于面向對象的CBD構建。他主要的階段是領域工程、系統分析、設計和實現。這個模型的主要問題是在設計階段選擇可重用組件,正常應該在分析階段,進而分析師能夠評估成本、時間安排、要求開發成果以及組件整合。
Hutchinson等人[10]提出了四階段的基于組件的開發過程模型。這是非常復雜的模型。核心的觀念就是整合現有的和新開發的組件,而不是內部開發,倉庫的概念沒這篇文章沒有體現。
Ning[11]的CBD過程模型包括的主要階段是組件分析、架構設計、組件鏈接、組件生產和組件整合,作者修改了瀑布模型并這和了上面提到的階段作為新的CBD過程模型。瀑布模型不適合商業應用,因為他重復的審核階段。時間和成本消耗過程模型只適合研究項目,表2是對以上幾個CBD 過程模型的比較。
5. 基于CBD的過程模型
面向對象的過程模型是唯一能夠表示對現有組件重用的過程模型,對象過程模型經過修改可以實現基于組件開發的重用。軟件設計,構建和測試階段體現了現有類的重用。本文提出的CBD過程模型的主要階段有溝通、計劃、分析與選擇、可發與測試、評估,如圖1。
項目開始通過與客戶溝通獲得基本的需求。初級用例在這個階段開發出來。項目規格或提案文件在計劃階段完成。項目規格或提案文件包括可行性分析和風險評估,并提供成本效益分析(CBA)表。CBA表用于分析項目是否對客戶可行。如果客戶同意提案分析階段才能開始。面向對象的過程模型能夠依據CBD過程模型進行修改,所以新的分析階段命名為分析與組件選擇。這個階段分析師收集詳細需求并嘗試定位和選擇可重用組件,這里引入了組件倉庫的概念,這些組件的之間的關系是確定的,而且組件的屬性和行為也已經定義好,這個階段需要最大化的重用組件,而不需要重復發明輪子。他將提高軟件工程師的生產力和效率?;诿嫦驅ο竽P偷拈_發與測試階段滿足CBD過程模型的要求。被選擇的組件依據新系統的需求進行修改和測試。對于新的組件要進行設計、開發和單元測試。對新開發的和重復使用的組件進行集成和系統測試。如果編程人員正在使用基于CORBA或RMI的架構,接口定義語言( IDL )可用于編碼集成組件。面向對象的過程模型滿足CBD過程模型的需要??蛻粜枰u估和驗證軟件是否滿足他們的實際需要。
6. 倉庫的角色和重要性
基于可重用組件的軟件開發可以提高效率,倉庫用于可重用組件的存儲和管理,他的組要好處:分類、搜索、修改、測試、實施、版本控制、變更控制、最新和一致的文檔。我們可以從多維倉庫(一個或多個倉庫組成)中選擇和管理組件,多維倉庫的好處在于基于領域的開發和分類。
7. CBD過程模型的優越性
基于組件開發的優點:可重用性、互操作性、可升級性、低復雜性、時間效益、成本效益、開發效率、可靠性、高質量??芍赜眯允腔贑BD開發的重要特性,用ASP開發一個基于 WEB 的Email 系統就是一個CBD應用的例子。協作數據對象的Windows NT服務器(CDONTS)是微軟開發的郵件系統,這個組件能夠用來開發類似的應用系統。一個特定工具的內嵌組件也放映了從用的好處,如微軟VB的6.0文本框和命令按鈕對象等,這些組件可以被頻繁的使用,這就是VB6.0成為快速開發工具的原因。我們把經理花在業務開發實現上而不是基本的組件上。
CBD架構允許組件之間通信,使組件之間有互操作性,便于開發人員將系統整合到其他應用系統,不同銀行ATM機上信息系統互聯就是一個很好的例子。如果組件需要升級,對于WEB應用系統來說是很容易的,只需要用新組件替換原有組件而不需要更改應用系統。C/S架構用來開發分布式應用系統。這里有三中類型的C/S架構:(1)將表示層,業務邏輯層和數據層封裝在一起的應用系統比如微軟的 EXCEL 和 Access 軟件等。(2)兩層架構前端整合了表示層和業務邏輯層,后端是數據存儲層,可以是Oracle SQLServer 等等。(3)表示層,業務邏輯層和數據存儲層作為獨立的層次,即是三層架構或多層架構,前端我們可用JSP,Servlet表示,業務邏輯可以用 EJB,DCOM 等描述,后端可以用數據庫或一般文件系統表示。
三層架構是目前用的最廣的用于開發商業軟件。商業邏輯隨著商業環境的變化,很容易改變,這樣只需要改變EJB或DCOM組件即可,而不需要太多改動表示層和數據持久層的代碼。
CBD的一個優點就是不需要程序員關系組件內部是怎么工作的。他們只需要關系組件的接口以及怎樣和他們的系統整合在一起。這就像一個司機一樣,他不需要知道轎車的發動機是怎么運行的。對于程序員他們只要關注應用軟件的業務邏輯而不去關系基本的組件,如文本框和按鈕組件的實現。CBD是程序員從復雜的編程中脫離出來。他們可以是可重用的組件在類似的系統中頻繁的應用,提高了開發效率,降低了開發成本,當然也使設計過程更有效率??芍赜玫慕M件第一次被使用后,徹底的被測試和維護,因此,可重用的組件相比新開發的組件更可靠更穩定,同時軟件的質量也有一定程度的提高。可重用的組件得到了很好的測試和維護。新開發的組件需要大量的開發和維護,大量的缺陷沒有被發現,軟件質量受影響就是這個原因。
大量的案例也正名了基于CBD開發的重要性。Lim[12]表述,重用組件的項目總儲蓄額沖410萬美元增長到了560萬美元,同時投資回報率也沖216%曾長到了410%。據他論述,重用代碼的缺陷率是0.9每千行代碼,而新開發的代碼的缺陷率是4.1每千行代碼,他通過兩個項目的比較,一個項目是基于CBD開發,一個不是,基與CBD開發的系統時間只是沒有基于CBD開發時間的51%。35%的軟件質量得到了改善。
8. 結束語
本文通過與傳統軟件開發的對比敘述了基于CBD的軟件開發過程模型,并提出了一基于CBD的軟件過程模型,同時討論了倉庫在CBD開發中的應用。通過以上的論述可以看出基于CBD開發的軟件更具成本效益、節約時間和提高生產效率。一個可工作的原型系統將支持基于CBD的模型的。
參考文獻
[1] Mark Lycett, George M. Giaglis. Component based information systems: Towards a framework for
evaluation. In: Proc of 33rd annual international conference on system sciences, Hawaii, 4-7 January 2001.
[2] Donald J. Reifer, Barry W. Boehm, Sunita Chulani, The rosetta stone: Making COCOMO 81 Files
Work With COCOMO II. Available from: http://sunset.usc.edu/publications/TECHRPTS/1998/
usccse98-516/usccse98-516.pdf,1998.
[3] Merijn de Jonge, Package-based software development. In: Proc of 29th EUROMICRO conference
new waves in system architecture,2003.
[4] Jihyun Lee, Jinsam Kim, Gyu-Sang Shin. Facilitating reuse of software components using repository technology. In: Proc of 10th Asia–Pacific software engineering conf, 2003.
[5] Jens-Magnus Arndt, Jens Dibbern. The Tension between Integration and Fragmentation in a
Component Based Software Development Ecosystem. In: Proc of 39th Hawaii international conference on system sciences, 2006.
[6] Highsmith J, Cockburn A. Agile software development: The business of innovation. IEEE Comput
2001;34(9):120–2.
[7] Bailey John W, Basili Victor R. The software-cycle model for reengineering and reuse. ACM
Press 1991:267–328.
[8] Eduardo Santana de Almeida, Alexandre Alvaro, Daniel Lucredio,Antonio Francisco do Prado,
Luis Carlos Trevelin, Distributed component-based software development: An incremental
approach.In:Proc of 28th annual international computer software and applied conference, 2004.
[9] Highsmith Luiz Fernando Capetz, Miriam AM Capretz, Dahai Li, Componentbased software
development. In: Proc of the 27th annual conference of the IEEE industrial electronics society, 2001.
[10]John Hutchinson,Gerald Kotonya, Ian Sommerville, Stephen Hall, A service model for
component-based development. In: Proc of 30th EUROMICRO Conf, 2004.
[11]Ning Jim Q. A component-based software development model. IEEE Software 1996:389–94.
[12]Lim WC. Effects of reuse on quality, productivity and economics.IEEE Software 1999;5:23–30.
本博客為學習交流用,凡未注明引用的均為本人作品,轉載請注明出處,如有版權問題請及時通知。由于博客時間倉促,錯誤之處敬請諒解,有任何意見可給我留言,愿共同學習進步。