テストケースのそもそも

テストケースを書かないプログラマ、書けないプログラマは、そもそも違う。


「忙しくてテストケースを書いてるヒマがない」

とは、よく聞く話。
(xUnitで言うところの)テストケースの重要性については議論の余地はないと思うし、書いた方が良いと思います。むしろ「忙しいからこそ書くべき」だと思う。


ただ、今日なんとなしに気づいたのは、

 「テストケースを書くことができる」プログラムを組むことができる

という大前提が、重大(構造化・カプセル化とか副作用・依存性とか)。



例えば、バグが見つかって、「直せ!」と怒鳴ったとき、
2タイプの反応があります。

 1.「はい。10分で直します!」

 2.「はい。解析して影響範囲をテストしなければ
    ならないのでお時間ください。」

一見、2.の方が信頼できる誠実な姿勢のように感じる。

けど、1.の人は、バグの原因と影響範囲を既に特定している。たぶんブラックジャックばりに、10分後にはフィックスしているのだろう。
(1.は仕事をナメてる、とか、そういうことは議論しない。)

1.はテストケースを書かないプログラマ、2.はテストケースを書けないプログラマだ。(この違い、わかります?)


 テストケースを書くことができるプログラムを組めるなら、
  テストケースを書く必要が(あまり)ない。

 テストケースを書けるプログラムにはバグが少ない
  (関数型プログラムにバグが少ないと言われる所以?)。

 テストケースとは、結果であり、ただの最終確認作業であり、
  目的ではない。

 テストケースとは、プログラムの翻訳である。
  翻訳できないプログラムは、文章ではない。

・・・適当に表現してみたけど、言いたいことはそういうこと。


テストケースが書けるプログラムを組んで、テストケースを書かない。
これがテストケースの極みなのかもしれない。



(いや、ちゃんとテストケースは書きましょう。)


コメント
koba
2008/03/15
> 2.「はい。解析して影響範囲をテストしなければ

うっ・・・見事に2のヒトですw。
まず時間稼ぎから入るというw。
でも、年の功なのか、だいぶ見通しのいいロジックが書けるようにはなった気がします。
(痛い目にあった数だけ、学習はしているみたいで。)

”テストケース重要。”

# 今日も仕事中。
hmori
2008/03/15
>テストケースとは、プログラムの翻訳である。
その通りですね。テストケースは設計の一部という解釈です。
残念ながら製造完了してからテストケースを書くというPRJをよく見ます。
武田ソフト
2008/03/16
私も設計書を書かなくなってから、テストファーストはしてないっす。テストケースは、設計書ですね。
konta
2009/06/02
突然ですみません。
(他のエントリも読んでみて、どうしても武田さんに
 聞いてみたくなりました)

例えばERPとかSCMの受注データなんかで
項目数が数百になるようなシロモノの
ユニットテストって、
どのようにテストコード書かれますか?

私は、Excelで受注明細データを作って
POI経由などでデータを流し込むツール作って
テストしたりしてました。
CRUDだけのテストだと、大した苦労ではないのですが、
数十の項目からなる分岐のテストとなると
生のテストコードではあまりに保守性が悪く
とても現場では耐え切れませんでした。

バグならいいのですが、
仕様追加が入ったときのデグレのカバーには、
生のユニットテストだけでは厳しいと思っています。

テストファーストという技法にはとても興味があるのですが、
上記のような側面での現実感がいまいちもてません。
武田ソフト
2009/06/02
kontaさん、コメントありがとうございます。
確かにパッケージでxUnitは厳しい場面ありますね。
kontaさんがやってらっしゃるように、目的が果たせればツールはなんでもよいのではないでしょうか。
テストファーストは、テスト(実行可能な仕様)を実装の前に作っておく、ということだと思うので、あまりツールに縛られる概念ではないと思います。
匿名さん
2010/06/03
テストコードというのは、以前つくった機能が、機能の追加や変更などによって副作用的に破壊されたときに、それを検知させるために仕込んでおくものです。

コメントしてください
お名前:
入力しなければ「匿名さん」。20字以内。

メール:
入力しても表示しません

URL:
入力すればリンクが貼れます


コメント: