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