Lattix 循環レポートを使って循環依存を特定する

Lattix

はじめに

最近お客様からのお問い合わせで、以下のようなご質問をいただきました。
「Lattixの循環レポートはどのように循環を特定するのが適切な使い方なのでしょうか。」

本ブログ記事はUnderstandをメインに扱っておりますが、今回は姉妹ツールであるアーキテクチャ分析ツール「Lattix」循環レポートを使って循環を特定する方法について、解説したいと思います。

循環レポートの構成

Lattixで出力する循環レポートは上記のように、[レポート]-[循環レポート]から出力可能です。
レポートは以下の3種類があり、一括で出力することが可能です。

レポート名説明
循環」レポート各サブシステム内で発生している循環をレポートします。
要素レベルの循環」レポートサブシステム階層を考慮しない、要素間で発生している循環をレポートします。
要素レベルの循環(メンバーレベル付き)」レポート要素レベルの循環レポートの内容に、メンバーレベルの要素を追加した内容をレポートします。(※)


※なお、メンバーレベルの情報は、あらかじめDSMの以下のように$rootに対してメンバー展開を実施済の場合に、出力することが可能です。

密結合分析の方針決め

上記図は弊社の有償セミナー資料で使用している図となりますが、循環依存と言っても、大きな粒度で見た循環なのか、小さな粒度で見た循環なのかなど、さまざまです。
このため、ソフトウェア構造を見る際に、
①モジュール同士の密結合、②ファイル同士の密結合、③メンバー粒度(関数や変数)の密結合
のどれを見たいのかを最初に決める必要があるかと考えます。

①に着目して、モジュール同士の循環やレイヤー同士の循環をチェックしたいのであれば、循環レポートの「循環」レポートを、
②に着目して、ファイル同士の循環をチェックしたいのであれば、循環レポートの「要素レベルの循環」レポートを、
③に着目して、メンバー間の循環をチェックしたいのであれば、循環レポートの「要素レベルの循環(メンバーレベル付き)」レポートを、
それぞれ確認します。

※③の場合はあらかじめDSMの$rootに対してメンバーの展開を実施済である場合にのみメンバーレベルで出力できます。

循環の特定方法

ここでは例として、③メンバー粒度(関数や変数)の密結合に着目し、「要素レベルの循環(メンバーレベル付き)」のレポートを参照しているとします。

前提

・DSMが$root配下に対してメンバー展開済
・「循環レポート」がLattix Architect上で生成されている状態

手順1(タグの作成)

「要素レベルの循環(メンバーレベル付き)」内において、「循環グループ」の番号が同じである要素に着目します。
サイズはその循環グループを構成する要素の数を表しています。
以下、サンプルプロジェクト(httpd-2.0.55)を例に説明します。


上記画像(要素レベルの循環(メンバーレベル付き))のように循環グループ5は3つの要素から成り立っています。
システム列ap_die()をマウスオーバーした状態で、右クリックすると「システム列の要素にタグを作成」と出るので、「新規」から”5″というタグを作成します。(下図参照)


同様な操作で、作成した”5″というタグにap_internal_redirect()や、internal_internal_redirect()も追加します。

手順2(タグフィルター)

  1. DSMを表示のうえ、[ナビゲーター]タブの[検索/タグ]配下にある[5]というタグを右クリックし、[タグフィルター]を開きます。(上図参照)
  2. [サブシステムのフィルタリング]は[タグの付いたサブシステムだけを表示]を選択します。
  3. [依存関係のフィルタリング]は[すべての依存関係を表示]を選択し、タグ名は[5]を選びます。
  4. 下図のような状態になるので、OKを押します。

結果の確認

下記の図のように、DSMには”5″のタグがついた要素だけが表示されます。
依存関係が循環している要素を確認できます。

各依存関係を確認する場合、DSM上で選択したセルの依存関係について、[依存関係]タブから詳細を確認できます。
Used Byは当該依存関係の依存元を表します。
Usesは当該依存関係の依存先を表します。

または、[インフォメーションタブ]から該当の行番号のリンクを使って、エディターにジャンプ(※)することも可能です。

※エディターで該当コード行にジャンプするには、解析したコードが当該PC上にあり(このため、一部言語に限られます)、[設定]-[外部ビューアーの構成]および、[設定]-[モジュール]-[(言語モジュール名)]-[外部ビューアー]の設定が実施されている必要があります。

まとめ

ソフトウェアの循環には、レイヤー/モジュールレベルの循環、ファイルレベルの循環、メンバーレベルの循環があります。どのレベルの循環を発見したいのかをあらかじめ検討したうえでLattixの循環レポートを使うことで、想定した粒度でのソフトウェア構成要素間の循環依存を見つけ出すことが可能です。

ぜひご利用ください。