プログラマーにとってのテストの重要性
優れたエンジニアはテストコードをとても重視している、という話を本人たちから直接聞く機会が最近ありました。
オープンソース会の重鎮として知られる楽天のよしおかひろたかさんは「下手なドキュメントを書くくらいだったらテストコードを書くべきだ」「ソフトウェアはテストコードと本体のコードの両方が必要。テストコードがないのは未完成品」と、テストコードの重要性を話してくれました。「全部書き直したいような(他人の)ソースコードを見たときでも、テストを書いていると心が落ち着いてくる(笑)」(吉岡氏)。
JavaのフレームワークSeaserの開発者などで知られるひがやすを氏は、コードレビューのときに「テストコードを見る」ことがほとんどなのだそうです。「テストコードがちゃんと書けていればOK」(ひが氏)。
これは1月30日に行われた「Source Code Reading Workshop Japan 2010」で聞いたお話。レポート記事は@IT情報マネジメントの記事「ソースコードリーディングワークショップ2010を開催 すぐに使えるソースコードの読み方を指南」で読めます。
その数日前には、ソフトウェアテストシンポジウム(JaSST)が主催したイベント「JaSSTソフトウェアテストシンポジウム-JaSST'10 Tokyo」も行われており、1月末はソフトウェアテスト関連が盛り上がった時期でした。
テストエンジニアが開発現場をポジティブに回す
ちょうどその1月の終わり頃、海の向こうでは著名なプログラマーとして知られるジョエル・スポルスキー(Joel Spolsky)氏がブログ「Joel on Software」で「Why testers?」というエントリをポストしていました。
スポルスキー氏はテストエンジニアの重要性について次のように書いています。
For programmers, getting better at what you do requires quick feedback, positive and negative, on what you've just done. The faster you get the feedback, the faster you'll learn.
プログラマーにとって、作業したことに対してポジティブであれネガティブであれ素早いフィードバックを求めることが向上につながる。フィードバックがすぐに得られれば、それだけすぐに学べるからだ。
だからスポルスキー氏は社内にテストエンジニアを置くのだそうです。
A great tester gives programmers immediate feedback on what they did right and what they did wrong. Believe it or not, one of the most valuable features of a tester is providing positive reinforcement.
優れたテスターはプログラマーの作業に対してそれが正しいことだったか間違ったことだったのかを即座にフィードバックする。信じてくれないかもしれないが、テスターの大きな価値の1つはポジティブな応援をしてくれることなのだ。
テスターはバグ出し要因としてプログラマーからは嫌われがちなポジションですが、スポルスキー氏は開発現場をポジティブにする役回りとしてのテストエンジニアの働きを評価していることが分かります。
しかし残念ながら米国でもテストエンジニアとしてのキャリアはあまりよく知られていない、ともスポルスキー氏は書いています。そこでどのような人がテストエンジニアに向いているのか、スポルスキー氏は以下の要素を挙げています。
- 科学的
- パズル好きで、解き方を一日中でも考えているような人
- 方法論(Methodology)を考えるのが好きな人
- ソフトウェアやコンピュータの仕事を好む人
優れたエンジニアたちがテストコードやテストエンジニアを重視していることは、日本でも米国でも変わりがありません。そして前述のイベントなどに参加してみると、多くのエンジニアのあいだで、こうした認識をもっと共有しようという機運が盛り上がっているように感じました。