Lattix/Understandのメトリクスをデータ分析してみた([Understand 7.0]Understandメトリクスの出力)

Understand

はじめに

現在の最新版であるUnderstand 7.0では、従来のUnderstand 6.3から一部のメトリクス設定のオプションが変更されています。

今回はUnderstand 7.0を対象としたコマンドラインによるメトリクス出力方法をご紹介します。
※Understand 6.3における出力方法の記事はこちらをご確認ください。

なお、下記の説明内で登場するコマンド例に記載されている”myProject.und”は、ご利用のプロジェクト名に読み替えてください。

前提

  • 使用するUnderstandバージョン
    • Understand 7.0(Build 1220)
  • Understandライセンスが設定され、Understandが使用可能である
  • 環境変数
    • undコマンドの使用には、お使いのマシンにおける環境変数PATHの追加が必要です。
      以下はWindowsの場合の追加例となります。なお、複数のバージョンのUnderstandをインストールしている場合、undコマンドでご利用予定のバージョンのインストールディレクトリをご指定ください。
      • 変数:PATH
      • 値:(Understandインストールディレクトリ)\bin\pc-win64
        (例)C:\Program Files\SciTools\bin\pc-win64

準備

undコマンドのバージョン確認

以下のコマンドにより、現在実行しているundコマンドのビルド番号をご確認いただけます。
Understand 6.3は「Build 1139」、Understand 7.0は「Build 1220」と表記されます。

>und version
(Build 1220)

なお、Understand 7.0以降のバージョンでは-fullオプションによりバージョン番号を付記して出力することが可能となりました。

>und version -full
(Build 7.0.1220)

プロジェクトの作成と解析

本手順(プロジェクトの作成と解析)はGUIから実施いただいても問題ありません。undコマンドによりプロジェクトを作成する手順例は以下の通りです。
なお、ここでは本記事の目的に注力するため、C/C++の場合の簡易なプロジェクト作成手順例を示すのみに留めます。

Understand 7.0(Build 1220)におけるプロジェクト解析では、エンコーディング設定として”System”以外を指定して解析する必要がございます。詳しくはこちらの記事をご確認ください。

メトリクスに関する一部の設定について、und analyzeコマンドの実行前に実施すると反映されない現象を確認しております。後述のund settingsによる設定はund analyzeコマンドの実行後に実施するようにしてください。

und create -local -db myProject.und -languages c++
und add . -db myProject.und
und settings -C++UseStrict off -db myProject.und
und settings -FileEncoding "Shift_JIS" -db myProject.und  (Shift_JISの場合)
und settings -FileEncoding "UTF-8" -db myProject.und      (UTF-8の場合)
und analyze -db myProject.und

実際のプロジェクト作成手順やコマンドの使用方法の詳細については、Understandユーザーサポートページよりダウンロードいただける「Understand プロジェクト作成・運用ガイド」や「und コマンドラインガイド」をご確認ください。
(ダウンロードをするには、『Scitools製品ライセンス証書』または『Scitools 製品年間保守サービス証書』に記載されている「ログインID」と「パスワード」が必要です。)

メトリクスレポートの設定と出力

メトリクスレポート形式設定

以下はメトリクスレポートの出力形式を変更する場合の例となります。
ご希望の形式に従い、必要に応じて各コマンドを実行してください。

  • カラム名を表示します。
und settings -MetricWriteColumnTitles on -db myProject.und
  • エンティティ名を相対パスで表示します。
und settings -MetricFileNameDisplayMode RelativePath -db myProject.und
  • 定義ファイルを表示します。
und settings -MetricShowDeclaredInFile on -db myProject.und
  • 定義元ファイルを相対パスで表示します。
und settings -MetricDeclaredInFileDisplayMode RelativePath -db myProject.und

[オプション] メトリクスのカスタマイズ

以下は特定のメトリクスの出力に関するメトリクスの有効化や特定のメトリクスに関するカスタマイズを行う設定の例となります。
ここではCUIにおける設定方法をご案内いたしますが、本手順はGUIから実施いただくことも可能です。(本記事文末「Appendix」参照)
Understand 7.0では、一部のメトリクスについて、有効化やカスタマイズに関するオプションが追加されています。
特にこだわりがない場合は、本設定を飛ばし、次の「メトリクス出力設定」に進んでいただけます。
今後有効化やカスタマイズに関する設定が必要になった場合には、本設定をご確認ください。

Understandでは、ロジックの複雑さを表すメトリクスは非常に多くの種類を取得可能です。
しかし、”Cyclomatic”、”MaxNesting”、”Essential”、”Knots”、”Paths”のように、複雑さを表すメトリクスが多数表示されてしまうことは管理のしづらさを生んでいる場合がありました。
本オプションの搭載により、こうしたロジックの複雑さを始めとした、同種で種類の多いメトリクスから、普段使うメトリクスを指定することが可能となりました。
これにより、例えば、”SumEssential”を取得したい場合、”Essential”を有効化する必要があります。


[CUIにおける設定情報の表示例]
本設定をCUIから設定する場合、選択可能なオプションを事前に知る必要があります。
下記のように現在の設定をCUIから表示した場合、”Avaliable Settings”欄に選択可能なオプションが表示されます。
※後述”und list -metrics settings myProject.und”により出力した情報です。
(解析指定言語により若干表示内容が変わります。)

C:\work\>und list -metrics settings myProject.und

