shizuto on languages

言語好きの組込みプログラマが言語から言語じゃないものまで語ります。On y va!

RSpecについて

るびまの記事(Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編))を見てから、ちょろちょろと仕事の計測結果をまとめたりするスクリプトを書くのがずいぶんはかどるようになった。というか、久しくまともにRubyを使っていなかったのがずいぶん気楽にEnjoy programmingできるようになった。

log_analysis_spec.rb

describe LogBeingAnalyzed do
  before :each do
    @log = LogBeingAnalyzed.new
  end

  describe "#add_data(newdata)" do
    it "should increase number of data" do
      @log.add_data("new data")
      @log.num_of_data.should == 1
    end

    it "should add newdata at the end of the log" do
      @log.add_data("new data")
      @log.data[-1].should == "new data"
    end
  end
end

log_analysis.rb

class LogBeingAnalyzed
  attr_reader :num_of_data, data

  def initialize
    num_of_data = 0
    data = []
  end

  def add_data(newdata)
    num_of_data += 1
    data << newdata
  end
end

中身をどう書くかぱっと設計できなくても、とりあえず書き始められるのよね。解析ツールとかはメインの成果物じゃないから、長らく止まってしまったら自動化あきらめて、効率の悪い(でも一応着実にちまちまと進む)手動解析をせざるをえなくなってくる。

かくしてテスト(スペック)ファーストしてると、そのうち中身の書き方も浮かんでくるし、着実に進んでいるのも分かる。どこかで間違えたらすぐに分かるから、すぐに直せる。これは効率的。ある程度まで作ったけどどこが悪いのかわからず長らく格闘した結果、一から作り始めたりあきらめたりしたことも以前はよくあった。

でもって、テスト/スペックファーストで書いてると、テストしやすいコードを書くことに慣れてくるから、だんだん読みやすいコードを書くのが当たり前になってくる。そうでないと気が済まないというのもあるけど、そうでないと非常に書きにくい。あるとき、ふと自分のコードを眺めてみると、「おお、以前の巨大なのっぺりした関数より格段に見栄えもするコードになってる!」となるわけだ。

TDD, BDDというとなんだか上級者向け話題っぽく見えるけど、プログラミングの世界に飛び込もうとした第一段階からいきなりこんな枠組みを用意してあげるのもいいんじゃないかな。細かいこと気にせずにまずはこんなふうに書くんだ、と。