变革前的思索
一、軟件業(yè)面臨的挑戰(zhàn)——適應(yīng)技術(shù)和需求易變性
??? 荷馬在他的史詩中描述了西西弗斯的故事,他必須將一塊巨石推上海蒂斯的一座小山,但每當(dāng)接近山頂時(shí),巨石又會滾下來,因此西西弗斯的苦役用無止境。而當(dāng)今的IT軟件人正是現(xiàn)在版的西西弗斯——面臨的是快速變化的技術(shù)和越來越復(fù)雜的需求。(摘自《應(yīng)用MDA》)
許多軟件業(yè)同仁已經(jīng)察覺到,軟件業(yè)正站到了一個(gè)新的巨大的技術(shù)變革的前沿。看看最近炙手可熱的技術(shù)和標(biāo)準(zhǔn):面向構(gòu)件編程、面向方面編程(AOP)、產(chǎn)生式編程(GP)、動(dòng)態(tài)語言、模型驅(qū)動(dòng)架構(gòu)(MDA)、語義Web(Semantic Web)、Web服務(wù)、面向服務(wù)架構(gòu)(SOA)、BPEL等等。事實(shí)上,我們已經(jīng)再一次被大量全新的技術(shù)和標(biāo)準(zhǔn)所包圍。在諸多的新標(biāo)準(zhǔn)和技術(shù)中,究竟那一種方案,會讓軟件業(yè)迎來一次革命性的變革?在這些看似不同的方案中,他們是否有共同的方向?這個(gè)共同的、最重要的方向是什么?面對洶涌而來的新標(biāo)準(zhǔn)和新技術(shù)浪潮,在變革的前夜,探尋軟件技術(shù)變革和突破的走向,就是我這一年學(xué)習(xí)和思索的主題。
??? 需求推動(dòng)IT發(fā)展,IT發(fā)展又刺激新的更大更復(fù)雜的需求,這是IT發(fā)展的巨大動(dòng)力源泉。軟件業(yè)從硬件分化出來那天開始,就面臨著適應(yīng)技術(shù)變化和需求變化的挑戰(zhàn)。特別是,硬件、網(wǎng)絡(luò)和通訊的快速發(fā)展拉近了時(shí)空,以前所未有的速度影響人們的生活、企業(yè)的經(jīng)營和社會的發(fā)展,這更使軟件業(yè)雪上加霜,面臨更加嚴(yán)重的危機(jī)和挑戰(zhàn)。
??? 正是技術(shù)和需求的易變性,導(dǎo)致軟件危機(jī),也催生一次又一次的軟件業(yè)變革。更好的適應(yīng)技術(shù)和需求的易變性既是軟件業(yè)變革的推動(dòng)力也是變革的方向和檢驗(yàn)標(biāo)準(zhǔn)。
二、迎接挑戰(zhàn)——分離模型與實(shí)現(xiàn)
?????? OMG組織以特有的影響力將MDA推到了這場變革的中心。MDA定義了平臺無關(guān)模型(PIM)、平臺相關(guān)模型(PSM)和代碼以及它們之間的關(guān)系。MDA的關(guān)鍵思想包含兩部分:模型和驅(qū)動(dòng),這里的模型是指PIM,驅(qū)動(dòng)的方法是將PIM通過變換工具自動(dòng)生成平臺相關(guān)模型(PSM),進(jìn)一步生成代碼。
????? PIM的“獨(dú)立于平臺”這個(gè)說法有模糊性,容易讓人誤解。正是因?yàn)檫@一點(diǎn),PIM遭到業(yè)界部分人士(包括知名人士)的質(zhì)疑,認(rèn)為PIM根本就不存在,是空中樓閣。我們先來看看《應(yīng)用MDA》一書中關(guān)于PIM的一個(gè)小結(jié):
l?? PIM更準(zhǔn)確的定義應(yīng)該是“獨(dú)立于平臺的計(jì)算模型”。
l?? 平臺獨(dú)立性是一個(gè)相對的說法。當(dāng)聲稱某個(gè)語言或者模型是獨(dú)立于平臺的,你必須說明獨(dú)立于哪些平臺技術(shù)。
l?? 當(dāng)前,獨(dú)立于平臺意味著獨(dú)立于信息格式化技術(shù)、3GL、4GL、分布式組件中間件和消息中間件。
這個(gè)解釋還是不夠清晰,我們再看看《解析MDA》中對PIM的描述:
PIM是具有高抽象層次、獨(dú)立于任何實(shí)現(xiàn)技術(shù)的模型。
這里指出了“獨(dú)立于平臺”實(shí)際上是獨(dú)立于實(shí)現(xiàn)技術(shù)。這對我們理解MDA非常重要。
??? 我的理解,任何軟件系統(tǒng)包括模型和實(shí)現(xiàn)兩部分,模型是對系統(tǒng)的描述,實(shí)現(xiàn)是利用特定技術(shù)在特定平臺或環(huán)境中對模型的解釋。模型僅僅負(fù)責(zé)對系統(tǒng)的描述,與實(shí)現(xiàn)技術(shù)無關(guān)。我把這一點(diǎn)稱為模型的實(shí)現(xiàn)技術(shù)無關(guān)性。分離模型與實(shí)現(xiàn),這樣做具有合理性嗎?有什么好處呢? 是否符合軟件業(yè)變革的方向和檢驗(yàn)標(biāo)準(zhǔn)呢?
??? 讓我們再聽聽布魯克斯在《沒有銀彈》文中的論述:“所有軟件活動(dòng)包括根本任務(wù)——打造構(gòu)成抽象軟件實(shí)體的復(fù)雜概念結(jié)構(gòu),次要任務(wù)——使用編程語言表達(dá)這些抽象實(shí)體,在空間和時(shí)間限制內(nèi)將它們影射成機(jī)器語言” 。
??? 我把布魯克斯的根本任務(wù)理解為表達(dá)模型,次要任務(wù)理解為實(shí)現(xiàn)模型。分離模型與實(shí)現(xiàn)就是分離軟件活動(dòng)中的根本任務(wù)與次要任務(wù)這兩個(gè)關(guān)注面。模型實(shí)現(xiàn)是軟件活動(dòng)的次要任務(wù),當(dāng)然,這并不是說它不重要。我理解布魯克斯的觀點(diǎn)是根本任務(wù)的復(fù)雜性遠(yuǎn)遠(yuǎn)超過次要任務(wù)的復(fù)雜性,換句話說,就是次要任務(wù)相比根本任務(wù),要容易解決的多。
??? 在討論分離的合理性與好處之前,我們先關(guān)注模型實(shí)現(xiàn)的兩種方式。一種是直接執(zhí)行,就是使用動(dòng)態(tài)執(zhí)行引擎直接執(zhí)行,我把這個(gè)動(dòng)態(tài)執(zhí)行引擎稱為模型的運(yùn)行平臺;另一種是模型變換,就是把模型變換為更容易執(zhí)行的目標(biāo)語言表達(dá)的模型,目標(biāo)語言一般情況是抽象程度更低的語言,這里的變換通常需要變換定義和相應(yīng)的變換工具。
下面,討論分離能否迎接軟件業(yè)面臨的挑戰(zhàn)——適應(yīng)技術(shù)和需求的易變性。
??? 首先,模型與實(shí)現(xiàn)分離后,能夠很好的適應(yīng)技術(shù)易變性。由于實(shí)現(xiàn)往往高度依賴特定技術(shù)和特定平臺,當(dāng)技術(shù)發(fā)生遷移時(shí),只需針對這種技術(shù)作相應(yīng)的實(shí)現(xiàn),編寫相應(yīng)的運(yùn)行平臺或變換工具。所以,能夠比較好的應(yīng)對實(shí)現(xiàn)技術(shù)發(fā)展帶來的挑戰(zhàn)。
??? 其次,我們看看適應(yīng)需求易變性方面。模型與實(shí)現(xiàn)分離后,應(yīng)對需求的變更,就是調(diào)整模型,然后重新實(shí)現(xiàn)即可。看看重新實(shí)現(xiàn)的代價(jià),如果模型的實(shí)現(xiàn)是采用直接執(zhí)行方式,我們不需要做任何事情,如果采用模型變換方式,只需重新變換,然后發(fā)布實(shí)施即可。從這里可以看出,模型的實(shí)現(xiàn)是很容易適應(yīng)需求變化的。分離后,能否適應(yīng)需求易變性,關(guān)鍵是看模型本身是否比較容易隨需而變。如果模型本身不容易改變,則適應(yīng)需求易變性就是空話。
??? 舉個(gè)例子,看看互聯(lián)網(wǎng),網(wǎng)站就是一個(gè)模型,HTML和URL是這個(gè)模型的描述語言,它的實(shí)現(xiàn)方式是直接執(zhí)行,Web服務(wù)器和瀏覽器是運(yùn)行平臺。想想,如果沒有Web這種模型和實(shí)現(xiàn)分離的手段,而采用3GL編程的模式,現(xiàn)在的Web會是怎樣的一種景象。
讓我們再看看MDA,MDA的思路分離了模型和實(shí)現(xiàn),這無疑邁出了迎接挑戰(zhàn)的最重要的步伐。但是,到目前為止依然有不少質(zhì)疑MDA方向的聲音,這是為什么?MDA在模型表達(dá)方面做的工作還遠(yuǎn)遠(yuǎn)不夠。MDA 的四層模型表達(dá)能力雖然比3GL提升不少,但依然不夠,很多的業(yè)務(wù)邏輯無法直接描述,只能用過程型的計(jì)算邏輯表達(dá)。而OMG組織在MDA的方向重點(diǎn)是模型變換,也就是說,MDA目前的努力依然是在解決次要任務(wù)。
??? 相對于復(fù)雜概念結(jié)構(gòu)的模型表達(dá),模型的實(shí)現(xiàn)方式是變換還是直接執(zhí)行并不重要。響應(yīng)布魯克斯的呼吁吧,我們是該關(guān)注根本任務(wù)的時(shí)候了。
三、關(guān)注根本任務(wù)——模型表達(dá)
?????? 3GL的問題到底在哪?讓我們先做個(gè)假設(shè),SOA 時(shí)代已經(jīng)變?yōu)楝F(xiàn)實(shí),整個(gè)互聯(lián)網(wǎng)就像運(yùn)行著的一個(gè)進(jìn)程,調(diào)用遠(yuǎn)程服務(wù)與調(diào)用內(nèi)部方法一樣方便。是否就解決布魯克斯說的根本復(fù)雜性了呢?當(dāng)然還存在問題。
??? 機(jī)器指令、匯編語言、第三代編程語言(包括結(jié)構(gòu)化3GL和面向?qū)ο?GL)和網(wǎng)絡(luò)出現(xiàn)之后的各種RPC(包括CORBA、DCOM、EJB、SOAP等)的發(fā)展都是以計(jì)算為核心、圍繞提升計(jì)算平臺的抽象層次,其主體是采用過程性表達(dá),用指令告訴計(jì)算平臺如何做。
?????? 3GL的表達(dá)范式不適合用來表達(dá)復(fù)雜概念結(jié)構(gòu),不適合用來表達(dá)多種多樣的模型,不適合用來表達(dá)計(jì)算無關(guān)模型(CIM),導(dǎo)致了軟件業(yè)的根本困難,使軟件業(yè)無法應(yīng)對需求的易變性和復(fù)雜性。如何表達(dá)這些多種多樣的模型呢?
??? 事實(shí)上,由于3GL表達(dá)的局限性,已經(jīng)產(chǎn)生了多種專用的領(lǐng)域表達(dá)語言,就我熟悉的企業(yè)應(yīng)用軟件領(lǐng)域來看,比如SQL語言、工作流描述語言(XPDL、BPEL、XLANG、WSFL、BPML、WSCI)、規(guī)則描述語言、權(quán)限描述語言、界面描述語言等等。這些語言的共同特征是表達(dá)目標(biāo)領(lǐng)域比較自然、簡潔和表達(dá)能力強(qiáng),而且與實(shí)現(xiàn)無關(guān)。它們都能比較好的適應(yīng)技術(shù)和需求變化。
??? 這能給我們什么啟發(fā)呢?要表達(dá)模型,需要用合適的表達(dá)語言。當(dāng)然,通用的模型表達(dá)語言并不容易突破,這也許是3GL后的抽象層次提升到現(xiàn)在都不理想的原因吧。但不要悲觀,我們看看可能的方向。
??? 模型表達(dá)是知識的表達(dá)。知識表達(dá)按范式分有說明性(Declarative paradigm)和過程性(Imperative paradigm),按作用分有結(jié)構(gòu)和動(dòng)態(tài)表達(dá)。到目前為止,并沒有適合計(jì)算機(jī)處理的統(tǒng)一知識表達(dá)手段。但有多種領(lǐng)域、學(xué)科在做探索。比如人工智能學(xué)科。人工智能中有多種知識表達(dá)方式,比如演繹系統(tǒng)、產(chǎn)生式系統(tǒng)、框架結(jié)構(gòu)、語義網(wǎng)絡(luò)、描述邏輯和過程性知識。這些方式構(gòu)成了強(qiáng)大的知識表達(dá)體系和應(yīng)用能力,其中有不少在軟件中以得到應(yīng)用,比如目前主流的規(guī)則引擎都是采用產(chǎn)生式系統(tǒng),不少專家推理和知識系統(tǒng)采用一階謂詞邏輯表達(dá)。
??? 我們再看看Web的發(fā)展方向。W3C明確指出,語義Web是方向,而且已經(jīng)做了不少工作,取得不少進(jìn)展。今年剛剛通過OWL(Web Ontology Language)為推薦標(biāo)準(zhǔn),這為語義Web的發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。OWL基于描述邏輯(Description Logic),在表達(dá)結(jié)構(gòu)和語義方面有其獨(dú)到之處。最近,根據(jù)OWL,OMG也開始定義自己的本體表達(dá)語言O(shè)DM(Ontology Definition Metamodel)。這些情況表明,形式化的語義表達(dá)和推理即將姍姍來遲,這將為模型提供結(jié)構(gòu)方面的形式化語義表達(dá)能力。這一點(diǎn)非常重要,因?yàn)榈侥壳盀橹?#xff0c;軟件處理的都是弱語義數(shù)據(jù)。這不但容易引起非常多的不應(yīng)該產(chǎn)生的錯(cuò)誤,而且軟件幾乎沒有語義關(guān)聯(lián)和推理等智能處理能力。
??? 如何融合聲明性和過程性、結(jié)構(gòu)和動(dòng)態(tài)表達(dá)方式,形成協(xié)調(diào)、適合計(jì)算機(jī)處理、表達(dá)能力強(qiáng)和富語義的模型表達(dá)體系,甚至統(tǒng)一的模型表達(dá)語言,也許是突破根本復(fù)雜性的希望所在。
四、希望現(xiàn)代版西西弗斯的苦役早日結(jié)束
??? 面對苦役,我們技術(shù)人員應(yīng)該怎么辦?首先,認(rèn)清各種技術(shù)的實(shí)質(zhì)是解決根本問題還是次要問題。其次,深入領(lǐng)域,學(xué)習(xí)、應(yīng)用甚至創(chuàng)造特定領(lǐng)域模型表達(dá)語言是應(yīng)對技術(shù)和需求易變性的不變之策。
摘自:http://blog.csdn.net/coofucoo/archive/2005/05/28/382722.aspx
總結(jié)
- 上一篇: 什么是Ruby on Rails
- 下一篇: J2EE 常见回答