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
© Copyright 2024 Paperzz