DevOps 開発者の 1 日: 作業の中断、バグの修正、コード レビューの実行

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

Visual Studio の [担当作業] および [コード レビュー] 機能では、1 つの作業スレッドから別のスレッドへのコンテキスト切り替えがサポートされています。 また、チーム メンバーは提案されたコード変更に関するメッセージを簡単に交換できます。 この記事では、「DevOps 開発者の 1 日: ユーザー ストーリーの新しいコードを作成する」からチュートリアルを継続して、これらの機能について説明します。

注意

Visual Studio の [担当作業] および [コード レビュー] 機能は、次のエディションで利用できます。

  • Visual Studio 2022: Visual Studio Community、Visual Studio Professional、Visual Studio Enterprise
  • Visual Studio 2019: Visual Studio Professional、Visual Studio Enterprise

このチュートリアルでは、現在のタスクの作業を中断して、別の作業項目のチームメイトをブロックしているバグを直ちに修正する方法について説明します。 バグを修正した後、修正プログラムをレビューするように同僚に依頼し、レビューに合格したら修正プログラムをチェックインして元のタスクの作業を再開できます。

現在の作業を中断する

バックログ項目の作業中に、チームメイトをブロックする別のアイテムのバグが見つかる場合があります。 慣れている領域であれば、バグを修正するタスクを作成し、自分に割り当ててすぐに作業することができます。

新しいバグに対する作業を開始する前に、現在の作業がチームのサーバーの安全な場所に保存されていることを確認する必要があります。 Visual Studio のチーム エクスプローラー[担当作業] ページで、[中断] を選択してサーバーに保存します。

  • コード、テスト、およびその他のファイルに対する変更を含む実行したすべての作業。

  • 開いているソリューション、ウィンドウ、ブレークポイント、ウォッチ ウィンドウ変数など、Visual Studio の各種状態。

これでワークスペースがきれいになったので、新しいタスクを [使用できる作業項目] から [処理中の作業] にドラッグします。 修正プログラムを調査して作成する準備ができました。

注意

作業コンテキストは、[担当作業] ページに [処理中] と表示される作業項目にリンクされています。 [中断][再開] を使用すると、異なるタスクをすばやく切り替えることができます。 開いているソリューションとファイル、コードの変更、Visual Studio のレイアウトもすべて一緒に切り替えられます。

現在の作業を中断して異なるタスクの作業を開始するには

作業コンテキストを切り替えます。

  1. 作業するプロジェクトにまだ接続していない場合は、プロジェクトに接続します

  2. チーム エクスプローラー[ホーム] ページで、[担当作業] を選択します。

  3. [担当作業] ページの [処理中の作業] セクションで、[中断] を選択します。

  4. 表示されるボックスで、必要に応じて、この中断する作業セットに付ける名前を指定し、[中断] をクリックします。 項目が [中断されている作業] の下に表示されます。

    中断している一部の作業のスクリーンショット。

  5. [使用できる作業項目] から [処理中の作業] に作業項目をドラッグします。 または、以前に中断した作業項目を [中断されている作業] からドラッグすることで、その作業項目に切り替えることもできます。

    自分に割り当てる作業項目が [使用できる作業項目] に表示されない場合は、次のことを実行できます。

    • [新規作成] を選択して、新しいタスクなどの作業項目を作成します。
    • [クエリを開く] を選択して、別のクエリを選択します。

ヒント

[処理中の作業] の項目は、現在のコード変更と Visual Studio 状態にリンクされます。 Visual Studio で作業を整理できるように、あるタスクから別のタスクに切り替えるときは、適切な項目が [処理中の作業] 状態であることを確認してください。

バグを調査する

新しいバグを開いて、説明を読みます。 この例では、テスト チームのメンバーによる説明に、支払い済みの請求書に誤って未払いのフラグが設定される場合があると記載されています。 ラボ環境のスナップショットがバグ作業項目に添付されます。 テストが実行された仮想マシン (VM) を開き、間違った請求書を表示して、IntelliTrace ログをさかのぼって調べます。 次のメソッドまで不具合をトレースできます。

