統一モデリング言語(UML)は、汎用的なオブジェクト指向のビジュアルモデリング言語であり、設計図の機能と同様に、システムのアーキテクチャと設計を視覚化する方法を提供します。[ 1 ] [ 2 ] UMLは、動作、相互作用、構造などの側面に焦点を当てた14種類の図の表記法を定義します。
UMLには、OMG UML仕様で定義されたメタモデルがあります。メタモデルは、クラスやプロパティなど、オブジェクト指向モデルの要素を定義します。これは基本的にオブジェクト指向プログラミング(OOP)のメタモデルと同じですが、OOPでは、メタモデルは主に実行時に使用され、アプリケーションオブジェクトモデルを動的に検査および変更します。UMLメタモデルは、モデリング言語で使用されるグラフィックビューに対して、数学的かつ形式的な基盤を提供し、新たなシステムを記述します。
UML は、 OOPSLA '95 カンファレンスでオブジェクト指向プログラミングの標準言語を定義しようとして作成されました。当初、 Grady BoochとJames Rumbaugh がそれぞれのモデルを統合して統一モデルを作成しました。その後、Booch の会社Rational Software がIvar Jacobson の Objectory 社を買収し、そのモデルを UML に統合しました。当時、Rational と Objectory は、オブジェクト指向ツールとメソッドの独立系ベンダーという小さな世界で支配的なプレーヤーの 2 つでした。[ 3 ]その後、オブジェクト管理グループ(OMG) が UML の所有権を取得しました。
UML の作成は、当時ソフトウェア設計に対する表記体系やアプローチがばらばらであったことを標準化したいという願望から始まりました。[ 4 ] 1997 年に、UML はObject Management Group (OMG)によって標準として採用され、それ以来この組織によって管理されています。2005 年に、UML は国際標準化機構(ISO) と国際電気標準会議(IEC)によってISO/IEC 19501規格として発行されました。[ 5 ]それ以来、この規格は UML の最新版を網羅するために定期的に改訂されています。[ 6 ]
ほとんどの開発者はUMLそのものを使用するのではなく、より非公式な図(多くの場合、手書き)を作成する。しかし、これらの図にはUMLの要素が含まれていることが多い。[ 7 ]: 536
UMLは主にソフトウェア開発(あらゆる業界や分野)に使用されますが[ 8 ] 、ビジネスプロセス、システム機能、データベーススキーマ、法制度におけるワークフロー、医療用電子機器、ヘルスケアシステム、ハードウェア設計など、それ以外の分野でも使用されています[ 9 ]。UMLはOMG自身によって、Unified Architecture Framework(UAF)やSystems Modelling Language(SysML)v1などの他のOMG製品を定義するために使用されています。
UML は、現在だけでなく、最初に開発された当時の手法(OMT、Booch メソッド、Objectory、特にRational Software で作業が始まった当初は RUP と併用することを想定していたRUPなど)を含む、多くのオブジェクト指向ソフトウェア開発手法で使用するように設計されています。[ 10 ]元々はオブジェクト指向設計ドキュメント用に設計された UML ですが、ビジネス プロセスのモデリングなど、他のコンテキストでも効果的に使用されています。[ 11 ] [ 12 ]
UMLは特定のプログラミング言語に本質的に結びついていないため、言語に依存しないシステムのモデリングに使用できます。一部のUMLツールはUMLモデルからソースコードを生成します。 [ 13 ]

