テスト専門チームって今後どうよ?

下でOffice Spaceを紹介しているのは、「このご時世にソフトウェアテストチームがどれくらい必要なのか?」を考えてみたかったから。

分業制度

昨日書いたネタより抜粋。

  • ロジックの設計をするSEがいる
  • それをもとにコードを「紙に手書きする」プログラマがいる。専用の用紙があったのだ。
  • その紙を元にコードを入力するコーダ→コードは80桁のカードに入力
  • プログラマはカードの束をカードリーダに突っ込む
  • バッチ処理コンパイルされて、結果がリストに出力される
  • コンパイルが通らない場合はプログラマが原因を突き止めて、修正したコード入力をコーダに依頼する
  • 以下繰り返し[*1]

これは20年前のプログラミング光景なんだけど、Office Spaceで描かれているソフトウェアテストチームのやっていることも、実は大差ない。

  • ソフトウェアを開発するチームがいる
  • テスト手順書(TPS Report)を書くテストエンジニアがいる
  • テスト手順書に従ってテストするチームがいる
  • テストが通らないと、開発チームに「テスト通ってないよ」という通知がいく

タイムラグ

テストの内容にもよるだろうけれど、データベース更新を伴う結合レベルのテストだと、機械でやっても一件あたり0.5秒。Javaな人達でEJBなんか使ってると一件あたり1-2秒はかかるんじゃないかな。

手順書で人間に指示するような仕事場だと、一件あたり5分はかかるでしょ。2000件のテストなら、1万分。

  • 10人で分担して1000分。16時間ちょい。残業しまくっても二日はかかる。
  • 20人で分担して500分。8時間ちょい。これなら一日で終わるかも。

だとしても、開発チームに「テスト通らず」という悪い知らせが届くのには丸1日かかるわけだ。そして悲しいことにテストチームはなぜテストに通らなかったのかの検証とかデバッグとかはしてくれない。それらは開発チームの仕事だからだ。つまり、テストが始まってからデバッグに着手できるまで1日か2日のタイムラグが生じることになる。これでは20年前にプログラマとコーダが別人だった頃と大差ない。

Railsはここでもすごい

このあたりを解決するのがTDDテスト駆動型開発なんだけど、Railsは最初からTDDに必要な機能を装備している。JavaでTDDしてた頃はJUnitdbUnitとかMockObjectとかごちゃごちゃ組み合わせて環境を作るのに数日かかったけど、Railsはインストールするだけ。ありがたい限りだ。

さらにcontinuous_builderをインストールすれば、subversionにコミットした瞬間に全部のテストが勝手に実行される。テストが通らなければ、担当者にメールが飛ぶ。ありがたい話だ。

そういう時代なのに...

テスト専門チームを置くということにどれくらいの意味があるのかなぁ。

(答)雇用確保です