public class LocalMath
{
    public static bool EqualTo(double a, double b)
    {
        return a == b;
    }

IntelliTrace ログから、パラメーターの値にごくわずかな差異があるためにメソッドが false を返す場合があることがわかりました。 浮動小数点演算ではこの種の丸め誤差が避けられないこと、そして浮動小数点数が等しいかテストするのは望ましくないことはご存知かと思います。

テストを強化してエラーを示す

バグが見つかるということは、単体テストに穴があったか、またはテストがユーザーの実際のニーズに合致していなかったということです。 したがって、バグを修正する前に、このエラーの存在を示すテストを追加します。

// Added 2022-02-02 for bug 654321:
/// <summary>
/// Make sure that number equality test allows for 
/// small rounding errors.
/// </summary>
[TestMethod]
public void TestDoublesEqual()
{
    // Allow a rounding error of 1 in 1000000:
    TestEqual(1, 1e-7, true); // Less than allowed error
    TestEqual(1, 1e-5, false); // More than allowed error
    TestEqual(1000, 1e-7, true); // Less than allowed error
    TestEqual(1000, 1e-5, false); // More than allowed error
}
private void TestEqual(double value, double error, bool result)
{
    // Try different combinations of error and value:
    Assert.IsTrue(result == LocalMath.EqualTo(value + error, value));
    Assert.IsTrue(result == LocalMath.EqualTo(value, value + error));
    Assert.IsTrue(result == LocalMath.EqualTo(value - error, value));
    Assert.IsTrue(result == LocalMath.EqualTo(value, value - error));
}

テストを実行すると、予想どおり失敗します。

等価テストの失敗を示す単体テスト エクスプローラーのスクリーンショット。

テストに合格するように修正する

次ようにコードを修正します。

public static bool EqualTo(double a, double b)
{
    // Allow for rounding errors.
    // For example, a == 2.0 and b = 1.99999999999

    const double allowedError = 1/1000000;
    return System.Math.Abs(a - b) < allowedError;
}

今度はテストに合格します。

等価テストの成功を示す単体テスト エクスプローラーのスクリーンショット。

コード レビューを要求する

バグの修正に満足している場合でも、まだ作業をチェックインしないでください。 チームでは、コード レビューを使用して、コードの全体的な品質を高め、さらなるバグが発生するリスクを小さくします。 チーム エクスプローラーを使用して、チームメイトにコード レビューを要求します。

コード レビューを要求するには

  1. チーム エクスプローラー[担当作業] ページの [処理中の作業] で、[レビューの要求] を選択します。

    [新しいコード レビュー] ページが表示されます。

    [コード レビューの要求] ページを示すスクリーンショット。

    • [ビュー担当者の名前を入力してください] フィールドで、1 人以上のレビュー担当者を指定し、各選択の後に Enter キーを押します。
    • その次のフィールドで、必要に応じてレビューの名前を変更します。
    • その次のフィールドで、正しい区分パスが表示されていることを確認します。
    • その次のフィールドに、オプションの説明を入力します。
  2. [要求の送信] を選択します。

レビュー担当者に要求がメールで通知されます。

中断されている作業、シェルブセット、または変更セットのコード レビューも依頼できます。 変更セットの一覧を表示するには、ソース管理エクスプローラーを開き、[履歴] ボタンを選択します。

コード レビューを行う

レビュー担当者は、コード レビュー要求を承諾できます。 レビュー担当者はコードをレビューして、ファイル ブロックおよびコード ブロック レベルでコメントを記述し、コード レビューを返信します。 依頼されたレビュー担当者が多忙でコードをレビューできない場合は、レビューを拒否できます。

コメントで、レビュー担当者はテストに誤りがあることを指摘しています。 許容誤差は、定数値ではなく、入力値に対する指定の割合とする必要があります。 そのため、テストでは誤差と入力値を乗算する必要があります。

// We allow a rounding error of 1 in 1000000
// as a fraction of the value:
TestEqual(1, 1e-7, true); // Less than allowed error
TestEqual(1, 1e-5, false); // More than allowed error
TestEqual(1000, 1000*1e-7, true); // Less than allowed error
TestEqual(1000, 1000*1e-5, false); // More than allowed error

ヒント

チーム メンバーは、テストをディスカッションの焦点として使用しています。 テストが正しく十分である場合、コードもそうなります。 コードとは異なり、テストはそれぞれ別のケースを表しています。 そのため、多くの場合、テストについて話し合う方がコードについて話し合うより簡単です。

コード レビューを行うには

  1. チーム エクスプローラー[担当作業] ページの [コードのレビュー] セクションでコード レビューを右クリックし、[開く] を選択します。

    [コード レビュー] ページが表示されます。

    [コード レビュー] ページのスクリーンショット。

  2. [コード レビュー] ページでは、以下の操作を実行できます。

    • [レビュー担当者の追加] をクリックして、他のレビュー担当者をコード レビュー要求に追加します。

    • 各ファイル リンクを選択して、この作業項目に対して更新されたファイルの変更を表示します。

    • [コメント] を使用して、作成者および他のレビュー担当者と変更について話し合います。

      コメントを追加するには:

