블로그 이미지
소프트웨어 개발 경험을 공유하고 싶은 재밌게 사는 소프트웨어 엔지니어입니다^^

카테고리

Chungha Story (41)
Agile Experience (22)
My Family (0)
Life Style (7)
Programming (8)
Android (2)
Total
Today
Yesterday

달력

« » 2024.5
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 31

최근에 올라온 글

최근에 달린 댓글

낡은 코드(legacy code)에 관심을 갖다

저는 최근에 낡은 코드에 관심을 갖게 되었습니다. 낡은 코드에서 효과적으로 일하기 위해서는 테스트를 만드는 것이 가장 먼저 해야 할 일입니다. 테스트가 없다면 어떤 코드도 쉽게 수정하기 어려울 것입니다. 그런데 막상 테스트를 만들려고 해보니 막막했습니다. 어디서 부터 테스트 해야 할까?

낡은 코드는 큰 것부터 테스트 하자

처음에는 막막했습니다. 뭐부터 해야할 지.. 함수단위, 라이브러리단위로 테스트 하자니 그 양이 엄청 났습니다. 또한 테스트 하기 쉽게 작성된 코드들이 아니기 때문에 더욱 어려웠습니다. 저는 블로그를 통해서 조언을 얻었습니다.(ParkPD님, 박형근님 감사합니다.) 그 첫번째가 "큰 것 부터 하라"였습니다. 그래서 먼저시스템 테스트를 만들기로 하였습니다.
다른 팀원들이 테스트를 쉽게 만들수 있게 도와주자

저는 낡은 시스템의 테스트 케이스를 검토하고 아래 그림과 같은 상상을 했습니다. 저희 회사 제품의 시스템 테스트 케이스는 시간적인 순서를 갖는 제어 메시지를 주고 받는 형태로 작성 될 수 있습니다. 저는 이것을 시나리오라고 하고 제어 메시지에 내용은 제어정보라고 정의하였습니다. 제어정보와 시나리오를 처리하는 것은 mock 클라이언트라고 정의하였습니다.

내가 상상한 시스템 테스트

개발자 혹은 테스터는 간단한 스크립트언어로 시나리오와 제어정보를 작성합니다. 독립적으로 작성된 시나리오와 제어정보를 조합하여 많은 테스트 케이스를 만들수 있습니다. 이런 것을 팀원들에게 제공한다면 테스트 케이스 작성에 큰 도움이 될 것 같았습니다. (저희 팀에는 유지보수 중인 낡은 시스템이 많습니다.^^;;)

의존성 주입 (Dependency Injection)

의존성 주입이란 객체간의 의존성을 미리 코드에 정의하는 것이 아니라 실행 시간에 주입하는 것을 의미합니다. 의존성 주입은 제어 역전(Inversion of Control)이라고도 합니다. 즉, 제어를 역전시킴으로써 바이너리를 교체하지 않고 제어를 가능하게 하는 것입니다. 이 개념은 자바의 Spring이라는 프레임워크에서 핵심 기능으로 사용되고 있습니다.
C++에서 의존성 주입을 하기 위해서는 작성된 라이브러리의 API를 동적으로 호출하고 파라미터를 실행시간에 입력하는 코드(wrapper code)를 생성해야 합니다. 즉, 이 코드(wrapper code)는 텍스트 파일에 기술된 100이라는 문자열을 정수형 변수에 넣을 수 있어야 합니다.

시스템 테스트 프레임워크

저는 절친 팀원 한분과 시스템 테스트를 위한 mock 클라이언트 작성을 도와주는 프레임워크를 만들기로 하였습니다. 물론 팀장님이 인가해주셨습니다. (매출과 관계없는 일을 싫어하는 회사 특성상 이례적인 경우일수 있습니다.) 위의 그림을 바탕으로 여러가지 시도를 해봤습니다.
  • 시도1) 시나리오 및 제어정보 스크립트 인터프리터 + 의존성 주입용 코드 생성기 + 스크립트 생성기
    시나리오와 제어정보 스크립트 언어를 정의하고 Lex와 Yacc를 이용하여 인터프리터를 만들었습니다. 의존성 주입을 위해 gccxml을 이용하여 API를 XML로 만들고 그것을 분석하여 코드 생성기를 만들었습니다. 스크립트 작성을 용이하게 할수 있도록 도와주는 스크립트 생성기도 작성하였습니다.
    문제는 의존성 주입용 코드 생성기였습니다. 생각보다 예외 상황이 많았습니다. 그리고 우리가 정의한 스크립트 언어는 점점 복잡해졌습니다. 패스~

  • 시도2) Python + Swig
    반성합니다. 시도1을 할때 충분히 조사하지 못했습니다.
    Swig는 Python과 C++을 연결시켜주는 코드 생성 라이브러리입니다. 매우 훌륭합니다.
    그러나, Python에서 API를 호출하는 것은 쉬웠지만 거꾸로 이벤트를 알려줄때 C++의 데이터가 Python 데이터로 맵핑 되는 작업이 매우 난해했습니다. 패스~

  • 시도3) 시나리오 작성용 인터페이스 및 시나리오 실행 환경 + 의존성 주입 라이브러리
    욕심을 버렸습니다. 시나리오는 C++로 작성하기로 하였습니다. 시나리오간에 의존성을 줄이고 이벤트를 알려줄 수 있는 인터페이스를 정의하였습니다. 해당 인터페이스를 구현하여(shared object or DLL) 시스템 프레임워크 월드에 주입하면 자동으로 해당 시나리오가 실행되도록 하였습니다. 제어정보와 시나리오 정보는 의존성 주입 라이브러리(Autumn Framework)를 사용하였습니다. 전체적으로 매우 심플하고 다양한 시나리오(기능 시험, 성능시험 등)를 XML로 정의할 수 있게 되었습니다. 콜!

    "시도3"의 전체 구성 그림

