The RSpec Bookをやってみる

インストール

% ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]

% rails -v
Rails 3.2.7

% rvmsudo gem install rspec
% rspec --version
2.11.1

% rvmsudo gem install cucumber
% cucumber --version
1.2.1

Hello RSpec & Cucumber

hello/5/features/step_definitions/greeter_steps.rbの Thenの行は本だと

Then /^I should see "([^"]*)"$/ do | greeting |
  @message.should == greeting
end

となっているけど、Cucumberを実行した時のエラー文に従って以下のようにしても動く。

Then /^I should see "(.*?)"$/ do | greeting |
  @message.should == greeting
end

今のところさっぱり意味がわからない。

Code Breaker

大雑把には使い方がわかった。確かにスペックファイルが準備されている状況でリファクタリングするのは楽だ。

ただ、リファクタリングの基本思想などがわからないので、なぜそのコードのほうが良いのかがわからない。(式 ? 真のとき : 偽のとき) という書き方はあまり好きじゃないのだけど。

Part 2 ビヘイビア駆動開発(BDD)

さっぱりわからない。アジャイル開発が良いという説明の部分はわかるし、顧客からフィードバックを頻繁にもらうべきだというのもわかる。でも、BDDの本質がわからない。カタカナ語が盛りだくさんでさっぱりだ!

SMARTな結果というのは良い。

  • Specific:何かが完了したことを知るのに十分な情報があることを意味する
  • Measurable:目標が達成できたかどうかを定量的に判断できることを意味する
  • Achievable:達成可能であることを意味する
  • Relevant:目的に関係あること(現時点での目標において適切であること)を意味する。
  • Timeboxed:目標が達成されていないときに、いつ時間切れになるかがわかることを意味する。

Part 3 RSpec

読み飛ばした。たぶん、使うようになってから読み返したほうが良い。

Part 4 Cucumber

Connextraフォーマットの説明は面白い。どういう役割・立場から、誰が何をするのか。そして、その理由は何かを明確にするための書式がconnextraフォーマットとのこと。

As a <role>
I want <feature>
So that <business value>

確かに学生にソフトウェアの要求分析させると非常に抽象的でコーディングにつながる要件を出さない(出せない)。これは使えるかも。

Part5 ビヘイビア駆動のRails

本のとおりだと、「WARNING: Cucumber-rails required outside of env.rb. The rest of loading is being defered until env.rb is called.」というwarningがでる。Cucumber-rails required outside of env.rb. The rest of loading is being defered until env.rb is calledを参考に追記。また、javascriptのライブラリがないのでgenerateコマンドを実行しようとするとエラーがでる。なので、execjsとtherubyracerをGemfileに追記。Cucumber実行時に database_cleaner というのも必要らしいので追記。

% rails new showtime
% cd showtime
% cp -p Gemfile Gemfile.org
% vi Gemfile
% diff Gemfile.org Gemfile
9a10,15
> group :development, :test do
> 	gem "rspec-rails", ">= 2.0.0"
> 	gem "cucumber-rails", ">= 0.3.2", :require => false
>       gem "database_cleaner"
> 	gem "webrat", ">=0.7.2"
> end
24c30,31
< 
---
> gem 'execjs'
> gem 'therubyracer'
% rvmsudo bundle install

RSpecとCucumberのファイルを生成。

% script/rails generate rspec:install
      create  .rspec
      create  spec
      create  spec/spec_helper.rb
% script/rails generate cucumber:install
      create  config/cucumber.yml
      create  script/cucumber
       chmod  script/cucumber
      create  features/step_definitions
      create  features/support
      create  features/support/env.rb
       exist  lib/tasks
      create  lib/tasks/cucumber.rake
        gsub  config/database.yml
        gsub  config/database.yml
       force  config/database.yml

実行確認

