TDD は企画には使うなってことでいい?

by tanabe on March 31, 2008

あかさたさんの「TDD は新規性の高いサービス開発には適さない」にとても同意。

What(何を作るかっていうゴール) が決まっているかどうかに依存するってことだよね。つまり、naoya さんが言う「新しい機能を作っているときや、新しいサービスを作っているとき」は設計でも実装でもなく、本質的に企画の状態だから TDD とか関係ないと。たまたまコードで表現できる人だから企画をコードで検証している(プロトタイプ作りながら取捨選択してサービスや機能をデザインしている)だけなんでしょう。

個人的に今まで一番「BDD/TDD すばらしい!」と感じたのは、ある機能用のライブラリを書いているとき。開発時の制約で VB6.0 を使っていたんだけど、Collection にイライラしたので Ruby の Array を移植した。

まず、要素の追加とか要素へのアクセスとかの基本機能についてこつこつとテストを書いて、それだけクラスへ実装し、その後、少しずつメソッドを増やしていくという方法で書いていった。

本当にふつうの手順で順を追っただけなのだけど、最終的に完成間際の状態での開発スピードは気持ちがいいくらい速くて(当社比 5 倍くらい自分が凄腕に思えた。)、気にいらない部分のインタフェースを変更したり、実装を多少変えたりした場合にもあっという間に影響範囲の修正が終わっていく。

この時に、本当に「開発を駆動するためのテスト」なんだなぁと実感した。

最初の話から考えると、このケースもゴール(やりたいこと)は決まっていて、そこへ至る道筋がいくつかあるという場合だったからピタッとはまった。

一方、そのときには「ある機能」自体も BDD/TDD で進めたのだけど、これはあまりうまい結果にならなかった。簡易ルールエンジンのようなものを作りたくて、フレームワークのなんとなくのイメージに従って必要な機能を書いていった。

でも、あっちへ行き、こっちへ行きとふらふらした結果、全体としてあまりうまい構成ではないことに気付き、パーツをばらして再構成というようなことが何度かあり、けっきょくテスト主導での設計は諦めてトップダウンに設計をしてしまった。

Kent Beck 本はざっと読んだだけなので、根本的に誤解があるかもしれないんだけど、自分の体験からもあかさたさんの主張はとても納得が行く。上手に適材適所で使うようにしよう。(「いやいや、誤解しているよ。そういうケースもこうすれば TDD(もしくは別の何か) でうまくいくんだって!」という反論があるとうれしいなー。)

  

業務システムで見落とされがちだけど重要なこと

by tanabe on March 31, 2008

しかし、ソースコードには、さらに他の利用者がいることを忘れてはいけません。2、3ヵ月後、何かの変更を加えるために誰かがコードを読もうとするかもしれません。この利用者の存在は、軽視されがちですが、実際には最も重要なのです。コンピュータがコンパイルするのに余分な CPU サイクルがちょっとかかったからといって誰が気に留めるでしょうか。これに対して、プログラマがコードを修正するのに1週間かかったとなると、これは問題となります。コードを理解できれば、わずか1時間で済んだかもしれないのです。

プログラムを動作させようということに必死で、将来の開発者のことを考えていられないというのでは問題です。

「リファクタリング - プログラミングの体質改善テクニック」(Martin Fowler著) 第2章 リファクタリングの原則(P56)より

業務システムを長期で使っていくことを考えると、開発のコストをいかに小さく抑えるかというのは非常に重要だ。特に毎日の資金繰りに困らない程度の規模の企業であれば、初期投資のコストも大事だがメンテを 10 年続けたときに全体でいくらかかるのかという視点が大事になる。(あまりまともに試算されている例を知らないが。)

業務システムを開発するのに必要な視点は複数あるが、コンピュータサイエンスの視点よりも上位の視点(コンピュータサイエンスも含んでしまうという程度の意味であり、価値が上という意味ではない)としてこのメンテナンス可能性という視点が必要だと思う。

ひがさんが「メンテナブルなコード」という表現を使って同じような主張をしているが、「システムをメンテナンス可能にし続けておくための全体の仕組み」を作ることが重要だ。(たぶん、ひがさんはそれをフレームワークで実現できると考えているから、コードという表現になるのだと思う。こちらも参照。)

「どこで何をしているか」「ある目的のことを変えたいときはどこを変えるべきか」「ある箇所を変えた場合の影響はどの範囲に出るか」といった内容が容易に把握できるような状態を維持し続ける必要がある。そのために、ソフトウェアアーキテクチャやドキュメント(無用な誤解を避けるためにあえて設計書とも仕様書とも呼ばない)、人の採用、トレーニングプログラム、開発プロセスなどの全体の仕組みを最適化し続けていかなければならない。

それを実現するためには多くのスキルが求められる。プログラマーであることを目的とするのではなくて、プロフェッショナルであることを目的とするならそのスキルを身に付けることが必要になる。(だって、自分でやらないと誰もやってくれないのがふつうだし。)

色々なツールを知ることや使えるようになることももちろん大事だけど、どんな目的に貢献させるのかを意識しながら複数のツールを組み合わせて活用していくスキルというのはこれからもっと重要になっていくと思う。