현재 저희는 시나리오 인터페이스를 구현하여 여러가지 테스트 케이스를 쌓고 있습니다^---^ 저희가 사용하는 인터페이스는 아래와 같습니다. 매우 간단합니다. 이 인터페이스를 구현하고 XML을 정의하면 자동으로 테스트 됩니다.
이제 남은 숙제는 지속적 통합을 위한 서버 구축(CI)입니다. C++과 리눅스 환경에서 효과적인 CI 서버 구축을 위한 방법을 알고 계신분은 조언부탁드립니다.^^ 감사합니다.

'Programming' 카테고리의 다른 글

이메일로 코드 리뷰 하기  (12) 2010.02.26
CASE STUDY : 의존성을 역전 시키자  (10) 2009.12.02
Broken Window Theory and Software  (4) 2009.11.26
Posted by 윤청하
, |

개발자와 다이어트

Life Style / 2009. 12. 26. 00:47
루저 그리고 90kg

전 루저 입니다. 키가 180이 안되죠ㅋㅋ 그런데 제가 학생일 때 몸무개가 90kg까지 올라간적이 있었습니다.
제가 대학교 신입생때 몸무개는 65kg이었습니다. 사실 제가 살찐 돼지였었다는 것을 그때 당시에는 몰랐습니다. 지금에서야 그때 사진을 보고 완전 뚱돼지였구나라고 회상하며 웃고 있습니다.ㅋㅋ

저 B형입니다.^----^ 비만이 많다네요..ㅋㅋ

각종 운동.. 그러나

살찐 돼지였던 것을 자각하지는 못했지만 살을 빼고자 하는 노력은 수없이 했었습니다. 살짝 쪘다고 생각했기 때문이죠. 학생일때는 검도 1년 반, 헬스 2년, 마라톤(10km, 하프) 참가, 농구 등등 을 했고, 회사에 입사한 후에는 수영 1년, 스쿼시 1년, 헬스 1년을 했습니다. 하지만 먹는 건 줄이지 못했습니다. 먹어야 공부도 하고 밤새서 개발도 하니까요..ㅋㅋ 당연히 술도 줄이지 못했습니다.
운동을 열심히 할때에는 살이 빠지다가도 다시 돌아오고~ 또 빠졌다가 다시 돌아오고.. 악순환의 연속..

4주간의 군사 훈련

병특 2년차에 4주 군사훈련을 논산으로 가게되었습니다. 자연히 간식먹기, 음주, 야식은 없었으며, 매일 걷고 움직였습니다. 살이 쭈욱 빠진 상태로 퇴소를 하게 되었고 얼마 안지나 와이프를 만나 연애 8개월 만에 결혼했습니다. 살이 빠진게 한몫했죠..ㅋㅋ 잼있는건 이때 빠진 살이 얼마간지속적으로 유지되었었다는 것입니다.

결혼 생활 그리고 소식(小食) 다이어트

결혼하고 1년뒤에 와이프가 임신하고 지윤이가 태어나면서 제 살은 다시 붙기 시작했습니다. 체질은 버릴수 없는 것 같습니다. 그러던중 MBC스페셜에서 소식(小食)에 관한 내용을 보았습니다. 그리고 무작정 따라 했습니다.
  • 한끼에 500kcal로 제한했습니다. 밥을 3/4공기만 먹었습니다.
  • 꼭꼭 씹어먹었습니다. 15번 이상 씹었습니다. 오래걸렸습니다.
  • 국에 말아 먹지 않았습니다. 씹지 않고 넘길수 있기 때문입니다.
  • 찌개는 국물을 먹지 않았습니다. 짜게 먹으면 칼로리가 올라가기 때문입니다.
  • 마트에서 과자등의 간식은 구매조차 하지 않았습니다.
  • 술도 안먹으려고 노력했습니다.
  • 결정적으로 따로 운동한건 없습니다. 지윤이 때문에 할 시간이 없었습니다.
그런데 살이 너무 쉽게 빠졌습니다. 5kg이 순식간에 빠졌습니다. 신기했습니다. 운동해서 뺄려면 정말 힘들었는데.. 먹는게 이렇게 큰 작용을 할지 몰랐습니다.
그러면 왜 소식을 하면 살이 찌지 않을까? 소식은 적은 식사량을 여러 번에 나누어 먹기 때문에 소화흡수가 잘되고, 규칙적으로 먹기 때문에 체내에 지방을 저장하지 않고 분해하는 작용이 활발해 비만을 예방하게 된다고 할 수 있다. 반대로 같은 양이라도 한 번에 먹는 폭식이나 아침이나 점심을 거르는 절식, 원푸드 등의 다이어트는 오히려 비만을 부르기 쉽다. 불규칙한 식사는 인체의 자기방어 기능을 자극해 같은 양이나 적은 양을 먹더라도 이를 분해하지 않고 저장하려는 성질을 나타내기 때문이다.
같이 소식(小食) 해 보아요^----^
Posted by 윤청하
, |
많이 읽을 수록 좋다?

전 얼마전까지만 해도 책은 많이 읽을 수록 좋다고 생각했습니다. 반년전 회사에서 10분거리의 집에서 1시간 10분거리의 집으로 이사하면서 하루에 책을 읽는 시간이 2~3배 증가하였습니다. 보통 하루에 2 ~ 3시간을 독서에 투자하고 있습니다. 첫 몇달간은 미친듯이 빠른 속도로 책을 읽었습니다. 아주 많은 양은 아니었지만 평소에 비해서 많은 책을 읽을 수 있었습니다. 하지만 빠르게 읽다보니 책을 읽은 후 몇주만 지나도 머리에 남는 것은 별로 없었습니다. 좀더 어려운 책을 읽을 수록 더 심각했습니다. 

깊게 읽자!

어느날 스스로 회고를 하면서 저처럼 아직 지식 수준이 깊지 않은 사람이 빨리 많이 읽는 것은 크게 도움이 되지 않는다는 것을 깨달았습니다. 그 후 지난 날 읽었던 책들을 다시 깊게 읽었습니다. 저는 지하철에서 책을 읽는 시간 만큼 읽은 내용을 사색하는 시간을 동일하게 할애하였습니다.
다시 깊게 읽은 책들은 저에게 엄청난 감동을 주었습니다.ㅠㅠ 저자의 속뜻을 이해하고 나니 "아하!"가 절로 튀어 나왔습니다. 아마도 만약에 이러한 과정을 거치지 않았다면, 켄트백의 테스트 주도 개발을 대충 읽고, "이거 code and fix 아냐?"라고 말씀하신 어느 개발자 출신 임원분의 말씀에 쉽게 동의했을지도 모릅니다.

기록 하자!

하지만 5년간 천권의 책을 읽고 천개의 서평을 쓰셨다는 파란여우님의 강연 후기를 읽고 아직 부족한 점이 있는 것을 깨달았습니다. 서평쓰기! 제가 읽는 책의 70%는 기술 서적인데, 어떻게 서평을 써야 할지 모르겠지만, 틈나는대로 정리하는 습관을 키워야 할 것 같습니다. 앞으로 블로그를 통해 기록할 생각입니다.

최근 관심사..

최근에 병렬/분산 처리에 관심을 갖게 되면서 이 책을 굉장히 깊이 읽고 있습니다. 
PARALLEL PROGRAMMING in C with MPI and OpenMP
Michael J.Quinn
McGraw Hill

단순한 라이브러리 설명이 아닌 Parallelism을 깊이 이해하기 위해 잘 알려진 문제 및 알고리즘을 병렬화하는 과정을 CASE STUDY 중심으로 설명하고 있어서 생각할 것이 매우 많아서 좋은 것 같습니다. 이야기가 딴데로 흘렀는데.. 요즘 병렬처리에 관심 있는 분들이 많은 것 같은데 같이 고민해보고 나눌 분이 있다면 연락 혹은 답글 부탁 드립니다.^---^

'Life Style' 카테고리의 다른 글

개발자와 다이어트  (6) 2009.12.26
커뮤니케이션 만족 : 당신은 묻기만 하면 된다.  (7) 2009.12.06
Carpe Diem  (6) 2009.11.11
Posted by 윤청하
, |