UML図は、次のようなシステム側面を視覚化することをサポートします。[ 14 ]
UML図は、明確な意味を持つ構文的(表記的)要素に加えて、使用方法、制約、意図などの側面を説明する自由形式のコメント(注釈)も記述できます。
UMLモデルは、XMLメタデータ交換(XMI)フォーマットを介してUMLツール間で交換できます。
データベースの Chen、Bachman、および ISO ER 図と同様に、クラス モデルは「ルックアクロス」カーディナリティを使用するように指定されていますが、複数の著者 ( Merise、[ 15 ] 、Elmasri および Navathe、[ 16 ] など[ 17 ] ) は、役割と最小および最大カーディナリティの両方について、同じ側または「ここを見る」ことを好みます。最近の研究者 (Feinerer [ 18 ] および Dullea ら[ 19 ] ) は、UML および ER 図で使用される「ルックアクロス」テクニックは、厳密に 2 より大きいn項関係に適用すると、効果が低く、一貫性が低いことを示しました。
ファイネラー氏は次のように述べています。「UML の関連付けに使用されているルックアクロス意味論に基づいて操作すると問題が発生します。ハートマン[ 20 ] はこの状況を調査し、さまざまな変換がどのように、そしてなぜ失敗するのかを示しています。」また、「次の数ページで見ていくように、ルックアクロス解釈は、単純なメカニズムを二項関連付けからn項関連付けに拡張することを妨げるいくつかの困難をもたらします。」
アーティファクトとは、「ソフトウェア開発プロセス、またはシステムの展開と運用によって使用または生成される物理的な情報の仕様」[ 21 ]であり、モデル、ソースコード、スクリプト、実行可能ファイル、データベースシステムのテーブル、開発成果物、設計ドキュメント、電子メールメッセージなどが含まれます。[ 21 ]
アーティファクトは、 ノードにデプロイされる物理的な実体です。[ 21 ]クラスやコンポーネントなどの他の UML 要素は、まずアーティファクトとして具現化され、これらのアーティファクトのインスタンスがデプロイされます。アーティファクトは、他のアーティファクトで構成できます。

OMGはUMLを定義するためのメタモデリングアーキテクチャを開発し、これをメタオブジェクトファシリティ(MOF)と呼んでいます。[ 22 ] MOFは右図に示すように4層アーキテクチャとして設計されています。最上位にはM3層と呼ばれるメタメタモデルがあります。このM3モデルは、メタオブジェクトファシリティがM2モデルと呼ばれるメタモデルを構築するために使用する言語です。
レイヤー 2 メタオブジェクト機能モデルの例としては、UML 自体を記述する UML メタモデルがあります。これらの M2 モデルは M1 レイヤーの要素、つまり M1 モデルの要素を記述します。これらは、たとえば UML で記述されたモデルになります。ソフトウェア アーキテクチャ記述では、システムのランタイム インスタンスを記述する場合があります。[ 23 ]。最後のレイヤーは M0 レイヤーで、記述またはモデル化される現実世界のものです。
UMLメタモデルは、ステレオタイプと呼ばれるメカニズムを使用して拡張できます。これは、ブライアン・ヘンダーソン=セラーズとセザール・ゴンザレス=ペレスによって「UML 1.xおよび2.0におけるステレオタイプメカニズムの使用と乱用」で不十分/維持不可能であると批判されています。[ 24 ]
UML 2 では 14 種類の図が定義されています。これは図の分類体系として示されています。 [ 14 ] [ 25 ]

構造図は、オブジェクト、分類子、関係、属性、操作などを用いてシステムの構造を強調します。これらはソフトウェアアーキテクチャを文書化するために使用されます。
動作図は、オブジェクト間の連携やオブジェクトの内部状態の変化を示すことで、システムの挙動を強調します。これらはシステムの機能を記述するために使用されます。
相互作用図は、動作図の一種であり、システムの構成要素間の制御とデータの流れを強調する。
2013年、UMLはOMGによって多くのコンテキスト向けに販売されたが、主にソフトウェア開発を対象としており、成功は限られていた。[ 12 ] [ 27 ]
UMLは時として設計の万能薬のように扱われ、問題を引き起こしてきました。UMLの誤用には、過剰使用(システムのあらゆる部分をUMLで設計するなど、これは不必要です)や、初心者でもUMLで設計できると想定することなどが含まれます。[ 28 ]
UMLは多くの構成要素を持つ大規模な言語と考えられています。ジェイコブソンを含む一部の人々は、UMLの規模が学習を妨げ、普及を阻害していると考えています。[ 29 ]
Visual Studio は、使用頻度の低さから 2016 年に UML のサポートを終了しました。[ 30 ]

