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

第1回 アジャイル開発ではドキュメントを書かないって本当?

福井コンピュータ株式会社 小島 富治雄(Microsoft MVP 2006 − Visual C#)
2006/02/22

■■アカウンタビリティは大切■■

ところで滝ちゃん、話は変わるけどな。「責任」には2つある、って知ってるか? 次の2つや。

  • リスポンシビリティ(responsibility)
  • アカウンタビリティ(accountability)

 アカウンタビリティいうたら、「説明責任」いうやっちゃ。知ってるか? 説明責任。

   
はい。ニュースなどで政治家がよく問われてるやつですよね。
   

そそそ。「消費税上げるんやったら、消費税を上げる必要性について、政府は国民に対して説明責任を果たしたらんかい」とかいうやっちゃわな。

 例えばな、滝ちゃん。次の「家の購入」のケースでは説明責任は果たされてると思うか?

 ハウス・メーカーに家を建ててもらうとするわな。家いうたら一生に一度のごっつい買い物や。ああでもない、こうでもないと一所懸命交渉して、やっとのこと契約書を交わしたと。ほいでもって家が出来上がったとせんかい。

 ところが夢のマイホームに住んでみたら、なんとのう住み心地が悪いわけや。冬は寒いし、夏は暑い。こんなはずやない、「快適な家をお願いします」いうてあったはずや、とまああきらめきれずにハウス・メーカーにクレームを付けてみたと。ほんなら、ハウス・メーカーからの返事がこうや。

 「いえ、ちゃんと契約書どおり、設計図どおりの家ですから。ほら、例えば断熱材の量なんかは設計図のここにちゃんと書いてますよ。後からそんなこといわれても困ります」

 ハウス・メーカーの人にケツまくられてしもうた格好や。

 ……これはまさに、コミュニケーション・エラーが起こっとるわな。

 この場合、一概にはいえんかもしれんけど、ハウス・メーカーの人がちょっと無責任やわな。契約書や設計図を見たかて、素人である顧客には暖かい家になるか寒い家になるか、そんなんよう分からん。せやから、専門家であるハウス・メーカー側にある程度の責任がある。契約の前に、きちんと施主に説明して理解してもらう必要があったんと違うかな。

 ここでわいがいいたいのは、次のことや。

情報は、持っている側が責任を持って伝えるべきや。

 情報の提供方法には、次の2種類があるねんで。

 「契約書のここに書いてます」「ちゃんと読まなんだあんたが悪い」「理解できなんだあんたの自業自得や」やのうて、求められている情報を責任を持って相手に届ける。これが説明責任や。

【ポイントやで!】
情報いうたら持ってる方にコミュニケーションの責任があるんやで。
ほんまに説明責任を果たすんやったら、情報を持っている側からのプッシュ型でいこ。

■■ドキュメントとしてのソース・コードのアカウンタビリティ■■

さて、いよいよドキュメントとしてのソース・コードの話や。キーワードは、さっきいうたアカウンタビリティや。

 滝ちゃん、「ソース・コードじゃドキュメントの代わりにならへんのやないか!?」という疑問を投げ掛けとったな?

   

はい。ドキュメントとソース・コードじゃ役割が異なっているような気がして。

   

確かにな。

 ここでのポイントは、ずばり「視点の変換」や。

 ソース・コードの役割は、1つにはコンピュータに処理を教えることや。でもここで「視点の変換」や。

プログラミングとは:

 ソース・コードは、開発者同士のコミュニケーションにとっても、めっちゃ大切なもんなんや。

   

ここで1つ、良うないソース・コードの例を出すわ。

 聞いた話やけど、この世には1000行を超えるメソッドいうのが存在するそうや。世の中、まだまだ恐ろしいもんがあるもんやな。

 わいの例は、そこまではいかんけど…… まあ見たってや。

 わい実は、CAD(=製図のためのアプリケーション)のエンジニアなんやけどな。ちいとややこしい CAD のプログラミングの例を出すで。ええか? 「クリックされたときに、マウス・カーソルの近くにある直線を選択状態にする」というC#のプログラムや。

class Program
{
  ……中略……

  // クリック時に、これを呼ぶ
  bool ClickFunc02(double x1 /* x 座標 */, double y1 /* y 座標 */, int nn /* 数 */)
  {
    double[] a, b, c; // 配列
    int      n = -1;  // 初期値は取りあえず-1にしておく
    double   d = double.MaxValue;
                    // 最初は取りあえずdouble.MaxValueかな?
    int      i;
    double   d2, d3;

    // a、b、cにデータを読み込む
    a = new double[nn];
    b = new double[nn];
    c = new double[nn];

  ……中略(この間、数十行)……

    // 最も近い直線を検索する
    for (i = 0; i < a.Length; i++) // 全部の直線に対して
    {
      // 点と直線の距離の公式を使う
      d2 = Math.Sqrt(a[i] * a[i] + b[i] * b[i]);
      if (d2 != 0.0) // d2が0でなかったら
      {
        d3 = Math.Abs(a[i] * x1 + b[i] * y1 + c[i]) / d2;
        if (d3 < d) // d3がdより小さかったら
        {
          d = d3; // dにd3を入れておく
          n = i;  // このときの i を n に入れておく
        }
      }
    }

    // もし見つからなかったらほかの種類の図形を探す
    if (n < 0)
      return false;

    // データの中のn番目の選択フラグを立てる

  ……中略(この間、数十行)……

    // 最も近い直線を検索する
    for (i = 0; i < a.Length; i++) // 全部の直線に対して
    {
      // 点と直線の距離の公式を使う
      d2 = Math.Sqrt(a[i] * a[i] + b[i] * b[i]);
      if (d2 != 0.0) // d2が0でなかったら
      {
        d3 = Math.Abs(a[i] * x1 + b[i] * y1 + c[i]) / d2;
        if (d3 < d) // d3がdより小さかったら
        {
          d = d3; // dにd3を入れておく
          n = i;  // このときのiをnに入れておく
        }
      }
    }
    // データの中を探してi番目の直線を選択表示する

  ……中略(この間、数十行)……

    return true;

    /*  2005/12/31 by tetsu☆彡
     *   上の方で一度直線は見つかっているので下のループは
     *   要らないような気がするのですが……
     */

    /* 2006/01/02 by you.
       お疲れっす.いえ,念のためですYo.あくまで.
       # 紅白見ました? */

  }
}
良くないソース・コードの例(長すぎるメソッド)
「クリックされたときにマウス・カーソルの近くにある直線を選択状態にする」というC#のプログラム。
   

交換日記やないっちゅうねん! 「コーディングしたやつにも把握でけんようになって久しい……」っていう感じのソース・コードやな。

   

アジャイルって、こういうソースをリファクタリング(=ソース・コードを改良するアジャイルの手法)とかいってきれいにするんですよね。

   

そうそう、このループを別のメソッドにして……ってやってられるかいな! こんなもん。思わずノリツッコミしてもたがな。

 アジャイルでは、そもそもこんな複雑なソースにならんようにするんや。

サイバラの原則」でしたね! (※「NAgileで始める実践アジャイル開発 第2回 ソフトウェア開発をシンプルにする考え方のコツ」を参照してね by 滝)

 

 INDEX
  開発をもっと楽にするNAgileの基本思想
  第1回 アジャイル開発ではドキュメントを書かないって本当?
    1.アジャイル開発ではドキュメントを書かないの?
  2.アカウンタビリティは大切
    3.ソース・コードのアカウンタビリティとは?
    4.ソース・コードにアカウンタビリティを持たせよう!
    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 記事ランキング

本日 月間