[Sudoku] Win32 버전 만들기 (Winsudoku meets UnitTest++)

테스트 주도 개발(Test Driven Development, 이하 TDD)을 읽은지 한 일년을 지난 것 같다. 책을 읽고 이런 개발 방법도 있구나 하며 놀라워했었는데 실제로 그렇게 개발은 해본적은 없다. 그냥 간단한 C 프로그램에 assert 구문을 사용한 정도가 책을 읽고 난 후의 달라진 점이었을까..

한 2년 전쯤.. 회사에서 C++ 단위 테스트 프레임웍(CppUnit에 GUI를 입힌 테스팅 툴이었던 것으로 얼핏 기억을..)을 사용하는 강의도 들어본적이 있었는데 현업에 사용하기에는 여러가지로 불편한 점이 많아 보여서 실제로 도입해서 써보진 않았다.

뭐 그렇게 저렇게 시간은 지나고 TDD에 대해서 항상 하지만 TDD 수련을 전혀 하지 않고 시간만 흐르고 있었다. 와우 확장팩을 즐기고 회사 일에 치이고.. 뭐 그렇게 살다가 불현듯 이렇게 살면 안되겠구나.. 했다.

취미삼아 만들다만 Sudoku 소스를 꺼내서 다시 끄적끄적 하다가 그래..! 이 녀석을 수련의 장으로 삼으면 되겠구나 하는 생각이 들었다.

처음으로 내가 개인적으로 작업한 소스에 버전 관리툴을 쓰기 시작했다. 버전 관리툴을 지원 받으면서 동시에 오픈 소스 프로젝트에 참여하게 되었다. (도랑치고 가재잡고..)

Sudoku를 만들 때 처음에는 TDD를 적용할 생각은 못 하고 있었다. 그냥 코딩하는 재미에, 내 생각대로 척척 프로그램이 만들어지는 재미에 한 일주일은 그냥 쭉 구현 작업을 했다. 그런데 점점 맘에 들지 않는 코드가 생기고 로직과 UI가 제대로 분리되지 않은 느낌이 들고 뭔가 중복이 많아지는 느낌이 들었다. 거기다 버그가 숨어 있던 함수를 디버거와 씨름하며 3번 정도 고치고 나니.. 이거 이렇게 할께 아니구나 하는 생각이 들었다.

무려.. 6년 전쯤 사두고 대략 도입부만 읽고 책장 속으로 사라졌던 리팩토링 책을 꺼내들었다. 마치 낡은 상자 속에서 보물을 찾은 기분이었다. 예전에 읽었을 때는 별다른 감흥이 없었는데.. 서당개 삼년이면 풍월을 읊는다더니.. 그래도 나름 개발자라는 직함을 얻고 나서 어느 정도 내공이 생겼는지.. 책이 마치 나를 위해 이야기 해주는 것 같은 기분이 들었다.

TDD에서 테스트 - 코드 - 리팩토링 공식은 알았는데.. 왜 이런 공식을 따르는 가에 대해서는 별로 깊게 생각해 보지 않았는데 리팩토링을 보면서 리팩토링이 성립하기 위해서는 견고하고 자체 검사 가능한 테스트 셋이 필수적이라는 것을 알았다.

그런 와중에 릴레이 세미나에서 인사이트에서 출판한 책을 30% 할인해준다는 소리에 구입할 책 리스트를 적다가 실용주의 프로그래머를 위한 단위테스트가 눈에 들어왔다. 국내에 출판된 The Pragmatic Programmers Starter kits로 출간되었던 책 중 실용주의 프로그래머를 위한 버전관리는 거의 출간이 되자마자 샀었는데 단위 테스트와 빌드 자동화에 관한 책은 Java 위주의 설명일 것이라는 선입견에 나의 관심사를 벗어나있었다.(나는 사실 C언어 빠슨이었다..) 실용주의 프로그래머를 위한 단위테스트가 단위 테스트보다 JUnit에 대한 책일 거라는 오해가 컸던 탓이었다.

