ユースケース:品質計測(メトリクス)

ソフトウェアメトリクスは、ソースコードを解析してソフトウェアの保守性を定量的に評価する手法です。
多くの開発現場で採用されており、一般的には、ソースコードを解析してコードの規模や複雑さなどを検証します。巨大なソースコードや見慣れないソースコードの状態を把握し、分析対象の選定にも役立ちます。

品質計測(メトリクス)の関連資料はこちら>>

usecase_metrics

課題

  • 構造が複雑化しており、どこから対処していいのか全体の見通しがつかない
  • ソースコードメトリクスを活用したいが、どのように活用すべきか判断が難しい
  • 分析や計測が開発プロセスの負担になっているため、より効率的にメトリクスの指標を選定したい

原因

プロジェクトの規模や複雑性が増加している
例:適切な指標が選定されていない場合、問題の特定が困難になる。

メトリクスの目的や基準がチーム内で共有されていない
例:複雑度が高い関数が見つかっても、「どの程度の値が許容されるのか」や「どのようにリファクタリングするべきか」が開発チーム内で合意されていないと、改善アクションが取れずに放置される。

解決策

Understandは、C/C++、Java、VB.NET、C#、Python、JavaScript、TypeScriptなどで開発されたプログラムを高速解析することができます。

Understandは、ビルド環境がなく、コンパイルできないソースコードであっても、ある程度の解析結果を得ることができます。
また、C/C++においては関数ポインターによる関数の呼び出しやポインター変数のアドレス操作の解析も行うことができます。
以下にUnderstandを使った、品質計測(メトリクス)の手順の一部をご紹介いたします。
Understandでは、関数やメソッド、クラスといった粒度で品質を計測するソースコードメトリクスが計測できます。システム全体やディレクトリ、ファイル粒度でのメトリクス計測が必要なお客様はアーキテクチャメトリクス(Lattix)もご確認ください。

  1. 現状の保守性をメトリクスで評価する
  2.  1-1. メトリクスの選定
     1-2. メトリクスの閾値
     1-3. その他有用なメトリクス

     

  3. メトリクスをグラフで可視化して分析する(二軸での分析)
  4. コードの変更による保守性の変化をメトリクス差分で評価する

1.現状の保守性をメトリクスで評価する

ポイント

  • ソフトウェアメトリクスを計測し、ソースコードの保守性を定量的に評価する
  • 保守性の低い関数やメソッド、クラスを特定する
  • 評価したいソースコード要素の粒度によって最適なメトリクスを選定する

Understandの機能

Understandでは、ソースコードを解析しソフトウェアメトリクスを計測できます。
計測したメトリクスは、Understand上でグラフ機能と組み合わせて分析に利用できるほか、レポートを出力して詳細分析をすることができます。

※採用するメトリクスの種類や閾値は、一般的には分析の目的やシステムの設計意図によって異なります。文献や事例などから閾値の例の情報提供も可能です。


1-1. メトリクスの選定

メトリクスでは、関数やメソッド、クラスといった品質を計測したい要素の粒度と、計測の目的で最適なメトリクスを選定します。システム全体やディレクトリ、ファイル粒度での評価をしたい場合、ソフトウェアアーキテクチャを定量的に評価できる「アーキテクチャメトリクス」も有効です。
  • 関数/メソッド粒度:規模を表すLOC(コード行数)、複雑度を表すCyclomatic複雑度(サイクロマチック複雑度) など
  • クラス粒度:結合性を表わすLCOM(結合性の欠如)、CBO(結合されたクラスの数) など
  • ディレクトリ/全体粒度:変更に対するシステムの影響の度合いを表わすシステム安定性、要素の循環の度合いを表す循環度 など

1-2. メトリクスの閾値

ソフトウェアメトリクスでは、一般的で定量的な数値で評価ができる特徴から、各メトリクスごとに閾値を設けて評価をすることが可能です。これにより、閾値を超えるソースコード要素を特定し、分析や改修の優先箇所を判断することもできます。

※閾値はコードの特性により変わります。ご参考値としてください。

一般的なメトリクス名 Understandメトリクス名 閾値の例
コード行数 LOC(Lines of Code) CountLineCode 100
サイクロマティック複雑度 Cyclomatic Complexity Cyclomatic 20
本質的複雑度 Essential Complexity Essential 10
ネストの深さ Nesting Depth MaxNesting 5
ファンイン / ファンアウト FAN-IN / FAN-OUT CountInput / CountOutput 30
クラスメソッド数 NOM
(Number of Methods per Class)
CountDeclClassMethod 20
オブジェクト間の結合 CBO(Coupling Between Object) CountClassCoupled 20
凝集度 LCOM(Lack of Cohesion in Methods) PercentLackOfCohesion 90


