Ruby on Rails/第12回勉強会 - Rspec概要 http://www.ark-web.jp/sandbox/wiki/245.html
Ruby on Rails/第12回勉強会 - Rspec概要
このページは? †
下記のネタを元にRspecについて勉強してみるページです。
- Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)
http://jp.rubyist.net/magazine/?0021-Rspec
- File: TUTORIAL.ja
http://kakutani.com/trans/rspec/TUTORIAL_ja.html
- 今回は第一回ということでRspecの基本的な考え方についてのみを紹介します。
目次 †
日時 †
- 2007/10/12(金) 11:00くらい 〜
参加者 †
動画 †
http://www.screencast.com/t/hU4e6eUjGH
本編 †
Rspecとは? †
- Ruby上でビヘイビア駆動開発(Behavior Driven Development)を実現するためのフレームワーク
- ちょっと待てビヘイビア駆動開発って何だ?
ビヘイビア駆動開発(Behavior Driven Development)とは? †
- Q. ビヘイビア駆動開発(以下BDD)とは?
- A. プログラムの満たすべき仕様(振舞)を記述してからプログラム本体の作成を始める開発手法のこと
- Q. それってテスト駆動開発と何が違うのか?
- テスト駆動開発も、プログラムに対するテストを書いてから、プログラム本体の作成を始める開発手法でしょ?テストを振舞に言い換えただけでは?
- A. まあそういう側面もある
- Q. じゃあ、わざわざやる意味ないじゃん
- A. いやいや言葉が違うだけでも大変な違いだ
- 人類学者、言語学者として有名なエドワード・サピアの言葉に「『現実の世界』というものは、多くの限度にまで、その集団の言語習慣の上に無意識的に形づくられているのである 」という言葉もありますし、例えば虹の色の数っていうのは属する文化に...(略)
まとめ
- テスト駆動開発とビヘイビア駆動開発における考え方の違いについてはあまりにも観念的になってしまうように思ったため、これ以上深追いはいないことにした。
- とりあえず以下が比較的分かりやすい要約。
Rspec の狙いは「プログラマにテストコードが設計であることを明確に 意識させること」と、「プログラマがテストコードをスムースに記述し 実行できるようになること」です。 そのために、RSpec は振舞定義用の DSL を提供し、様々なテスト 関連ライブラリや周辺ツールとの連携を積極的に行い、「統合テス ティング環境」となることを目指しています。
もう一度Rspecとは †
- Ruby上でビヘイビア駆動開発(Behavior Driven Development)を実現するためのフレームワーク
- プログラムファイルとは別に、それの振舞を記述するためのspecファイルを作成する。
- specファイルはドメイン特化言語 (Domain Specific Language:DSL) を使用して記述する。
ちょっと待てドメイン特化言語って何だ?
ドメイン特化言語とは? †
ドメイン特化言語 (Domain Specific Language:DSL) とは、特定の問題領域 (ドメイン) を 記述するために設計された「言語」です。RSpec が特化しているドメインは「開発対象の プログラムの振舞を記述する」という領域です。
- つまり特定の問題領域のための専門の言語
RSpec はプログラムの振舞を記述する言語として、Ruby を拡張することを選びました。このような、DSL を定義する言語と DSL を実行する言語 (ホスト言語) とが同じである DSL の実装アプローチを「言語内 (internal) DSL」と呼びます。 ちなみに、DSL の言語とホスト言語とが異なるものを言語外 (external) DSL と呼びます。言語外 DSL の例としては、Java でよく使わているビルドツールの Ant が該当します。Ant は、DSL が XML であり、ホスト言語が Java である言語外 DSL と考えられます。
- Rspecは振舞を記述するためにrubyの言語を拡張して特化した言語内DSL。
- AntはJavaとは異なるxmlで記述された言語外DSL
- 比喩
java 英語 ruby 日本語 xml(ant) フランス語 rspec 弁護士の専門用語(日本)
- javaとrubyとantはそれぞれ別の言葉である。
- rubyとrspecは別の言葉ではない。rspecはrubyを特定の専門領域について効率的に表現するために、ruby内では普段利用しない語彙を使用している。
まとめ †
- 非常に観念的で、実際上のメリットがあまり見えてこない。
- 積極的にのっかていこうとは思わないなー。
- まあ勉強会はまだ続けますけどね。
続き †
tag: Ruby on Rails, 勉強会,テスト