LemonTree モデルの不整合

LemonTreeで比較実行時に以下のような「Model inconsistencies found」が表示されることがあります。



これはモデルに不整合があることを示しています。原因・影響・対応等につきましては下記をご覧ください。

主な原因

大きくは以下の3点が考えられます。

  • モデル入出力の利用(XMLの読み込みと出力など)
    モデル入出力(XMLの読み込みと出力など)を利用していると、参照先の情報がない(たとえば、ある要素に設定した独自ステレオタイプの定義情報がない)などのケースが発生して、不整合となることがあります。

    具体的には、たとえばモデルをXMLファイルに出力するときに、出力対象のパッケージ内に、他のパッケージを参照する情報や、独自に定義したステレオタイプを設定(参照)した要素、があるとそれらの参照情報も出力されます。これはXMLファイルを読み込むときに、出力したときと同じモデルにするためです。しかし、出力対象のパッケージ以外の情報(たとえば、独自ステレオタイプの定義情報、のような参照先の情報)は出力されません。そのため、XMLファイルを読み込むと参照情報はあるが、参照先の情報がない、などのケースが発生することがあります。このようなケースはLemonTreeが不整合として検知します。

  • 異なるバージョンのEAを使用して同じモデルを編集
    一度新しいバージョンのEAで開いたプロジェクトには、新しいバージョンで追加された情報(例えば追加のオプション設定)が保存されます。また、バージョンによっては内部の保存情報・形式が変更される場合があります。そのため、異なるバージョンで同じモデルを編集すると不整合が発生することがあります。

  • EAのバグ

参考情報:
LemonTree、EAそれぞれに整合性確認がありますが、チェックルールが異なります。そのため、片方で不整合を検知しても、他方では検知しないことが多くあります。また、LemonTreeは比較実行毎に整合性確認を行ないますが、EAは手動実行となっています。


影響

モデルの不整合は、LemonTreeの差分比較・マージにおいて、若干の影響を与える可能性はありますが大きな影響はありません。



対応

以下に対応方法を記載しておりますが、不整合の検知レベルを変更して、検知自体を抑制することをお勧めいたします。抑制方法については、「不整合の検知を抑制する」をご覧ください。

  • 差分比較を継続する
    上記画面で「Confirm & Continue」をクリックしてください。

  • モデルの不整合を解決する
    上記画面で「Details」をクリックすると不整合のログを確認できます。ログに出力されているErrorCodeを基に、開発元が公開している不整合の検知リストをご確認ください。Solution欄の注釈につきましては下記となります。

    • 注釈1:EAの整合性確認で解決
      EAの整合性確認を「結果のみ」で実行し、もし不整合があれば「修復」で再度実行することで解決します。整合性確認については、ヘルプの「プロジェクトの整合性確認」をご確認ください。尚、「修復」はモデルを変更しますので、実行前に必ずバックアップを取得してください。

    • 注釈2:LemonTreeのマージで解決
      LemonTreeでマージを実行することによりマージファイルで自動解決されます。

    • 注釈3:開発元の専用ツールで解決
      開発元が提供している専用ツールで解決します。ただし、当該検知はモデルに影響を与えるものではありませんので、専用ツールは使わず、不整合の検知自体を抑制する方法もあります。

    よく出力されるログと原因の例は以下のとおりです。

    Category Error Code Description 原因
    Error 112000000 Reference 'Image' isn't set, because 'ImageID' is not defined.
    ---
    要素に設定された画像が定義されいません。
    モデル出力したXMLファイルを、他のプロジェクトで読み込んでいるケースが考えられます。
    Warning 100012000000 Xref of stereotype with Name 'extend' doesn't contain Guid nor FqName.
    ---
    接続に設定されたステレオタイプ 'extend'のGUIDもしくはFQNameがありません。
    (接続GUID=ログのElementGuid)
    ユースケース接続の「拡張」を利用しているケースが考えられます。
    Warning 200012000000 Referenced Stereotype '<guid>' with Name 'Stereo1' couldn't be found.
    ---
    ステレオタイプの定義として'Stereo1'が見つかりません。
    (ステレオタイプGUID=guid)
    以下のケースが考えられます。
    • モデル出力したXMLファイルを、他のプロジェクトで読み込んでいる
    • 利用しているステレオタイプを、ステレオタイプの定義から削除している
    Warning 400012000000 Referenced Stereotype '{extend+ucextend}' with Name 'extend' and AppliesTo 'UCExtend' couldn't be applied to element with Table 't_connector', EaType 'Extends' and UmlType 'Extend'.
    ---
    ステレオタイプ'extend' / 適用先'拡張' は当該接続に適用できません。
    (接続GUID=ログのElementGuid)
    ユースケース接続の「拡張」を利用しているケースが考えられます。
    Warning 92000000 Referenced Element 'Type' with Reference '2382' couldn't be found.
    ---
    型として設定している要素が見つかりません。(要素Object_ID=2382)
    属性や操作の戻り値・パラメータに設定している型の要素が存在しないケースが考えられます。
    確認方法はこちら
    Warning 92000000 Referenced Element 'EffectGuid' with Reference '<guid>' couldn't be found.
    ---
    効果として設定している要素が見つかりません。(要素GUID=guid)
    接続のコントロールフローや遷移でガードの「効果」に設定している要素が存在しないケースが考えられます。
    確認方法はこちら


    ベースモデルの不整合の解決
    GitやSubversionなどのバージョン管理システムを利用している場合、3way比較をしたときにベースモデル(比較元)に不整合があることがあります。この場合、下記手順でベースモデルの不整合を解決する必要があります。
    1. バージョン管理システムから3way比較する3つのモデルを取得して、任意のディレクトリに配置する
    2. ベースモデルの不整合を解決する ※要すれば、他の2つのモデルの不整合も解決する
    3. ディレクトリ内の3つのモデルをLemonTreeでマージする
    4. マージモデルをバージョン管理システムにcommitする
    ※上記手順の終了後、各ユーザはバージョン管理システムから最新モデルを取得した上で編集を行なう必要があります。

  • 不整合の検知を抑制する
    モデルの不整合の検知自体を抑制することができます。手順につきましてはマニュアルの6.5.1章をご覧ください。
    特にWarningレベル以下の検知は、EAの通常操作(たとえば、ユースケース接続の「拡張」を利用する)でも発生しやすく、多数検知されることがありますがモデルに大きな影響を与えないため、検知レベルをデフォルトのInfoからError(もしくはFatal)に変更して検知を抑制することをお勧めします。

その他

上記以外のモデル不整合に関する情報は以下のとおりです。
  • 「LostAndFound」というプロジェクトルートが作成される
    LemonTreeでマージしたときに、以下のような「LostAndFound」というプロジェクトルートが作成されることがあります。
    これは、何らかの理由で要素の親パッケージが見つからないとき、などに作成されます。親パッケージが存在しない要素はEAのモデルブラウザで確認できないため、LemonTreeが独自に親パッケージ「LostAndFound」を作成し、その要素を配置しています。

    「LostAndFound」の対応方法としては、配下の要素が必要であれば適切なパッケージの配下に移動してください。その後に「LostAndFound」を削除してください。