TagCloud

Wednesday, November 7, 2012

버그에 대처하는 우리의 자세...

아침 출근길에 웹서핑중 IDE 의 Integrated Development Environment 라는 단어를 보고,  Development 라는 단어가 나에게 있어서의 어떤 의미를 가지는지를 생각하였다.

어쩌면 난 IDE 가 아니라 ICE (Integrated Coding Environment) 를 사용하고 있는건 아닌지...


개발자라고 말하기엔 위대한 개발자들께 누를 끼치는 것 같아, 나는 아직까지는 코더라고 생각한다...

한동안 잠잠하더니 또다시 '코더와 개발자의 차이는 무엇일까' 에 대한 고민이 시작되었다... 


결국 선배들로부터 들은 다음의 결론으로 항상 도달하지만...

'코더와 개발자의 차이는 결과를 얻기위한 과정에서도 차이가 나지만 문제 해결방법에 있어서도 차이가 있다.
개발시간 T1과 버그수정시간 T2  가 있다...
전체 완료 퍼센테이지를 100%로 보았을때(개발에 있어서 완료가 있겠냐만은...)
비용은 = T1*개발소요율/100 + T2*개발소요율제곱/200  

초급 개발자는 10퍼센트의 개발시간과 90퍼센트의 버그수정시간이 소요된다
우수한 개발자는 90퍼센트의 개발시간과 10퍼센트의 버그수정시간이 소요된다.

초급개발자의 경우 예외처리 상황의 예측 없이 1시간이만에 개발이 끝나지만
우사한개발자의 경우 예외적인 상황을 파악하여 보완한 다음 3시간에만 끝낸다.

언제나 그렇듯이 개발에 있어서 끝은 없다...
버그수정,기능추가...등등

이제부터 시작이다...

버그의 현상은 B-Tree 와 같다고 생각한다...

루트 버그가 발생한다..
그리고 사이드 이펙트로 자식버그노드가 발생한다...그리고 그 버그는 또다른 자식버그노드를 갖고...

이때 초급개발자와 고급개발자의 차이가 나타난다...
초급개발자는 Leaf 노드에 해당하는 버그를 수정한다(정확히는 근본적인 버그를 수정한것이 아닌, 예외처리일 뿐이다.) 그러나 Leaf 노드를 없앤다고 해도 Binary Tree 의 recursive 특성처럼 없는것 처럼 보이는것이지 없는것이 아니다...
고급개발자는 leaf 노드에서 root 노드까지 버그의 원인을 찾아 해결한다. (비록 root 노드의 버그를 찾아 수정하기까지 시간이 많이 소요되었지만,  자연스래 자식노드들의 버그들도 수정이 되므로 최종적으로 버그수정에 소요되는 시간은 더 줄어들었다)

버그트리의 root 노드가 늘어난다고 생각해보자...
초급개발자는 N 개의 root 버그 * N*제곱의 left 노드수만큼의 버그수정과의 야근속에 개발코드를 탓하며, 회사를 떠날 것이며,
고급개발자는 수많은 N*제곱의 leaf 버그들이 있더라도 다만 N개의 버그만 수정하면 된다고 생각할 것이다.

결국 T1*개발소요율/100 + T2*개발소요율제곱/200  이 틀린말은 아니다...


나 역시 짧은 지식으로 인하여, 기껏해야 Leaf노드의 parent 노드밖에 못찾으니...
(버그를 찾았으나 버그의 원인을 찾기 위한 이해를 못하는걸 보면-한참 멀었다고 본다...)


그동안의 코드들에 달았던 주석들이 생각난다.
자랑을 하기 위해서가 아닌...부끄럽다면 더 노력하자는 의미로 시작했던 주석들...

처음 코딩을 시작할때의 coded by luvu ..
그리고 지금의 modified by luvu ..

언젠가는 정말 언젠가 진짜 개발자가 되어  developed by luvu 를 쓰는 그날이 오긴 올것인가??..


그나저나 가을인가보다....

과 친구녀석들이 생각나네...지금이라면 전공이야기로 술안주거리가 많을텐데...