イントロダクション

2013/08/14

連載第1回目は、Ruby on Railsのテストに関連する基本的な概念とツールについて書きます。

そもそも「テスト」とは

image_for_test

日常生活で「テスト」と言えば、たいていは学校や塾の学力試験を意味します。ソフトウェア開発の文脈では、「テスト」は第一義的にはソフトウェアが正しく動作しているかどうかを確認する作業を指します。

しかし、ソフトウェアの開発者たちは「テストを書く」という言い方を頻繁に使用します。この場合のテストは、「あるソフトウェアのテストを行うプログラム」という意味です。

例えば、あなたの会社が会計システムの開発を受託したとします。納品前には人間が実際に操作してこの会計システムが仕様通りに動くかどうかチェックしますね。この作業が本来の意味での「テスト」です。しかし、開発中にも会計システムの全体あるいは一部をテストしなければなりません。この作業は繰り返し行われるので、当然ながら自動化したくなります。そこで開発者たちは「テスト」を書きます。すなわち、テストという名前のプログラムを作ります。

この連載で「テスト」という言葉は、ほとんど後者の意味で使用されることになります。

テスト駆動開発(TDD)とビヘイビア駆動開発(BDD)

テスト駆動開発(test-driven development; TDD)は21世紀になって広く普及したソフトウェア開発手法です。伝統的なソフトウェア開発では、ソフトウェアの全体あるいは一部ができあがってから手動でテストをしたりテストを書いたりしていましたが、テストを書いてからソフトウェアを作る、という風に手順を逆にする人々が現れました。この慣行には開発効率を上げる傾向があったので、「テスト駆動開発」という名前が与えられて理論化されました。

ビヘイビア駆動開発(behavior-driven development; BDD)は、テスト駆動開発から派生したソフトウェア開発手法です。本連載のメインテーマであるRSpecは、まさにBDDを実践するためのツールです。

BDDに具体的な特徴については連載の中で少しずつ触れていきますが、要点は「ソフトウェアの振る舞い(behavior)を自然言語(英語や日本語)で記述する」ということです。ソフトウェアの振る舞いは「仕様(specification)」と言い換えることもできます。仕様をコメントの形でソースコード上に残すことは、前世紀から行われてきた慣習です。しかし、仕様をテスト(プログラム)のメソッド名あるいはメソッドの引数として表現できるようにした点が新しいのです。

RSpec

Rubyの世界には、主要な3つのテストフレームワークが存在します。Test::Unit、MiniTest、RSpecです。

Test::UnitはRuby 1.8の、MiniTestはRuby 1.9/2.0のスタンダードライブラリです。MiniTestはTest::Unitと互換性を保ちつつ、BDDの要素を取り入れたものです。すでにRuby 1.8は過去のものになりましたので、現在ではMiniTestとRSpecが二大勢力であると言っていいでしょう。

RSpecは2005年8月に最初のバージョン(0.1.0)が公開されました。すでに8年の歴史を持ちます。角谷氏と諸橋氏による「スはスペックのス」という紹介記事がRubyist Magazineに掲載されたのは2007年のことでした。その時点でのバージョンは1.0.8。本稿執筆時(2013年8月14日)における最新版は、2.14.1です。RSpecの根本的な考え方に変化はないかもしれませんが、APIレベルでは相当な数の変更点があります。

RSpecのコアチームはすでにRSpec 3に向けて動き出しており、先月にはMyron Marston氏によるRSpec 3に向けての計画(日本語訳)が発表されています。

本連載では、このような変化を意識しつつ話を進めます。

Capybara

GitHub リポジトリのタイトルによれば、Capybaraは受け入れテスト(acceptance test)のフレームワークです。本来の「受け入れテスト」とはシステムの発注者が納品物が仕様に合致しているかどうかを確認する作業を意味しますが、ここでは別の意味で使用されています。

Capybaraを利用すると、開発者はWebブラウザによるシステムへのアクセスをシミュレートできます。例えば、人がWebページ上の「ユーザー名」というラベルを持つテキストフィールドに「taro」と入力し、「パスワード」というラベルを持つパスワードフィールドに「password」と入力して、「ログイン」ボタンをクリックした場合に何が起こるかをチェックできます。これがCapybaraの言うところの「受け入れテスト」です。

Capybaraの最初のバージョン(0.1)がリリースされたのは、2009年11月のことです。本稿執筆時(2013年8月14日)における最新版は、2.1.0です。

次回は

次回の掲載はいつになるか分かりませんが、Rails 4.0のアプリケーションを新規作成して、RSpecとCapybaraを導入し、「Hello World」的なテストを書いて、テストを実行するところまで進みたいと考えています。では、また。