黃振業(yè)
【摘 要】本文闡述了公共軟件平臺的功能及發(fā)展。分析了當前平臺開發(fā)和應用中存在的不足及在實踐中遇到的困難,提出了一種新的公共軟件平臺的構建方法,并闡明了其優(yōu)點以及對其開發(fā)流程和相應的應用開發(fā)模式進行了探討。
【關鍵詞】公共軟件平臺;組件對象模型;開放源代碼
1 軟件平臺的產(chǎn)生及發(fā)展
軟件平臺通常是指建構于硬件設備和操作系統(tǒng)之上的應用開發(fā)框架,它的范疇并沒有一個嚴格的界定。通常操作系統(tǒng)之上與具體的應用邏輯無關的公共軟件部分都可以歸于軟件平臺,當然在具體的實現(xiàn)中平臺和應用也經(jīng)常出現(xiàn)在此消彼漲或相互重疊的現(xiàn)象。
顯而易見,軟件平臺產(chǎn)生的初衷是為了在規(guī)?;能浖_發(fā)中提高應用軟件開發(fā)效率,節(jié)約開發(fā)資源;由于平臺完成了絕大部分公共代碼,因而應用程序的開發(fā)將大為簡化,同時采用一套穩(wěn)定的公共平臺也大大降低了測試和維護的工作量。
目前公共軟件平臺的實現(xiàn)主要包括以下幾個方面:
操作系統(tǒng)適配層:通常是一個公共函數(shù)庫,它的主要目的是封裝系統(tǒng)調(diào)用,隔離應用程序和底層操作系統(tǒng)及硬件,實現(xiàn)代碼的可移植性。
OAM框架:提供公共的操作維護機制。
應用程序框架:主要是為了進一步簡化應用的實現(xiàn)或增強某些特性,而引入的公共的服務,如任務管理,狀態(tài)機模板,以及為了適應分布式應用和負載均分,高可靠性而引入的一些公共的機制或中間件。
開發(fā)工具:為了方便應用實現(xiàn)而開發(fā)的一些輔助設計和實現(xiàn)工具,如任務編輯器,狀態(tài)機編譯器等。
2 傳統(tǒng)軟件平臺建設中面臨的困難
傳統(tǒng)的軟件平臺通常是由專門的團隊開發(fā),作為獨立的子系統(tǒng)或通過SERVICE LIBRARY的方式提供服務給應用開發(fā)人員。但是這種方法有著很多不足之處:
1)平臺功能的重復開發(fā)嚴重。由于平臺的開發(fā)往往是和應用開發(fā)同時進行,甚至落后于應用的開發(fā),造成了大量平臺功能在不同應用中重復實現(xiàn)和棘手的版本問題。
2)平臺后期推廣困難。由于市場的壓力,很多軟件產(chǎn)品的開發(fā)來不及針對軟件平臺做詳細的全局的規(guī)劃,同時由于軟件巨大的代碼量和復雜度,使后來的平臺引入,特別是替換那些已經(jīng)在應用中實現(xiàn)了的功能變得困難重重。對于那些模塊化不好的軟件,由于錯綜復雜的依賴關系和交叉耦合,實際上如果不重寫軟件,那么不可能實現(xiàn)平臺化。
3)平臺功能的擴充較慢。平臺功能的升級速度很難滿足各種不同應用的多方面的需求。
4)對一些復雜應用特性支持困難。采用C函數(shù)庫或獨立子系統(tǒng)的方式來提供對一些高級特性的支持,如分布性與高可靠性,容易造成平臺自身結構的復雜化和靈活性的下降。
為了克服這些困難,我們有必要考慮從根本上改進平臺開發(fā)模式和實現(xiàn)方法,以促進平臺在實時開發(fā)中應用。
3 新一代軟件平臺
有一種形象的說法:騎自行車是不可能登上月球的。分析計算機語言的發(fā)展歷程可以發(fā)現(xiàn),編程語言的每一次升級都帶來開發(fā)效率的提高和軟件結構的變化。要實現(xiàn)更加復雜的功能和特性,通常必須采用更先進的開發(fā)工具和方法。
設想一下,如果我們用匯編語言來開發(fā)目前實時系統(tǒng)中一個簡單的模塊,如果消息隊列或者協(xié)議棧將會是什么情況。實際上,現(xiàn)今的實時軟件開發(fā)正處于這種困境中,現(xiàn)有的開發(fā)手段不足以應付開發(fā)復雜度和可靠性要求越來越高的軟件系統(tǒng)的要求。同時我們看到,編程語言的發(fā)展趨勢是隨著需求的不斷提高而不斷引入新的特性和增強的語素-從指令,到語言,函數(shù),對象,再到組件。正是由于C語言的基本語素——函數(shù)缺乏支持更高級需求的特征,因而造成了廣泛存在的代碼復用率和開發(fā)效率低下的問題。
綜上所述,平臺開發(fā)和應用中存在的問題主要是和軟件的設計方法和開發(fā)模式有關。要解決這些問題,必須從軟件工程的方向入手,對目前的開發(fā)模式進行改造。那么,實時軟件開發(fā)應該采用什么樣的開發(fā)工具和開發(fā)模式呢?首先,工程化意味著必須有明確的設計、生產(chǎn)、組裝、測試的階段和分工。其次,工程化還有一層隱含的意思,那就是必須在相當大的限度內(nèi),軟件開發(fā)的效率應當與投入的人力資源成近似正比關系。在當前的模式下很難完全做到第一點,即便是做了,效果也不理想;對于第二點,則其限度——即人員的飽和點遠遠不能滿足實際要求。
工程化是產(chǎn)業(yè)化的必然要求。如果我們把目光從實時軟件轉向桌面平臺去看一看,或許能從中得到啟發(fā)。微軟已經(jīng)成功地實現(xiàn)了到軟件工程的轉化,其根本途徑是組件式開發(fā)。簡單地講,組件式開發(fā)就是像建筑業(yè)用磚、瓦、水泥板等預制件來構造一座軟件大廈一樣。它的根本依據(jù)是軟件實現(xiàn)的模塊化分解和建模,即任意軟件可以分解為無交叉耦合的多個模塊。模塊的劃分越細,則并發(fā)開發(fā)的人員越多,開發(fā)效率就越高;建模則是要求按上訴條件分解后的軟件系統(tǒng)可以用完備的非代碼的方法描述。即開發(fā)人員可以根據(jù)設計文檔完成模塊開發(fā)和組合。
如果引入了平臺的概念,實時軟件和桌面軟件實際上已經(jīng)沒有本質(zhì)的區(qū)別。桌面軟件的開發(fā)模式和經(jīng)驗也同樣適用于實時軟件的開發(fā)。因此,組件式開發(fā)也將是實時軟件開發(fā)工程化的必經(jīng)之路。
4 實現(xiàn)方法
建設組件化的公共軟件平臺應采取以下幾個步驟:
1)制定組件規(guī)范。必須針對實時軟件的特性對微軟的COM規(guī)范進行必要的擴展,包括增加支持實時應用的標準接口。
2)選取或開發(fā)OS適配庫,組件支持庫,開發(fā)組件編譯器,測試環(huán)境。這是組件式開發(fā)的基礎。
3)建立組件資源庫,包括管理界面,組件上下載界面,Q/A界面。建立組件資源庫的目的是固化已有的軟件成果,使其可以繼承和復用。顯然,組件資源庫將隨著時間的推移而不斷擴大。完善的交互界面可以提高資源庫的使用效率。
4)培訓開發(fā)人員。包括組件的開發(fā)和使用,組件的檢索,下載和提交。
5)開放資源庫,接受提交,測試并發(fā)布已提交的組件。觀察當前留下的開放源代碼的發(fā)展可以發(fā)現(xiàn),這是一種非常有效的分布式開發(fā)模式。它的成功之處一方面在于能夠匯聚零散的開發(fā)資源——由于眾多的參與者的加入,每一個開放源代碼軟件都能夠得到充分的開發(fā)、測試、使用和維護的支持。另外一個成功的原因在于,每一個項目成員的參與,通常都是基于對這個項目的強烈需求或者濃厚興趣。雖然這種方法來開發(fā)一個完整的商用軟件是不充分的,但是它卻可以成為開發(fā)一個逐步積累的組件資源庫的最佳途徑。特別是如果對于每一個提交都有相應的激勵,就能夠更加有效地提高向組件式開發(fā)轉化的進程。開發(fā)人員會非常樂于開發(fā)和使用組件,并且逐步對已有的軟件中可以用組件實現(xiàn)的代碼進行轉換,從而擴大已有代碼的組件化比率,并最終實現(xiàn)全面的組件式開發(fā)。
6)當設計人員,開發(fā)人員都已經(jīng)習慣于組件式開發(fā)時,原有的開發(fā)隊伍就會自然而然地分化為:系統(tǒng)設計人員、組件開發(fā)人員和使用者。很顯然,他們的功能分別對應于設計、生產(chǎn)和組裝,這正是軟件工程的要求之一。
7)隨著組件資源的不斷積累,新的應用軟件開發(fā)將變得越來越簡單,效率也越來越高。
與傳統(tǒng)平臺相比,新的方案具有以下幾個優(yōu)點:
1)強調(diào)了平臺自身的模塊化,即使用者可以根據(jù)需求選取必要的功能模塊,而不必依賴于龐大、復雜的平臺子系統(tǒng)。
2)應用開發(fā)人員可以根據(jù)自己的需求對已有的平臺功能進行擴展和擴充,而不會影響其它的使用者。這大大提高了平臺的發(fā)展速度。
3)良好的組件規(guī)范和設計方法能夠保證么一個組件都成為恒久的軟件資源,使之不會隨著產(chǎn)品的升級換代而流失。
4)統(tǒng)一的資源庫使不同應用之間也可以實現(xiàn)組件共享,從而實現(xiàn)整個公司范圍內(nèi)開發(fā)資源的優(yōu)化。
5)可以促使開發(fā)人員提高模塊化意識,改善軟件結構。
當然我們要做到這些,前提是必須制定和實施完善的組件對象模型規(guī)范。從長遠的發(fā)展考慮,越早實施新的方案越有利于開發(fā)效率提高和資源的積累。
【參考文獻】
[1]汪瑞嶸,等.基于SOA的軟件公共服務平臺設計與實現(xiàn),軟件產(chǎn)業(yè)與工程,2014.11.
[2]Samuel Qu,Using COM+&UML for Real-time Software Design,2003.endprint