首頁 »
2006/03/28

MDA 與軟體開發工具:從 Delphi 2005 談起

今天下午,聽了一場由李維所主講的「Delphi 物件導向 .Net 應用程式開發」講座,收穫不少。雖然我並沒有使用 Delphi,但根據講座的大綱,似乎重點會擺在 MDA (model driven architecture) 身上,加上主講者值得信賴,就報名看看,refresh 一下 MDA 的近況,也順道看看領導廠商對於 MDA 的支援究竟有何進展。

果然如我所料,雖然題目不見得能全然反映出這三個小時的精髓,改為「Delphi 2005 的 MDA 功能簡介」或許較正確;但無疑的,這是場精彩的講座。 近年來,繼 UML (unified modeling language) 一統江山之後,OMG 的關注對象移往野心更大、但也更困難的 MDA。某方面來說,MDA 是將軟體工程界長久以來的夢想「畫畫圖,程式碼就蹦蹦蹦生出來」更加具體勾勒出來,只不過以往只是空中樓閣,現在則有了靠山,讓這夢想稍微不那麼遙不可及。 MDA 的靠山是:眾多開放標準或業界準標準的中介軟體平台 (middleware),簡化軟體元件的設計及互通性;流行的塑模語言 (modeling language),使分析階段 (analysis) 有了共通的基礎語彙;先進的軟體開發工具,強化塑模語言和中介軟體平台的聯繫。因此,MDA 勾勒出理想的軟體開發方式:在分析階段描繪出 PIM (platform independent model),再讓軟體工具根據目標平台的特性轉換出 PSM (platform specific model),再讓工具生出最終的程式碼:其中,PIM、PSM、meta-model 與轉換規則的角色分工如下:

其中,PIM、PSM、meta-model 與轉換規則的角色分工如下:

藍圖看起來很美麗,但我認為,單以技術角度來看,它的成敗,繫於幾個因素: PIM 是否完備、精確?不夠完備,不足以描繪意圖;不夠精確,不足以涵蓋細節。 PIM → PSM 及 PSM → code 的轉換技術是否成熟、完備、正確、效率高、可微調、可擴充? 人工必須介入的程度多寡? 可允許人工介入多少? forward/backward/round-trip engineering 的可能性? 在軟體開發流程/方法論、工具、平台等層面,是否有鎖定效應 (lock-in effect)? 套句我兩年前在 JavaWorld 技術論壇的討論:「我認為,OMG MDA 的真正牛肉(及挑戰),在於 models 之間的 clean separation 及 mapping。」 就我所知,這些都還是 open question。 Delphi 2005 的表現令人驚豔,我會找時間玩玩。此刻,僅就今天的第一印象,談談幾個不足或不明之處,希望不會與事實差太多。 第一、Delphi 2005 的 PIM meta-model 是採用 UML class diagram 及 OCL (object constraint language)(李維說將來會再支援 UML sequence diagram)。誠然,沒有 UML,MDA 的 PIM 層次將是空殼子,無從驅動一切;但 UML 即使已演進到 2.0 版,完備性及精確性是否真的足以驅動整個 MDA?若答案是 Yes,UML 就不必殘留 “note” 這種自然語言的附註元素;若答案是 No,那麼 UML 就仍不足以表達完 PIM,也就仍不足以驅動整個 MDA,人工介入仍不可免。 第二、Delphi 2005 似乎跳過 PSM 步驟,直接由 PIM 產生 code。據李維說,等到 OMG 的 QVT (Query/View/Transformation) 規格定案後,才有正規途徑可遵循。 第三、Delphi 2005 對於 PIM 至 code 的聯繫(譬如 O/R mapping),乃透過自家的 ECO (enterprise core objects) framework 來進行。以初步印象來說,ECO 還不錯;不過,若我們採用這種 MDA 方案來開發軟體,會不會連帶被綁在 Borland solution 之下?萬一 Borland 沒有計畫將 ECO 移植到其他平台、語言,也不打算支援其他類似位階的 framework,那麼,我們既有的 PIM、轉換規則、人工嵌入的種種增添/修改碼,是否只能自力救濟 re-engineering 一番?這只能期待 Borland 未來能在 PIM、PSM、QVT 的架構下,妥善定位、refactoring ECO 的角色,才能讓 ECO 成為 Borland MDA solution 裡的一個開放選項,而非唯一選擇。



模型驅動開發的今天←上一篇 │首頁│ 下一篇→誰會買下Delphi?
本文引用網址: