코드 고치는 방법
땜빵
바빠 죽겠구만
안전한 길로 가자
독박 쓰면 나만 손해
제대로 고치기
처음엔 x랄 같이 바쁜데 단위테스트 넣느라 고생하고 팀장한테 욕 먹고 사서 고생하는 것 같다.
그러나
리니지 2, 마이크로소프트, IBM : 40% ~ 90% 까지 결함 감소
NHN : 장애 건수의 대폭적인 감소
도입 단계.
처음 시도에 나가 떨어지는 사람이 많다.
프로젝트에 도입하기 전에 간단한 프로젝트로 연습하자.용자가 되어 도입하자고 팀장을 꼬신다.
테스트 도우미가 되자.
테스트 오류가 났을 때 피드백을 주어 테스트가 좋다는 걸 인식시키자.공권력 도입
신입부터 공략
개발 기간이 부족하다고?
온라인 게임은 한방! 에 간다.
이제부터 실제 코드를 보자!
OutputDebug 를 붙이는 건 참신하다!
_CrtSetDbgFlag 를 이용해 메모리 누수를 잡는 사례도 좋네. 실전적이야.
Google Test엔 루프를 몇 번 돌다 테스트가 깨졌는지 보여주는 기능이 있네. 여태 이 사실을 몰랐다니!
단위테스트 도입이 말로는 쉽기도 하고 박일씨 세션에 사람이 몰려 자리가 없을 정도였으나 실제로 시도해본 사람은 다 알겠지만 “아따! 왜 이리 반대가 심해!” 라며 머리 싸매고 “그냥 회사 때려 칠까?”란 생각을 한번쯤 하게 된다. 컨퍼런스에 사람이 많다고 착각해선 안 된다. 관심 있는 사람들만 모이기 마련이라, 나머지 사람도 나처럼 열정이 넘칠 거라 생각하면 오산이다. 그게 꼭 나쁜 건 아니다. 모두가 테스트에만 관심을 가지면 고성능 메모리 관리자는 누가 연구해서 개발할 것인가? 기획자가 “이건 졸라 멋져. 내 생애 첫 경험이야!”라며 감탄을 연발할 기획자용 데이터 입력 도구는 또 누가 만든단 말인가? 서로 다른 관심사가 있어야 시너지도 나는 법.
어쨌거나 저쨌거나 총대 매는 사람은 의사소통 기술이 참 중요하단 생각이 든다. 쳇, 귀찮은 일이다. 총대 매는 것만 해도 어딘데 설득까지 해야 하나?
다른 기법도 마찬가지겠지만 단위테스트도 먹어본 놈만 그 맛을 아는 법이라 이론 공부할 시간에 뭐라도 좋으니 실습해보는 게 최고다. 처음엔 테스트가 거의 불가능할 정도로 레가시 코드가 꼬이고 꼬였을 확률이 높다. 오래된 코드일수록 정도는 심하겠지. 꽤 내공이 필요하므로 박일씨 지적대로 연습부터 해보자. 등산 초보가 에베레스트 산맥을 올라간다면 누가 봐도 웃길 것이다.
운이 좋아 신규 프로젝트에 참가하게 됐다면, main 함수를 작성하는 그 순간부터 단위 테스트는 시작이다. 빌드 자동화와 마찬가지인데 “아직은 필요 없다”며 미룰수록 뒤에 찾아오는 고통은 커진다. 처음에 해두면 후에 쌩고생할 일 없다. 경험자의 말을 믿어보던가 몸소 고통을 체험해보던가, 선택은 자유! 내가 고생하는 것도 아니니까. 크큭.
그나저나 예제를 많이도 준비하셨군. 시원시원하게 넘어가서 보기엔 쉬워 보이겠지만 막상 해보면 “어라? 왜 이리 어렵지”라며 머리 싸맬 것 같은 수준이다. 이 정도 수준까지 올라오는데 글쎄… 경험상 일년은 걸릴 것이야. 믿거나 말거나.
아, 생각이 자꾸 이리 튀었다 저리 튀었다 하는데……. 단위테스트가 유용하다는 통계가 있으면 누구라도 설득할 수 있을 것 같지만 사람의 고집은 주관의 세계라 객관성을 들이댄다고 꺾이진 않는다. 그저 조금 도움이 될 뿐. 그래서 세상살이가 어렵다는 게지.
첨언
단위테스트와 큰 상관 없지만 갑자기 떠오른 생각이 있네. 규모가 있는 회사는 데이터베이스 관리자 또는 팀을 따로 둔다. 그런데 한국에선 눈을 씻고 뒤져봐도 빌드 엔지니어(또는 매니저)나 그 팀은 없다. 나도 말이지. 아무도 안 하니까 귀찮아도 도맡아 할 뿐이다. QA 조직조차 없다면 모를까 품질보증활동은 하면서 빌드 엔지니어는 없다면 뭔가 이상하다. 매우 중요한 일인데 말이지. 빌드 엔지니어와 연구 조직을 두고 무시무시한 시스템을 만들어 쓰는 회사가 바다 건너편 나라에는 무진장 많더라. 아직 한국은 멀긴 멀었어.
발표자료 올리셨더라구요. outputdebug 같은 건 오늘 내일쯤 한번 해보렵니다. ^^
단위테스트는 써보고 한번만 느낌 오면, 저거 없이 짠 코드는 정말 불안할 정도인데… 넘 귀찮고, 반대도 꽤 심하죠 ㅠㅜ 오랜만에 관련글 잘 보고 갑니다~
그렇죠? 전 테스트 안 된 제가 짠 코드조차 믿질 못 해서…