非常に大きくなった UML プロジェクト (IBM の Rational System Architect/Modeler で構築されているため、XML 形式で保存されている) があります。さらに、他のグループが再利用したいいくつかのピースが含まれています。私はソフトウェア開発 (特に FOSS) のバックグラウンドを持っており、ここで類推としてそれを使用する方法を理解しようとしています。私が取り組んでいる問題は、壊れやすい基本クラスの問題に似ています。
オブジェクト指向 (Java や Ruby など) の FOSS エコシステムでの動作から始めましょう。
net/smtp
グループ 1 は、「バージョン 1.0」などの「コア」パッケージを公開します。- グループ 2 には
net/smtp
、ソフトウェア プロジェクトのベンダー ライブラリにグループ 1 の 1.0 パッケージが含まれています。 - ある時点で、グループ 1 は
net/smtp
下位互換性を壊す新しい 2.0 ブランチを作成します (たとえば、古いクラスまたはメソッドを削除したり、あるパッケージから別のパッケージにクラスを移動したりします)。彼らは 1.0 バージョンのユーザーに、1 年で非推奨になると伝えています。 - グループ 2 は、時間があるときに
net/smtp
2.0 に更新します。新しいパッケージをドロップすると、コンパイラ (Ruby の場合はテスト スイート) が非互換性について通知します。彼らはいくつかの手動の変更を加える必要がありますが、すべての変更は、彼らが慣れ親しんだ媒体であるプレーン テキストのコード内にあります。さらに、修正内容がわかれば、IDE (またはテキスト エディタ) の「グローバル検索と置換」機能を使用できることがよくあります。
このモデルを RSA の UML に適用しようとすると、いくつかの問題が発生します。RSA はいくつかのかなり強力なリファクタリングをサポートしていますが、それらはすべての部分への書き込みアクセス権を持っている場合にのみ機能するようです。1 つのパッケージ内のクラスの名前を変更すると、RSA は参照の名前を変更できますが、同時にしか変更できません。基礎となるソース (XML) を調べて、何が壊れているのかを突き止めるのは非常に困難です。RSA エディタ自体でこのような問題を修正するには、何回もクリックする必要があります。少なくとも不完全なリファクタリングの後では、「グローバル検索と置換」に相当するものはありません。
彼らの真の難点は、RSA が GUI を使用してすべての編集を行いたいと想定しているように思われますが、それによって特定の操作が非常に困難になります。
この問題を克服したオープンソース UML プロジェクトの例はありますか? 変更を伝えるためにどのような戦略を使用していますか?