그러다가 실용주의 프로그래머를 위한 단위테스트를 다시 구매 목록에 올린 것은.. 여기저기 귀동냥으로 CppUnit이 JUnit의 C++ 버전이란 얘기를 들어서 뭐 다르면 얼마나 다르겠어..라는 생각과 이 책이 JUnit에 대한 책이라는 생각보다 단위 테스트에 대한 책일 것이라는 생각이 들었기 때문이다.

책을 읽고 나는 완전 헛살았구나... 혼자만의 착각 속에 빠져 살았구나.. 했다(이 얘기는 나중에 다시 또 정리해볼까 한다). 그리고 이 책은 실용주의 프로그래머의 저자인 David Thomas와 Andrew Hunt가 직접 저술 했다는 점에서 닥치고 질러야할 책 목록에 올려놔도 후회 없을 거란 생각이다. (난 사실 저 둘의 빠슨이기도 하다..)

삽질해서 테스트 프레임웍 셋업하면 뭐하나 뭘 테스트 해야할지 모르겠는데.. 라는 생각이 들면.. 실용주의 프로그래머를 위한 단위테스트를 읽으면 된다.

제목은 Winsudoku meets UnitTest++ 라고 써놓고.. 뭔가 잡설이 길었다.
아무래도 내가 실용주의 프로그래머를 위한 단위 테스트의 독서노트를 쓰려고 한걸로 착각한 모양이다.. 리팩토링이 필요한 포스트 감이다.

여튼.. 많이 늦었지만 본론으로 들어가서.. 오늘 한 작업은.. 어제 삽질한 내용을 이쁘게 잘 정리해서 소스 트리에 반영하는 작업을 했다.

  • 프로젝트 내에 UnitTest++의 라이브러리와 헤더 파일을 추가했다. (테스트 어플리케이션 빌드 시 에러가 발생하지 않기 위함이다.)
  • 테스트 어플리케이션의 프로젝트 설정에서 절대 경로로 지정되어 있던 것들을 상대 경로로 모두 바꾸었다.
  • SimpleSudoku와 테스트 어플리케이션 사이에 dependency를 설정하여 테스트 어플리케이션을 rebuild하면 SimpleSudoku도 빌드하도록 수정했다.
  • Sudoku 클래스의 생성자를 위한 단위 테스트를 추가했다. (시험삼아 추가한 거라 정말 효용이 있는 테스트라고 말은 못하겠다.)

그리하여.. 오늘도 준비 작업으로 하루를 마쳤다.

단위 테스트를 적용하면 설계도 개선된다. 왜냐면 단위 테스트 하기 좋은 코드가 보통은 잘 모듈화 되있는 코드이기 때문이다. 그런 면에서 지금 내 코드는 사실 뭘 어디서 부터 테스트를 시작해야할지도 모르겠다. 그만큼 뭔가 설계가 엉망이란 뜻이겠지. 단위 테스트를 적용하면서 내 코드가 어떻게 진화할런지 사뭇 기대가 된다.

이 글과 관련있는 글을 자동검색한 결과입니다 [?]

by 오자 | 2008/02/20 00:11 | WinSudoku | 트랙백(1) | 덧글(2)

트랙백 주소 : http://palabras.egloos.com/tb/4167712
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from ♡ 기분좋게 ♡ at 2008/05/07 16:07

제목 : 단위테스트에 대한..
[Sudoku] Win32 버전 만들기 (Winsudoku meets UnitTest ) <-오자님네서~오자님이 cppUnit인가를 이용해서 TDD하신다길래..실은 '나도...'라고 주욱 생각했었지만 귀찮고.. 힘들것도 같고.. 새로운거 도전할 기운도 없어서 내버려뒀는데오늘 문득 MS SQL 2005 EXPRESS 원격접속 문제 해결을 위한(실은 잘 몰라서 내버려두고 서버 DB접속해 쓰고 있었다.)검색으로 일본 MS들어가서 찾고 ......more

Commented by 희정 at 2008/02/20 11:09
저는 이제야 드디어 설치 끝냈습니다. 후훗..ㅜㅜ
Commented by 오자 at 2008/02/20 23:07
희정 / ㅊㅋㅊㅋ~ 단위 테스트와 함께하는 플밍 생활을 해보아요~

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