為什麼UML“真的”死了? • Buttondown
網際網路上有一篇名為“UML就這麼悄悄死掉了嗎?”帖子,文章中Ernesto Garbarino說,UML被降低標準的程式設計師所殺死:“敏捷是刺客,而使用者故事是她致命的、有毒的箭頭。” 如果本新聞稿有一個主題,那就是我們不應該相信簡單的答案。現實世界很複雜。
碰巧的是,幾年前,我正計劃編寫UML的歷史:它來自何處,為何如此流行如此之快,為什麼它死了等等。作為其中的一部分,我採訪了許多UML的知名人士。早期包括Grady Booch,Bertrand Meyer和Ed Seidewitz。現在我仍然記得一點一滴,足以自信地說,這個故事比“敏捷做到這一點”要複雜得多。免責宣告,我的記憶力和四年前我放棄的一個專案的字跡模糊不清,所以我可能弄錯了一些細節。
史前史
UML產生了兩個重要的趨勢。首先是“方法大戰”。在Smalltalk和C ++成為主流的OOP之後,人們真正大量宣傳並最終建立用於設計軟體系統的正式統一的流程。這引發了不同設計方法的爆炸式增長。Bertrand Meyer在他的《 Business Object Notation》一書中列出了26種競爭方法。我記得閱讀過列出50多個文件,但似乎無法再次找到它們,因此可能是錯誤的記憶。
大約在同一時間,人們還製作了第一個計算機輔助軟體工程(CASE)工具。現在,CASE只是一個腳註,但在當時是一個巨大的行業,預計將比CAD或IDE大得多。CASE工具與方法整合在一起,不僅為開發人員,而且為測試人員,專案經理和客戶提供了一種整體的軟體建立方法。但是,製作CASE工具非常昂貴,並且必須針對特定的設計方法進行定製。隨著時間的流逝,CASE供應商選擇了以下三個:
- Grady Booch的物件導向的分析和設計
- Ivar Jacobson的物件導向軟體工程
- 詹姆斯·朗博(James Rumbaugh)的物件建模技術
格雷迪·布奇(Grady Booch)為Rational效力,後者也有大量的CASE產品,且他們大部分的收入都來自Ada工具。Booch還和Rumbaugh是私人朋友,隨著時間的流逝,他們的想法趨於一致。在此之後,一致的想法給他們施加了很大的驅動力,要求他們進行明確的協作,以便CASE供應商僅支援兩種方法,而不是三種。然後,由於一種方法優於兩種方法,他們購買了Jacobson的諮詢公司,並逐步淘汰了OOSE。
OOSE,OOAD和OMT是整體方法,涵蓋了表示法和過程。消除符號差異要比處理差異更容易,因此Rational將統一分為兩部分。統一建模語言於1996年問世,並移交給物件管理小組(OMG),而Rational Unified Process則於1997年問世。UML在大約十年中被證明非常受歡迎,並且大約在2004年開始引起人們的廣泛關注,直到今天,也就是我們釋出“ UML死了嗎?”之類的文章時,那麼為什麼UML死了?
這意味著什麼?
這個問題有兩個歧義。首先是我們所說的“死”。程式設計師通常使用“死亡”來表示“相對市場份額的下降”,而不是絕對市場份額。許多意見領袖Thought Leaderz抱怨幾乎沒有開發人員會真正瞭解底層系統,但是與30年前相比,核心駭客總數有所增加,但這些駭客數量只是佔用所有程式設計師數量中較低的一部分。
這意味著UML可以同時增長和“消亡”,具體取決於您使用的度量標準。現在,我假設UML無疑是“垂死中”。
另一個歧義是我們所說的UML。首先,UML包含十幾種不同的圖型別。我仍然看到人們經常使用順序圖。其次,人們使用UML圖的方式有很多。UML和敏捷領域的傑出人物Martin Fowler ,確定三種用途:草繪,藍圖和程式設計。
以UML程式設計的方式在嬰兒期就死了,因為即使UML的大多數支持者也認為這是一個可怕的想法。以UML進行需求快速捕捉(速寫)卻沒有死,只是類似一種水上漂流狀態而已。
人們使用非正式草圖符號與UML標準保持同步,因此隨著時間的流逝,它逐漸演變為多種相互難以理解的方言。所以我們不會看到在不同公司中的兩個團隊,一個在加利福尼亞,另一個在紐約,使用相同的符號,除非有人故意使它們保持同步。
這使UML藍圖成為最複雜的情況。據我瞭解,它也是Rational最想要的一種。作為藍圖的UML和作為草圖的UML之間有兩個相關的區別。
首先,他們目的是讓設計人員編寫藍圖,並由程式設計師實施藍圖。這意味著不同的技能和不同的工具。其次,UML-as-blueprint整合了不同的圖型別。您不僅要編寫一個類圖和一個需求圖,還要為實現了需求圖的類編寫一個類圖。這意味著使用CASE工具進行藍圖。
因此,UML的下降通常與CASE工具的下降聯絡在一起。 這意味著“為什麼CASE工具會失敗”與為什麼UML藍圖“會死”一樣有趣。
UML將死的原因
在方法戰和CASE工具興起之後,UML出現了。市場上已經有大量用於OOAD,OOSA和OMT的CASE工具,而UML必須與這三個工具都向後相容。從一開始就增加了很多摩擦。如果UML不必與傳統供應商打交道,它本來可以更簡單並且在概念上更加統一。
- 缺乏形式化
UML留下了許多未指定的內容,例如圖表互動的方式以及許多關鍵字的實際含義。UML 1.3在類圖中給出了“generalization”箭頭的示例:
其中Sailboat(帆船)是WindPoweredVehicle(風能驅動運輸工具)和WaterVehicle(水驅動運輸工具)的specializations ,它們都是Vehicle(運輸工具)的specializations 。從設計角度來看,這實際上意味著什麼?我們是否應該使用繼承以特定方式實現它?這與細化關係(efinement relation)有何不同?在實踐中,使用者可以決定這些關係的含義,而CASE供應商可以決定要實現的功能。
這可能使您想起C語言:C89具有如此多的未定義和使用者定義的行為的原因是,它需要容納所有衝突的編譯器。OMG(1.0版後UML的維護者)也有同樣的問題。他們無法對UML標準進行任何更新,以免破壞現有的供應商決策,從而進一步減慢了UML的開發速度,並增加了每個修訂的複雜性。
- IBM公司
這是我從一位外圍人那裡得到的八卦。當時,雖然OMG受現有供應商差異的約束,但他們仍有一定的餘地來為“更大的利益”做出重大改變。我懷疑Rational作為UML的原始開發者和最大的CASE工具供應商之一,Rational特別願意更新其舊版軟體。但是後來IBM在2003年收購了Rational,他們很快就停產了Rational的UML工具,並開始銷售專有的CASE工具Rational Software Architect。因為他們不想繼續發展傳統的Rational專案,他們封鎖了甚至任何UML變化輕微不相容的,UML作為一個整體停滯不前。
當UML的市場佔有率開始下降時,2003年也差不多。我不認為這兩件事是巧合。
- 太複雜
現在,我們要探討UML的特定問題。UML包含許多不同的圖和規則,導致最終產品非常複雜。每個人都為此感到難過,這使學習UML變得多麼困難。這也使開發工具變得困難。您只需要瞭解幾張圖就可以逃脫,但是在整個規範中,任何工具都必須是全面的。如果您想構建比“生成圖”更復雜的內容,則需要一個龐大的團隊和大量資金,這限制了您可以實際增長生態系統的數量。開源世界並沒有大量的CASE工具,而您獲得的工具卻很薄弱。
這並不是說商用CASE工具可以創造奇蹟。您的表示法越複雜,為其開發任何工具的難度就越大。 如果CASE工具能夠完成令人興奮的創新工作,那麼UML的使用時間可能會顯著延長,但是事實並非如此。
- 無文字格式
這是對工具的又一拖累。這意味著您無法在自己喜歡的文字編輯器中編輯UML圖表,也無法對其進行grep編寫,也無法編寫自己的定製解析器等等。
已經嘗試過為UML建立文字表示形式,例如PlantUML或Mermaid,但是這些遇到了兩個問題。首先,它們只是單向的:您不能將現有圖轉換為文字形式。第二個問題是我所說的Graphviz問題:文字格式在表示視覺佈局方面很糟糕。在最好的你已經有了一個繁瑣的系統,該系統比使用一個圖形編輯器顯著惡化。
- 完全沒有資料格式
這使得匯入和匯出UML基本上是不可能的。一旦開始使用工具,就會被該工具所困擾。在明顯的問題中,這又是生態系統的殺手。您無法制作獨立的UML工具,驗證器或必須作為CASE工具擴充套件執行的任何東西。OMG試圖透過XMI(一種UML的XML格式)來糾正這一問題,但是據信它從來沒有那麼好過。而且它在XMI和UML版本上都向後不相容,這使其異常脆弱。
- 無法正向逆向
一些工具可能會從UML規範中生成程式碼,但是可能會對某些修改後的程式碼進行逆向工程圖處理。沒有人能做的很好。就像所有藍圖一樣,UML和程式碼將不可避免地不同步。
- 文化轉變
最後一個高度投機的理由。Garbarino在原始文章中說,UML之所以死是因為敏捷接管了文化。我確實認為文化轉變在UML的下滑中發揮了作用,但這並不是出於他的想法。
CASE工具僅對大型軟體專案有意義,因為在大型軟體專案中,很多人長時間從事相同的工作。它也是高度“官僚”的。雖然我們今天認為敏捷取代了占主導地位的瀑布,但在那時,大多數開發人員都是臨時性地和漸進式地工作的。由於這些原因,CASE工具最初是由強制內部使用的企業採用的,這似乎是合理的。正如Garbarino自己所說的那樣,UML受到了業務人員而不是程式設計師的喜愛。
傳統企業在1990年代是軟體的主要僱主,這意味著技術趨勢可能反映了他們的興趣。這將是UML最初興起的一個很好的解釋。但是,在過去的二十年中,軟體文化逐漸向大型技術優先的公司和初創公司轉移。從歷史上看,兩者都不是CASE供應商的目標受眾。隨著時間的流逝,傳統企業開始從技術和初創企業那裡借鑑學習,反之則相反,這導致CASE在現有領域中的地位逐漸下降。
相關文章
- UML死了,但是形式方法能成功嗎? •Buttondown
- 為什麼Kubernetes這麼難? • Buttondown
- MySQL 連線為什麼掛死了?MySql
- MySQL 連線為什麼掛死了MySql
- Hadoop真的要死了嗎?Hadoop
- Hadoop 真的要死了嗎?Hadoop
- 刀牌就這麼死了,但Valve仍沒搞明白它為什麼失敗
- Swift之你真的知道為什麼使用weak嗎?Swift
- 為什麼遊戲裡的數字,真的“值錢”?遊戲
- Python為什麼火?學習Python是否真的好就業?Python就業
- 你真的知道為什麼要使用void(0)代替undefined嗎?Undefined
- [js] 使用ajax請求真的不安全嗎?為什麼?JS
- 你真的知道typeof null的結果為什麼是‘object‘嗎?NullObject
- 為什麼有那麼多人選擇“人工智慧”,真的有那麼好嗎?人工智慧
- GIL 已經被殺死了麼?
- #累死了#
- 你真的理解什麼是死鎖嗎?
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- 你真的知道Python的字串是什麼嗎?Python字串
- 你真的知道什麼是系統呼叫嗎?
- 為什麼 [] == ![] 為 true?
- JavaScript基礎——你真的清楚JavaScript是什麼嗎?JavaScript
- 誰殺死了暴雪?
- 什麼是Docker?為什麼使用docker?Docker
- GC是什麼?為什麼要有GC?GC
- 為什麼要用Redis?Redis為什麼這麼快?(來自知乎)Redis
- 因果迷境:為什麼我們會問“為什麼”?
- 【閒聊】為什麼不做高配遊戲?國內遊戲圈子真的“反技術”嗎?遊戲
- UML筆記——14種UML圖筆記
- Python是什麼?為什麼這麼搶手?Python
- python有什麼特性?為什麼這麼火?Python
- 你真的知道什麼是“遊戲障礙”了嗎?遊戲
- 你真的知道什麼是 Python「名稱空間」嗎?Python
- 為什麼你辛苦肝的部落格沒人看?搭框架、排版、畫圖技巧這些你真的懂麼?框架
- 人是什麼?人生是什麼?人為什麼會變?
- ITAM是什麼?為什麼它很重要?
- heredoc是什麼?它能為PHP做什麼?PHP
- Python是什麼?為什麼要掌握python?Python