Search Results for 'TDD'

4 POSTS

  1. 2007.03.16 찝찝한 코드는 찝찝한 결과를 낳는다 (2)
  2. 2006.09.25 UnitTest++ 이야기
  3. 2006.09.23 TDD관련 추천 서적 몇 가지
  4. 2006.09.23 Unit Testing
얼마전 일이었다. 현 직장에서 가장 잊지못 할 사건이 나에게 일어났다. 이미 출시된 소프트웨어에서 비교적 치명적인 버그가 발견되었다. 며칠간은 진짜로 피를 말리는 시간이었고 회사내부의 다수의 인원과 소프트웨어를 사용하는 사람들에게 많은 불편을 끼친 시간이었다. 물론 그것에 대한 처리때문에 얼마인지는 모르지만 많은 돈과 시간이 허비된 것으로 알고 있다. 사장님한테 보고된 메일을 포워딩 받는 것도 처음이었다. ㅡ.ㅡ;

문제의 코드는 특정 프로토콜과 관련이 있었고 내가 만든 코드에서 한가지 불필요한 가정때문에 데이터 처리를 제대로 못해서 발생한 문제였다. 물론 결과적으로는 내가 코드를 제대로 못 만들어서 발생한 문제이지만 여러가지 생각들을 하게 하였다.

사실 문제가 발생한 코드는 내가 개발하면서 좀 찝찝하게 생각했던 부분이었다. 일단 부서의 분위기가.. 특히 팀장님의 개발스타일이 일단 개발해놓고 QA팀에 던져서 문제가 발견되면 수정하는 스타일이다. unit testing같은 건 모르신다. 코딩도 그냥 대충 틀만 잡고 시작하고 필요하면 고친다 주의이다. 물론 아주 큰 문제가 없으면 큰 그조를 바꾸는 일은 없다. 빡빡한 일정에 계속 밀려오는 일때문에 그리고 어떻게 보면 별것도 아닌 것 같은일을 계속 붙잡고 있는 것처럼 보이기 싫어서 내가 만족할 정도로 확신을 못하고 있었지만 일단 문제없이 돌아가기에 그냥 넘어갔었다. 즉, 이제 완벽하다라는 생각이 아닌 내 마음 한구석에서는 좀 찝찝한 코드로 남아있었다.

경험상 그러한 코드는 언제인가 항상 문제가 발생하기 마련이다. 사실 완벽하다라고 생각한 코드도 버그가 발생하는 마당에 찝찝한 코드는 찝찝함이 사라질 때가지 뜯어고치는게 정석인데 외압에 못이겨(?) 아니면 그 당시 나의 나태함 때문인지 그냥 넘어가 버렸었다. 물론 이번에도 크게 후회를 하였고 이제 다시는 찝찝한 코드에 대해서는 더 이상 용납할 수 없다는 각오가 막 생긴다.
팀장이 목에 칼을 들이대고 잘돌고 있는데 이제 그것 그만하고 다른일 좀 하라고 협박해도 끝까지 찝찝함을 없애기 위해 노력해야 한다는 각오가 생긴다.
소심한 나로서는 큰 각오라고 봐야한다.
어차피 어떤 이유로든 찝찝한 코드를 남겼을 때 돌아오는 피해는 고스란히 나의 몫이 되어버릴테니...

사실 이번 사건으로 내가 있는 조직의 개발형태에 대해서 많이 생각해보게되었다.
오래전부터 TDD 혹은 Unit Testing 그리고 코드 리뷰가 꼭 필요하다고 생각했었는데...
조직적으로 그러한 것들을 마음껏해볼 수 있는 환경이 없는 상태에서 그러한 것들을 해보려고 시도해보려고 했지만 너무나 힘이드는 것 같다.
특히 TDD같은 경우도 하드웨어와 밀접하거나 프로토콜과 밀접한 소프트웨어를 공동으로 개발하다 보니 코딩시 unit testing이 고려가 되지 않아서 마음대로 Unit Test를 만들기도 어렵고 만들 수 있다고 해도 엄청난 고민과 연구가 필요한데 그러한 시행착오를 겪을만한 시간도 주어지지 않는다. 빨리빨리 뭔가 돌아가는 것을 보여줘야만 한다. 그렇다고 조직내에서 내가 힘이 생겨서 그런 것들을 마음껏 펼쳐볼 수 있는 날이 오기만을 기다릴 수도 없고... 아니 그 전에 이미 다른 회사로 옮겨가고 없을 것 같다.

