連載:Team Foundation Server 2008の下流工程への適用

第3回 実践的コード・レビュー

アバナード株式会社 安藤 大祐(Microsoft MVP 2008 for Solutions Architect)
2009/05/12
Page1 Page2

Team Reviewを活用したコード・レビューのワークフロー

 Team Reviewを利用したコード・レビューの概要を以下の画面に示す。

 開発者Aがプログラムを作成し、開発者Bにコード・レビューをしてもらうことでコードの改善を実施していく状況を例にとって、一連の作業を見てみよう。

図2 Team Reviewでのワークフロー概要

プログラム作成

 開発者Aは、とあるシステムの「計算機」機能の開発を担当しており、以下のプログラムを作成した。作成されたすべてのコードは、チェックイン前にレビューされていることがルールであるため、下記のコードのレビューを開発者Bへ依頼する。

public class Calculator
{
  public int Addition(int valueA, int valueB )
  {
    return valueA + valueB;
  }

  public int Subtraction(int valueA, int valueB)
  {
    return valueA - valueB;
  }

  public int Multiplication(int valueA, int valueB)
  {
    return valueA * valueB;
  }

  public int Division(int valueA, int valueB)
  {
     return valueA / valueB;
  }
}
開発者Bがレビューするコードの例

【コラム】コード・レビューの実施を強制したい場合

 デフォルトの設定のままでは、上記のコードを作成した後に、そのままチェックインできてしまう。プロジェクトの規約として、すべてのコードをチェックインする前に、必ずコード・レビューを実施させたい場合は、TFSのソース管理機能の「チェックイン・ポリシー」を活用できる。

 例えば、[チェックイン メモ]の[コード レビューア]を有効にした場合、コード・レビューを実施した人の名前を入力しなければ、下記のとおり、チェックイン前の検証に失敗し、チェックインできなくなる(適当な名前を書いてしまえば、実際にコード・レビューをしなくてもチェックインは可能になってしまうのであるが……)。

図3 チェックイン時の失敗例
この画面では、必須項目である[コード レビューア]が入力されていないため、チェックインの妥当性検証に失敗している。

 ただし筆者は、チェックイン・ポリシーでルールを厳しくし過ぎるのは好ましくないと思っている。厳密すぎるルールは、作業の俊敏性を失い、作業者に不要なストレスを与えるといった悪影響が考えられるためである。

 また、チェックイン・ポリシーの設定は、チーム・プロジェクトの単位でしか設定できないため、重要な機能のみを強制化するといった柔軟性がない。プロジェクト全体として考えると、ルールを厳密化させるだけではなく、ある程度性善説に基づいた開発アーキテクチャも、品質を高めるうえで重要ではないかと考えている。

コード・レビュー依頼

 開発者Aは、作業項目を起票して、開発者Bにコード・レビューの依頼を行う。起票する作業項目の種類は、利用しているプロセス・テンプレート(既定では「MSF for Agile」「MSF for CMMI」の2種類が用意されている)による。

 ここでは、「MSF for CMMI」の「レビュー」という作業項目を利用して、レビュー依頼の起票を行う。次の画面はその起票の例。

図4 作業項目「レビュー」の起票例
開発者Aが、開発者Bへのコード・レビュー依頼を作成しているところ。
  誰にコード・レビューを実施してもらうか指定している。今回は[担当者]に「開発者B」を設定。
  [目的]タブに、コードの内容(=「計算機ロジック」)とレビュー対象物(=「シェルブ:20090405-コードレビュー依頼-開発者B」)を記述し、相手に詳細を伝えている。ここでは、開発者Aが編集した内容を「20090405-コードレビュー依頼-開発者B」という名前のシェルブに格納し、シェルブを通じてコード一式を共有している。

コード・レビュー依頼の確認

 ここからは、開発者Bの作業である。

 先ほど起票されたレビュー依頼を確認し(開発者Bが担当にアサインされているため、自身の担当作業項目クエリで表示されるようになっている)、指定されている変更セット(=開発者Aが作成したコード一式)をアンシェルブし、ローカルに取得する。

 次の画面はアンシェルブを行っているところ。

