オルタナティブ・ブログ > An Agile Way >

アジャイルに行こう!

TDD と IDE~コンパイラとQuick Fixは厳しい上司と有能な部下~

»

Eclipse を使って、TDD(テスト駆動開発)をしたときに、感じたこと。これを、エディタとコンパイラの組み合わせでやった場合と比べてみたい。

コンパイラのエラーメッセージは否定的だ。

  • ~が未定義です
  • ~が存在しません

ぼくは否定的な人間と会話するのを苦痛に感じることが多い。

  • ~がありませんが、作りますか?

「うんうん、作る作る」と思う。仕事はこういう提案ベースで行こうよ。

こういうIDEがあると、先に「そういう提案を出させるようなテストを書こう」という気になる。これが重要。つまり、

  • 作ったミス怒られる

という「コンパイラ=きびしい上司」パターンから抜けて、

  • ボケる提案されるおう、それで行こう

という「IDE=有能な部下」パターンに持ち込むのだ。

自分:assertEquals(3, add(1, 2));
IDE : add
がありません。作る?
自分:うんうん、できるとこまで作っといて。

これは、ボケとツッコミだ。うまくボケて、IDEに突っ込ませる。

これ、TDDの極意。

※かための書き物が2つ続いたので、ちょっとやらかいのを書きました。

書いた後で、ちょっと考えてみた。IDEとコンパイラの関係について。この2つのツールは、ソースコードという書き物を挟んで、人間とマシンの間にある。昔から、「マシンに対してコーディングするな。人が読めるようにコーディングせよ」などと言われていることからも、ソースコードというメディアは、「人間に読めて、かつ、マシンに読める」というちょっと面白い書き物である。(これがプログラミング言語という領域の面白さだ。)

コンパイラは、ソースコードに対してはReadonlyで、オブジェクトコードを出す。IDEは、ソースコードに対してReadWriteだ。ここが決定的な違い。上に書いたように、プログラマに対してQuickFixの「提案」ができるのも、場合によってはソースコードを編集する、という能力があるからだ。

IDEは、コンピュータに対してのソースコードではなく、「人間に対するソースコード」のあり方に対してアプローチできる!

ぼくが今開発に携わっているJUDE(http://jude.esm.jp/)というUMLエディタも、今後の方向性について考えるこおとがある。MDAのように、ソースコードをジェネレートする、という方向がある。しかし、これは、「マシンに対してのコード」を吐くことであり、先のコンパイラーと同じだ。ひたすら未定義だとか、シンタクスがずれている、とかの警告を発して、モデルを強制的にExecutableにすることになるだろう。JUDEは、そうではなく、MDAをあきらめても、「人間に対してのモデル」を優先し、人間に対してやさしく提案する方向に行きたい。つまり、マシンが読むコードに近い部分はほっておいて、人間のコミュニケーションと「考具」として。(これについては、長くなるので、また別の機会に)

Comment(0)