      • [Add Overall Comment](全般コメントの追加) を選択して、レビューに対する全般コメントを追加します。
      • ファイルを表示するときに、コードの行またはブロックを選択し、右クリックして [コメントを追加] を選択します。

      各コメントを追加したら、[保存] を選択するか、Ctrl + Enter キーを押します。

  3. コメントの入力が完了したら、[コメントの送信] を選択して、投稿が作成者や他のレビュー担当者に表示されるようにします。

コード レビューに応答する

レビュー担当者からコード レビューを受け取り、応答します。 レビュー担当者とは、何度でもコメントをやりとりできます。 レビューは閉じると終了します。

コード レビューに応答するには

  1. チーム エクスプローラー[担当作業] ページで、[コードのレビュー] セクションに移動し、要求をダブルクリックするか、要求を右クリックして [開く] を選択します。

    [コード レビュー] ページが表示されます。

    コードレビューへの応答のスクリーンショット。

  2. [コメント] セクションで、コメントを読み、必要に応じて返信します。 コメントに返信するには、[返信] をクリックし、表示されるボックスにコメントを入力して、[OK] を選択します。

  3. ファイルを表示してコメントを含むコード ブロックを確認するか、ファイルを編集またはコメントするには、[ファイル] サブセクションに移動します。 ファイルを右クリックし、次のいずれかを選択します。

    • 比較 (読み取り専用)
    • ローカル ファイルの編集
    • ファイルのコメントの追加

    コメントの横にあるチェック ボックスをオンにして、コメントが対処されたことを示すこともできます。

  4. コメントを送信するには、[コメントの送信] を選択します。

  5. 自分と他のレビュー担当者との間で互いのコメントに対する応答が終了して、レビューを閉じる準備が整ったときは、[レビューを閉じる] を選択して、次を選択します。

    • [完了] はレビューが終了したことを示します。
    • [破棄] はレビューを取り消すことを示します。

テストとコードを修正する

レビュー コメントを読んだら、提案に従って単体テストを修正できます。 今度はテストが失敗します。 これはコードがまだ正しくないことを示しています。

次ようにコードを修正します。

/// <summary>
/// Returns true if two numbers are equal.
/// </summary>
public static bool EqualTo(double a, double b)
{
    // Allow for rounding errors.
    const double allowedErrorMultiple = 1/1000000;
    double allowedError = (System.Math.Abs(a) + System.Math.Abs(b)) * allowedErrorMultiple/2;
    return System.Math.Abs(a - b) < allowedError;
}

再びテストに合格します。

ヒント

バグを修正するときは、コード開発時と同じ手順に従います。 失敗するテストを記述した後、テストに合格するようにコードを修正します。 テストに合格した場合にだけ、コードとテストをチェックインします。

次に、バグが検出されたテスト ケースに注目します。 バグを再現する手順は、テスト ケース作業項目に明確に記述されています。 手順に従って、請求書が正しく表示されることを確認します。

修正をチェックインする

修正したコードと単体テストをチェックインします。 バグの状態は [解決済み] に自動的に設定され、[担当者] の値は、バグを検出したテスト チームのメンバーに自動的に再度割り当てられます。 そのチーム メンバーが、バグが修正されたことを確認して、作業項目を閉じます。

修正をチェックインするには

  1. チーム エクスプローラー[担当作業] ページで、[チェックイン] を選択して [保留中の変更] ページを開きます。

    バグを修正するための更新プログラムをチェックインするスクリーンショット。.

  2. [保留中の変更] ページで、以下のことを確認します。

    • [含まれる変更] ボックスにすべての該当する変更が表示されていること

    • [関連作業項目] ボックスにすべての該当する作業項目が表示されていること。

  3. 変更されたファイルとフォルダーのバージョン管理履歴をみたときにチームがこの変更の目的を理解できるように、[コメント] ボックスに説明を入力します。

  4. [チェックイン] を選択します。

タスクの作業を再開する

元のタスクの作業を再開します。 コード変更はすべて、開いているウィンドウやブレークポイント、ウォッチ ウィンドウ変数のような重要な各種状態と共に、自分のワークスペースに復元されるため、作業にすぐに戻ることができます。

タスクの作業を再開するには

  • チーム エクスプローラー[担当作業] ページの [中断されている作業] で、元の作業項目を選択し、[再開する] を選択します。

    タスクを再開しているスクリーンショット。.

    または、中断中の作業をワークスペース内の保留中の変更とマージする場合は、[処理中とマージ] をクリックします。

作業を再開すると、Visual Studio は以下の項目を復元します。

  • 自分の開いているソリューション
  • 自分のコード変更
  • 開いているウィンドウの状態と位置
  • ブレークポイント
  • ウォッチ ウィンドウの変数と式
  • ブックマーク