측정하지 못하면 관리하지 못한다. 정말?

소프트웨어 크리에이티비티 2.0 을 읽다가
작년부터 계속 고민해왔던 생각을 떠올라 써 봅니다.

작년 KGC 에서 내가 발표한 내용 중, UnitTest 도입 효과에 대해 설명한 것이 있다.
대략 다음과 같은 그림이었는데...


이 자료는 다음과 같은 방식으로 수집했다.
1. 버그 추적 도구에서 데이터를 XML 로 export 한 후
2. C# 의 XML 파서를 사용해서 디버깅 생산성 측정 프로그램을 만든 후 데이터를 분석

통계는 다음 규칙을 만들었다.
1. 버그가 처음 보고된 시간으로부터 버그를 수정한 시간까지의 평균
1-1. 우선순위가 높은 것부터 확인. 너무 우선순위가 낮은 버그는 통계에서 무시
1-2. 사례보고 같이 몇 년동안 해결되지 못한 버그도 무시
2. 버그가 발생한 횟수를 개발 분기별로 분류

'500% 생산성 증가'란 말에는 약간 과장이 있지만, (특히 레거시 코드에서는) 200% ~ 300% 이상 생산성이 증가한다고 생각한다. 이런 자료 덕분에 막연히 UnitTest 를 도입하면 생산성이 향상되고, 버그가 줄어든다더라가 아니라, 실제로 해 보니 이렇게 생산성이 향상되고 버그가 줄었다고 얘기할 수 있는 근거를 얻게 되었다.

문제는 이제부터인데,
막상 이런 식으로 디버깅 생산성 측정 규칙을 정했더니, 그 규칙에 내가 끌려다니게 되었다.
예를 들자면, 버그 추적에 아직 올라와 있지 않은 긴급한 서버 Crash 가 날 경우, 당연히 Crash 를 다른 무엇보다도 먼저 수정해야 한다. 하지만 Crash 는 버그 추적 도구 대신 개발팀에 직접 이메일로 전달되는 '시급한' 문제다보니, 이걸 고친다고 하루, 이틀 고생해 봐야, 위에서 정한 디버깅 생산성 통계만 놓고 보면 내가 아무 것도 안 한 것이 된다.
마찬가지로, 다른 사람이 버그로 고생하고 있을 때에도, '내꺼부터 빨리 수정해야지, 다른 사람 도와줘봐야 측정도 안 되고...'라는 어이없는 생각에서 벗어날 수가 없게 되었다.
(디버깅 생산성 측정 프로그램은 순전히 UnitTest 를 적용했을 때의 효과를 확인하기 위해서만 썼지, 팀원들의 생산성을 측정하는 용도 등으로는 쓰지 않았는데도 불구하고 말이다)
Crash 수정 횟수라던가 다른 사람을 도와준 횟수도 같이 기록하면 되지 않겠냐고 할 수 있겠지만, 이것 역시 누가 얼마나 공헌했는지를 알기도 어렵고, 이렇게 모든 걸 다 기록하기 시작하면, 어느새 작업량보다 측정을 위한 일이 더 많아지게 된다.

그래서...? 당장 디버깅 생산성 측정 프로그램을 폐기해 버렸다. ㅎㅎ
이렇게 하고 나니, 마음이 편안해지고, 다시 팀에서 가장 중요한 일을 먼저 할 수 있는 마음가짐을 가질 수 있게 되었다.

시간당 LOC(line of code) 를 기록하는 회사도 있다고 하는데, 누가 하루 종일 고민해서 대박 버그를 찾아내 고쳤는데, LOC 만 놓고 보면 시간당 1 라인을 작업했다고 나와서, 관리자가 왜 이리 일을 안 하냐고 다그쳤다는 얘기도 있다.

개발자의 생산성은 어떻게 측정하더라도, 거기에 맞춰 사람들이 최적화되기 때문에, 가능하면 하지 않는게 좋다. 생산성을 측정하겠다면, 그 목적이 사람들을 평가하기 위해서가 아니라, 팀 개발 프로세스 중 어디에서 생산성을 더 높힐 수 있는지를 확인하고, 변경한 프로세스가 이전보다 생산성을 얼마나 높혀주었는지를 확인하는 목적에만 써야 한다. 그렇지 않고, 어떻게든 사람을 평가하기 위해 측정 방법을 도입한다면, 개발자들은 그에 맞춰 배신게임을 할 것이다.

by 박PD | 2009/06/03 11:13 | 개발 이야기 | 트랙백(3) | 핑백(1) | 덧글(15)

트랙백 주소 : http://parkpd.egloos.com/tb/1913510
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from Small Steps .. at 2009/06/03 14:42

제목 : 측정의 부작용
박피디 님이 측정하지 못하면 관리하지 못한다. 정말? 이란 글을 올렸다. - 측정하지 않으면 개선할 수 없다 라는 말이 더 널리 쓰이긴 하지만, 암튼 나처럼 개발을 지원하는 입장에서 보자면 ......more

Tracked from Brian in Free at 2009/07/23 13:58

제목 : 단위테스트 결과의 오용. - 제한된 기회-
회사 내부에서 단위테스트 확산을 위해서 일하고 있다. 각자의 생각이 다르고, 관심사도 다르다. 그 와중에, 나는 단위테스트를 확산하기 위해서 노력하고 있다. 1. 단위테스트 케이스를 만드는 공수를 줄이고, 2. 테스트 데이터 생성에 대해서 소개하고, 3. 테스트 데이터 재활용에 대해서 고민하고, 4. 테스트 데이터의 수집에 대해서 개발...more

