連載
開発をもっと楽にするNAgileの基本思想

第3回 アジャイル開発のキモはフィードバック!

福井コンピュータ株式会社 小島 富治雄(Microsoft MVP for Visual Developer - Visual C# Jul. 2005 - Jun. 2007)
2006/09/27

■■設計と実装に対するフィードバック■■

ここで特に強調しておくが、アジャイルではフィードバックをとても重視する。

 例えば、設計や実装に対するフィードバックを重視するのぢゃ。設計や実装を極端なまでにレビューする(eXtreme Review)。そしてそれにより、極端なまでに設計や実装へのフィードバックを受けようとする。

 1つの例が、「ペア・プログラミング」という手法ぢゃ。この手法では、2人で1台のコンピュータに向かって一緒にプログラムを書く。Aさんのプログラムは、Bさんにより常にレビューされておる状態ぢゃ。Bさんがプログラムの間違いに気付けば即座に、Aさんにツッコミ(=フィードバック)を入れる。

 無論、ソース・コードに対するツッコミはペア・プログラミングによるものだけではないぞ。

 ソース・コードを書いてコンパイルをすると、文法的な間違いがあった場合には、ツッコミが入る。すなわち、コンパイル・エラーは、ソース・コードの静的なエラーに関するフィードバックぢゃ。

 それからVisual Studio 2005の「コード分析」という機能もそうぢゃ。こちらは、より詳細なツッコミを入れてくれる。

 また、プログラムの動的なエラーにツッコミを入れてくれるツールとしては、NUnitやVisual Studio 2005の「単体テスト」に代表される単体テスト・ツールがある。

 実際の例を挙げてみよう。次のソース・コード(C#)では、簡単なスタック・クラスをコーディングしようとしている。前半にあるのが、NUnit用のテスト・コードで、後半が実コードであるスタック・クラスぢゃ。

// テストのソース・コード
using サンプル;
using NUnit.Framework;

namespace サンプルテスト
{
  [TestFixture]
  public class スタックテスト
  {
    スタック target;

    [SetUp]
    public void SetUp()
    {
       target = new スタック();
    }

    [Test]
    public void 作成してみる()
    {
      Assert.AreEqual(0, target.Count);
    }

    [Test]
    public void Pushしてみる()
    {
      target.Push(10);
      Assert.AreEqual(1, target.Count);
    }
  }
}

// 実ソース・コード
namespace サンプル
{
  public class スタック
  {
    public int Count
    {
      get { return 0; }
    }

    public void Push(object newObject)
    {
    }
  }
}
テスト・コードとテスト対象であるスタック・クラス(C#)
 

 

まずこれに対してコンパイルを行ってみる。すると、コンパイラから「コンパイル・エラーなし」というフィードバックがある。

 次に、これにVisual Studio 2005の「コード分析」の設定をオンにして、再度コンパイルを行ってみる。

Visual Studio 2005の「コード分析」の結果
 

 

今度はたくさんのツッコミが入ったようぢゃな。ソース・コードを静的に分析し、まずいかもしれないところを指摘してくれるわけぢゃ。

 ちなみに、これをわしは、「ちゃうんけ系」のツッコミと呼んでおる。関西弁でいうところの、以下のようなツッコミぢゃ。

7 CA1801 : Microsoft Usage : スタック.Push(Object):Void のパラメータ 'newObject' は使っとらんのとちゃうんけ。
注:「ちゃ」にアクセント。

 

 

なぜ関西弁……。
 

 

さて次に、NUnitを起動して単体テストを行ってみようか。今度はどうなるか。以下では上と同様に、説明のためにわざとツッコミ風に表現してみるぞ。関西風と関東風の2バージョンぢゃ。

NUnitの実行結果「関西風バージョン」
注:図はイメージ(はめ込み合成)です。実際にはNUnitは関西弁では出力できません。
 

NUnitの実行結果「関東風バージョン」

注:図はイメージ(はめ込み合成)です。実際にはNUnitは、さまぁ〜ず・三村調(もしくは爆笑問題・田中調)のメッセージは出力できません。
 

 

参考までに、Visual Studio 2005の「単体テスト」の方のイメージでいうと、次のような感じかの。

Visual Studio 2005の「単体テスト」のイメージ
注:図はイメージ(はめ込み合成)です。実際にはVisual Studio 2005の「単体テスト」は関西弁では出力できません。
   

また関西弁かよ!

健二、ツッコミご苦労ぢゃ。

 ここでわしがいいたいのは、

実装は設計へのツッコミ(フィードバック)であり、
テスト(静的テスト・動的テスト)は実装へのツッコミ(フィードバック)

ということぢゃ。

 ちなみに、アジャイルなプログラミングでは、

というリズムが大切ぢゃ。

 ソース・コードを書くと、絶妙のタイミングで素早く相棒(ペア・プログラミング時の相手やコンパイラ、静的コード分析、単体テスト)からツッコミが入る。これが重要。「間の美学」とでもいおうかの。これがずっと繰り返されるのぢゃ。

 分かるかの?

なるほど!

【まとめ】
 

 INDEX
  開発をもっと楽にするNAgileの基本思想
  第3回 アジャイル開発のキモはフィードバック!
    1.団子屋にてアジャイルを語る滝
    2.女祖泥寺(めそどろじ)
  3.設計と実装に対するフィードバック
    4.「ツッコマレビリティ」とeXtreme Feedback!
    5.重要なのはフィードバックを受けようとする態度
 
インデックス・ページヘ  「開発をもっと楽にするNAgileの基本思想」


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 記事ランキング

本日 月間