レポート

「とちぎテストの会議」レポート

この記事を読むのに必要な時間:およそ 5 分

2010年7月17日に,栃木県北部の西那須野公民館に30名近くの人が集まり,とちぎテストの会議が開催されました。本稿では,本イベントのレポートをお届けします。

画像

本レポート写真協力:佐々木揚さん,中内章一さん

深夜のTwitterから始まった,とちぎテストの会議

本イベントは,2月ごろにTwitter上でTDD(テスト駆動開発)をめぐる議論が行われたことが発端となっています。同じ「TDD」という言葉を見たときに想像する内容が人によって大きく異なるらしい,ということがこれらの議論から見えてきたため,「それなら,様々な立場の人を集めて議論してみよう」というところから本イベントが企画されました。

和田さんによるTDD講座

テスト駆動開発の第一人者の和田さん@t_wadaと,当日発対面のリックさん(Ruby歴1年)によるペアプロ&TDD講座のデモンストレーションがありました。Rubyの世界でメジャーになりつつある,RSpecを使い,スタックを作る車窓からのTDDのサンプルを参考にテスト駆動開発にある5つのステップのデモンストレーションが行われました。

画像

1. テストを書く

まずはテストを書きます。テストを書くときは,結果の比較検証を行うアサート文から先に書き,「これをするためには何が必要か?」と問いながら,最後に初期化処理を書いていきます(アサート・ファースト)。「スタックが空かどうか調べる」では,「スタックは空か?( stack.empty?.should == true )」から始まり,次に「じゃあ,スタックが必要だから作ろう( stack = Stack.new )」と書いていきます。

2. テストを失敗させる

次にテストを実行し,まずはテストが失敗することを確認します。デモの環境ではソースコードを保存するたびに自動でテストが走り,結果がポップアップするようになっていました。アサートの行の失敗を確認するため,実装が空のStackを実装するところまで行います。

「まず失敗させる」というのは「テストコードがうまく動いているのか?」というテストのテストという意味があるため,一見無駄に見えても大事なステップになります。

3. コードを実装する

次にテストを通る最低限のコードを書いて実装します。最低限なので,ここでは常にtrueを返すように,empty?を実装し,うまくパスすることを確認します。これも「テストのテスト」の一環です。

4. テストが通る

テストが通ることを確認します。

5. リファクタリング

次にテストコードを見て冗長な部分を削っていきます。RSpecにある,テストコードを短く実装するための機能を使ったり,Rubyっぽいコードになるようにしていきます。「早すぎる最適化には注意が必要」とのことです。

1.2. 次のテストを書く

次のテストを書きます。「空のスタックのempty?はtrueを返す」というのを実装したので,次はこれの逆の「空ではないスタックのempty?はfalseを返す」を実装したくなりますが,これを実装するには「データを変更するメソッド」「内容を問い合わせるクエリーメソッド」の2つが必要となります。データ構造系のテストが簡単そうに見えて,少々大変なのがこの部分です。他のメソッドを先に実装する必要があります。

このような感じで,ペアプログラミングで進行していきました。一人でデモするのとは違い,デモ自体にも途中で間が入るため,とてもわかりやすいデモでした。テンポ良く「次になにをすべきか?」と,キーボードを持っていない側がナビを行ったり,初めての環境でも道に迷わずにコードが書けるというのがおもしろかったです。

著者プロフィール

渋川よしき(しぶかわよしき)

社内SE。ソフトウェアを中心に,ライフハック,インラインスケートなど,様々なコミュニティの運営に関わってきた。日本XPユーザグループには設立準備の時から。現在メインのコミュニティはとちぎRubyとPython温泉(系)で,ドキュメントツールのSphinxのコミュニティの設立準備中。趣味は技術文書の翻訳とLT。

Twitter:@shibukawa

ブログhttp://blog.shibu.jp

コメント

コメントの記入