微軟在Visual Studio 2010開發工具中開始支援UML(Unified Modeling Language),但這不是微軟第一次靠近UML,早在1997~1998年間,微軟提出的Visual Studio 6中就包含了一套支援UML的工具,叫做Microsoft Visual Modeler。

我在微軟的MSDN一篇談到Microsoft Visual Modeler支援「雙向工程」(Round-Trip Engineering)的文章中,發現了Microsoft Visual Modeler 的舊影。我從網頁(http://msdn.microsoft.com/en-us/library/aa267720(VS.60).aspx)中下載了幾張圖片,跟你分享一下那個簡單年代的簡單畫面。這幾張操作畫面也提醒了我們,當年微軟的Visual Studio確實是有支援雙向工程。圖1、圖2和圖3是Microsoft Visual Modeler反向工程的畫面,從Visual Basic 6程式碼反向產出類別圖。至於,圖4、圖5、圖6與圖7則是Microsoft Visual Modeler正向工程的畫面,從類別圖正向產出Visual Basic 6程式碼。

圖1:Microsoft Visual Modeler的反向工程畫面(一)

圖2:Microsoft Visual Modeler的反向工程畫面(二)

圖3:Microsoft Visual Modeler的反向工程畫面(三)

圖4:Microsoft Visual Modeler的正向工程畫面(一)

圖5:Microsoft Visual Modeler的正向工程畫面(二)

圖6:Microsoft Visual Modeler的正向工程畫面(三)

圖7:Microsoft Visual Modeler的正向工程畫面(四)

其實,當年的Microsoft Visual Modeler是微軟和Rational的合作產品,微軟甚至發了幾則新聞來大肆宣揚這件美事,隨後在1998年,甚至還發出要跟Rational結盟的新聞。

後續,微軟甚至有意要買下Rational公司,只不過後來IBM於2003年正式收購了Rational,微軟終與UML分道揚鑣。對UML有興趣的人,對於Rational應該不陌生。UML在還未正式成為OMG(Object Management Group)的標準之前,掌握在Rational公司中,因為UML的三位主要創辦人都任職於Rational公司。

故事回到現在,自從當年微軟娶親不成後,一直未再靠近UML,直至今日的VS2010。

雙向工程

有人說,VS2010沒有支援正向工程,從UML圖自動產出對應的程式碼,可惜了些!目前,UML工具參考UML圖自動產出程式碼的部分,在我的使用經驗中,有經驗過從UML的類別圖、循序圖(通訊圖)、活動圖、狀態圖、元件圖產出相關的程式碼。

而且,在許多免費的UML工具中,大多有支援參考UML類別圖自動產出多樣的程式碼。這項功能,一點都不難,甚至也不值錢,因為產出來的程式碼都過於簡單,其實無法節省太多編碼工作。像是我慣用的UML開源工具StarUML,就針對UML類別圖提供了C++和C#的自動產碼和反向工程,如圖8所示。

圖8:StarUML的自動產碼和反向工程

其實,我倒不認為,正向工程在短期間可以帶來多大的價值。模式語言和程式語言,本來就是不同抽象層次的語言。如果真要做到從圖形模式自動產出細膩的程式碼,那麼我們勢必要在UML模式中,加入更多細節的設定,只是為了做到原本程式語言輕易可以做到的事情。

直觀上,目前正向工程的定義和作法上,是不是件有價值的方向,其實是有帶商榷的。或者,在未來的日子中,專家學者會重新定義正向工程的價值,這恐怕是我比較期待的答案。

但是,VS2010目前只支援反向工程的這個現象,也讓我重新思考雙向工程這的主題。過去,我似乎太重視正向工程,然而反向工程呢?我是否太輕忽反向工程,而且也被正反雙向工程的循環式開發所誤導。

最後,我得到幾個新想法:

1.     在使用雙向工程時,或許採用循環方式,並不現實。簡單來說,雙向工程期望做到先繪製UML圖,然後透過工具正向自動產出程式碼;接著,還可以直接修改程式碼,然後再依據修改後的程式碼,反向自動產出UML圖。

2.     如果,我們拆掉雙向工程的反覆循環,採用單向工程呢?依據UML圖單向(正向)產出程式碼;或者,依據程式碼仍然採用單向(反向)產出UML圖。或許,這樣可以創造不同的價值。

因此,過去輕忽了反向工程,現在重新思考,如果UML工具或者VS2010可以協助開發人員反向產出UML圖,做為:

1.     提升團隊成員之間的溝通:做為程序員與系統分析師、系統設計師、架構師或其他程序員具象溝通的文件之一,避免只能依賴一堆的程式碼去跟其他的開發人員溝通。

2.     節省紙上作業花費的時間:讓VS2010依據程序員編寫完成的程式碼,自動反向產出相關的UML圖,做為細部設計文件的一部分,省下程序員的紙上作業時間。

3.     協助進行程式結構的重構:「重構」(refactoring)可以提升軟體品質,無論是分析、設計或實作的重構,一直都是這幾年來非常熱門的發展主題。VS2010可以將程式碼反向產出UML圖,讓程序員可以依據具象的UML圖,進行重構的工作。

所以,或許整個開發程序可以改成:需求→分析→設計→正向產出程式碼→修改程式碼→反向產出UML圖→重構程式→反向產出包含「框架」(Framework)的細部設計圖。

其實,VS2010未支援自動產碼,也無妨。反正目前來看,即便自動產出的程式碼,也很可能需要多處修改;反倒是VS2010支援了反向工程,或許會比支援正向工程更貼近實際專案的需求。

XMI

然而,對於VS2010開始支援UML一事,我比較在意的是,從目前VS2010 beta2版本看起來,微軟似乎無意支援XMI(XML Metadata Interchange)。

XMI是UML標準的一部分,可以達到跨UML工具建構UML圖的目的。簡單來說,只要UML工具有支援XMI,我們就可以不受限於任何一套UML工具。我們可以在第一套UML工具建構UML圖,然後匯出成XMI檔案,然後再匯入另一套同樣支援XMI的UML工具,繼續保有原先的UML資產。

其實,只要是依循UML標準的UML工具,大多會支援匯入和匯出XMI檔。再以我慣用的開源軟體StarUML為例,我們可以在它的主選單發現匯入和匯出XMI檔的選項,如圖9所示。

圖9:StarUML支援XMI的匯入和匯出

現在,我在StarUML簡單繪製用例圖,如圖10所示。然後,執行StarUML的匯出XMI功能,會得到圖11密密麻麻的XML格式的文字內容。我特別摘出XMI局部,你只要看圖12中,是不是出現了名為User的參與者(actor),以及名為Login的用例(use case)。接著,我可以在另一套UML開源軟體ArgoUML中,匯入原先StarUML匯出的XMI檔案,如圖13所示。然後,我們可以看到,在ArgoUML中已經出現了User參與者和Login用例了,如圖14所示。

圖10:用例圖

圖11:XMI內容

圖12:XMI內容(局部)

圖13:ArgoUML也有支援XMI

圖14:匯入XMI

雖然,目前為止,UML工具之間的匯入匯出XMI檔案,多少會有些失真,不盡完善。但是,對於可以讓開發人員不受限在任一套UML工具一事上頭,總是踏出了正確的一步。

不過,我在VS2010 Beta2版本中,並未找到可以匯出、匯入XMI的功能選項,只能期望VS2010正式版能給我們一個驚喜了。或許,微軟對UML有不同的想法,我不是研究微軟產品的專家,也就不予置評了。但是,雖說如此,我對於VS2010開始支援UML一事,還是抱持著高度的興趣,並且樂見其成啦!

好吧,既然VS2010沒有支援XMI,那我們還是回過頭來看,VS2010支援了幾款UML圖。最新的UML2中,包含了十四款圖,你可以看到圖7中UML規格書對所有圖款的分類。

圖15:十四款UML圖

接著,我們可以從圖15中看到,VS2010表面上支援了五款圖,分別為:類別圖(Class Diagram)、循序圖(Sequence Diagram)、用例圖(Use Case Diagram)、活動圖(Activity Diagram)、元件圖(Component Diagram)。但是,類別圖中可以放置套件圖(Package Diagram)相關的元素,所以VS2010實際上可以讓開發人員繪製六款圖的,另外,還有幾款圖共用的情況,我也做了確認。

總之,歸納起來,雖然VS2010支援的圖款多屬於UML1,但是各圖款內部的元素,有些是在UML2才提出的新元素。所以,如果要說VS2010支援到UML2,也是勉強可以接受的啦!

再者,雖說VS2010只支援類別圖、用例圖、循序圖、活動圖、元件圖,外加一個隱藏版的套件圖,不過這幾款圖各個都是強棒。而且,除了元件圖外,其餘五款圖也都是UML官方認定的初級認證範圍。也就是說,VS2010挑中的這六款UML圖,不僅兼具實用價值,同時也具備初學特性,正好適合初學UML的開發者。

在這一系列文章中,我將用一個完整的系統為例,藉由VS 2010支援的UML功能,帶領你們認識UML,下一期將總覽式地盤點一下VS2010對十四款UML圖的支援情況。

圖16:VS2010支援的UML圖款

專欄作者

熱門新聞

Advertisement