UMLは1990年代後半から発展を遂げ、そのルーツは1980年代後半から1990年代前半にかけて開発されたオブジェクト指向プログラミング手法にあります。この図は、UMLをはじめとするオブジェクト指向モデリング手法と表記法の歴史を時系列で示したものです。
Rational Softwareは1994年にGeneral ElectricからJames Rumbaughを雇い入れ、その後、同社は当時最も人気のあるオブジェクト指向モデリング手法の2つ、Rumbaughのオブジェクトモデリング技術(OMT)とGrady Boochの方法の発信源となった。 [ 31 ] 1995年にRationalに加わったオブジェクト指向ソフトウェアエンジニアリング(OOSE)手法の創始者であるIvar Jacobsonが、彼らの取り組みをすぐに支援した。[ 4 ]
UMLは元々、ブーチ法、オブジェクトモデリング技術(OMT)、オブジェクト指向ソフトウェアエンジニアリング(OOSE)の表記法に基づいており、これらを単一の言語に統合したものです。[ 14 ] UMLは1994年から1995年にかけてRational Softwareで開発され、1996年まで同社が主導してさらに開発が進められました。 [ 4 ]
ランボー、ジェイコブソン、ブーチの技術的リーダーシップの下、統一モデリング言語(UML)仕様を完成させ、それをオブジェクト管理グループ(OMG)に標準化のために提案するために、1996年にUMLパートナーズと呼ばれるコンソーシアムが組織されました。このパートナーシップには、他の利害関係者(例えば、 HP、DEC、IBM、Microsoft)も含まれていました。UMLパートナーズのUML 1.0ドラフトは、1997年1月にコンソーシアムによってOMGに提案されました。同じ月に、UMLパートナーズは、言語構成要素の正確な意味を定義するために設計されたグループを結成し、クリス・コブリンが議長を務め、エド・アイクホルトが管理し、仕様を最終決定して他の標準化の取り組みと統合しました。この作業の結果であるUML 1.1は、1997年8月にOMGに提出され、1997年11月にOMGによって採用されました。[ 4 ] [ 32 ]
最初のリリース後、言語を改善するためにタスクフォースが結成され[ 4 ]、1.3、1.4、1.5といういくつかのマイナーな改訂版がリリースされた[ 33 ]。
作成された規格(および元の規格)は、曖昧で一貫性がないと指摘されている。[ 34 ]
UML 2.0 は 2005 年にバージョン 1.5 を置き換えたメジャー改訂版で、言語の機能の使用に関する新しい経験を反映させるために言語をさらに改善するために拡大されたコンソーシアムによって開発されました。[ 35 ]
UML 2.1 は正式な仕様としてリリースされることはありませんでしたが、バージョン 2.1.1 と 2.1.2 が 2007 年に登場し、続いて UML 2.2 が 2009 年 2 月にリリースされました。UML 2.3 は 2010 年 5 月に正式にリリースされました。 [ 36 ] UML 2.4.1 は 2011 年8 月に正式にリリースされました。 [ 36 ] UML 2.5 は 2012 年 10 月に「進行中」バージョンとしてリリースされ、2015 年 6 月に正式にリリースされました。[ 36 ] 正式バージョン 2.5.1 は 2017 年 12 月に採用されました。[ 1 ]
UML 2.x仕様は4つの部分から構成されています。
UML 2.4.1までは、これらの標準の最新バージョンは次のとおりでした。[ 37 ]
バージョン2.5以降、UML仕様は簡素化され(スーパーストラクチャとインフラストラクチャなし)、これらの標準の最新バージョンは次のようになっています。[ 38 ]
改訂作業部会によって継続的に更新および改善され、言語上のあらゆる問題が解決される。[ 39 ]