XP (エクストリーム プログラミング)


石のスープ式 XP 導入法

石のスープ式 XP 導入法


# 以下は、XP-jp メーリングリストで話された内容に一部加筆したものです (ジョークネタです)。


現在「しなーっと (*1)」「みんなでテスト・ドリブン・デベロッパー (謎) を目指そう運動」を推進中です。


(*1) 「ひそかに」「こっそりと」の意味の福井弁。


あくまで、この「しなーっと」というのがポイントです。


例えば、『XP (エクストリーム・プログラミング)』も『TDD (Test-Driven Development: テスト駆動開発)』も知らない新人に C# などを教えるときに…


私 : じゃあ C# と .NET の勉強はじめよう…
えー。先ず開発環境のセットアップからね。
C# での開発に必要なのは、この Microsoft Visual Studio .NET 2003 ってやつね。それからこの Visual SourceSafe と、この "NUnit Addin for Visual Studio.NET" ってやつ。それだけ先ずインストールしてね。
新人: はい。

いきなり最初に『TDD』に必要なバージョン管理ツールと Unit テスト用のツールを入れさせちゃう訳です。

もう「デフォ」で。


ちなみにこの "NUnit Addin" ってやつを入れると、Visual Studio のメニューに "Run Tests" という項目が追加されます。

これを選ぶとコンパイラとリンカ、そしてテストが走って、それらの結果が同じ場所に出力されるようになります。

コンパイラ・リンカによる静的(スタティック)なエラーと NUnit による動的(ダイナミック)なエラーがシームレスに確認できるわけです。


で、新人には、
「実行ファイルを作成するときには、この "Run Tests" ってのを選ぶんだよ」
と教えたりします。

# この辺のツールは、後日、或る程度新人が Visual Studio に慣れてきた頃に、
# 「もっと便利なやり方を教えようか」
# と使ってみせます。


私 : …何となく文法は判ったと思うけど、実際に書いてみないと本当には理解出来ないよね。やっぱり体で覚えないと。
じゃあこの演習を一緒にやってみようか (隣に座ってしまう)。
新人: はい。
私 : 先ずどんなクラスを作るか仕様を決めないとね。
うーんと… 例えば、こんな風に (彼のキーボードを奪う) このクラスを呼び出すメソッドを作って (どんどん勝手に入力する)、「この Assert が成功するようなクラスを作る」ことにしようか。
新人: そうですね。
私 : じゃあ、先ずはコンパイルが通るようにしてみてよ (キーボードを返す)。

…暫くアドバイスしながら進めて…

私 : うん。うまく行くようになったけど、この二つのコンストラクタは処理がダブっているね。
初期化ルーチンを別に作って一つに(まと)めたいけど、折角コンパイルも通るようになったし、Assert にも成功するようになったんだから、この状況をなるべく変えないようにしてやってみようか…
新人: なるほど…

(以上、実際には福井弁で)

# 『ペアプログラミング』とか『テスト ファースト』、『リファクタリング』、『XP』のような「(なま)の言葉」は一切口にしないのがこつです。


# プログラマが無垢なうちに体に覚えこませて、何時か「口では『XP』を嫌がっていても体は正直なものよ、ついつい『TDD』をやってしまっておるではないか、愛いやつよのう」とか言うのが夢だったりして。


XP は、とても効果的で教育効果も高い開発プロセスですが、導入が難しいという声をよく聞きます。

「それじゃあ XP で開発をはじめましょう」とか「XP のプラクティスの一つ TDD を勉強してみましょう」などと大上段に構えてしまうと、初めから身構えてしまってうまく行かないこともあるようです。


そこで XP の導入を推進する方法の一つとして、上であげたように「しなーっと」XP をやってしまうのも「有り」かも知れないと思います。

気付いたときにはもう自然に XP をやってしまっているという…


XP の「三段階の習熟度レベル」

でいうと、もう行き成り「レベル 3」な訳です。


よく音楽家一家などで、子供がまだよちよち歩きの頃から楽器を持たせて、

「ものごころが付いた頃にはもう既にバイオリンを握っていたんですの」

などと(のたま)っているのがありますが、あれと似ているかも知れません。

プログラマとして一人立ちしたときには、もう根っからの XPer。


何時の間にか徐々に XP に慣れさせていくということで、これを「茹で蛙的 XP 導入法」とでも名付けようかと思ったのですが、念の為「茹で蛙」の意味を調べてみると…

【茹で蛙 (ゆでがえる)】
「蛙を熱湯に入れると吃驚して飛び出すが、冷たい水に入れて徐々に温めていくと茹で上がって死んでしまう。徐々に『異常』がエスカレートすると異常も異常と思わぬようになり、やがて悲劇的な結末を迎えるという喩え」

あんまり適当ではないようです。


取り敢えず、「なしくずし的 XP 導入法」ということにでもしようかと思っていたら、XP-jp メーリングリスト上で沢 さんという方が、『達人プログラマー (原題 The Pragmatic Programmer)』に茹で蛙の対比として紹介されている、

「石のスープ」

というエピソードから「石のスープ式 XP 導入法」という名前を付けてくださいました。