1-3. その他有用なメトリクス

Understandでは、各要素ごとに合計100種類に及ぶメトリクスを計測することができます。また、Understand 7.0以降のバージョンではプラグインマネージャーからメトリクスを追加できます。その中で、下記の特徴的なメトリクスの計測が可能です。

メトリクス (一例) 概要
Cognitive Complexity 認知的複雑度Cyclomatic 複雑度よりも、人の認識しやすさに重点を置いて数値化されたもの
Halstead Maintainability Index 保守容易性指数
Halstead Volume
Lack of Cohesion in Methods (LCOM4) 凝集度 C++ に加えて、C に対応
HIS ソースコードメトリクス MISRAなど機能安全の規格でも採用
Gitメトリクス Git リポジトリで管理されているプロジェクト(.git ディレクトリを含めて)を解析した場合、コミット頻度などのGit関連のメトリクスが利用可能

 

2.メトリクスをグラフで可視化して分析する(二軸での分析)

ポイント

  • 2種類のメトリクスをツリーマップ形式で視覚的に表現する
  • 相対的に保守性の低い要素、また絶対値的にメトリクスが閾値を超える要素を可視化して分析できる

Understandの機能

メトリクスツリーマップでは、サイズとカラーに対して2種類のメトリクスの値を設定し、ツリーマップを使って2軸でのメトリクス分析が可能です。
これにより、例えば行数が大きいかつ複雑な関数を俯瞰的に発見することができ、分析の対象やリファクタリングでの優先箇所の把握に活用されています。
また、カラーに対して紐づけたメトリクスは、分析対象に対して相対的な値での色付けか、閾値を選択してのカスタムなスケーリング(絶対値での評価)かを選択して表示できます。
 

3.コードの変更による保守性の変化をメトリクス差分で評価する

ポイント

  • Understandの差分比較機能を用いて、バージョン間のメトリクス差分をレポートする
  • バージョン間で保守性が悪化している関数やメソッド、クラスを特定する

Understandの機能

Understandでは、変更前のソースコードと変更後のソースコードを比較することが可能です。比較する方法として、変更前後のUnderstandプロジェクトファイルを手動で作成する方法や、Gitリビジョンを指定して比較プロジェクトを作成する方法があります。
変更されたエンティティレポートやメトリクスツリーマップ機能では、バージョン間のメトリクス差分を計測でき、保守性が悪化している要素を特定することが可能です。これはコードレビューの際の優先順位付けにも活用されています。
 

関連情報のご紹介

 !ソフトウェアの内部品質を改善するには、保守性の低い要素(分析できたメトリクス値の悪い要素)に対して、関数分割などのリファクタリングをすることが有効です。
>>Understandユースケース:リファクタリング

!ソフトウェアの内部品質への取り組みでは、メトリクス値の悪化を継続的に監視して、特にメトリクスが悪化したタイミングで実装の妥当性を検討する、維持管理の考え方が重要です。
>>Understandユースケース:コードレビュー
品質計測(メトリクス)のユースケースについて、操作動画や関連セミナーをまとめております。
是非お役立てください。


関連資料のご案内

過去に開催したソフトウェア品質向上セミナーの講演資料をご案内します。資料は、セミナーにご登壇いただいた企業様の品質向上に関する取り組みをご紹介しています。
資料をご希望の方は、申込フォームよりお申し込みください。

富士フイルムソフトウェア様

富士フイルムソフトウエアが実践する、ソフトウェアの構造悪化を防止する品質の維持・確保への取り組み

品質が良いコードは、良い設計と良いコードから成り立ちます。良いコードの観点は、「読みやすい関数」、「理解しやすいクラス」、「クローンコードがない」、「ソフト構造が設計通り」の4つであり、これらを定量化・見える化し、製品開発の繰り返しによるソフトウェアの構造悪化を防止します。
富士フイルムソフトウエア株式会社が取り組んだ、ソースコードを長生きさせる、品質の維持・確保の取り組みについて紹介いただきました。

ソースコード解析ツール Understandに
関するお問い合わせ

  • テクマトリックス株式会社
    東京本社

    ソフトウェアエンジニアリング事業部

    03-4405-7853

メールでのお問い合わせ
scitools-info@techmatrix.co.jp

お問い合わせ

製品についてやテクマトリックスについてなど、
こちらよりお気軽にお問い合わせいただけます。