図5 アンシェルブ用のダイアログ
レビュー対象である変更セットをローカルに取得する。
ローカルに変更セットが展開されれば、[チーム エクスプローラ]で表示できる[保留中の変更]ウィンドウから、修正ファイルの一覧や、サーバに格納されているバージョンとの差分比較が容易であるため、被レビュー者(開発者A)から細かくレビュー範囲を指定してもらう必要がない。

コード・レビュー実施

 開発者Bは、開発者Aが作成したCalculatorクラスを確認したところ、 Divisionメソッドにどうも気になる個所を発見した。というのも、第2引数に0が指定された場合に、0乗算エラーが発生してしまう。このようなケースでは、メソッドの先頭で引数チェックを行うことが望ましく、それを開発者Aにフィードバックし、修正してもらうことにした。

 レビュー・フィードバックは、Team Reviewで提供するカスタム作業項目である「Code Review Response」に記述する。Team Reviewのセットアップが完了している場合は、コード・エディタのコンテキスト・メニューに[Team Review]が追加されている。

 修正対象のコードをコード・エディタで開き、右クリックで表示されるコンテキスト・メニューから[Team Review]−[New Code Review Response]をクリックすると、[Create Code Review Response]ダイアログが表示されるので、ここにレビュー結果を記入する。

[New Code Review Response]をクリック
図6 [Create Code Review Response]ダイアログ
ダイアログの[Save]ボタンを押すことで、新規のCode Review Responseが起票される。
  [Assign to:]には、レビューの依頼者(=フィードバックする相手)を指定する。今回の場合は「開発者A」を入力。
  [Title:]と(一番下の)[Code snippet:]には、開いているコードの内容を基に自動的に入力される。
  [Description:]と[Suggested resolution:]には、レビュー結果をフィードバックとして記述する。

コード・レビュー結果の確認・修正

 再び、開発者Aの作業。

 フィードバックとして記述されたレビュー結果は、コード・エディタのコンテキスト・メニューから[Team Review]−[Replay Code Review]をクリックすることで一覧表示される。フィードバックされた内容を確認して、必要に応じてコードを修正し、内容に問題なければ、レビュー依頼を「Close」し、対象の変更セットをチェックインする。

[Replay Code Review]をクリック
図7 レビュー・フィードバックの一覧
指定の作業項目(今回の例では「レビュー」)に関連付いているフィードバックの一覧は、[Code Review Replay]ウィンドウに表示される。

 Team Reviewを利用した、コード・レビューのワークフローは以上である。

 このようにTFSとアドオンであるTeam Reviewを使うことにより、Visual Studio上で一連のコード・レビュー作業をシームレスに実施可能になる。エクセルで起票するなどわずらわしい作業を減らしつつ、品質を上げられる。

 短期間での開発を余儀なくされる現在の開発状況において、単純なバグ修正などによるテスト時の工数圧迫は開発者のモチベーション低下を招くだけでなく、品質の低下にもつながる。開発後期に悪影響を与えないためにも、有益なコード・レビューを行っていただきたいと思う。

 なお、念のためであるが、今回紹介したTeam Reviewはオープンソースとして公開されているものであり、利用は自己責任が原則であることをご理解いただきたい。

まとめ

 今回は、TFSのソース管理機能の応用編として、Team Reviewを利用したコード・レビュー方法について説明した。

 前回までの記事でも説明したが、TFSは単なるソース管理ツールではなく、アプリケーション・ライフサイクル・マネジメント(ALM)ツールだ。TFSが持つ機能や特徴をうまく組み合わせることで、単にソース・コードを管理するだけでなく、ソース・コードの品質も含めて管理することが可能であり、今回紹介したTeam Reviewは、そういったTFSの魅力を具体化した素晴らしいアドオンだと筆者は思っている。

 第4回となる次回はTFSによる自動ビルドについて紹介したい。End of Article


 INDEX
  [連載] Team Foundation Server 2008の下流工程への適用
  第3回 実践的コード・レビュー
    1.コード・レビューとは?/Team Reviewの概要とセットアップ
  2.Team Reviewを活用したコード・レビューのワークフロー

インデックス・ページヘ  「Team Foundation Server 2008の下流工程への適用」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間