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

카테고리

Chungha Story (46)
Agile Experience (22)
My Family (4)
Life Style (8)
Programming (8)
Android (3)
Total120,782
Today108
Yesterday128
새로운 개발팀

이전 개발팀에서 이메일을 이용한 코드리뷰를 시행한 적이 있습니다. (2010/02/26 - [Programming] - 이메일로 코드 리뷰 하기)
혹시나 해서 요즘에도 잘 되고 있나 여쭤보았지만 아직은 형식적인 단계라는 답변을 들었습니다.
이직을 하고 나서 저는 변화된 환경에 적응하기 위해 애자일 프랙티스를 언급하거나 제안하지 않았습니다. 
단지, 이전 업무에 대한 소개를 할 때 개발 프로세스 개선 활동에 대해 짧게 소개만 했습니다. 
(다행히도 입사 4개월 만에 애자일에 관심을 보이시는 관리자 분이 계십니다!^^~~ 이번에 애자일 세미나를 같이 들으러 감~)

프로세스에 녹아든 코드리뷰

경력으로 입사하였기에 빠르게 프로젝트에 투입되었습니다. 현재 개발팀의 소스코드는 svn으로 관리됩니다. (git로 넘어가는 추세..)
그런데 특이했던 점이, 자신의 home directory에 check-out된 소스에서 직접 작업하지 않고 export된 다른 복사본(working source)에서 작업을 하는 것이었습니다. 즉, commit과 update 절차는 다음과 같이 진행되었습니다.
  • commit 절차 : 복사본에서 작업 => svn 소스와 diff를 통한 merge => svn commit
  • update 절차 : svn update => 복사본 소스와 diff를 통한 merge => 복사본에서 검증
즉, 개인 작업물에 대해서 철저하게 분리하는 형태 입니다. 어찌보면 번거로워 보일수 있는 소스관리 프로세스 였습니다.
그런데, 작업이 진행되면 될수록 소스코드가 잘 정리되었으며, 믿음직하고 든든해 졌습니다. 
그것은 merge 과정에서 자신의 코드와 타인의 코드에 대해서 source code inspection이 암시적으로 행해졌기 때문입니다.
복사본에서 작업하기 때문에 개인용 테스트 로그가 svn 소스 트리에 등록되지 않은 것도 한 몫 했습니다.

프로세스(혹은 도구) 개선이 정답?

김창준님이 한국 developerWorks의 dW Column에 기고하신 "소프트웨어 관리자의 개선 우선순위"라는 글을 보면 다음과 같은 재미있는 연구 결과를볼 수 있습니다.

쉽게 말해, 도구 부분에서 상당한 개선을 이뤄내면 비용적으로 세 배 정도 개선을 얻을 수 있다. 이에 비해 관리 부분에서 상당한 개선을 이뤄내면 비용적으로 64배 정도의 개선을 얻을 수 있다는 뜻이다.

관리자들이 선호하는 개선 노력은 어떤 순서일까? 정확히 역순이다. 일단 도구 개선부터 시작한다. 자기 자신(관리)을 바꾸는 것은 맨 나중이다. 그러나 실제 효과로 보면 우선순위는 관리가 맨 처음에 온다


제 경험을 보면 마치 프로세스(혹은 도구) 덕분에 큰 효과를 본것 처럼 보입니다. 하지만 근본적인 원인은 따로 있었습니다.

내 코드가 아닌 우리 팀의 코드

개발과정에서 개발팀의 관리자 분(개발에도 참여하심)과 개발 리더분은 지속적으로 소스코드를 리뷰하고 있었습니다.
라인단위로 의미없거나 논리적이지 못한 코드가 있다면 명확하게 해명을 해야 svn 소스 트리에 남을수 있었습니다.
로직이 불분명하다면 버그가 생길만한 케이스를 분석하거나 테스트 케이스를 만들어서 알려주십니다.
우리에게 누가 문제를 해결했고 누구의 소스에서 버그가 있었다는 것은 중요하지 않았습니다.
중요한건 우리 팀의 코드가 품질이 높아야 한다는 것이지요. (물론 납기일을 만족하면서...)
코드리뷰는 진짜로 해야 효과가 있는 것 같습니다.
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by 윤청하