ということで、日々の非プログラミング系の仕事のプロセスをプログラミングに模して、さらにそれをリファクタリングしようという codemaniax さんのエントリを読んでいて共感したので、最近考えていたことをメモしてみた。これも衰えない技術だよな。

  

目的志向の要求ヒアリング

by tanabe on March 14, 2008

職場で要求のヒアリングについてのコメントをしたのでこちらにも転載。

ユーザが語る要求というのは、

  • 課題があって
  • それを解決したくて
  • 現行の仕組み(やシステム)の制約の上で実現する案が提案される というユーザの考え方のパターンを経て出てくるアウトプット
だと理解してます。

なので、ぼくがヒアリングするときは、

  • 「その機能がないために今困っていることは何ですか?」と質問して (課題の理解)
  • 「それはどうして困るんですか?」と質問して (本当の課題へのアプローチ)
  • 「つまり、こういうことですか?」(抽象化)「それはなぜですか?」(理由の掘下げ)「たとえばどういうことがありますか?」(具象化)をわからないことがなくなるまで繰り返す (課題の構造分析)
ということをします。

  

Amazon のアレはくれくれリストかあさましリストにでもしておけばいいのに

by tanabe on March 12, 2008

旧ウィッシュリストの混乱は、名前重要&説明不十分ということだよな。

どうせ名前変えるならくれくれリストとかあさましリストとか、その辺の意味合いが色濃く出るいやーな名前にしておけばよかったのに。

  

Amazon のウィッシュリストが「ほしい物リスト」になってた

by tanabe on March 11, 2008

並列プログラムの作り方」を追加しようとしてびっくり。

  

プレジデント誌の本特集。厳選300冊に3回も登場した本は?

by tanabe on March 11, 2008

帰りにふと NEWDAYS で PRESIDENT を見かけ、本の特集だったので即購入。

感想としては、皆「V字回復の経営」(三枝匡)が好きすぎて笑った。どんだけ三枝節が好きなのかと。いや、ぼくも好きですけど。

それにしても別々の人が挙げて三回登場はやりすぎだろう。これ世界の他の名著抑えてトップですよ。きっと。技術書で言ったら SICP 抑えて「ハッカーと画家」がトップみたいなかんじ。いや、たしかにそれも名著だし面白いけど、誰か止めろよ。という。

ということで、そんな大人気なくも選ばれてしまうくらい圧倒的におもしろい戦略と組織変革の教科書「V字回復の経営」。読んだことがない人は読みましょう。

V字回復の経営
V字回復の経営
posted with amazlet on 08.03.11
三枝 匡
日本経済新聞社 (2001/09/17)
売り上げランキング: 1615

そんなところを抜きにしても今回の本特集は十分価格の元を取れる良い内容だった。

いくつかの記事から抜き出すと、

小城武彦さん。全体にバランスのよい選択で参考になった。特に「経営戦略の論理」(伊丹敬之)は書名は既知で未読だったので読んでみようと思う。「V字回復の経営」に「今ある経営書の中で最高の一冊」という熱いフレーズが付いていたのに笑った。

経営戦略の論理
経営戦略の論理
posted with amazlet on 08.03.11
伊丹 敬之
日本経済新聞社 (2003/11)
売り上げランキング: 9265

成毛眞さん。「眠れない一族」(マックス)これは単純におもしろそうだった。さらりとこういうのを入れる成毛眞さんのセンスに完全に釣られた。「致死性の不眠症の起源を探るうちに80万年前の食人習慣にたどりつく。」「科学ホラーともいうべきノンフィクション」うーん。おもしろそうで、クラクラする。

成毛さんはしっかり「競争の戦略」(ポーター)、「イノベーションのジレンマ」(クリステンセン)、「経営者の条件」(ドラッカー)なんかが挙がっているところもポイント高い。ふと気付くと「コンテナ物語」(レビンソン)というよくわからないけど魅力的なタイトルも挙がっているし。

眠れない一族―食人の痕跡と殺人タンパクの謎
ダニエル T.マックス 柴田 裕之
紀伊國屋書店 (2007/12/12)
売り上げランキング: 205

内永ゆか子さん。春樹、好きなんだなぁw ねじまき鳥とかカフカとか、好きでもいいけど、ここで書かんでも。

米倉誠一郎さん。「GMとともに」(スローン)、「組織は戦略に従う」(チャンドラー)、「エクセレント・カンパニー」(ピーターズ)。あるべき PRESIDENT 誌の姿としてある意味安心を覚える内容。一人はこういう人がいないと。そしてまた春樹。

山崎元さん。「戦後日本経済史」(野口悠紀夫)、「行動経済学」(友野典男)、「日本語の作文技術」(本多勝一)、三冊共未読。

戦後日本経済史 (新潮選書)
野口 悠紀雄
新潮社 (2008/01)
売り上げランキング: 393

福澤一吉さん。議論というものについてのモデルの話がおもしろそう。とりあえず、ご本人の「議論のレッスン」を読んでみよう。

議論のレッスン (生活人新書)
福澤 一吉
日本放送出版協会 (2002/04)
売り上げランキング: 2312

買ったプレジデント自体はこれ。