034 RCov 0.8.1 - Leopard, Safari 지원, Spec-only 모드 추가
November 21st, 2007
033 레일스 애플리케이션을 초기화하는 여러가지 방법 / 절대 주관적인 루비 뉴스
RCov는 루비용 테스트 커버리지 측정툴이다. RCov가 유용한 시점은 BDD/TDD를 해야지라고 마음먹은 그 순간부터다. 내가 얼마나 잘 하고 있는지, 또는 어떤 부분을 더 고민하면 되는지를 알려주는 척도가 되어줄 것이다. 때로는 눈에 보이는 목표가 되서(커버리지 100%를 달성할테다!), BDD를 열심히 하게 도와주기도 한다. 참고로 더 완벽한 스펙을 원한다면 Heckle이 도움이 될 것이다.
최근 0.8.1로 판올림되면서 Spec-Only 모드가 추가되었다. 말 그래도 스펙에서 커버하는 코드가 어디인지를 알려준다. 일반 모드에서는 스펙을 실행하는 동안 스치는 모든 코드가 커버된 것으로 표시된다. 또 하나 --charset 옵션으로 결과물의 문자셋을 지정해줄 수 있다. 한글이 깨지는 문제가 있었는데, 이제 해결될 듯 보인다. 그리고 사파리도 잘 지원한다. 여러모로 은근히 신경쓰이던 부분들이 해결된 버전이라 이렇게 소개한다.
0.8.1에 적용된 REXML 관련 코드에 문제가 있어서 바로 0.8.1.1이 나왔다.
기왕 RCov 이야기가 나왔으니 요즘 내가 가지 고민을 공유해보자. 스프링노트팀은 현재 스펙 실행이 너무 오래걸리는 문제를 겪고 있다. 총 710개의 스펙이 있고, 코드의 약 87%를 커버하고 있다. 모두 실행하는데 소요되는 시간은 내 맥북 프로 기준으로 약 100초 가량이다. 이렇게 오래 걸리는 이유는 과도한 픽스처(데이터베이스)의 사용 때문이다. 당장 빨리 만들고 싶어서 컨트롤러를 위한 스펙에서도 픽스처를 남발했더니 이런 사태가 벌어지고 말았다. 그래서 요즘은 매일 30여분씩 투자해서 커버리지를 더 올리는 작업과 기존 스펙을 리팩토링해서 속도를 개선하는 작업을 동시에 진행하고 있다.
그런데, 커버리지 측정이 너무 오래걸리다보니 이런 task도 만들게 되었다.
- namespace :spec do
desc "일부 파일만 coverage를 살핀다. TARGET=xxx"
Spec::Rake::SpecTask.new(:rcov_one) do |t|
t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
t.rcov = true
t.rcov_opts = ['--exclude', 'spec,\/Library\/Ruby\/Gems\/', '--rails']
filelist = FileList["spec/**/#{ENV['TARGET']}*_spec.rb"]
t.spec_files = filelist
end
end
일부 파일만을 돌려보고 커버리지를 측정해보는 것이다. 이런 식으로 사용한다.
- rake spec:rcov_one TARGET=page
빨리 rcov_one이 필요없는 시기가 오기를......
2007/11/22 01:11:30



November 22nd, 2007 at 11:19 PM (myRuby.net) 와 - Syntax highlighting이다. Alan님 멋쟁이 ㅋ