ソフトウェアの自動テストについて

http://d.hatena.ne.jp/hyoshiok/20100312#p1

楽天の技術理事の人が自動テストの手法を紹介


米国なんかの大規模ソフトウェアはちゃんと自動テストしてたんですね。
新卒のころ、少しだけハードウェアの業界にいたんですが、
テストは入力と出力を定義したものを流して自動テストしてたんですよ(テストする機械がある)
去年FPGAをちょっと試した時も、テストは自動でやるのが当たり前の世界


しかしソフトの世界は、テスト仕様書を書いて、テスターにテストさせて結果を障害台帳につけて
という「やりました」という言い訳を作るための仕事みたいで、なんか違うなああ
と長年思ってまして、


C#でブラウザ部品をつかってWEBサービスを自動巡回できるソフトを作って、その結果自動テストを行えるソフトを作ったんですが、
なかなか小規模な会社では自動テストが工程に乗らないですね。
あと、SIなんかは「自動テスト」とかエレガントなことを言ってる余裕はないんですよね。
まさに生きるか死ぬかって感じでw


コンピュータ将棋の場合は、明らかなバグがでるのはまだ「解りやすい」方で、
動いているけど、なんか弱いというレベルなので、通常のソフト開発よりははるかに難しいですね。
自己対戦で勝率を見るなんてのは、ある意味、自動テスト。
ボナメソは、プロの棋譜を入力したら、強い手を生成することが目的とすると
ある意味、自動テストを繰り返すことで、強くなる自律的なシステムと言えると思います


FruitChessのソースを読んでいて勉強になったのが、様々異常ケースをアサートでできる限り実装しているんですね。
C言語の場合、配列を超えたら暴走なんてことにもなりますから、
コードを書くときに、コード自体にテストするコードを入れながら書いてるんですね。
そしてこのアサートは、リリースでビルドすれば速度にもサイズにも影響を与えない。


自動テストが用意されてないシステムはレガシーシステムである