댓글을 달아 주세요

  1. 2010.07.05 22:35 신고 Eminency  댓글주소  수정/삭제  댓글쓰기

    완전히 git를 쓰면 굳이 SCM과 분리된 working copy에서 작업하지 않아도 될 거 같은데?
    그나저나 git라니 꽤 진보적이구만 ^^; git보단 mercurial이 훨씬 편한 거 같긴 하다만..;

  2. 2010.07.30 17:15 신고 뇨릉  댓글주소  수정/삭제  댓글쓰기

    정말 동감가는 글입니다.^^;
    전 SVN에 커밋하기전에 코드리뷰를 해주고 싶은데 받아줄 사람이 없군요 ㅠ.ㅠ
    요즘 애자일,TDD에 관심이 많이 생기고 있는데 저와 관심분야가 비슷하신것같아요.
    자주 놀러오겠습니다^^;

    • 2010.08.01 22:29 신고 윤청하  댓글주소  수정/삭제

      없다고 포기 하지 마시고 최소 한명이라도 자기 편을 만드시면 좋을 것 같아요^^
      자주 놀러오세요~~ 같이 나누면 나눌수록 좋은 수가 생기기 마련입니다.

10년 묵은 잘못된 소스코드 관리

어제 스프린트 미팅에서 있었던 일입니다. 스토리 중에 새로운 BMT에 대응하는 스토리가 있었습니다. 팀장님은 이전에 만들어진 제품에 새로 개발된 플래폼을 이식하여 해당 BMT에 대응하기를 원하셨고, 이를 위해 현재 플래폼 소스코드를 복사하여 새로운 저장소(SVN에서의 repository 또는 ClearCase에서의 Vob)를 만들라고 주문하셨습니다. 쉽게 말해서 중복된 소스코드 두개를 만드는 것입니다. 저희 회사는 제품의 특성상 시스템 장애에 굉장히 민감합니다. 따라서 어쩔수 없이 상용 사이트에 납품된 제품의 소스코드는 사이트 별로 따로 관리하고 있습니다. 하지만 진짜 문제는 복사되어 분리된 소스코드는 그 사이트에서 해당 제품을 폐기하기 전까지 유지된다는 것입니다. 즉, 사이트 별로 거의 비슷한 소스코드들이 생산되는 것입니다. 이는 다음과 같은 문제를 야기시키고 있습니다.
  1. 소스코드 관리 리소스 증가 : 새로운 기능이 개발되거나 버그가 발생했을 경우 매우 많은 저장소에 동일한 수정과 동일한 테스트를 해야합니다.
  2. 저장소별 히스토리 관리 : 저장소 별로 수정 히스토리를 따로 관리해야 합니다.
  3. 같은 문제가 번복됨 : 1번을 잘 못할경우(잘 못하고 있습니다.) 같은 버그가  여러 사이트에서 발생합니다.
즉, 유지보수에 굉장히 많은 리소스가 투입되며, 매출 증가 대비 필요한 리소스는 계속 증가하게 됩니다.
이는 10년동안 지속되온 문제입니다.ㅠㅠ

해결하기

다행히도 제가 생각하는 해결방법과 팀장님이 생각하는 해결방법은 동일했습니다. (팀장님은 이상적 방법이라는 표현을 쓰시긴했지만...) 해결 방법은 다음과 같습니다.
  1. 메인 소스코드를 버전별로 관리한다.
  2. 사이트 혹은 BMT에 대응하는 경우 현재 버전의 소스를 복사하여 작업한다. 단, 메인이 되는 소스코드와 동기화는 맞추어야 한다.
  3. 소스코드는 일정한 주기로 버전 업을 한다. (약 4주)
  4. 사이트에서 생성되는 요구사항은 일정한 주기로 버전 업 되는 메인 소스코드에 구현한다. 완료되고 적용될 때에는 기존의 복사된 소스코드를 삭제하고 새로운 버전의 소스코드를 복사하여 해당 사이트에 유지한다. (버전 업)
즉, 사이트별로 중복된 소스코드를 사용하지만, 메인 소스코드에 집중하고 잘 유지함으로써 지속적으로 동기화 될수 있는 방법입니다.

