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