Extremely Agile/General2007.11.18 21:13
많은 프로그래머들이 개발을 하면서 문서 작성은 잘 하지 않습니다. 뭔가 좀 아는 사람들이 모여있는 개발 팀에서는 프로젝트 전반기에라도 가급적 설계 문서를 만들려고 애쓰는 경우가 태반인데 (아예 아무것도 하지 않는 팀도 있긴 합니다. 스파이크 솔루션이라도 간단히 만들어보면 좀 낫습니다만...) 그런 경우에라도 막상 프로젝트가 끝날 때 보면 문서의 상태와 개발 결과물의 상태가 심히 어긋나 있는 경우가 대부분입니다. 뭔가 조금씩 틀리고 잘 맞지 않죠.

극단적으로 보자면, 주석문의 상태와 코드의 상태가 다른 경우도 있습니다. 프로그래머가 코드를 변경하면서 주석문을 재검토하는 것을 잊은 것이죠.

이런 문제에 대한 '현실적인 해결책'들이 여러가지 나와 있습니다. 몇 가지를 열거해 보면

1. 코드의 흐름은 코드가 말하게 하라
2. 문서를 만들면서 코딩하라

뭐 이정도가 있겠습니다. '코드의 흐름은 코드가 말하게 하라'는 것은 가급적 코드에 '그 하는 일'이 명료하게 드러나게 만들라는 뜻입니다. 이렇게 하자면 함수 이름을 잘 지어야 하겠고, 변수 이름을 잘 지어야 하겠고, 가급적 각각의 함수는 그 길이가 짧아야 합니다. 너무 긴 함수는 이해하기 어렵기 때문입니다.

하지만 그렇다고 하더라도 코드만 보고 전체 코드의 얼개를 파악하기란 지난한(혹은 지랄맞은) 일입니다. 그래서 그런지, 저는 다른 사람의 코드를 읽어야 하는 일이 생기면 엔간하면 밑바닥부터 코드를 다시 짜고야 마는 못된 습성이 있었습니다. 지금은 그러지 않으려고 굉장히 애를 많이 쓰는 편입니다만...

그러므로 가장 좋은 해결방법은 2번입니다. "설계 후 코딩하라"는 말을 "프로젝트 전반기에 설계하고 프로젝트 후반기에 코딩하라"는 식으로 아둔하게 해석하는 대신, "설계 후 코딩"에 드는 간격을 최소한 줄여보자는 것입니다.

저는 작업을 할 때 큰 모니터에는 설계 문서를 띄워 놓고 설계를 해 나갑니다. 설계가 끝나면 바로 옆에 있는 노트북에서 개발을 합니다. (좋은 키보드는 데스크탑에 물려놓고 대체 뭐하는 짓인지 ㅋㅋ) 개발을 하다가 뭔가 이상하다 싶으면 즉석에서 테스트를 하고 설계를 변경할 때도 있습니다만, 가급적 설계를 바꿀 때에는 그 사실을 먼저 문서에 반영하고 그 다음에 코딩에 들어가도록 하고 있습니다.

이렇게 하는 것의 장점은 몇가지가 있습니다만, "조엘 온 소프트웨어"의 조엘 말대로, "코드에 손을 대기 전에 먼저 생각을 해 본다는" 점이 가장 큰 장점이겠습니다. 물론 아주 숙련된 프로그래머의 경우에는 프로그램의 설계 전부가 테스트 코드부터 시작해 일사천리로 뻗아 나오게 되는 경우도 있겠습니다만, 대부분의 프로그래머는 그렇지 않으므로, 가급적 설계에 조그마한 변경이라도 가할라치면 문서를 함께 변경해 가는 쪽이 낫겠습니다.

물론 자주 문서에 손대는 것을 싫어하는 프로그래머도 많습니다만, 조엘 아저씨의 말대로 설계가 충실한 코드는 정작 코드 자체를 작성하는 데 드는 시간은 짧습니다.

그런데 대부분의 프로그래머가 그 말을 믿지 않는 가장 큰 이유는

(1) 설계부터 구현까지에 이르는 시간 간격이 지나치게 크기 때문이고
(2) 그렇다보니 정작 코딩을 하기 시작했을 때 즈음에는 요구사항이 바뀌어 다시 설계를 해야하고
(3) 결국은 '재설계'에 투여할 시간이 부족하여 설계를 건너뛰게 되고
(4) 그러다 보니  코드 작성에 드는 시간이 그다지 줄어들지 않게 되기 때문이죠.


이것이 바로 Waterfall 식의 개발 방법의 가장 큰 병폐입니다.
 
그러니 문서를 업데이트 하는 데 드는 시간을 아까와 하지 않고, 개발과 병행해 나가는 편이 낫겠죠.


루비 프로그램 개발화면

루비 프로그램을 짤때, 설계 문서를 옆에 놓고 설계를 고쳐 가면서 SciTE로 코딩하던 장면




신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

  1. 입사한지 얼마 되지는 않아서 회사의 솔루션 분석 하고 있습니다. 코드에 주석이 너무 없고 소개 문서도 없어서 맨땅에 해당하는 기분이네요 그래도 어느정도 파악이 되어 c로 된 솔루션을 자바로 변경하는 작업을 할 예정인데 문서화를 해야겠다는 생각이 절실히 드네요. 이제부터라도 확실히 해서 후배들이 들어왔을때 쉽게 접근하도록 해야겠네요^^ 좋은 글 감사합니다.

    2008.09.26 11:22 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 감사합니다. 너무 많은 문서화도 바람직하지 않습니다만, 그렇다고 아주 문서화를 도외시할 수는 없으니, 가급적 문서와 코드의 상태를 잘 맞출 수 있도록 하는 방법을 찾는 것이 좋겠습니다. :-)

      2008.09.26 12:38 신고 [ ADDR : EDIT/ DEL ]