`
touchmm
  • 浏览: 1037368 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

[转载] MDA—軟體開發的新思維

阅读更多

台湾人写的MDA入门介绍文章,是我喜欢的风格:一贯的实在和清晰,不用堆砌的名词、概念和不需要的形式化来砸人。这篇文章是2004年12月发的,但其中遗漏了对MDA中重要标准QVT的介绍。

转自http://nmlab.mis.nchu.edu.tw/course/93/nightelearning/wblog08/archives/002914.html

MDA—軟體開發的新思維



強調模型與實作分離的MDA,顛覆過去程式導向的開發方法,只要抽換底層的技術平臺,工具即可產生對應的程式碼...


需求搜集難以自動化
MDA的好處
由模型驅動程式的修改

強調模型與實作分離的MDA,顛覆過去程式導向的開發方法,只要抽換底層的技術平臺,工具即可產生對應的程式碼,因此開發人員應回過頭來重視設計與塑模,並強化本身的價值,純粹寫程式的工作,將淪為廉價勞工。



早期企業傾向自行開發應用程式,由於成本過高,1985年開始盛行商用套裝軟體,企業不再自行開發軟體,只要購買功能完整的商用軟體,再依各別需求加以客製化即可,省去自行開發的成本。1995年以後由於中介軟體(Middleware)的興起,資訊系統程式元件化的程度很高,MDA(Model-Driven Architecture)以模型驅動軟體開發的概念,也因此得以逐漸成形。



2001年OMG組織提出了MDA的架構,希望設計階段的模型與實作階段程式碼脫鉤。由OMG組織提供的MDA示意圖,解讀其概念,MDA運用UML、MOF、OCL及CWM等技術,建構業務導向的模型,只要抽換技術平臺,模型即可轉換成.NET、Java、CORBA、Web Services等程式架構,提供各類服務、事件處理、安全機制、交易及目錄服務等商務應用,甚至可因應抽象模型的調整,將商務應用對應到醫療、電子商務、製造業、財務、電信等不同領域。



從軟體開發的流程來看,需求分析、設計、開發、測試到部署上線的流程中,IDE(Integration Development Environment;整合發展環境)演進,第一、二代的產品專注於介面的友善及方便性;當功能發揮到極致,第三代的產品開始向程式開發的前後延伸,提供模型設計及功能測試的功能;第四代IDE尤其是Java的IDE工具,可針對不同的應用伺服器提供部署的機制。然而最開始需求分析階段的功能卻很缺乏,Borland大中華區技術總監李維認為:「需求分析牽涉各領域的產業知識與經驗,難以提供自動化的功能,因此呈現不對稱的發展。」



MDA以標準化的技術及方法,提供從需求搜集、需求分析、設計模型,以致對應各種技術平臺產生程式碼的解決方案。東海大學資訊工程科學系教授周忠信表示:「當企業的需求可具體模型化及圖像化,模型成為重要的資產,最有價值的產業知識將得以保存。」企業不必擔心人員異動引發系統維護的問題,即使資訊架構改變,例如由Java改成.NET,也只需底層技術平臺即可。



目前MDA的開發工具及CASE Tool,均實作PIM(Platform Independent Model)、PSM(Platform Specific Model)到產出程式碼的階段,CIM(Computation Independent Model)的技術尚未成熟,所以現今的工具著墨甚少。因為從使用者的角度,描述商務需求太過抽象,再轉換到技術實作困難度高。



軟體技術發展迅速不斷推陳出新,開發永遠追不上技術的腳步。模型是高階抽象化的表達方式,比解讀程式碼容易,因此MDA的構想是在設計階段完全不考慮技術平臺,CIM與PIM都是抽象的模型,CIM以使用者的角度描述業務需求;接著PIM則專注在各領域應用系統的模型化,但仍不考慮使用的技術;PIM可對應到各種技術平臺的PSM模型,進而自動產生程式碼。修改PIM對應到PSM即可自動產出不同的程式碼或資料庫綱要(Schema),系統維護工作也就變得容易。



李維說:「MDA是UML軟體技術很自然的延伸。」模型可細分為概念模型(Conceptual Model)及實作模型(Implementation Model),概念模型是用來描述需求及設計概念;實作模型與各種語言的實作有關。



程式導向(Code-Oriented)的開發方式,通常直接從實作模型開始,然後寫程式,沒有經過設計概念模型的過程;但對於有受過軟體工程教育的人,習慣從UML設計開始。不過,應用UML的困擾,在於概念模型與實作模型的轉換有潛在的問題,一種是對應資料庫,另一種模型與程式碼的對應,雖然模型透過標準的UML設計,但寫程式時摻雜個人習慣等會變動的因素。



MDA希望彌補兩者之間的鴻溝,利用MOF、OCL、CWM等標準,讓概念模型以標準化的方法轉換成實作模型。一旦有了標準,開發工具廠商也就可研發自動化的工具,產生結構良好的實作模型。開發人員可專注於解決各領域產業的問題,減少寫程式的苦工。未來修改時,以正規中立的OCL設定模型的商業邏輯,不會影響到類別或物件的狀態,因為與實際的程式語言無關,所以對應到各種程式語言都可保證條件存在,不用擔心技術平臺的遷移,會導致遺漏任何商業邏輯。



雖然UML也是圖形化的表達方式,但產出的文件是概念模型,不貼近程式碼,現在已有CASE Tool例如Together,使UML的圖與程式碼達到雙向同步的機制,可確保模型與程式的一致性。然而叡揚資訊系統軟體服務事業處經理楊有進表示:「UML是站在技術的角度設計模型,MDA則是抽象層次以商業需求定義模型。」



雖然支援雙向同步的CASE Tool,協助企業解決設計文件與系統最終成品不一致的問題;然而對MDA而言,業務導向的塑模應該不包含逆向工程,所有的改變應從業務出發,以由上而下(Top-Down)的方式,因為需求改變而調整業務模型,後續由工具驅動程式碼的改變。此即Sybase系統顧問向質彬所謂:「Modeling即Coding的行為。」修改程式碼反向影響模型,是技術領導業務的作法,已經不符合MDA的理論基礎。



李維也認同MDA不具備逆向工程的概念,但是從技術的角度分析:「設計階段的塑模不可能深入所有的類別。」在UML的工具中,使用者可隨設計者或建構師等角色,選擇檢視不同層面的模型內容,設計階段的概念模型的確不應由程式驅動模型的修改;但在實作的階段,會隨著特定程式語言、技術、中介元件或GUI介面,加入特有的模型,這部分是可以雙向修改的。


不只是程式框架,是可執行的程式碼
UML、CASE Tool及MDA的差別
從學校教育著手,較易改變行為模式

相較於UML產生的Class Name、Method Name等程式框架,MDA透過PSM產生的程式碼不只是骨幹,還包括與商業邏輯有關「可執行」的程式碼,將大幅減少撰寫程式的負擔。



軟體設計與發展無需考慮平臺問題,了解產業知識的高階使用者,可輕易定義需求,從業務導向出發,依需求定義模型再產生程式碼,系統的彈性變大。業務模型從軟體架構抽離更大的好處,是不被底層技術綁死,不同程式語言的轉換不用重新改寫系統,可同時享有軟體基礎架構更新帶來的優勢,又確保業務模型的準確性,不用擔心寫錯或遺漏重要的功能。



在MDA的規格中,PIM及PSM均可利用UML設計模型,因此容易讓人產生混淆,UML與MDA有何不同?



李維表示:「UML是靜態的模型,MDA則是動態模型,可以更精確的方法描述模型的商業邏輯。」MDA與UML兩者的差別,在於UML用自然語言描述商業邏輯,例如薪水大於五百萬;而MDA利用OCL技術,以更精確的數學運算式描述商業邏輯,例如Revenue>5000000。運算式沒有模糊地帶,因此工具可依據OCL的定義產出實作的程式碼。



即使MDA相關的MOF、OCL、XMI、UML等各種技術已有清楚的規格,但OMG並沒有明確的規定,要具備哪些技術或標準才算MDA,所以各家實作的範圍及方法並不相同。



就因為實作MDA沒有一定的標準,UML是MDA的標準之一,支援UML就可以聲稱支援MDA,不禁令人懷疑CASE Tool及MDA工具兩者有什麼不同?到底有沒有界定的標準,可判斷市面上的CASE Tool只是以MDA作為行銷名詞的UML工具,還是正宗的MDA產品?



楊有進說:「CASE Tool仍在PSM層級的技術性模組,若能設計業務導向的模組,才能稱得上MDA。」而周忠信認為:「MOF及XMI是指標。」李維則表示:「MDA的規格即說明,MDA工具必須包含UML、MOF、OCL及自動化的工具。」自動化的工具是各家廠商自行的實作,從模型的外觀來看,很難察覺UML或MDA的圖形。當初UML只定義方法論及圖形表示方法,拆解模型的結構,如果只是UML工具,通常不會使用OCL,MDA模型的邏輯設定不會用程式語言實作,會用正規的OCL定義。



不過各方專家建議的衡量標準均未必絕對,OMG沒有強制規定MDA一定要具備哪些標準,工具為在市場競爭,必然拿MDA大作文章,企業若選擇以MDA為軟體工程,只能依自身著重的層面,尋求適合的工具。



MDA是一個新興熱門且快速發展領域,工具廠商才會不斷炒作這個話題。然而目前MDA的技術尚未成熟,所以並沒有真正可從CIM直接轉換到程式碼一步到位的工具,仍需透過層層轉換及設定,或鎖定特定語言的實作,才能直接產出程式碼。



對技術人員而言, MDA最重要的是思維的改變,楊有進評估:「從學校教育開始推廣,改變開發人員的行為模式,推估仍需兩年的時間,MDA的觀念才會普及。」周忠信站在學界的立場來看:「目前學校多有教育UML的觀念,但提及MDA的還很少,研究所可能有以MDA作為研究的主題。」MDA是軟體工程的一個門派,雖然是不錯的趨勢但目前並非主流,可能是相關課程中的一個章節。



李維預測:「未來軟體工程應會像程式語言的發展一樣,呈現百花齊放的榮景。」隨著網際網路及不同平臺的交流越來越發達,每個人會自由選擇最適合及偏好的語言開發系統,相同的,軟體工程不會只有單一方法存在。



相對於輕量級的XP方法論,及重量級的RUP方法論,MDA是比XP麻煩卻比RUP簡單的軟體工程。與其他領域不同的是,程式語言及軟體工程存在一種信仰的成分,所以未來不太可能是一枝獨秀,在多元的發展的情況下,MDA可能成為主流之一,但不是唯一的選擇。


工具降低門檻,但門檻不會消失
沒有任何軟體技術是萬靈丹
既有的系統如何MDA?

雖然MDA的構想很完美,不過包含UML、MOF、OCL及CWM等許多的標準及技術,單單要了解這些背景知識就令人望而卻步。周忠信認為:「當工具包裝隱藏了理論的枯燥及困難度,即可降低MDA的門檻,提升市場的接受度。」各家產品的展示過程中,幾乎都可藉由直覺的拖拉點選及設定功能,即自動產生程式碼,使用者不見得知道,也分不清楚PIM、PSM、MOF或OCL是哪一步驟。工具的便利性,確實大大降低了使用者對艱澀難懂理論的恐懼。



不過,李維表示:「工具的確可以降低門檻,但門檻不會消失。」工具展示的畢竟是陽春的應用,在不懂MDA技術的情形下,開發簡單的系統,有可能透過工具直覺的設定,產出程式碼即完成。但企業級應用的系統,仍需有經驗且具備MDA相關知識的人,運用技術描述商業邏輯才可能完成。



現在已有很多開發工具提供拖拉點選的方式,自動產生SQL陳述式的功能,然而複雜的資料庫關連及巢狀式的條件,仍需回歸技術人員專業的功力,因此工具不可能包辦所有的事情。李維反問:「沒有背景知識為基礎,如何確認模型的正確性?」即使未來MDA的工具,提供驗證邏輯的功能,但沒有足夠的了解,也無法運用得宜。所以開發人員不能忽略蹲馬步基本功夫的重要性。



即使工具支援MDA,開發人員也不見得會運用,只有在金字塔頂端的領域,喜歡用正規塑模的方式開發軟體的專業人士,較會採用MDA的技術,但若要深入到所有開發人員日常的生活,還有很長的路要走,因為MDA的門檻較高。除要了解UML、MOF、OCL等觀念,還要認同設計與塑模的重要性。如果思維無法改變,MDA就只是一個空洞的理論,不會落實。



李維:「沒有一個軟體技術是萬靈丹。」MDA可以解決部分的問題,但不會解決所有的問題,當初RUP及XP方法論出現時,大家都認為很理想,但也沒解決所有的問題,這也是促使軟體工程不斷進步的原因。



既有的系統若已執行得很平順,未來不會有太大的調整,轉換至MDA的架構意義不大;若有持續修改的可能,套用MDA的架構,將可降低後續維護的成本,並提高系統調整的彈性。



不過,不是所有的應用程式都可套用MDA,至少得是物件導向的架構,可透過UML工具以逆向工程產生PIM模型,再匯入MDA工具,才能以模型驅動程式碼。以程序導向架構開發的應用程式,就無法反推成MDA的架構。


軟體代工有機會實現
只會寫程式將淪為廉價勞工

過去軟體代工的構想,無法像晶圓代工一樣可以成形,是因為使用者需求難以透過語言或文字精確的表達。需求的表達需要頻繁的溝通,單純以文件清楚描述需求過於困難,常透過視訊會議即時溝通。



對於非英語系國家,外語表達能力普遍不佳,語言及文化上的差異,使得軟體代工更顯困難。由於認知的不同,導致使用者需要桌子,開發團隊卻產出椅子的情況。



MDA降低對語言的依靠及文化的認知,以圖像模型表達降低語言及文字產生的認知混淆,彌補需求與成品之間的差距。因此未來將走向軟體代工的趨勢,由臺灣設計及塑模,委外大陸或印度開發,降低生產成本。不但需求可被精準完成,不再桌椅不分,再搭配測試功能,品質也可獲得保證。



程式開發人員常戲稱軟體開發是純手工的傳統產業,事實上一點也沒錯,開發人員應尋求新的定位,不能只專注於程式語言的學習,否則將淪為廉價勞工。周忠信表示:「軟體工程比技術更重要,因為IT技術變化太快。」產業知識、軟體分析、計設模式與解決問題的能力,才是最有價值的部分,唯有加值自身的能力,才能避免被工具取代的危機。



企業投資龐大的團隊寫程式並不划算,資訊委外是不得不的趨勢, MIS的價值不在於撰寫繁瑣的程式。節省苦工的時間,學習軟體設計及塑模,思考如何建置更好的系統架構、強化系統效能,並提供使用者更好的服務,才是有價值的投資。


MDA相關技術介紹
雖然MDA可加速軟體開發的效率,但不見得容易普及,最主要的原因是MDA牽涉不少技術及概念,要資訊人員改變既有的思維,並學習相關知識,需要一段時間的醞釀。



資訊人員研究MDA理論很容易誤解,以為完全不用寫程式,事實上還是要寫程式,但不是寫繁瑣的運算邏輯,而是描述轉換的規則,相較於以往已大幅降低寫程式的負擔。未來MDA的工具日趨成熟後,有可能幾乎不用寫程式,多數的程式碼直接由工具產生。不過,塑模的技術及邏輯與關連的正確性,將是另一個重要的課題。



CIM(Computation Independent Model):不展示系統的架構,以與電腦無關的觀點看待系統。CIM也可稱為Domain Model,是商務使用者在訪談中,以他們的角度描述需求。



PIM(Platform Independent Model):以與技術平臺無關的觀點描述系統,稱為System Type Model,完全不思考底層以何種技術實作,專注在模型化財務、生產管理等商業邏輯。



PSM(Platform Specific Model):PIM的模型可對應到CORBA、Java、.NET或Web 等Services的PSM模型,然後自動產生對應的程式碼。



UML(Unified Modeling Language):所有MDA的規格將有PIM及PSM兩種層次的模型,作為規範的基準,而這兩種模型將以UML定義,也可說是MDA的基礎。



UML 1.4是目前官方正式的版本,透過UML格式記錄模型,以視覺化的角度,利用9種不同型態的標準圖形,描述軟體的設計架構,提供設計與開發人員共通的表達方式,達到溝通的目的。



MOF(Meta-Object Facility):在PIM轉換到與特定技術有關的PSM過程中,可能是轉換成Oracle、Sybase、SQL Server等資料庫,或轉換成Java、.NET、Web Services等IT技術。以人類的語言為例,英文是動詞在前,副詞在後;中文則是副詞在前,動詞在後。同樣的,各種平臺或程式語言的表示方式不同,工具很難符合不同技術的描述方法,MOF即以中立一致的標準描述模型,並定義各種底層應用技術轉換的規則,使模型可轉換成各種技術對應的語法。



CWM(Common Warehouse Model):CWM提供了一個完整、廣泛的標準化元模型(MetaModel),讓企業的資料採礦可跨越資料庫的範圍,而且做得更好。就像UML Profile,不過不是在應用程式的部分,而是在資料的部分,制定MDA對應資料庫的綱要(Schema)。CWM是由OMG及MDC(Meta-Data Coalition)共同努力的成果,CWM專注在資料的塑模;而UML專注在應用程式的塑模。



XMI(XML Metadata Interchange):XMI以標準化的XML文件格式及DTD,定義以XML為基礎的UML模型交換格式。也就是說,XMI也定義了UML轉換至XML的對應。



OCL(Object Constraint Language):OCL是分析設計軟體系統的註釋性語言,是UML延伸的標準,允許開發人員撰寫物件模型的限制條件並利於查詢。模型的限制條件非常有用,開發人員可建立規則以控管物件。當軟體專案需要獨特及複雜的規則定義在商業模組中,OCL變成物件發展不可缺的一部分。



在模型中設定商業邏輯的好處是維護容易。即使開發系統的人員已離職,當商業邏輯改變,接手維護的人員無需研讀及修改程式,只要修改OCL的定義,MDA工具即自動變更程式。



不將商業邏輯隱藏在程式碼中的好處,還包括未來改變技術平臺,若由人工重新打造企業必須承擔風險。MDA的架構無需重新開發,只要對應到不同的PSM,即自動產生程式碼,OCL可避免轉換的過程中,遺漏任何商業邏輯。不過,OCL運算式可以回傳數值,但是不能使用OCL來改變模型中定義的元素,也就是說OCL可定義商業邏輯,但若將新增、刪除、修改等系統行為定義在OCL中,則不符合OCL的精神。文⊙李延華

分享到:
评论

相关推荐

    一个支持MDA框架开发的开发环境—SiloMDA的研究

    MDA(Model Driven Architecture,模型驱动架构)是一种软件开发方法论,它强调将软件开发过程中的业务逻辑和系统架构转化为一系列的模型,通过模型之间的转换来生成最终的代码。这种方式能够提高开发效率,降低复杂...

    UML支撑MDA开发手册

    ### UML支持MDA开发手册知识点解析 #### 一、UML与MDA概述 - **UML(Unified Modeling Language)**: 是一种标准化的建模语言,用于对软件系统的结构和行为进行可视化、详述、构造和文档化。它不仅支持面向对象的...

    基于MDA软件开发的过程模型及其应用.nh

    基于MDA软件开发的过程模型及其应用.nh基于MDA软件开发的过程模型及其应用.nh

    基于MDA方法的软件系统开发研究

    【MDA方法与软件系统开发】MDA(Model Driven Architecture)是一种由OMG提出的软件开发框架,旨在通过模型驱动的方式提升开发效率和系统质量。MDA的核心思想是将模型分为两层:PIM(Platform Independent Model)和...

    模型驱动开发体系MDA(Borland2003大会演讲)

    模型驱动开发(Model Driven Architecture,MDA)是由OMG(Object Management Group)提出的一种软件开发方法论,它强调以模型为中心,通过元模型(Meta-models)和平台独立模型(Platform Independent Models, PIMs...

    MDA白皮书-模型驱动开发和UML 2.0

    《MDA白皮书-模型驱动开发和UML 2.0》深入探讨了模型驱动架构(MDA)和统一建模语言(UML 2.0)在现代软件开发中的核心作用,揭示了这一方法论如何改变软件工程的传统模式,以及其在提升开发效率、增强团队协作和...

    MDA模型驱动架构教程

    MDA(Model Driven Architecture,模型驱动架构)是一种软件开发方法论,由OMG(Object Management Group,对象管理组织)提出,旨在通过模型的抽象层次提高软件开发的效率和质量。MDA的核心思想是将软件开发过程中...

    MDA develop

    MDA开发过程在三个抽象层面上明确地分离了模型: 1. **计算独立模型 (Computational Independent Model, CIM)**:这是最抽象级别的模型,它代表了应用的概念模型,独立于解决方案的计算特性。 2. **平台独立模型 ...

    MDA.rar_mda_模型驱动

    MDA(Model Driven Architecture,模型驱动架构)是一种软件开发方法论,旨在通过将软件开发过程中的核心元素——模型——提升到主导地位,提高软件工程的效率和质量。MDA由OMG(Object Management Group)制定,其...

    模型驱动--MDA简介

    MDA 的关键特点就是软件开发的重点和输出不再是程序,而是各种模型,开发人员的工作是不断拓展模型,只有到了最后阶段才会考虑将其实现。MDA 的核心技术包括统一建模语言(UML)、元对象设施(MOF)、公共仓库元模型...

    INCA标定软件中的MDA

    通常,新版本的INCA会引入更多的特性、提升性能、增加对新车型的支持,以及改进与不同ECU的通信协议。因此,对于需要使用MDA功能的工程师来说,保持INCA软件的更新至关重要。 MDA的下载和安装是使用INCA软件的第一...

    模型驱动MDA学习论文精华

    模型驱动架构(Model Driven Architecture, MDA)是一种软件开发方法,它强调使用模型作为软件开发的核心,并通过一系列转换过程将高层的抽象模型转化为具体的平台实现。MDA旨在提高软件开发的效率,可重用性,并...

    Agile MDA pdf

    然而,敏捷MDA提供了一种新的视角,将代码与可执行模型视为同等重要的组成部分,并倡导快速迭代、短周期的开发流程。 ### 敏捷MDA的核心理念 #### 1. 模型与代码的等价性 敏捷MDA基于一个核心观点:即代码和可执行...

    MDA说明书来源于OMG

    MDA旨在将系统的设计与实现分离,通过使用模型和元模型来描述系统的各个层面,从而提高软件开发的效率、质量和可维护性。 MDA的核心理念是将业务逻辑和数据模型与技术实现细节解耦。在传统的软件开发过程中,业务...

    MDA Dms转换方法

    随着模型驱动架构(MDA)在软件设计与实施领域的日益普及,一种新的技术范式正在形成,它旨在整合不同的建模语言、工件和工具,以创建一个统一的技术空间。然而,这同时也对基于领域特定语言(DSL)的现有开发方法论...

    OMG Model Driven Architecture (MDA) MDA Guide rev. 2.0 (ormsc-14-06-01)

    模型驱动体系架构(Model-Driven Architecture,简称MDA)是由对象管理组织(Object Management Group,简称OMG)定义的一种系统开发方法。MDA提供了一种通过模型和架构来驱动整个系统(包括物理系统、组织系统和IT...

    解析MDA_精彩选读

    MDA作为软件工程领域的一种新型开发方法,由OMG(Object Management Group)标准委员会提出,其核心理念在于将软件开发过程中的各种抽象层次明确区分,并通过模型的转换来驱动整个开发流程,从而提高开发效率,降低...

    外接程序(MDA)实例.rar

    1. "一般外接程序(MDA)实例讲解.doc":这可能是一个详细文档,涵盖了MDA的基本概念、开发步骤、使用的技术以及如何创建和测试一个简单的MDA实例。文档可能包含代码示例,指导开发者如何使用Visual Studio创建项目...

Global site tag (gtag.js) - Google Analytics