10년동안 바꾸지 못한 이유

위의 제시된 방법에서 큰 신뢰성이 요구되는 부분이 있습니다. 사이트의 소스코드를 버전업 하는 경우 기존 기능의 안정성 여부 및 타 시스템간의 호환성 유지 여부가 매우 중요하게 됩니다. 10년동안 바꾸지 못한 이유는 바로 이 점을 QA조직에서 개발팀을 신뢰하지 못하기 때문입니다.ㅠㅠ
이제 개발팀이 해야 할 일들이 눈에 보이기 시작합니다.
  1. 회귀테스트를 유지하고 관리해야 합니다. 자동화된다면 정말 좋을 겁니다. (TDD 강추..ㅠㅠ)
  2. 하위 버전 호환성 테스트를 유지하고 관리해야 합니다. API가 변경되지 않는다면 더욱 좋을 겁니다.
저는 이런 작업들이 이상적이라고 생각하지 않습니다. 당연히 개발자들이 해야 할 일들이라고 생각합니다. 물론 초반에 업무량은 더 많아 질수 있습니다. 하지만 가까운 미래에는 사람다운 개발자가 될수 있을거라 기대합니다^^

어제 회의에서 팀장님께 강력하게 요청했는데 어떻게 반응하실지는 두고봐야 겠네요..^^ 간만에 강하게 나가니까 좀 당황하신듯...ㅋㅋㅋ 10년동안 방치된 방법을 바꾸는게 쉽지는 않겠지만 이대로 간다면 살아남기 쉽지 않기 때문에 뭐라도 해야겠죠..^^
저작자 표시 비영리 동일 조건 변경 허락
신고

'Programming' 카테고리의 다른 글

Broken Window Theory and Software  (4) 2009.11.26
여러분의 소스코드는 안녕하십니까?  (7) 2009.11.24
개발언어와 개발스타일  (5) 2009.11.23
Subtype Polymorphism과 성능 이슈  (4) 2009.11.17
Posted by 윤청하

댓글을 달아 주세요

  1. 2009.11.24 18:02 신고 박형근  댓글주소  수정/삭제  댓글쓰기

    내용중 '사이트에 대응시 현재 버전의 소스코드를 복사하여 수정한다.'는 Branch를 생성한다는 뜻이겠지요?^^
    http://softwaredev.tistory.com 에 보시면 소스코드관리 (특히 브랜치, 머지)에 대해 좋은 글들이 많으니 한번 들러보시기 바랍니다.

  2. 2009.11.25 09:54 신고 전규현  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 전규현입니다. 위에서 박형근 수석이 언급한 블로그 주인장이구요. ^^ 반갑습니다. 댓글 따라서 왔는데, 박형근 수석 댓글이 있네요.
    현재 겪고 계신 문제는 SW를 개발하고 있다면 대부분 겪는 흔한 문제입니다. 위에서 박형근 선임이 말씀하신 것처럼 브랜치와 머지를 잘 이용해서 이문제를 해결할 수 있습니다. 또한, 이런 경우라면 Architecture도 아주 중요한요소입니다. 즉, 전체적으로 현재 상황을 잘 풀어갈 수 있는 방법을 마련해야 합니다. 회기 테스트, TDD도 다 한방법이지만 비용도 많이 들고 시행하기 어렵기 때문에 균형에 맞는 절적할 해답을 찾으시기 바랍니다.

    • 2009.11.25 10:26 신고 윤청하  댓글주소  수정/삭제

      크나큰 조언 감사드립니다^---^ (감동 백만개~)
      말씀하신 것처럼 제가 제안한 방법은 초기 비용이 크게 든다는 단점이 있을것 같습니다. 트랙백 걸어주신 내용들을 잘 읽어보고 연구해서 저희 상황에 맞는 해결책을 마련해서 다시 한번 팀장님께 제안해보도록 하겠습니다^^ 감사합니다~

  3. 2009.11.29 22:51 신고 heestory.me  댓글주소  수정/삭제  댓글쓰기

    ㅋㅋ제 코드는 안녕못해요-;;

티스토리 툴바