버그는 피할 수 없는 것이만 중요한 부분에 대해서는 관련 부분을 코딩하는 개인의 능력에만 순수히 맡기지 않고 unit test나 코드 리뷰 그리고 다른 방법으로 그러한 것들을 보완해 나갈 수 있는 방법들이 많이 개발 조직에 필요하다고 생각된다.

개인적으로 일을 효율적 잘 하는 것을 좋아하는데... 조직의 지원없이 혼자만의 힘으로 뭘해나가는 건 어디서나 쉬운 일이 아닌 것 같다.

하여간 개발하면서 느끼는 것은 진리는 항상 가깝고 단순한 것에 있는 것 같다.

찝찝한 코드는 찝찝한 결과를 낳고
잘못 지은 함수나 변수명은 잘못된 사용을 낳고
디버깅할 때 이렇게 단순한 코드는 문제가 있을리 없다고 생각하면 항상 거기서 문제가 발견된다.

추가로 개인의 능력에만 의존하는 소프트웨어 개발 역시 좋은 결과를 가져오지 못한다고 생각된다. 개인의 능력에 조직의 체계적인 뒷받침이 필요한 것 같다.



신고


UnitTest++ 이야기

2006.09.25 13:09
여러가지로 살펴본 결과 가장 마음에 드는 Framework라는 생각이 듭니다.
Windows CE로 빌드해도 함수 2가지만 주석처리하고 빌드하면 문제없이 빌드가 되네요.

마음에 드는 기능 중 하나는 테스트 결과를 보여주는 방식입니다.
PC버전으로 빌드를 할 경우 post build step으로 테스트 어플을 실행시키고
문제가 있을 경우 stdout으로 printf를 해주면 바로 Visual Studio 2005의 output창으로 관련 내용이 프린트 됩니다.
에러메시지에 소스파일 및 라인 수까지 찍혀서 클릭해주면 test fail이 된 소스코드로 바로 이동도 가능합니다.

이걸 Windows Mobile용으로 원격으로 실행해서 결과를 얻어오려면
뭔가 더 해줘야할 것 같아서 Remote API연구를 하고 그랬는데
생각외로 그냥 디바이스로 파일 deploy하고 디버그 모드로 실행시켜 주니까
stdout으로 나오는게 그냥 VS2005 output 창으로 나와 버리네요.
생각외로 쉽게 동일한 기능이 제공이 되는 것을 확인했습니다.

그래서 추가적으로 생각해 본 것이 테스트를 PC에서 돌리는 것이 빠르니까 일단 PC에서 돌리고
device에서 테스트해야만 하는 부분이 있을 경우 device에서 돌릴 수 있도록
하나의 프로젝트에서 win32 와 WM5.0 프로젝트 설정을 같이 할 수 있는 방법을 연구해 봤습니다.
심지어 사용자 정의 프로젝트 템플릿을 만드는 것도 고려해 보았지만
결론적으로 C++ 프로젝트는 자동으로 두개으 플랫폼을 생성할 수 있는 방법이 없습니다.

그래서 일단 win32프로젝트를 만드록 거기에 WM5.0 configuration을 추가하고
이렇게 되면 project property가 제대로 세팅되어 있지않으므로 다른 WM5.0 프로젝트에서 복사를 해서
수동으로 vcproj 파일을 수정하면 하나의 프로젝트로 데스크탑 및 윈도우 모바일 디바이스 빌드가 가능합니다.

신고


테스트 주도 개발(Test Driven Development; TDD)혹은 Unit Testing(단위 테스트)를 하기 위해서는 아래의 몇가지 기본 서적을 읽어보면 도움이 된다.

1. TDD의 원조격 인 책
Test Driven Development: By Example (Addison-Wesley)
 

테스트 주도 개발 : Test-Driven Development



2. TDD에 적용시 보면 도움이 될만한 책