--------------------------Metric Settings--------------------------
Option                          Current Setting  Available Settings
  WriteColumnTitles              On              On/Off
  AddUniqueNameColumn            Off             On/Off
  ShowFunctionParameterTypes     Off             On/Off
  ShowDeclaredInFile             On              On/Off
  DeclaredInFileDisplayMode      RelativePath    NoPath/FullPath/RelativePath
  FileNameDisplayMode            NoPath          NoPath/FullPath/RelativePath
  OutputFile                     C:\work\myProject.csv
  ShowLineCountMetrics           On              On/Off
    InactiveLines                Exclude         Exclude/Include/Both
  ShowStatementCountMetrics      On              On/Off
  Cyclomatic                     Normal          All/Normal/Strict/Modified/StrictModified
  ShowMaximumNesting             On              On/Off
  ShowPaths                      Off             On/Off
  ShowKnots                      Off             On/Off
  ShowEssential                  Off             On/Off
  ShowInheritanceMetrics         On              On/Off
  ShowMethodAndVariableCountMetrics
                                 On              On/Off
  ShowCouplingAndCohesionMetrics On              On/Off
  ShowDefaultSummaryMetrics      On              On/Off
  ShowAggregatedFileMetrics      On              On/Off
  ShowAggregatedFunctionMetrics  On              On/Off
  ShowAggregatedClassMetrics     On              On/Off

[オプション] メトリクスの指定(On)

各メトリクスの出力を有効化する場合、下記のように設定します。

und settings -MetricShowLineCountMetrics On -db myProject.und
und settings -MetricShowMaximumNesting On -db myProject.und
und settings -MetricShowEssential On -db myProject.und
und settings -MetricShowStatementCountMetrics On -db myProject.und
und settings -MetricShowKnots On -db myProject.und
und settings -MetricShowDefaultSummaryMetrics On -db myProject.und

[オプション] 行数メトリクス、複雑度メトリクスの指定

空白行、コメント行、コード行メトリクスにおける非アクティブ行のカウント方法の指定は、以下のように指定可能です。

und settings -MetricInactiveLines Both -db myProject.und

サイクロマティック複雑度のカスタマイズオプションは以下のように指定可能です。

und settings -MetricCyclomatic All -db myProject.und

メトリクス出力設定

以下は出力するメトリクスを指定する例となります。
※一部のメトリクスは上述の有効化が必要です。もし設定したはずのメトリクスが設定に反映されていない、もしくは出力ができない場合には、上述の有効化オプションの指定をご検討ください。

und settings -MetricMetrics CountLine CountLineCode CountLineComment Cyclomatic Essential MaxNesting -db myProject.und


現設定における全てのメトリクスを出力する場合は以下のコマンドを実行します。

und settings -MetricMetrics all -db myProject.und

Understand 7.0より、メトリクスのAPI Name, Friendly Nameが変更されています。
変更の詳細については、 ユーザーサポートページの『Understand 7.0メトリクス一覧表』の”API Name”と”API Name (Old)”で確認いただけます。
なお、上記一覧表に記載されていない一部のメトリクスはアーキテクチャレベルでの値の算出に問題があったため、削除されています。

メトリクスレポートの出力

以下のコマンドの実行により、csv形式にてメトリクスレポートを出力可能です。

und metrics myProject.und

うまくいかない場合には

undコマンドラインガイドを参照

「und コマンドラインガイド」をご確認ください。

Understandユーザーサポートページよりダウンロードいただける「und コマンドラインガイド」をご確認ください。(ダウンロードをするには、『Scitools製品ライセンス証書』または『Scitools 製品年間保守サービス証書』に記載されている「ログインID」と「パスワード」が必要です。)

Understand ユーザーサポートページ>>
 →「Understand 7.0 日本語版 [Build 1220]」
 →「und コマンドラインガイド」

コマンドのヘルプを参照

undコマンドのヘルプを表示します。

und help

und settingsのヘルプを表示します。

und help settings

現在のプロジェクト設定を参照

現在のプロジェクト設定を参照します。

und list settings myProject.und

現在のプロジェクト設定(詳細)を参照します。

und list -all settings myProject.und

現在のプロジェクト設定(メトリクス設定のみ)を参照します。

und list -metrics settings myProject.und

現在のプロジェクト設定(言語設定)を参照します。

und list -lang settings myProject.und

テクニカルサポートに問い合わせる

本記事でご案内した手順でも、メトリクス出力がうまくいかない場合には、テクニカルサポートセンターの宛先へお問い合わせいただくことが可能です。
ただし、お問い合わせには保守サポートへの加入が必要となり、『Scitools製品ライセンス証書』または『Scitools 製品年間保守サービス証書』に記載されているユーザー登録番号や製品番号のご連絡が必要です。

お問い合わせいただく際は、以下の4点の情報をご連絡いただけますよう、お願いいたします。

  • ユーザー登録番号や製品番号
  • ご利用のマシン情報(OSとそのバージョン、CPU、搭載メモリ)
  • 以下の実行結果(myProject.undはご利用のプロジェクト名に読み替えてください)
where und ※linux環境の場合はwhich und 
und version 
und list -metrics settings myProject.und 
und list -lang settings myProject.und
  • [ヘルプ]-[サンプルプロジェクト]-[Fastgrep – C]から以下にダウンロードされるサンプルプロジェクト「C:/Users/(ユーザー名)/AppData/Roaming/SciTools/samples/fastgrep」でも発生するかどうか
    ※ダウンロード後、ご利用のバージョンでの再解析(und analyze -db fastgrep.und)が必要です。

Appendix

GUIにおけるメトリクスの有効化・カスタマイズ

[GUIにおける設定情報の表示例]
上述の一部のメトリクス設定はGUIからの設定の場合、下記のように[プロジェクトの設定]-[メトリクス]より指定可能です。