UMLがほとんどのフリーソフトウェア(Linuxなど)で使用されないのはなぜですか?


29

UMLがほとんどのフリーソフトウェアプロジェクトで使用されていない理由を理解しようとしています。たとえば、私のDebian / Linuxシステムにはおそらく1万を超えるフリーソフトウェアパッケージがあり、明示的な UMLフレームワークと方法論を使用して開発されたものであっても名前を付けることはできません。例えば、QtのGCCLinuxのカーネルbashの、GNUのメイクOCamlでGnomeのユニゾンlighttpdのlibonionドッキングウィンドウは、すべてのUMLを言及していない(私の知る限り)のフリーソフトウェアプロジェクトです。

(私の推測では、UMLは開発タスクの正式な下請けに非常に適していると思いますが、それはフリーソフトウェアの開発方法ではありません

UMLに関する資料を読みましたが、それについて十分に理解しているとは主張していません。

実際、UMLが使用されているフリーソフトウェアに簡単に名前を付けることはできません(おそらく、フリーソフトウェアとして実装された一部のUMLツールを除く)。おそらくopenstackは例外です(UMLに言及しているものがあります)。

(古いフリーソフトウェアプロジェクトでさえ、開始後にUMLを採用したかもしれませんが、採用していませんでした)


Papyrusに取り組んでいる一部の同僚は、ほとんどのフリーソフトウェアプロジェクトは、明確な(そして十分に深い)形式化されたモデルを最初から持っていないと述べました。また、UMLはJavaが主張するよりもはるかに関連しているように見えます(Ocaml、Common Lisp、Haskell、Javascript、さらにはC ++ 11でも意味がないかどうかはわかりません)。おそらく、アジャイルなソフトウェア開発はあまりUMLフレンドリーではありません。

何らかの形で関連する質問に対するこの回答も参照してください。M.ファウラーのブログはデザインが死んでいますか?洞察力があります。

PS。主に意見の問題だとは思わない。いくつかの客観的な理由と、フリーソフトウェアの本質的な特性があるはずです。UMLは、正式な下請けにのみ有用であり、独自のプロジェクトのように、開発されたソフトウェアの一部が隠されている場合にのみ有用であると推測する傾向があります。もしそうなら、UMLはフリーソフトウェア開発と互換性がありません

NB:私は自分でUMLファンではありません。私はUMLを紙の文書としてのみ定義するのではなく、ソフトウェアツールの [メタ]データ形式としても定義します


30
たぶんUMLがくだらないのはなぜですか それとも、ほとんどのフリーソフトウェアには優れたドキュメントが欠けているからでしょうか?
BЈовић

19
あなたはそれを別の方法で持っています。UMLを使用する他の方法ではなく、客観的な理由がなければなりません。FOSSはUMLを使用しません。客観的な理由がないか、すべての理由がFOSSコミュニティに受け入れられていません。
陶酔

18
リストしたプロジェクトのいくつかについては、その理由はかなり明白です。タイムトラベルはまだ発明されていないからです。UMLは1997年に最初に標準化されました。GNUプロジェクトは1983年、GCC 1987年、Bash 1988年、GNU make 1989年、Qt 1991年、OCaml 196年、Gnome 1997年からです。 CとOCamlのUnisonで書かれていますが、どちらもUMLではうまく記述できない言語です。さらに、フリーソフトウェア開発者は一般に、外部ツールの助けなしで理解できるような方法でコードを書くことを信じています。
ヨルグWミットタグ

26
UMLは、オープンソースまたはクローズドソースのソフトウェア開発ではあまり使用されていません。これは主にソフトウェア開発について話す人々によって使用されます。
カールビーレフェルト

16
UMLがフリーでないソフトウェア開発であまり使用されないのと同じ理由。紙の上ではいいように聞こえますが、実際には実際の利点はないようです。
JohnB

回答:


37

UMLを使用するにはさまざまな方法があります。Martin FowlerはこれらのUMLモード呼び出し、 4つを識別します。UMLはNotesUMLはSketchUMLはBlueprintUMLはプログラミング言語です。

プログラミング言語としてのUMLが実際に普及したことはありません。この分野では、モデル駆動型アーキテクチャやモデルベースのソフトウェアエンジニアリングなど、さまざまな名前で作業が行われています。このアプローチでは、ソフトウェアシステムの非常に詳細なモデルを作成し、それらのモデルからコードを生成します。このアプローチが有用であるユースケースもありますが、一般的なソフトウェア、特にこのアプローチを推進するツールを購入できる大企業の外部には適していません。また、時間のかかるプロセスです。実装に必要なすべてのグラフィカルモデルを作成するよりも速くクラスのコードを入力できます。

ブループリントとしてのUMLは、多くの場合、「前もって設計された大きなデザイン」プロジェクトを示しています。もちろん、そうである必要はありません。モデルは、特定の増分についても完全に記述できます。しかし、アイデアは、コードを変換するために誰かに引き渡されるUMLモデルの形でデザインを作成するのに時間がかかるということです。詳細はすべて詳しく説明されており、コードへの変換はより機械的になりがちです。

SketchとしてのUMLとNotesとしてのUMLは本質的に似ていますが、使用されるタイミングによって異なります。UMLをスケッチとして使用するということは、UML表記を使用して設計をスケッチすることを意味しますが、図は完全ではない可能性がありますが、他の人と通信する必要がある設計の特定の側面に焦点を当てます。NotesとしてのUMLも似ていますが、モデルはコードベースの理解を支援するためにコードの後に​​作成されます。

あなたがこれを検討しているとき、私は上記のすべてがあらゆる種類のモデリング表記法に当てはまると思います。エンティティ関係図、IDEF図、ビジネスプロセスモデリング表記法などに適用できます。モデリング表記に関係なく、適用するタイミング(仕様として、前に代替表現として)と詳細度(主要な側面の詳細)を選択できます。


これの反対側は、オープンソース文化です。

多くの場合、オープンソースプロジェクトは、個人(または今日では企業)が経験している問題を解決するために開始されます。個人が起動する場合、開発者の数は1です。この場合、通信のオーバーヘッドは非常に低く、要件と設計について通信する必要はほとんどありません。会社では、小さなチームが存在する可能性があります。この場合、設計の可能性を伝え、トレードオフについて議論する必要があるでしょう。ただし、設計を決定したら、コードベースが時間とともに変化するときにモデルを維持するか、モデルを破棄する必要があります。でアジャイルモデリング用語は、「文書を連続的」と維持「情報の単一源」

簡単に言うと、コードは設計であり、モデルは設計の代替ビューにすぎないという考えがあります。Jack Reevesは、デザインに関するコードについて3つのエッセイを執筆しました。また、C2 wikiでも議論があり、ソースコードはデザインデザインはソースコードソースコードとモデリングという考え方が議論されています。この信念に同意する場合(私はそうします)、ソースコードは現実であり、コードと、さらに重要なことには、コードがそれである理由の背後にある理論を理解するための図が存在する必要があります。

あなたが言及したような成功したオープンソースプロジェクトには、世界中に貢献者がいます。これらの貢献者は、ソフトウェアを動かす技術において技術的に有能である傾向があり、ソフトウェアのユーザーでもある可能性があります。貢献者は、ソースコードをモデルと同じくらい簡単に読むことができ、ツール(IDEおよびリバースエンジニアリングツール)を使用してコードを理解できる(必要に応じてモデルを生成することを含む)人です。また、フローのスケッチを自分で作成することもできます。


Fowlerが説明する4つのモードのうち、プログラミング言語または設計図としてモデリング言語を使用しているオープンソースプロジェクトや、非常に多くのプロジェクトを見つけることはないと思います。これにより、UMLの用途としてメモとスケッチが残ります。メモは寄稿者のために寄稿者によって作成されるため、おそらくどこにもアップロードされていないでしょう。スケッチは、コードがより完全になるにつれて価値が低下し、寄稿者の側で努力するだけで維持される可能性が低くなります。

多くのオープンソースプロジェクトは、価値を追加しないため、モデルを利用できません。ただし、プロジェクトの初期段階で誰かがモデルを作成したわけではなく、個人がシステムの独自のモデルを作成していないという意味でもありません。設計情報の1つのソースであるソースコードを維持するほうが、時間効率が向上します。

設計情報を交換している人を見つけたい場合は、寄稿者が使用しているあらゆる種類のフォーラムやメーリングリストを参照することをお勧めします。多くの場合、これらのフォーラムとメーリングリストは、プロジェクトの設計ドキュメントとして機能します。正式なUMLは見当たらないかもしれませんが、そこには何らかの設計情報とモデルのグラフィカルな表現が見つかるかもしれません。また、プロジェクトのチャットルームや他のコミュニケーションチャネルにアクセスすることもできます。デザインの決定について話している人がいる場合は、グラフィカルモデルと通信している可能性があります。しかし、コミュニケーションの目的を果たすと価値がなくなるため、リポジトリの一部にはなりません。


1
テキストがたくさんありますが、最後の1つだけのパラグラフが実際に質問に答えます。また、答えられるように質問を再開しましたか?
陶酔

6
@Euphoric最後の段落で質問に答えていますが、残りの部分では背景を設定し、用語と概念を正規化する必要があります。いいえ、すでに4回の再投票が行われました。5回目の投票で回答しました。
トーマスオーエンズ

3
+1非常に包括的な回答。私の意見では、前の段落で結論を説明しています。よくやった!
アンドレスF.

8

Linuxを例として使用してみましょう。

  • オブジェクト指向のプロジェクトではありません。VFSのような一部のパーツはUMLでモデル化できますが、他のパーツは効果的ではないか、あまり効果的でstructはありません。
  • UMLはドキュメント化に適しています。プロジェクトに新しいものを1つ追加すると、速度が上がります。これはLinuxが本当に提供するものではなく、人々は自分でそれを学ぶことが期待されています。
  • 使用するUMLツールがわからないため、メンテナンスする場合は、何かに同意する必要があります。そのための無料のJavaアプリケーションがありましたが、多くの人がそれを使用したいとは思わないでしょう。
  • 90年代のGUIは、Linuxでまだ課題でした。メーリングリストのアーカイブを調べてみてください。ブートアップ時に表示されるxpm形式のLinux自体のロゴ以外のグラフィックは見つかりません。プレーンテキストが優先形式です。
  • 誰もデザインを気にかけていないと思います。人々は機能に関心があり、それらが受け入れられると、コードは精査されます。ユースケースは、POSIXやSUSなどの標準がどのように書かれているかのように、依然として言葉で最もよく説明されています。
  • オペレーティングシステムのドメイン内の多くのオブジェクトは、コミュニティ内で十分に理解され、標準化されています。たとえばstruct in_addr、メモリ内のがどのように見えるかを知っている人はいれば、それを明確にする図はありません。
  • UMLは、メモリアロケーター、スケジューラ、割り込みハンドラーなどのモデリングアルゴリズムにはあまり役立ちません。ソースはおそらく理解しやすいでしょう。

これらは、Linuxプロジェクトの設定で考えることができるものです。それは実用性に関するものだと思う。奇妙なことに、タネンバウムが彼のOSテキスト本でUMLを使用してMinixを説明したことは覚えていません。

言及する価値があると思いますが、私も仕事でUMLを使用していません。おそらく私と一緒に働いている人の20%がUMLのサブセットを知っています。


4
Linux オブジェクト指向を使用しますが、オブジェクト指向言語は使用しません。確かに、Linuxには非常に手続き型のスタイルで記述されたパーツも含まれていますが、カーネルモジュールインターフェイスなどの他のパーツは明らかにオブジェクト指向です。
cmaster

UMLにはクラス図以上のものがあります。
マイケルドー

すべての大きなソフトウェアプロジェクトには、オブジェクト指向の設計が必要です。
カイス

貢献者は、プロジェクトに取り組む前に標準のモデリング言語を理解する必要があります。それが、UML、SysML、IDEF0、ODL、OCLのいずれのソフトウェアモデリングドキュメントの必要性を正当化するものです。
カイス

2

UMLは表現であるため、言語の形式であり、議論のために、その目的は、ある人から別の人にメンタルモデルを伝えることであると仮定しましょう。

私が言語で求めているのは、自分のメンタルモデルへの変更をキャプチャする効率です。モデルの説明を書いた後、少し変更する必要があるとします。表現にどの程度の変更を加える必要がありますか?テキスト言語で、それを測定する方法diffは、前後のコード間で実行し、違いを数えることです。グラフィカル言語では、違いを測定する同様の方法があるはずです。

私見、私は言語を「ドメイン固有」(DSL)と呼びます。それは上記の手段を最小化する程度で、メンテナンスコストとバグを減らすのに明らかな利点があります。DSLの作り方 いくつかの方法があります。最も簡単な方法の1つは、既存のプログラミング言語でデータ構造とメソッドを定義することです。これにより、基本言語に名詞と動詞が追加され、必要なものを簡単に言うことができます。(注:学習曲線を持たないDSLを探しているわけではありません。DSLの読者は、学習のための1回限りの費用を投資しなければならない可能性があります。)

重要な点は次のとおりです。すべての場合において、DSLには、自分のモデルおよびモデルの変更を簡単に表現する用語を含める必要があります。可能なドメインの範囲に明確な制限はないため、単一のDSLがそれらすべてを提供することはできません。

UMLに対する私の印象は、それが試みたものだということです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.