위 서적 보다는 약간 더 실용적인 관점에서 쓰여진 책이다. 특히 아래 2개의 chapter는 보는게 TDD적용에 도움이 된다.

Chapter 7. Mock Objects

Chapter 8. Developing a GUI-Test First

Test Driven Development: A Practical Guide



3. TDD와 떼놓을 수 없는 관계인 리팩토링(refactoring)
Refactoring: Improving the Design of Existing Code


Refactoring (한글판)

 

* 그 외 참고 서적
TDD와 refactoring을 적극적으로 사용하고 있는 Extreme Programming(XP)에 대한 책.
아래 서적은 XP의 개발 방법론보다는 XP의 철학에 대해 이야기 하고 있고 실제 XP적용을 위해서는 좀 더 방법론적인 책을 봐야한다.

Extreme Programming Explained: Embrace Change (2nd Edition)


익스트림 프로그래밍, 제2판 : 변화를 포용하라



** 그리고 다들 아시겠지만 OOP하려면 필수적으로 봐야할 Design Pattern 책도 있다.
Design Patterns: Elements of Reusable Object-Oriented Software


GoF의 디자인 패턴 : Design Patterns

신고


Unit Testing

2006.09.23 11:50
최근에 나름대로 테스트 주도 개발(TDD)를 실무에 적용해 보려고 Windows Mobile 소프트웨어 개발시 사용 가능한 Unit Test Framework를 열심히 뒤지고 다녔다.

최종적으로 당첨이 된 것은 UnitTest++이라는 Framework이다.

CppUnit의 경우 유명하지만 사용 방법이 복잡하고 무거운 반면
UnitTest++의 경우 사용 방법도 쉽고 비교적 가벼운 편이다.

사실 CppUnitLite도 강력한 후보였지만 너무나 기본적인 기능만 갖추고 있어서 나름대로 기능추가를 해서 사용해야 되서 일단 제외가 되었다.

사실 UnitTest++을 만든사람도 처음에 CppUnitLite를 기반으로 기능을 추가해 나가다 CppUnitLite2를 만들고 다시 새로 UnitTest++로 옮겨갔다. 그래서 그런데 CppUnitLite의 간결한 느낌이 그대로 이어지고 있다.


아래는 관련 링크 몇가지 이다.


- UnitTest++
http://www.gamesfromwithin.com/articles/0603/000108.html
http://sourceforge.net/projects/unittest-cpp/ 
http://www.winwonk.com/temp/unittest++.html

- CppUnitLite

http://c2.com/cgi/wiki?CppUnitLite
http://www.objectmentor.com/resources/downloads/bin/CppUnitLite.zip
http://www.gamesfromwithin.com/articles/0412/000061.html#cppunitlite
신고



 RSS Feed

방명록

Recent Posts

  1. Xcode4 프로젝트에 프레임..
  2. 특허침해에 휘말리는 iOS..
  3. 최근에 변경된 애플 앱스토..
  4. 아이폰 사용팁 20가지
  5. 나의 관심사 재정리하기

Recent Comments

  1. 영회님 좀 더 자세히 설명해주.. coderiff 2010
  2. 완전 멋진데.. 한가지 아쉬운.. 영회 2010
  3. 그렇군요. 지금까지 Gmail의.. 하인도 2010
  4. 저도 예전에 이것때문에 한동.. coderiff 2010
  5. 어이쿠~ 이런 비밀이 있었네요.. 로드맵 2010

Recent Trackbacks

  1. イベント m lサイズ でスタイ.. イベント m lサイズ でスタイ.. 2014
  2. refurbished laptops refurbished laptops 2014
  3. Personal Security Personal Security 2014
  4. 갤럭시 시리즈의 두번째 버전.. 2011
  5. 하인도의 생각 neohind's me2DAY 2010

Calendar

«   2017/09   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Bookmarks

  1. The Old New Thing
  2. Windows Mobile Team Blog
  3. Windows CE Base Team Blog
  4. MobileDeveloper wiki
  5. 류한석의 피플웨어
  6. 애자일 이야기

Site Stats

TOTAL 2,633,059 HIT
TODAY 14 HIT
YESTERDAY 13 HIT

티스토리 툴바