Ruby로 처음 작성한 코드, test harness

펄, 파이선, 루비 등의 스크립트 언어 중에 하나 정도는 알아 두는게 편할 것 같다는 생각에 이번 달에는 루비를 공부하고 있다. 책의 절반을 쭉 읽어 나가면서 코드는 한번도 작성한 적이 없었지만 언어가 간결해서 그런지 몰라도 쉽게 원하는 코드를 작성할 수 있었다.

지금 진행하고 있는 프로젝트는 코볼 컴파일러의 개발인데, 컴파일러가 생성한 코드가 정확한가를 확인하는 가장 쉬운 방법은 기존의 컴파일러가 생성한 코드와 수행 결과(stdout)을 비교하는 것.

지금까지는 급한 마음에 두 실행파일을 번갈아 실행하며 눈으로 수행결과를 비교했는데, “실용주의 프로그래머”를 보면 테스트를 포함한 프로젝트 빌드의 전과정을 자동으로 수행할 수 있도록 할 것을 강조하고 있다.

그리하여 고즈넉한 저녁에 잠깐의 짬과 약간의 용기를 내어 처음으로 루비를 사용해 간단한 test harness를 작성해 보았다.

name_list = [     ‘intrinsic_math_func’,     ‘intrinsic_char_func’,     ‘intrinsic_case_func’,     ‘intrinsic_value_func’,     ‘intrinsic_divide_func’,     ‘intrinsic_numval’,     ‘intrinsic_annuity’ ]

test_cnt = 0 succ_cnt = 0 fail_cnt = 0

# TODO # compare execution time name_list.each do |name|

test_cnt += 1

mf_exec = “./” + name + “.cob32”     tmax_exec = “./” + name + “.gcobol”

mf_stdout = `#{mf_exec}`     tmax_stdout = `#{tmax_exec}`

print “[#{test_cnt}] #{mf_exec} vs #{tmax_exec}”     if (mf_stdout == tmax_stdout)         puts ” …success”         succ_cnt += 1     else         puts ” …fail”         fail_cnt += 1         puts “[#{mf_exec}]”         puts mf_stdout         puts “[#{tmax_exec}]”         puts tmax_stdout     end     puts end

puts puts “Total : #{test_cnt}” puts “Success : #{succ_cnt}” puts “Fail : #{fail_cnt}” puts

컴파일러가 생성한 코드의 수행시간 역시 컴파일러를 평가하는데 중요한 이슈이므로, 두가지 컴파일러가 생성한 코드의 수행시간을 자동으로 비교해 주는 프로그램을 루비로 간단히 작성하는 것도 큰 의미가 있을 것 같다. 사용하기 쉬운 루비 언어를 조금 더 연습해서 프로젝트의 여기저기에 잘 활용한다면 생산성을 향상 시킬 수 있을 것이다.

댓글 4개

  1. shoes mbt
    헤여졌다한들 슬퍼하지마. 이후에 만나게될 더좋은 사람을 위해 항상 웃는얼굴 잃지 말자. Topics related articles: http://malcom-ish.tistory.com/?page=33 新建文章 1 http://systemscoaching.kr/m/post/view/id/174 新建文章 8 http://rethink.pe.kr/2693595 新建文章 3 http://beatz4us.tistory.com/archive/20130316 新建文章 4