% rake db:migrate
% rake db:test:prepare
% rake spec
No examples matching ./spec{,/*/**}/*_spec.rb could be found
% rake cucumber
/usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby -S bundle exec cucumber  --profile default
Using the default profile...
0 scenarios
0 steps
0m0.000s

Webratすごい予感。

うっすらわかった気がするけど、これをどう使えば良いのかはまだはっきりしない。

文献調査の前準備「用語を知る」

卒業論文修士論文の提出時期にもよりますが、1〜2月に提出だとしても、そろそろ文献調査を完了させないとまずい時期になってきております。B4およびM2のみなさまにおかれましては文献調査の進み具合はいかがでしょうか?

とはいえ「やり方わかんねぇよ」「調べたけど全然文献がヒットしねぇよ」という方もいらっしゃると思います。論文自体を調べる方法は、各種論文データベース(Web of KnowledgeSCOPUSCiNii BooksGoogle Scholar)で検索すれば一発になってきました。

ただし、そもそも何のキーワードいれたら自分の探したい分野の論文が見つかるのか?これは結構難問です。そこで、私の探し方をいかにご紹介します。たいして独創的ではありませんが。

自分の所属研究室の卒業論文修士論文、博士論文を読む

自分の研究テーマと近い卒業論文修士論文、博士論文を読み用語を抜き出すのが一番楽です。用語の重要性(その論文ので扱っているテーマとの一致度)は、以下のとおりです。

  1. タイトルに登場する
  2. 概要に登場する
  3. 第一章(はじめに、序言)に登場する and 最終章(おわりに、まとめ)に登場する
  4. 本文に登場する

このとき、日本語だけでなく英語(あるいは他の言語)で、その用語を表すのかもメモしてください。卒業論文修士論文、博士論文のテーマそのものでなく、その論文で道具として使用している概念やアイデア、技術がご自身のテーマと関係ある場合は、その該当節だけを読めば十分です。

百科事典の当該項目を読む

百科事典(encyclopedia)は、多くの場合、その分野の第一人者が執筆しています。自分の知りたいことをぴったりと知るにはうまく使えませんが、その項目・分野の専門用語を仕入れる目的では非常に役に立ちます。どの大学図書館地方自治体の公立図書館にも1つか2つの百科事典はおいてあるはずですから、それの関連項目を読んでみましょう。

百科事典は自分が探す分野に特化していれば特化しているほど、的確な専門用語が手に入ります。たとえば、人工知能の分野についての用語を手に入れたいならば、平凡社の世界大百科事典を使うよりも、人工知能学会編の人工知能学事典の方が適切です。もし、身の回りに専門分野に特化した百科事典があればそれを使いましょう。

このとき、日本語だけでなく英語(あるいは他の言語)で、その用語を表すのかもメモしてください。そして、百科事典の場合は、その項目の執筆者自身が専門家ですから、その人の名前もメモしておき、文献調査の起点に使いましょう。

Wikipediaを使う

みんな大好きWikipediaも、百科事典の一つです。ただし、執筆者が必ずしも専門家とは限りません。Wikipedia自体を出典の根拠とするのは、まだ時期尚早ですが、Wikipediaを文献調査の起点とするのはうまい方法です。

Wikipediaのメリットはどこにあるかというと、各国語版にリンクが張ってある点にあります。まずは、日本語で思いつくままに自分のテーマと関係有りそうな用語を検索してください。そして、各項目を読んでみて本当に関係あるかどうかをチェックしてください。もし、関係有りそうだと思ったら、英語およびそのテーマにおける標準言語のページに飛んでください。そして、がんばって内容をチェックします。そうすると、自分が探したいテーマにおける専門用語をそのテーマの標準言語でどう表現するのかを収集することができます。

また、よくまとめられているページには出典や参考文献が列挙されていると思います。これも文献調査の起点として利用しましょう。さらには、そのテーマや分野の重鎮(第一人者)の名前が載っているいることがあります。それも利用しましょう。

教科書を読む

まったくの異分野の場合、百科事典を使うことすら難しいかもしれません。その場合は、複数の大学のシラバスで自分のテーマが属しそうな講義を探し、そこで指定されている教科書を流し読みしてください。複数の講義で同じ教科書が指定されている場合、その教科書は定番教科書である可能性が高いです。Amazonでその教科書を検索してください。版数が2ケタ言っているならば、間違いなく定番教科書です。安心して読みましょう。売れない専門書が版を重ねているというのはそれなりに理由がありますから、本の信頼性を測る一定の指標になります。

教科書の読み方は、論文の読み方をどうぞ。