Tracked from 딥 다이브 닷넷프레임워크 at 2009/10/22 10:29

제목 : 소프트웨어 크리에이티비티 2.0 - 소프트웨어 개발..
소프트웨어 크리에이티비티 2.0 - 로버트 L. 글래스 지음, 박재호.이해영 옮김/위키북스 / 2009-05-28 책의 제목으로 미루어 소프트웨어 개발을 창의적으로 하는 방법에 대한 에세이 일 것을 추측했다. 추측과는 달리 이 책은 ‘소프트웨어 개발은 창의적인 작업이다’ 라는 것을 강조한다. 이에 실망했느냐 ? 정반대다. 코드 code 가 아닌 글로 쓰여졌음에도 이 에세이는 초고수 개발자의 우아한(엘레강스) 코드를 읽는 듯한 생각을 가지게 한다......more

Linked at sosa0sa.com &raq.. at 2009/07/01 09:24

... 얼마나 높혀주었는지를 확인하는 목적에만 써야 한다. 그렇지 않고, 어떻게든 사람을 평가하기 위해 측정 방법을 도입한다면, 개발자들은 그에 맞춰 배신게임을 할 것이다. 측정하지 못하면 관리하지 못한다. 정말? Categories: note Tags: Comments (0) Trackbacks (0) Leave a comment Trackback No comments ... more

Commented by 써니 at 2009/06/03 11:39
마지막 하나의 문장에 핵심이 잘 담겨진 듯 합니다.
좋은 글과 책 출간 정보 감사드립니다.
Commented by 박PD at 2009/06/03 17:46
감사합니다.
Commented by 커널0 at 2009/06/03 12:25
올쏘올쏘~~~ 감동의 포스팅입니다.
Commented by 박PD at 2009/06/03 17:49
그래도 우리 팀은 이런 일이 없어서 회사 다닐만 하구만.
앞으로는 또 어떻게 될지 모르지만 ㅎㅎ
Commented by 헝그리맨 at 2009/06/03 12:36
좋은 글 잘 읽었습니다. 100% 동감입니다.
그나저나 C#에서는 이런 데이터들을 뽑을수 있군요. 부럽습니다.
VisualC++ 6.0 에서 작업하는 저로서는 꿈같은 얘기군요.
혹시 방법이 있다면 알려주시면 큰 도움 되겠습니다 ^^
Commented by 박PD at 2009/06/03 17:48
C# 에서 되는게 아니라, 버그 추적툴에서 버그 데이터를 XML 로 export 한 다음에
제가 만든 프로그램에서 XML 파서를 써서 데이터를 분석했습니다.
그러니까 VisualC++ 6.0 에서도 XML 라이브러리를 쓰시면 똑같이 작업하실 수 있겠네요.
오히려, 지금 쓰시는 버그 추적툴이(쓰고 계신다면) XML 로 데이터 export 를 해 주는지를 알아보셔야 할 거 같습니다.
재미있는 결과 나오면 공유 부탁드립니다. 꾸벅
Commented by anemos at 2009/06/03 13:24
생산성 꿈의 0 % 를 몸소 실천 중.. 쿨럭;;
Commented by 박PD at 2009/06/03 17:49
버그 발생 0% 이기도 하겠지. 팀의 기둥이 왜 이런 댓글을 :)
Commented by kks at 2009/06/05 09:56
박PD~ 우리회사 와서 얘기 좀 해다우. OTL
Commented by 박PD at 2009/06/07 12:09
강연료 비싸게 불러주시면 생각해 볼께요 :)
Commented by dalmuri at 2009/06/05 12:19
재밌게 잘 읽었습니다~ 시간 되시면 버그 데이터 분석하는 방법 좀 자세히 알려주세요^^
Commented by 박PD at 2009/06/07 12:09
버그 데이터 분석에 관심 있으신 분들이 좀 있으시네요.
다음에 한 번 정리해 보겠습니다.
Commented by TTF at 2009/06/07 02:51
와우~ 생각지도 못했던 의외의 결과를 알려주셔서 감사드립니다.

유닛테스트의 기능적인 장점만을 생각했었는데, 생산성 측정의 기준으로 정말 적합하지 않네요.
요즘 재미있게 읽고 있는 프로그래밍 심리학에서도 프로그래머 혹은 프로그램을 측정하는 기준 선정의 어려움이 나와 있는데요.
이번 블로깅을 읽지 않았다면, 관리자에게 유닛테스트의 훌륭함을 어필하고 유닛테스트 결과가 평가 기준으로 선정되도록 노력하려는 생각도 했었습니다.
(관리자는 항상 손쉬운 평가 방법을 선택하고 싶은 유혹에서 벗어나기 힘들죠.)

유닛테스트 결과를 평가 기준으로 삼을 경우에는 최악의 경우엔 유닛테스트 결과를 만족하기 위한 행동을 하게 되겠네요.
결국 일보다는 평가를 받기 위해 열심히 프로그래밍을 하는 상황으로 변질될 우려가 있었네요. -_-;
Commented by 박PD at 2009/06/07 12:10
네.. 제 스스로가 그런 유혹에 시달렸으니 관리자들은 더 할 것도 없겠죠.
평가는 쉽지 않다는 걸 알게 된 소중한 경험이었습니다. :)
프로그래밍 심리학 보고 있으면 같이 스티디 하면 좋았곘네요. 다음에 뵙겠습니다.
Commented by yagur at 2009/08/18 20:44
상당히 고무적인 글이군요... =)

:         :

:

비공개 덧글

<< 이전 페이지     다음 페이지 >>