精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕
打開APP
未登錄
開通VIP,暢享免費電子書等14項超值服
開通VIP
首頁
好書
留言交流
下載APP
聯系客服
MDA模型驅動介紹
燮羽
>《軟件工程》
2010.11.14
關注
模型驅動體系架構(Model Driven Architecture, MDA)是由 OMG 提出的新的軟件方法學,被面向對象技術界預言為未來幾年里最重要的軟件方法學。
模型驅動體系架構(MDA)把建模語言用作一種編程語言而不僅僅是設計語言,并以一種全新的方式將IT技術的一系列新的趨勢性技術整合到一起。這些技術包括基于組件的開發、設計模式、中間件、說明性約束、抽象、多層系統、企業應用整合以及契約式設計等。
模型驅動體系架構(MDA)的出現,為如何提高軟件開發效率,如何增強軟件的可移植性、協同工作能力、可維護性,以及如何提高文檔編制的便利性指明了解決之道。
MDA概述
MDA是“模型驅動體系架構”(Model Driven Architecture)的縮寫。它是由OMG定義的一個軟件開發框架。其關鍵之處是,模型在軟件開發過程中扮演了非常重要的角色。在MDA中,軟件開發過程是由對軟件系統的建模行為驅動的。
MDA開發生命周期和傳統的生命周期并沒有很大的不同。MDA的工件是形式化模型,也就是可以被計算機理解的模型。下面列出的3種模型位于MDA的核心:
· 平臺獨立模型(PIM):具有高抽象層次、獨立于任何實現技術的模型。
· 平臺相關模型(PSM):為某種特定實現技術量身定做,讓你用這種技術中可用的實現構造來描述系統的模型。PIM會被變換成一個或多個PSM。
· 代碼:用源代碼對系統的描述(規約)。每個PSM都將被變換成代碼。
傳統上,從模型到模型的變換,或者從模型到代碼的變換,主要是手工完成的。與此相反,MDA變換總是由工具執行的,許多工具可以把PSM變換成代碼,這并不令人驚奇。MDA的創新之處是把PIM到PSM的變換也自動化了。
軟件開發是什么
Alistair Cockburn在他的Agile Software Development一書中歸納了業界對軟件開發的看法:以C.A.R Hoare為代表的數學觀、以Bertrand Meyer為代表的工程觀、以很多程序員為代表的手工藝觀,還有一些程序員則認為軟件開發是神秘的創造行為。當然,近20年來,也有越來越多的人對軟件開發持建模觀,比如Ivar Jacobson就曾聲稱:軟件開發就是建模。MDA Explained一書的作者也指出:代碼就是模型。Cockburn則在他的書中獨樹一幟地提出:軟件開發是一種協作游戲。
自然,持不同軟件開發觀的項目主導者會關注軟件開發過程的不同方面。為了節省資源,我們希望軟件開發領域的研究者和項目主導者(實踐者)的關注焦點是真正決定項目成敗的那個方面。否則,學術界投入大量時間精力去研究對項目成敗無足輕重的因素,項目主導者把大量人力物力用于控制項目中無關緊要的方面(如Cockburn調侃地指出的:開發場所的環境濕度),那豈不冤枉至極?
那么,這個“至關重要”的方面究竟是什么呢?是工具?是過程?是整個方法學?還是人?或者是別的我們尚未注意到的因素?目前,沒有人知道確切答案。或許,每個方面都對項目成敗有些影響吧。無論如何,因為MDA將會對軟件開發的各個方面都產生深遠影響,所以不管您對軟件開發持何觀點,您都無法回避MDA。下文我將簡述MDA對軟件開發各方面帶來的影響。
MDA改變了協作游戲的角色和規則
好吧,我們就按照Cockburn的說法,把軟件開發看作協作游戲好了。不過,任何游戲總要有參與者和游戲規則吧?目前,編碼員是重要的游戲參與者,但在MDA版本的協作游戲中,沒有這個角色了,取而代之的是建模者。但是,MDA也引入了另一個新游戲——這個游戲不是編寫軟件產品,而是編寫變換規則。變換規則市場會逐漸成長,就像基于組件的開發啟動了組件市場那樣。在新游戲中,原來的編碼員中的精英人物將找到他們新的位置,而他們也將自豪地發現,他們編寫的代碼將獲得程度空前的復用。至于游戲規則的改變,我在這里說不好也說不全,請您在玩新版本的游戲時慢慢體會吧J
MDA改變了開發過程
目前,許多項目經理都很注重開發過程。或許因為過程對項目成敗真的很重要,或許僅僅因為過程是軟件開發中項目經理唯一可以施加較大影響的方面。無論如何,MDA對開發過程的改變不容忽視。
比如,開發過程的需求分析階段依然存在,不過需求分析員要編寫的不再是需求分析文檔,而是PIM——平臺獨立模型。需求分析文檔和PIM有什么區別?閱讀需求分析文檔的是人,是設計師或者程序員,但閱讀PIM的則主要是類似于編譯器的自動工具。
既然需求分析階段產生的工件改變了,那么依賴需求分析階段結果的設計階段自然也要改變,而“編碼”這項工作則需要完全重新定義了。測試、部署等階段也會有相應改變。此處不再詳敘,請閱讀本書正文。
MDA改變了開發工具
隨著技術的進步,開發工具的改變一直都沒有停止。當主流開發語言是匯編的時候,您可曾想象到含自動完成、重構、集成調試器的IDE?你可曾想到會有一天匯編代碼不再由人手寫而是由編譯器自動生成并且可以高度優化?那么,當主流開發語言的抽象層次即將再次躍升,開發工具的革命也將到來。在MDA的世界中,“變換工具”扮演了傳統編譯器的角色,傳統編譯器則退居目前匯編器(就是把匯編語言翻譯成機器語言的程序)的地位,其余各層工具依次后退。調試器也將逐漸進化,就如同從機器碼級調試(匯編語言級調試)向源碼級調試的過渡那樣,慢慢過渡到模型級調試。在IDE中最重要的也不再是基于文本的代碼編輯窗口,而是基于圖形的建模窗口。人們將像現在談論一個API函數那樣談論一個設計模式(design patterns),而代碼模式(idioms)將完全由變換工具自動生成,不再是人們關心的內容。
MDA讓你重新認識文檔、代碼、模型
以前,我們傾向于認為,給人看的文檔或者模型不需要寫得太精確,因為人總會有很強的理解力,人的大腦能夠“全自動”地更正一些無關緊要的錯誤并補全一些省略之處。另外,文檔或者模型寫得太精確是浪費時間,因為文檔和模型又不能變成可以運行的產品,你總是需要用代碼把模型重新翻譯一遍。Cockburn和一些XP推崇者的觀點更極端:文檔和模型不重要,人們拿著文檔或者圍在畫著模型的白板前的討論才重要,因為真正的溝通不是發生于閱讀文檔之時,而是發生于人與人的討論中。
好吧,或許以前確實如此。但MDA將完全顛覆這一現實。模型不再主要是給人看的了,而主要是給機器看的。寫的精確一點也不再是浪費時間,因為只寫一遍(您不需要再把文檔和模型手工翻譯成代碼)而且早晚要認真地寫一遍。至于圍在白板前的討論——如果是在討論如何編碼實現某個模型,那么很抱歉,這樣的討論不再需要了。當然,其他方面的溝通還是需要的,但必須承認,游戲規則已經改變,游戲中的關卡已經改變,您有了不少新的“通關任務”,而很多老任務則自然取消了。
MDA帶來了數學般的精確性
是的,凡是能讓機器理解和自動處理的東西都必須是數學般地精確的。您在編譯程序時有沒有遇到過這樣的編譯器信息:“警告:第nnn行代碼具有二義性”?那意思就是,請您把代碼寫得更精確些。那么,MDA要說的就是,請您把模型建得更精確性。MDA工具會嚴格檢查您的模型以確保這一點的。
MDA為新方法學提供了土壤
如果軟件開發是游戲,那么方法學就是攻略。或許高手不需要攻略也能把游戲玩通關,但大多數人在攻略的指導下能少走很多彎路。MDA制定了新的游戲規則,那么我們自然可以期待新版本的攻略如雨后春筍般出現。即便是同一個游戲,您手中有了不同的戰斗工具、不同的裝備,玩法也會不同。那么,既然MDA帶來了很多新一代的工具,新的方法學會誕生也不足為奇了。
既然提到方法學,我就再多說幾句。把軟件工程中“methodology”這一術語譯為“方法學”其實頗具誤導性,因為這個詞的內涵往往不是哲學老師常掛于嘴邊的“世界觀和方法學”的那個方法學,而是指一系列你需要照著做的方法,或者說一系列約束開發人員的規則。它不是“研究方法的學科”,而就是一系列方法和規則的集合。
按照規則的多少和約束的強弱,可以大致地把方法學分為重型和輕型兩種。“重型方法學”比較正規和嚴謹,在采用重型方法學的項目中,開發人員具有較強的可替換性,因為方法學本身強制要求開發者把他所創造的所有東西都記錄在案(按照該方法學規定的格式),所以參與項目的新人能借助這些文檔很快上手(前提是新人也熟悉這種方法學規定的格式),從而開發人員跳槽對項目的沖擊也相對較小。項目經理們可能會比較偏愛這樣的方法學,因為這樣一來他們掌控的因素比較多,風險就比較小。開發人員則不會喜歡這樣的方法學,因為在采用重型方法學的項目中,他們只是可替換的螺絲釘,難以感覺到自己的重要性。而且做連篇累牘的文案工作純屬利他(對經理、對可能加入的新人有利),毫不利己(很無聊很費時間,而且占用的是自己本可用于開發的時間)。
輕型方法學則具有相反的特質。記錄在案的東西不多,交付的就是代碼以及可以跑的產品,當然還有測試用例。大多數交流是口頭的、非正式的,很高效,但也只存在項目成員的腦海中。如果成員從項目中離去,那么他腦海中的這些東西也隨之帶走。因為開發人員往往都希望自己具有不可替代的重要性,而且一般都覺得寫程序比寫文檔好玩,再者輕裝向前可以走得比較快(因為不必把時間浪費于編寫正規文檔),所以開發人員一般都比較偏愛輕型方法學。
一般而言,大型項目采用重型方法學好一點,因為項目人手多,周期長,即便所有員工都很愛戴老板很忠于公司很喜歡這個項目,但這么多人在這么長時間內一個都不跳槽一個都不生病一個都不結婚生孩子也是挺難辦到的。而小型項目則往往采用輕型方法學好一點。Cockburn提出的水晶方法族就充分考慮了項目規模的因素,當然,還考慮了項目緊要性等別的因素。
那么,MDA有沒有對某種類型的方法學特別垂青呢?沒有,MDA是“輕重咸宜”的。既然XP(極限編程)儼然已是輕型方法的招牌,那么自有好事者用模型替換代碼,提出了XM(極限建模)。輕型方法的另一特征是迭代和重構,MDA極佳的同步特性也為之提供了有力支持。而重型方法也能從MDA獲益匪淺。重型方法有一大特征就是書寫詳盡的文檔,創建大量的模型,那么MDA說:讓文檔更詳盡些吧,讓模型更精確些吧……詳盡精確到機器都能理解并自動編譯了,這一量變到質變的轉換也就完成了。
從學術界及業界,我們已經看到,一些傳統的方法學正從MDA這一變革中汲取新的養分,而新的方法學也能從MDA的土壤中茁壯成長。或許未來20年中,又會有一批涉及MDA的新方法學著作出現吧。
創造性的腦力勞動是無可替代的
所有的改革都會在一定程度上重新分配社會資源,都會造成新的富人和新的窮光蛋。MDA也不例外。不過MDA所威脅到的是只會老老實實地把詳盡的設計文檔翻譯成C++或者Java代碼的人。
社會發展的歷史就是一部機器逐漸替代人的勞動的歷史。所以部分人失業是進步的必然代價。不要試圖阻止技術進步的腳步,因為技術進步的同時也會創造新的工作機會。比如MDA很可能就會創造出新的變換定義集市場。但是,只要您從事的工作具有創造性,就無法被機器取代。
軟件設計是需要創造性的,這一創造性或者體現在代碼中,或者體現在文檔中。在MDA出現之前,如果我們認真地編寫文檔,然后認真地編寫代碼,那么我們進行了兩遍創造性勞動,這浪費了勞動力。而有些軟件成熟度(CMM)級別高的企業(特別是印度和日本企業)是這樣做的:認真地編寫文檔,代碼則是文檔的精確翻譯。更多的中國企業則是這樣做的:文檔敷衍了事(敷衍CMM檢查組或者敷衍上級領導和客戶),創造性勞動則在編碼階段做。這些做法的優劣不去評述,但只要您做的是創造性工作,那么在MDA的世界中您會如魚得水的,因為工具只是為您節約了做無聊瑣事的時間,讓您可以把精力集中到創造性過程中去。
業界和IT媒體前段時間曾有“大量需要軟件藍領”的聲音,我不知道當時是否真的有此需要。但我在此大膽預言:MDA一旦普及,軟件藍領會大量失業。因此,我敬請讀者您不要把“軟件藍領”作為您的職業生涯目標。如要在未來立足軟件開發業,請您永遠不要放棄自己創造性思維的能力。
本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請
點擊舉報
。
打開APP,閱讀全文并永久保存
查看更多類似文章
猜你喜歡
類似文章
淺析軟件工程開發方法學RUP
Scrum中文網_敏捷起源以及敏捷創始人的傳記
軟件開發過程學習總結CMM、RUP、XP
可以選擇瀑布模型作為試點項目的生命周期模型嗎?
第11章 軟件項目管理
理順軟件開發各個環節-2(開發模式選取)
更多類似文章 >>
生活服務
首頁
萬象
文化
人生
生活
健康
教育
職場
理財
娛樂
藝術
上網
留言交流
回頂部
聯系我們
分享
收藏
點擊這里,查看已保存的文章
導長圖
關注
一鍵復制
下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!
聯系客服
微信登錄中...
請勿關閉此頁面
先別劃走!
送你5元優惠券,購買VIP限時立減!
5
元
優惠券
優惠券還有
10:00
過期
馬上使用
×
主站蜘蛛池模板:
同心县
|
永平县
|
策勒县
|
宁河县
|
雷山县
|
扬州市
|
东乌珠穆沁旗
|
本溪
|
奉新县
|
武冈市
|
西吉县
|
鄂伦春自治旗
|
辉县市
|
临武县
|
吉木萨尔县
|
绥宁县
|
洞头县
|
郓城县
|
三门县
|
大足县
|
荣昌县
|
高雄市
|
常德市
|
伊宁县
|
青铜峡市
|
仪征市
|
杭锦旗
|
科尔
|
阿瓦提县
|
临漳县
|
牙克石市
|
修水县
|
泉州市
|
隆回县
|
漳浦县
|
鄄城县
|
德清县
|
富阳市
|
阿城市
|
绥中县
|
海宁市
|