- 追加された行はこの色です。
- 削除された行はこの色です。
&pgid; **Rspecとは [#n3541592] -Rubyの **目次 [#wd9223a3] #contents **第13回勉強会のネタ [#v74e806c] ネタもとは下記です。 **このページは? [#n3541592] 下記のネタを元に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 **目次 [#wd9223a3] #contents **日時 [#xf19520d] - 2007/10/12(金) 17:00くらい 〜 - 2007/10/12(金) 11:00くらい 〜 **参加者 [#b239fcd8] *本編 [#v60241bf] **Rspecとは? [#f97e1315] -Ruby上でビヘイビア駆動開発(Behavior Driven Development)を実現するためのフレームワーク -ちょっと待てビヘイビア駆動開発って何だ? **ビヘイビア駆動開発(Behavior Driven Development)とは? [#z81b03f0] -プログラムの満たすべき仕様(振舞)を記述してからプログラム本体の作成を始める開発手法 ''先生と生徒の対話'' -先生「BDDとはプログラムの満たすべき仕様(振舞)を記述してからプログラム本体の作成を始める開発手法のことです」 -生徒「それってテスト駆動開発と何が違うんですか?」 --「テスト駆動開発も、プログラムに対するテストを書いてから、プログラム本体の作成を始める開発手法でしょ?テストを振舞に言い換えただけでは?」 -先生「まあそういう側面もある」 -生徒「なんだそれ?金返せ」 -先生「いやいや言葉が違うだけでも大変な違いですよ」 --「「人類学者、言語学者として有名なエドワード・サピアの言葉に「『現実の世界』というものは、多くの限度にまで、その集団の言語習慣の上に無意識的に形づくられているのである 」という言葉もありますし、例えば虹の色の数っていうのは属する文化に...」 -生徒「うるせぇ」 -それってテスト駆動開発と何が違うのか? +まあやることはあまり変わらない。最初にテスト(振舞)を書いて、それにそってプログラムの実装をすすめていくっていうところは同じだから、言葉が違うだけって言っても言いすぎではない。 -なんだそれ?金返せ。 +いやいや言葉が違うだけでも大変な違いですよ。 ++人類学者、言語学者として有名なエドワード・サピアの言葉に「『現実の世界』というものは、多くの限度にまで、その集団の言語習慣の上に無意識的に形づくられているのである。 」という言葉もありますし、例えば虹の色の数っていうのは属する文化に... -うるせぇ。 Rspec の狙いはプログラマにテストコードが設計であることを明確に 意識させることと、プログラマがテストコードをスムースに記述し 実行できるようになることです。 ''まとめ'' -テスト駆動開発とビヘイビア駆動開発における考え方の違いについてはあまりにも観念的になってしまうように思ったため、これ以上深追いはいないことにした。 -とりあえず以下が比較的分かりやすい要約。 Rspec の狙いは「プログラマにテストコードが設計であることを明確に 意識させること」と、「プログラマがテストコードをスムースに記述し 実行できるようになること」です。 そのために、RSpec は振舞定義用の DSL を提供し、様々なテスト 関連ライブラリや周辺ツールとの連携を積極的に行い、「統合テス ティング環境」となることを目指しています。 **もう一度Rspecとは [#t55f185f] -Ruby上でビヘイビア駆動開発(Behavior Driven Development)を実現するためのフレームワーク -プログラムファイルとは別に、それの振舞を記述するためのspecファイルを作成する。 -specファイルはドメイン特化言語を使用して記述する。 -specファイルはドメイン特化言語 (Domain Specific Language:DSL) を使用して記述する。 ちょっと待てドメイン特化言語って何だ? **ドメイン特化言語とは? [#wa75fe50] ドメイン特化言語 (Domain Specific Language:DSL) とは、特定の問題領域 (ドメイン) を 記述するために設計された「言語」です。RSpec が特化しているドメインは「開発対象の プログラムの振舞を記述する」という領域です。 -つまり特定の問題領域のための専門の言語 -Rspecは振舞を記述するためにrubyの言語を拡張して特化した言語。 --つまり特定の問題領域のための専門の言語 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|フランス語| |xml(ant)|フランス語| |rspec|弁護士の専門用語(日本)| -javaとrubyとantはそれぞれ別の言葉である。 -rubyとrspecは別の言葉ではない。rspecはrubyを特定の専門領域について効率的に表現するために、ruby内では普段利用しない語彙を使用している。 --javaとrubyとantはそれぞれ別の言葉である。 --rubyとrspecは別の言葉ではない。rspecはrubyを特定の専門領域について効率的に表現するために、ruby内では普段利用しない語彙を使用している。 -テスト駆動開発(Test Driven Development) -ビヘイビア駆動開発(Behavior Driven Development) -Rspecとは「プログラムの振舞 (behaviour)」を記述するためのドメイン特化言語 (DomainSpecific Language:DSL) を提供するフレームワーク」である。 -ビヘイビア・スペシフィケーション・フレームワーク 振舞設計フレームワーク テストコードのようなものを書き、それは実質テストケースのように利用するが、 それはテストケースではなく、振る舞いの設計を記述(プログラムがどう動くべき であるかを記述)したものである。 テスト 作成したプログラムが正しく動いているかどうか Rspec 設計 プログラムの振る舞いを記述する ↓ 上記を確認する方法としてテストケースを作成する インストール方法、 Wiki参照 **結論 [#n529f97b] -非常に観念的なところばかりが先行していて、実際上のメリットがあまり見えてこない。 -また乗るのは早いかな。という印象。 -まだ乗るのは早いかな。という印象。 --将来的に普及するかどうかも分からないし。 -まあこれの勉強会はまだ続けるけどね。 -まあ勉強会はまだ続けますけどね。