babie steps

作業療法記録

Test::More - プログラミング中に湧くアイデアを書き留める

Test::More - LazyLoadLife」について、角谷さんに「詳しく」と希望されたのだがうまく書けない。ので、まずいまま書く。ここらへんを突き詰め体系化すれば、プログラミングスタイルに小さい変革を起こすことができると思うのだが、私には荷が重い。まぁ、交響チラシの裏に書いておけばミームはいつか誰かが咲かせてくれるだろう。


Perl のテスティング・フレームワーク Test::More の機能・特に SKIP, TODO ブロックが、TDD(BDD) や 過去はまつもとさん、昨日は西本さんが漏らしていた「TDD でアイデアが失われていく」というハッカーの悩みの一助になるのではないか? と考えたのだ。


まずは、Test::More の リファレンスの SKIP, TODO の項を読んで欲しい。……読んだ? この機能が揮発性のアイデアを書き留めておくのに丁度良いのでは? ということだ。


BDD に関してはこういう機能が助けになるのは間違いないかな。散漫に浮かぶ仕様を書き留めておくことができ、テストを走らせるたび残りタスクを「見える化」するのに役立つ。ただ、Test::More はどのテストも分け隔てなくのっぺりと書いていくスタイルがイヤンなので、Test::Unit 系のフレームワークに取り込まれる形が好みだ。あぁ、こういうケースで「.NET 系言語の属性」や「Javaアノテーション」が役に立つのかな? Ruby勉強会@関西-6 で・かずひこさんによる・TDDチュートリアルで、高橋さんと喋った時は「アノテーションなんて要らん、メソッド名を test_* にする規約で充分じゃん」と思っていたのだが。todo_* でも充分か?


ハッカー(オールド・タイプ?)の悩みに対する回答としては、Test::More は充分でない。アイデアは仕様以外にもいっぱいあるからだ。しかし、ただひたすらにプログラムを書くという行為は、恐らくアイデアを相当に失っているのではないかと思う。少なくとも私は種々雑多なアイデアを片っ端から忘れていく。そこで腰リールですよ! 2週間ぐらい試しましたがかなりいい。定期的な GC が必要だけど。 図によるメモも必要だと思うのでスケッチブックなり携帯ホワイトボードなりで担保。
(追記:ハッカーが TDD で失うのはアイデアでなくリズムだな。一心不乱に打ちこむ集中力。TDD は TDD で心地よいリズムがあるんだけど。音楽には例えれば…例えなくてもいいか。あー TDD は事故を起こさないように制限速度で確実に走り長距離でのゴールを目指す方法だった(この例えはペアプロで使われたような気がするが TDD にも当てはまるよな)。やっぱ仕事用か。いやいや、やっぱり保守を考えるとテストがあるとないとは全然違うのだった。オープンソース・ソフトウェアにも必要でしょ?保守。)


SKIP, TODO はインターフェイス・アイデアには有効だが、アルゴリズムやデータ構造のアイデアは書けないと思い至った。あぁ、TDD (BDD) はインターフェイスの視点からプログラムを眺めているのだな。「プログラム=アルゴリズム+データ構造+インターフェイス」か。
(漫画版『陰陽師』の安倍晴明気分)