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

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

실용주의 프로그래머

얼마 전에 보안팀 팀장님으로부터 소프트웨어 테스팅에 대한 세미나를 들은 적이 있었다. 테스팅 방법론 뿐만 아니라 여러가지 이슈에 대해서 이야기를 나눌 기회가 있었는데, 그 때 팀장님께서 수차례 언급하셨던 책이 바로 “실용주의 프로그래머”였다. 그리하여 11월에 전략적으로 이 책을 공부하게 되었고 이번 주말에 일독을 끝냈다.

몇 만줄이 넘는 소프트웨어를 작성하다보니, 큰 프로젝트를 여러명이 함께 진행할 때, 안전하고 효과적인 방법에 대한 고민을 하게 된다. 또 언젠가 팀장이 퇴어 프로젝트를 책임지고 진행해야 하는 위치에 서게 되면, 물론 경험이 어느정도의 역량을 쌓아주겠지만, 팀장이 되기 위한 별도의 공부가 필요할 것 같았다.

워낙 좋은 평이 많은 이 책은 소프트웨어 개발자라면 반드시 일독을 권하고 싶을 정도로 알찬 내용을 담고 있다. 어느정도의 개발경력이 있다면 아마 읽는 내내 무릎을 탁 치게 될 것이다. 이 책에서 말하는 실용주의 프로그래머의 핵심은 한마디로 “빈틈없는 꼼꼼한 개발”이라고 본다.

한가지 중요한 이슈를 소개하자면, 책에서는 수차례 테스트의 중요성에 대해서 강조하고, 프로젝트의 대부분의 과정을 자동화하라고 권고하고 있다. 자동화된 회귀테스트가 소프트웨어의 신뢰성을 보장한다는 것이다. ‘예전에 되었던 것이 도대체 왜 지금 안되나?’ 라는 답답함을 토로해본 경험이 있는 개발자라면, 이 책을 읽고 테스트의 중요성을 깨닫기 바란다.

테스트는 이 책에서 말하는 실용주의 프로그래밍 기법의 일부분일 뿐이다. 총 45가지 주제를 가지고 개발자에게 흥미롭고 유익한 이야기를 전달하고 있으니 개발자라면 꼭 한번 읽어보시라.

정치성향 테스트

정훈이형의 소개로 정치성향 테스트를 받아볼 수 있었다.

http://pssc.egloos.com/1145763

경제적인 관점에서 좌파와 우파를 나누는 것에 더하여 사회적인 관점에서 권위주의적인지 자유주의적인지를 판단하는 것은 매우 적절하다고 여겨진다. 좌우를 나누는 좌표 측에서 차지하는 위치가 비슷하더라도 권위주의자였던 스탈린과 자유주의자였던 마하트마 간디가 유사한 정치성향을 가졌다고 보기 어렵기 때문이다.

특히나 색깔론이나 지역감정등으로 좌파와 우파의 개념이 왜곡된 우리나라의 정치현실을 감안한다면 이 테스트는 비교적 객관적으로 정치성향을 판단할 수 있다는 점에서 유용하다고 생각한다. 한번쯤 도전해 보시라.

사용자 삽입 이미지

참고로 나의 테스트 결과는 예상대로 자유주의 좌파에 가까운 편. 허나 내가 생각하는 이상과 내 삶속의 부딛히는 실제가 같다고 장담할 수 없기에 살면서 두고볼 일이다.