Understand コードリーディング ユースケース

Understand
コードリーディング ユースケース
テクマトリックス株式会社
システムエンジニアリング事業部
Copyright © TechMatrix Corporation. All rights reserved.
開発におけるワークフロー例
リリース
テスト
レビュー
変更設計 /
実装
分析 調
/査
対応する機能の選定
要望 不
/具合の情報収集
開発の多くのフェーズで、
コードリーディング(コードを読み解く作業)が必須
※ 特に保守開発では、設計書などが陳腐化・形骸化していることも多く、ソース
コードがすべてのナレッジとなっているケースが多数です
※ 自分の書いたコードでも、時間が経てばその内容・背景を忘れてしまうことも
少なくないため、最終的にはコードを読む必要があります
コードリーディング ユースケース
コードリーディングのシーンにおける Understand による効率化
 全体構造の確認

モジュール(ディレクトリ)間の関係を確認する
 仕様の確認



関数の処理フローを効率よく確認する
構造体・共用体の仕様を確認する
クラスの仕様を確認する
 影響範囲の確認






修正する関数の呼び出し関係を確認する
修正する関数の被呼び出し関係を確認する
修正する関数の呼び出し関係と、関連するグローバル変数の
参照関係を一度に確認する
修正するグローバル変数の参照位置を確認する
修正するグローバル変数を使用している関数と、その呼び出し関係を確認する
グローバル変数がどの関数で利用されているか一覧で確認する
 コードレビュ-・リファクタリング


複雑度の高い関数を確認する
複雑な関数の分布度合いを視覚的に確認する
全体構造の確認
 モジュール(ディレクトリ)間の関係を確認する
 モジュール・ディレクトリ構造と、それらの関連を確認
Internal Dependencies グラフ
※ ディレクトリ・ファイル・関数など、任意の粒度への展開が
可能です
※ 変数アクセス(Init/Set/Use/Modify)のみ、関数
コール(Call)のみといった、特定の依存関係だけを表示
することもできます
※ grepコマンドやテキストエディタの文字列検索のように、
同じエンティティが何度も検索結果として表示されるのと
は異なり、同じエンティティは参照箇所が複数ある場合
でも検索結果には一つのエンティティとして表示されます
4
全体構造の確認
 モジュール(ディレクトリ)間の関係を確認する
 モジュール・ディレクトリ構造と、それらの関連を確認
依存関係ブラウザー
※ Internal Dependencies グラフに表示された依存関係の詳細を確認できます
※ 任意のディレクトリ・ファイルに関連する依存関係を一度に確認できます
5
仕様の確認
 関数の処理フローを効率よく確認する
 事前分析において、修正対象の関数の処理を理解する
 実装後、実装内容をレビューする
 単体テスト作成時、テストデータとして必要となる条件分岐などを確認する
Control Flow グラフ
6
仕様の確認
様々な Control Flow グラフの表示モード
全体表示
ブロックのみ表示
条件式のみ表示
7
仕様の確認
 構造体・共用体の仕様を確認する
 メンバーに構造体を持つ、入れ子の型仕様を確認する
Data members グラフ
※ メンバーの構造体・共用体の情報を含め、全体像を一度に確認できます
8
仕様の確認
 クラスの仕様を確認する
 クラスメンバー、クラスの継承関係を確認する
Declaration グラフ
9
影響範囲の確認
 修正する関数の呼び出し関係を確認する
 修正対象の関数Aが依存している関数を確認
 修正対象の関数Aから、別の修正対象の関数への到達経路があるか確認
Calls グラフ
A
B
C
…
D
呼び出し関係を階層的に表示
※ 関数の引数、定義しているファイル名も表示できます
※ 呼び出し/被呼び出し関係の両方を同時に表示する
Butterflyグラフもあります
10
影響範囲の確認
 修正する関数の被呼び出し関係を確認する
 修正対象の関数Aの修正(ロジックの変更、戻り値の変更、関数パラメータの変
更、など)が、影響を与える可能性がある関数を確認
 修正対象の関数Aまでの到達経路を確認
…
C
B
A
Called By グラフ
D
被呼び出し関係を階層的に表示
※ 関数の引数、定義しているファイル名も表示できます
※ 呼び出し/被呼び出し関係の両方を同時に表示する
Butterflyグラフもあります
11
影響範囲の確認
 修正する関数の呼び出し関係と、関連するグローバル変数の
参照関係を一度に確認する
 修正対象の関数Aが依存している
関数・変数を確認
 関数Aが、ある変数を利用する
経路があるか確認
Calls with Global Objects グラフ
12
影響範囲の確認
 修正するグローバル変数の参照位置を確認する
 変数の変更によって影響を受ける直接の関数を確認
任意のグローバル変数の
参照位置の一覧
Object References グラフ
13
影響範囲の確認
 修正するグローバル変数を使用している関数と、その呼び出し関係を
確認する
 変数の変更によって影響を受ける、直接および間接的な関数を確認
Object Refs with CalledBy グラフ
14
影響範囲の確認
 グローバル変数がどの関数で利用されているか一覧で確認する
 Init/Set/Use/Modify/Return の状態を確認
グローバル変数と関数の
Set/Use/Modify/Return の
関係マップをCSV出力
15
コードレビュー・リファクタリング
 複雑度の高い関数を確認する
 解析性・理解性・保守性を低減させる要因となる、複雑度が高い関数を
重点的にレビュー
Complex Functions レポート、Large Functions レポート
Cyclomatic 複雑度が
20を超える関数を抽出
Essential 複雑度が
10を超える関数を抽出
コード行数が100行を
超える関数を抽出
16
コードレビュー・リファクタリング
 複雑な関数の分布度合いを視覚的に確認する
 メトリクスツリーマップで、ボックスが大きく色が濃い、複雑な関数を、
レビューの起点・リファクタリングの対象とする
メトリクスツリーマップ
※ 左図では、ボックスのサイズが CountLine(行数)を、
ボックスの色がCyclomatic(複雑度)を表しています。
この例では、長く複雑な関数が幾つかのファイルに分布
していることが分かります。
17