여기서 찾은 인상 깊은 글은 여기에 있고, https://groups.google.com/d/msg/xper/9Ae5MvPDfmY/UnuVij4bTbgJ
제가 드린 질문에 이렇게 좋은 답변도 해주셨습니다. http://allofsoftware.net/entry/IsDesignNeeded
설계와 설계서를 구분할 필요는 있겠지만, 설계서가 필요한가에 대한 의문을 제기하시는 분들도 많은 듯 합니다.
많은 의견 부탁드립니다.
스펙이 이러한 내용들이 누락이 되어 있으면 설계가 어떻게 될지 상상해보라.
- 지금은 고객이 10개 회사인데 5년 안에 1,000개의 고객사를 확보할 것이다.
- 지금은 국내 판매를 대상으로 하는데 1년 후 부터는 세계 200개 회사를 대상으로 마케팅을 할 것이다.
- 현재의 시스템은 내년에 회사의 다른 시스템들과 통합하는 작업이 진행 될 것이다.
- 현재는 C/S 구조인데 2년 안에 Web을 지원해야 한다.
- 현재는 Windows만 지원하는데 1년 안에 MacOS, 2년 안에 iPhone과 Android 폰을 지원해야 한다.
- 지금은 모델이 3개지만 내년까지 100개의 모델이 5년 안에 5,000개의 모델이 생산될 것으로 예상된다. (사업이 잘 될 경우)
- 지금은 카메라 모듈을 한 가지만 지원하지만 5년 안에 100개 이상의 카메라 모듈을 지원해야 할 가능성이 80%이다.
- 현재 만든 Framework로 2년 안에 사내의 모든 TV의 Firmware를 교체할 예정이다.
위 예는 실제 현장에서 발생할 수 있는 수백만개 경우 중 몇 개일 뿐이다.
이러한 내용들이 설계에 적절히 고려되지 않는다면 미래에 큰 댓가를 치루게 된다. 이러한 것을 설게에 잘 반영하도록 설계를 하는 사람들을 Architect라고 부른다.
Brilliant as its strategy may have looked after the fact, Honda's managers made almost every conceivable mistake until the market finally hit them over the head with the right formula. The Honda managers on site in America, driving their products themselves (and thus inadvertently picking up market reaction), did only on thing right: they learned, firsthand.
재밌네요 ^^
상황 context에 따라 다르다고 생각합니다 개집 정도면 바로 개발하면 되고 복잡도가 증가되면 각각의 도메인별로 설계가 필요합니다 paper이라도 ^^
올려주신 내용에 같이 실무하는 입장으로 설계(?)의 변을 달아봅니다.
"설계서 만들라고? 문서 문서 문서!!"
=> "코드 작성 전에 특정한 양식에 완벽한 설계서(문서)를 만들어야 설계다" 라는 선입견이 있을 수 있다.
=> 세월은 모든 것을 변하게 만든다. "처음부터 완벽한 양식의 설계(문서)는 없다."라는 점을 받아들이는 마음 가짐이 필요
=> 세월이 흐르면서 코드랑 완전히 일치하는 설계서(문서)를 만드는 것은 경험상 불가능하다.
=> 문서는 최소한으로 정보를 파악하는데 필요한 만큼(?) 유지한다.
=> 우리가 보게 되는 최신 문서는 바로 소스 코드
=> 소스코드를 잘 작성하고 테스트하는 방법부터 바로 좋은 설계의 실천(네이밍, 테스트, 버전관리…기타 등등)
(설계 도구는 따로 없다.…구글 닥스나 이슈트래커로 서로 정보를 공유하는 차원부터가 시작이라고 생각합니다.)
"우리 같은 회사 (저희는 휴대폰 제조사입니다.)는 설계가 필요없어!"
"다 가져다 쓰는 소스를 포팅하고 안정화 하는 일이 전부인데 무슨 설계!"
=> "새로 만드는 것에만 설계가 필요하다."라는 선입견이 있을 수 있다.
=> 유지보수, 포팅을 잘하기 위한 것도 설계(전략/방법)다.
=> 안드로이드 포팅/안정화로 보자면 각자 개발자가 맡은 기능(내부 앱)들을
주어진 기간 내에 포팅/테스트/디버깅을 잘 해결하기 위해서 세우는 계획/방법/전략도 설계의 일부분이다.
(TDD, Android TDD, Android Monkey…등등 코드에 관한 테스트/디버깅 설계)
"설계할 시간이 어딧어!"
=> 설계는 따로 특별한 설계 일정(?)을 잡고 해야한다는 선입견이 있을 수 있다.
=> 프로젝트 초반에 도메인 지식은 정확도가 떨어진다. 오히려 프로젝트 마지막이 설계에 관련된 도메인 지식이 많다.
=> 그러니 따로 설계는 근사하게(?) 일정을 잡고 해야한다는 선입견을 버리자.
=> 고객(제조사)의 요구사항/할 일을 파악하고 일정을 예상하는 것이 바로 설계의 한 영역 이다.
(참고, 애자일의 유저 스토리)
"설계하면 뭐가 좋아지는데? 설명을 해줘봐!"
=> 설계(?)를 통해 프로젝트의 이슈(TODO)에 좀 더 가까이 접근할 수 있다.
이슈를 멀리서 그냥 대충 보다 코드를 작성하는 것보다
가까이 가서 직접 최대한 상세히 보는 것이 정확성을 높일 수 있다.
========================================================
Deep & Supple
김민재 부장
Mobile : 010-7138-5108
E-Mail : con...@gmail.com
Facebook: http://www.facebook.com/profile.php?id=100000118624897
그리고 최초에 이춘식님이 말씀하신게, 단순한 기술인지, 아니면 문화인지에 대한 고민이 필요할 것 같습니다.
단순히 설계가 필요한가라고 말하면, 기술적인 부분에만 생각이 모이는데,
이춘식님의 질문은 그것보다는 "문화"에 대해서 고민을 해야만 답이 나오지 않을까 하는 추상적인 생각이 드네요 ^^
On Dec 24, 9:38 pm, June Kim (김창준) <junea...@gmail.com> wrote:
> 우리가 생각해봐야 할 부분은 과연 무엇이 설계(design)인가 하는 것인데...
>
> 우선 내가 생각하는 "설계가 전혀 없는 프로그램", "설계를 최대로 한 프로그램", "설계를 한 건지 안 한건지 애매한 프로그램"의
> 예를 각기 하나씩이라도 생각해 보시면 내가 주로 생각하는 설계의 정의에 대한 몇 가지 힌트를 얻으실 수 있을 것 같습니다(참고로 사람에
> 따라 위 세가지 범주에 대한 답 하나 이상이 공집합일 수 있습니다).
>
> 여기에 추가적으로 생각해볼 질문 몇가지입니다:
>
> 0) 설계는 활동(activity)일까요, 결과물(artifact)일까요 아니면 양자 모두일까요? 각각의 범주는 어디까지일까요? 나는
> 주로 어떻게 "설계"라는 단어를 쓰나요? (이하 질문에서 나오는 "설계"라는 단어는 행동 혹은 결과물 혹은 양쪽으로 모두 해석가능합니다)
> 1) 특정 형태의 설계문서가 있으면 "설계가 있는 것"이고, 그 형태의 설계문서가 없으면 "설계가 없는 것"이라고 할 수 있을까요?
> 2) 소스코드(및 주석) 외에 별도의 종이문서, 전자문서가 없는 시스템이 있을 경우 "설계가 없다"라고 할 수 있을까요?
> 3) 만약 어떤 프로그래머가 한참을 골똘히 생각하더니 프로그램을 작성해서 완료했습니다. 이 프로그램은 설계 없는 프로그램인가요, 아니면
> 설계 있는 프로그램인가요?
> 4) 어떤 프로그래머가 별 생각 없이 프로그램을 시작하면서 하는 도중 간간이 골똘히 생각을 하면서 프로그래밍했습니다. 이 프로그램은
> 설계 있는 프로그램일까요 아닐까요?
>
> 2011/12/24 Minjae Kim <con...@gmail.com>
>
>
>
>
>
>
>
> > 간단한 코멘트를 덧 붙이면,
> > 설계는 매우 중요하고 꼭 있어야 합니다.
>
> > 설계가 없다면, why와 what, how가 없이 dododo만 하는 꼴인 셈이죠.
> > 단일 설계 모델에 why, what, how를 잘 의사소통이 되게 만드는 작업이 아키텍팅, 분석/설계, 즉 구조설계, 상세설계
> > 영역이라고 생각합니다.
>
> > 기준 없이 dododo만 하면 액티비티 트랩이란 것에 빠지고, 결국 burnout 되죠.
>
> > 2011년 12월 24일 오전 2:01, YoungSu Son <indigog...@gmail.com>님의 말:
>
> > 설계는 필요하다고 봅니다.
> >> 중요한건 설계가 아키텍트만의 전유물이 되어서는 안됩니다. 개발자, 테스트 모두 이해를 해야 되는 산물입니다.
>
> >> 물론 개집을 만드는데는 그럴 필요가 없겠죠.
> >> 설계 철학이 모든 사람들에게 공유되어야만 아키텍쳐가 무너지지 않고, 튼튼한 시스템을 만들수 있다고 전 생각합니다 .:)
>
> >> 2011/12/24 Minjae Kim <con...@gmail.com>
>
> >>> 안녕하세요, 김민재라고 합니다.
>
> >>> 1. 설계는 필요하다고 봅니다.
> >>> 2. 그렇지만 설계를 문서로 꼭 하실 필요는 없습니다. 문서로 할 때의 효용성은 있습니다만 효용성이 떨어진다고 판단되면 안해도
> >>> 무방하리라 봅니다. 만약 코드가 잘 쓰인 문서처럼 가독성이 뛰어나다면 코드 자체가 설계 문서일 수 있다고 보구요.
>
> >>> 부연 설명 드립니다,
>
> >>> 1. 설계 필요함
> >>> - 사실 저는 도메인주도설계 사상을 좋아하는 사람 중 한명이라 모델 주도 설계가 꼭 필요하다고 봅니다. 공통의 언어로
> >>> 기준에 대한 의사소통 없이 개발할 수는 있지만, 이는 adhoc 방식이고 성숙도가 떨어지며 기능은 빠르게 구현할 수 있으나 중복코드가
> >>> 늘어나고 유지보수 비용이 많이 들어서 롱 텀으로는 비효율적이라고 생각합니다.
> >>> 2. 설계서는 구지 없어도 됨
> >>> - DDD(Domain-Driven Design, 도메인 주도 설계)에서는 단일 모델이어야 한다고 주장합니다. 분석
> >>> 모델, 설계 모델을 이원화하면 안된다고 얘기하죠. 컨셉과 매커니즘 구현이 서로 다른 모델에서 각각 진행이 되면 의사소통에 방해가 된다는
> >>> 입장입니다.
> >>> - 결국 단일 모델에 분석 및 설계의 결과를 계속적으로 녹여 넣자는 것이구요. 그것으로 공통의 언어를 만들어
> >>> 이해관계자 간에 의사소통을 하자는 얘기입니다. 의사소통은 언어로 하죠. 그래서 그 언어의 형태가 문서로 국한될 필요는 없다고 봅니다.
> >>> 특히 코드와 싱크가 안 맞는 문서는 없는게 낫죠. 실행가능한 문서가 곧 코드니 실행가능하지 않은 doc 형태가 괜히 있어서 코드와
> >>> 맞지도 않고, 의사소통에 방해만 된다면 그런 설계서는 존재 가치가 없다고 봅니다.
> >>> - 대신 구두로 회의를 진행한다거나, 그림을 그린다거나 효과적인 문서 작업을 해서 도메인의 여러 특징을 모델에 녹여
> >>> 내는 지속적인 모델링 작업을 브레인스토밍 하듯이 계속적인 실험을 통해 해 보는 것이 핵심입니다.
>
> >>> 제 소견을 적어 보았습니다.
>
> >>> 2011년 12월 23일 오후 5:59, 이광운 <ultrak...@gmail.com>님의 말:
>
> >>> 올려주신 내용에 같이 실무하는 입장으로 설계(?)의 변을 달아봅니다.
>
> >>>> *"설계서 만들라고? 문서 문서 문서!!"*
>
> >>>> => "코드 작성 전에 특정한 양식에 완벽한 설계서(문서)를 만들어야 설계다" 라는 선입견이 있을 수 있다.
>
> >>>> => 세월은 모든 것을 변하게 만든다. "처음부터 완벽한 양식의 설계(문서)는 없다."라는 점을 받아들이는 마음 가짐이 필요
>
> >>>> => 세월이 흐르면서 코드랑 완전히 일치하는 설계서(문서)를 만드는 것은 경험상 불가능하다.
>
> >>>> => 문서는 최소한으로 정보를 파악하는데 필요한 만큼(?) 유지한다.
>
> >>>> => 우리가 보게 되는 최신 문서는 바로 소스 코드
>
> >>>> => 소스코드를 잘 작성하고 테스트하는 방법부터 바로 좋은 설계의 실천(네이밍, 테스트, 버전관리...기타 등등)
>
> >>>> (설계 도구는 따로 없다....구글 닥스나 이슈트래커로 서로 정보를 공유하는 차원부터가 시작이라고 생각합니다.)
>
> >>>> *"우리 같은 회사 (저희는 휴대폰 제조사입니다.)는 설계가 필요없어!"*
>
> >>>> *"다 가져다 쓰는 소스를 포팅하고 안정화 하는 일이 전부인데 무슨 설계!"*
>
> >>>> => "새로 만드는 것에만 설계가 필요하다."라는 선입견이 있을 수 있다.
>
> >>>> => 유지보수, 포팅을 잘하기 위한 것도 설계(전략/방법)다.
>
> >>>> => 안드로이드 포팅/안정화로 보자면 각자 개발자가 맡은 기능(내부 앱)들을
>
> >>>> 주어진 기간 내에 포팅/테스트/디버깅을 잘 해결하기 위해서 세우는 계획/방법/전략도 설계의 일부분이다.
>
> >>>> (TDD, Android TDD, Android Monkey...등등 코드에 관한 테스트/디버깅 설계)
>
> >>>> *"설계할 시간이 어딧어!"*
>
> >>>> => 설계는 따로 특별한 설계 일정(?)을 잡고 해야한다는 선입견이 있을 수 있다.
>
> >>>> => 프로젝트 초반에 도메인 지식은 정확도가 떨어진다. 오히려 프로젝트 마지막이 설계에 관련된 도메인 지식이 많다.
>
> >>>> => 그러니 따로 설계는 근사하게(?) 일정을 잡고 해야한다는 선입견을 버리자.
>
> >>>> => 고객(제조사)의 요구사항/할 일을 파악하고 일정을 예상하는 것이 바로 설계의 한 영역 이다.
>
> >>>> (참고, 애자일의 유저 스토리)
>
> >>>> *"설계하면 뭐가 좋아지는데? 설명을 해줘봐!"*
>
> >>>> => 설계(?)를 통해 프로젝트의 이슈(TODO)에 좀 더 가까이 접근할 수 있다.
>
> >>>> 이슈를 멀리서 그냥 대충 보다 코드를 작성하는 것보다
>
> >>>> 가까이 가서 직접 최대한 상세히 보는 것이 정확성을 높일 수 있다.
>
> >>>> 퇴근 전에 급히 쓰다보니 여기 저기서 본 내용을 짜집기 한 것 같네요.;;;;
>
> >>>> 2011년 12월 23일 오후 5:15, 배정일 <haru...@gmail.com>님의 말:
>
> >>>> 재밌네요 ^^
> >>>>> 상황 context에 따라 다르다고 생각합니다 개집 정도면 바로 개발하면 되고 복잡도가 증가되면 각각의 도메인별로 설계가
> >>>>> 필요합니다 paper이라도 ^^
> >>>>> On Dec 23, 2011 5:08 PM, "이광운" <ultrak...@gmail.com> wrote:
>
> >>>>>> 안녕하세요.
>
> >>>>>> "설계서"란 단어가 주는 무게가 사고를 어렵게 만드는 것 같습니다.
> >>>>>> 프로젝트가 처한 경우의 수가 많고 다양해서 "설계서(?)"가 '꼭 필요하다' ,'아니다' 섣불리 확정하기도 어렵네요.
>
> >>>>>> 그렇지만 그래도 답변한다면
> >>>>>> *"세월(시간)"을 견디게 하려면 "업데이트되는 최소한의 설계서(?)"라도 남겨야 한다*고 봅니다.
>
> >>>>>> 그렇지 않으면 이 업계의 최종병기 *"차세대"*를 하고 계실 수 있습니다.
>
> >>>>>> 2011년 12월 23일 오후 4:32, June Kim (김창준) <junea...@gmail.com>님의 말:
>
> >>>>>>> 질문이 너무 추상적이고 광범위해서 제가 답을 하기가 무척 어렵네요.
>
> >>>>>>> 우선 "설계"를 어떻게 정의하느냐에 따라 논의가 많이 달라지지 싶습니다. (하지만 어떻든 답이 "이것은 절대 아니고 오로지
> >>>>>>> 저것이다"라고 명백하게 나오지는 않을 것 같습니다)
>
> >>>>>>> 그리고, 링크 건 글에서...
>
> >>>>>>> 스펙이 이러한 내용들이 누락이 되어 있으면 설계가 어떻게 될지 상상해보라.
>
> >>>>>>>> - 지금은 고객이 10개 회사인데 5년
>
> ...
>
> read more >>
제가 해석한 의미는 다음과 같습니다.
1. 설계서가 필요한것 같은데, 이상한 분들이 딴지를 거니 지원사격해달라.
2. 설계서가 필요없다는 분들이 계신데 설득해달라.
이렇게 해석해놓고 보니 1, 2의 본질적인 질문은 그리 다르지 않다고 생각됩니다.
이 질문은 마치 "작전계획서가 필요한가? 불필요한가?"라는 질문과 같습니다.
고대 이례로 수 많은 직업군인들이 지적했다시피...
"작전계획은 전투개시 1분을 못틴다"고들 합니다.
그럼에도 21세기 전장터는 아직도 수많은 작전계획과 계획서를 산출물로 만들어 냅니다.
공사 현장에서도 수많은 설계서를 만들어냅니다. 설계과정에서 수많은 계산을 수행하고 원가와 공기를 산출해 냅니다.
제조업에서도 설계과정이 있고 설계서가 있으며 이를 토대로 제품을 만들어 냅니다.
그런데 무형의 S/W는 설계보다는 결과물에 집중합니다. (물론 우리의 현실입니다. 일본, 미국과 일해 본 경험에 의하면 코딩보
다 더 많은 시간을 설계에 투자하지요.)
그렇다면, 왜 우리는 S/W의 설계/설계서의 무용론을 주장할까요?
이 시점에서 제럴드 와인버그의 고견을 인용하는 편이 좋을 듯 합니다.
"설계과정후에 나온 설계서를 나중에 본다는 것은 극히 어렵다."
아마도, 이게 핵심이 아닐까 싶습니다.
왜 안보게 될까요?
왜 설계서에 우리는 큰 가치를 부여하지 않을까요?
결론은 "볼 일이 없다"는 겁니다.
그 이유는 다음과 같습니다.
1. 고객은 자신의 욕구인 요구사항을 제대로 이해하고 있지 않으며 개발팀도 요구사항의 정체인 욕구를 이해하고 있지 못해 요구사
항 자체가 엉터리로 나옵니다.
2. 요구사항을 테스트하지 않습니다. 그래서 요구사항이 엉터리인지 모릅니다. (그게 규모가 큰지 작은지 알수가 없지요.)
3. 작동하는 S/W에 집중하다보니 설계시간과 테스트 시간이 매우 작게 산정됩니다. (한마디로 엉터리 요구사항으로 만들어진 엉터
리 일정표를 가지고 있습니다.)
4. 결정적으로 업무 비전문가가 프로젝트에 참여하고 있고, 개발전문가들은 업무 전문가의 이야기를 한귀로 듣고 한귀로 흘립니다.
(게임산업에 와보니 이 쪽도 똑같더군요. 예를 들어, 골프게임을 만드는데 골프전문가가 참여하지 않거나, 당구게임을 만드는데 당
구 전문가가 참여하고 있지 않으며, FPS를 만드는데 군 전문가가 참여하고 있지 않더군요.)
5. 더 큰 문제는 설계전문가가 프로젝트에 참여하고 있지 않습니다.
6. 또 하나의 문제는 설계서를 최대한 빨리 구현할 목업 또는 프로토타이핑을 개발계획에 넣고 있지 않습니다. (설계를 테스트할
방법이 없습니다.)
요약하자면, 비전문가가 요구사항을 내고, 비전문가가 일정을 잡으며, 비전문가가 개발일정에 따라 개발하고, 비전문가가 개발이 완료
된 후에 제출 목적으로 설계를 만드는 현실을 보면, 설계 및 설계서는 반드시 해야하는 높은 가치의 일이 아니라, 높은 Risk
를 가진 낮은 Value의 업무입니다.
(가치-비용 모델에 따르면, 높은 가치,높은 비용의 일부터 하라고 되어 있지만 반대로, 낮은 가치, 높은 비용의 일은 버리라고
하지요. 이게 그대로 적용됩니다. 단지 좋은 도구를 사용하면 Risk/Cost를 낮출수 있기 때문에 ER-WIN이나
Powerpoint, UML Tool을 사용해서 가치-비용 모델에서 이야기하는 맨 마지막 작업으로 설계를 한다는 현실이 상기한다
면 그대로 맞아 떨어지죠)
산출물 자체로 보면 설계/설계서는 한국 개발풍토에서 적대적으로 가치없는 일이면서도 Risk(Cost)는 매우 큰 일임에 분명합니
다.
하지만, 과정에 더 많은 가치를 부여하면 이야기는 달라진다고 생각합니다.
1. 중복작업을 없앨 수 있습니다.
2. 수 많은 토론과 시뮬레이션을 통해 개발팀원 모두가 그 내용을 공유할 수 있습니다.
3. 요구사항을 테스트할 수 있으며, 설계자체도 테스트 할 수 있습니다.
4. 개발진척도를 설계대비 몇 %로 가시화할 수 있습니다. (Method의 수나 Function Point활용)
5. 어떤 개발자가 어떤 일을 하고 있고 생산성이 어떻게 되는지 명확하게 측정가능합니다. 등등등
이렇게 설계서가 아닌 설계 자체에 Focus한다면 설계는 High-Value, High-Risk(Cost)가 되어 가장 먼저해야
할 작업으로 인식되게 됩니다.
단지 설계서는 그 과정에서 나오는 산출물일 뿐이라는 이야기입니다. (개발중에 도출되는 설계의 문제는 설계를 고치면 될 일이니,
설계서에 목숨 걸지 말자라는 이야기와 동일합니다.)
On 12월22일, 오후9시49분, 이춘식 <choon...@gmail.com> wrote:
> 안녕하세요? 다소 촌스러운 질문일까요?
>
> 여기에 계신 훌륭한 분들의 의견을 듣고 싶습니다.
>
> 여기서 찾은 인상 깊은 글은 여기에 있고,https://groups.google.com/d/msg/xper/9Ae5MvPDfmY/UnuVij4bTbgJ
>
> 제가 드린 질문에 이렇게 좋은 답변도 해주셨습니다.http://allofsoftware.net/entry/IsDesignNeeded
제목 : Risk vs. Value Matrix
가장 먼저해야 할 일 : 가치높음, 리스크높음
두번째 해야 할 일 : 가치높음, 리스크낮음
세번째 해야 할 일 : 가치낮음, 리스크낮음
피해야 할 일 : 가치 낮음, 리스크높음
> > 많은 의견 부탁드립니다.- 원본 텍스트 숨기기 -
>
> - 원본 텍스트 보기 -
���迡 ���� ���ǿ� ���� �� �ʿ伺�� ���� �̾߱⸦ ��̷Ӱ� �о���ϴ�. �� ���ش� ������ �ǰ��� ��� �����մϴ�.
����� ��� ������ ���� ���� ����� ���ȭ �� ���̶�� ���մϴ�. ������ ������ ���������� �Ǽ���� �ϸ� anyone, anytime �ݺ������ϰ� �ϴ� �� �Դϴ� ���?�� �Ŵ���ó�� ������
����Ʈ���� ���� �� ���� �ʼ����� ���Դϴ� �� ����, ���μ���, �� �� ...
��Ÿ��� ������ �̸� ����� �ϴ� �����ڰ� �� �� �ʴٴ� ���Դϴ�
Ŭ������ �ҵ��� �̸��� ���� ����̸� ���� �� å���� �����Դϴ�
�� ��� ���� ��������� �ʿ��� �����Դϴ� ���� �� ���� ���踦 ���������� �ʽ��ϴ�
�Ǻ��� ��� ���ְ��� �Ǻ��� ���� �DZ⸦ ��� ��� �� ������ �ǰ��� ���� �����ڰ� �ʿ��ϰ� �Ǻ����̴� �Ұ����ϰ���
|
|||
|
우리가 생각해봐야 할 부분은 과연 무엇이 설계(design)인가 하는 것인데...
우선 내가 생각하는 "설계가 전혀 없는 프로그램", "설계를 최대로 한 프로그램", "설계를 한 건지 안 한건지 애매한 프로그램"의 예를 각기 하나씩이라도 생각해 보시면 내가 주로 생각하는 설계의 정의에 대한 몇 가지 힌트를 얻으실 수 있을 것 같습니다(참고로 사람에 따라 위 세가지 범주에 대한 답 하나 이상이 공집합일 수 있습니다).
여기에 추가적으로 생각해볼 질문 몇가지입니다:
0) 설계는 활동(activity)일까요, 결과물(artifact)일까요 아니면 양자 모두일까요? 각각의 범주는 어디까지일까요? 나는 주로 어떻게 "설계"라는 단어를 쓰나요? (이하 질문에서 나오는 "설계"라는 단어는 행동 혹은 결과물 혹은 양쪽으로 모두 해석가능합니다)
1) 특정 형태의 설계문서가 있으면 "설계가 있는 것"이고, 그 형태의 설계문서가 없으면 "설계가 없는 것"이라고 할 수 있을까요?
2) 소스코드(및 주석) 외에 별도의 종이문서, 전자문서가 없는 시스템이 있을 경우 "설계가 없다"라고 할 수 있을까요?
3) 만약 어떤 프로그래머가 한참을 골똘히 생각하더니 프로그램을 작성해서 완료했습니다. 이 프로그램은 설계 없는 프로그램인가요, 아니면 설계 있는 프로그램인가요?
4) 어떤 프로그래머가 별 생각 없이 프로그램을 시작하면서 하는 도중 간간이 골똘히 생각을 하면서 프로그래밍했습니다. 이 프로그램은 설계 있는 프로그램일까요 아닐까요?
양자 모두라고 생각합니다. 비즈니스 프로세스에서는 결과물이 없는 활동은 의미가 없으니까요.
1) 특정 형태의 설계문서가 있으면 "설계가 있는 것"이고, 그 형태의 설계문서가 없으면 "설계가 없는 것"이라고 할 수 있을까
요?
형태는 중요하지 않지만 결과물이 있어야 할 것 같습니다.
2) 소스코드(및 주석) 외에 별도의 종이문서, 전자문서가 없는 시스템이 있을 경우 "설계가 없다"라고 할 수 있을까요?
소스코드 및 주석도 문서화의 한 방법이므로 설계가 있다고 할 수 있습니다.
3) 만약 어떤 프로그래머가 한참을 골똘히 생각하더니 프로그램을 작성해서 완료했습니다. 이 프로그램은 설계 없는 프로그램인가
요, 아니면 설계 있는 프로그램인가요?
설계가 있는 프로그램입니다. 요구사항에 대해 잘 알고 있는 경우에 해당하겠죠.
4) 어떤 프로그래머가 별 생각 없이 프로그램을 시작하면서 하는 도중 간간이 골똘히 생각을 하면서 프로그래밍했습니다. 이 프로그
램은 설계 있는 프로그램일까요 아닐까요?
설계가 있는 프로그램입니다. 처음부터 생각할 수 없는 것을 만들 때도 있으니까요.
이런 때는 직접 코딩해가면서 새로운 사실을 발견하기도 합니다.
위의 질문에 덧붙여 이야기 하자면
그래도 중요 도메인에 대해서 보다 형식을 갖춘 문서가 필요하다고 생각합니다.
On 12월23일, 오전11시49분, 이춘식 <choon...@gmail.com> wrote:
> 안녕하세요? 다소 촌스러운 질문일까요?
>
> 여기에 계신 훌륭한 분들의 의견을 듣고 싶습니다.
>
> 여기서 찾은 인상 깊은 글은 여기에 있고,https://groups.google.com/d/msg/xper/9Ae5MvPDfmY/UnuVij4bTbgJ
>
> 제가 드린 질문에 이렇게 좋은 답변도 해주셨습니다.http://allofsoftware.net/entry/IsDesignNeeded
현재 제가 몸 담고 있는 회사에서 제가 현재 하고 있기 때문에 현실성이 없다고 말할 수는 없습니다.
저희는 설계를 합니다. 다만 모든것을 문서화하지는 않습니다.
개발과 테스트에 필요한 인원이 모여서 설계를 합니다. 설계의 목적은 서로의 이해를 돕기 위한 것입니다. 이러이러한 기능이 들어
갈 것이고 이것들은 어떻게 구현이 될 것이며 이러이러한 테스트가 필요할 것 같다.... 이러한 내용으로 미팅을 합니다.
저희는 소스코드에 설계가 있습니다. 따라서 코드리뷰를 중요하게 생각합니다. 매니저가 쓴 코드도 일반 개발자가 리뷰를 합니다. 어
떤 때는 변수 이름까지도 지적을 할때가 종종 있습니다. 그리고 코드에 대한 코멘트를 중요하게 생각합니다. 나중에 누가 봐도 왜
이 한줄의 코드가 들어가 있는지 이해할 수 있게 하기 위함입니다. 물론 모든 코드에 코멘트를 달지는 않습니다. 백그라운드 이유
가 복잡할 경우 코드보다 많은 양의 코멘트를 적는 경우가 많습니다. 이 두가지로 만족을 못하는 경우를 문서로 남깁니다. 전체적
인 그림에 대한 이해가 필요한 경우, 왜 이러한 아키텍쳐적인 결정을 내렸는지에 대한 문서를 남깁니다.
저희가 이러한 방법을 채택하게 된 것은 이런것이 가장 좋을 것이라는 생각을 했기 때문이 아니라 이런 저런 방법을 찾다 보니 여기
에 도달한 것이라고 말씀드릴 수 있습니다.
누구에게나 맞는 방법은 없습니다. 어느 조직이든 그 조직에 가장 적합한 방법이 있다고 생각합니다.
안녕하세요? 다소 촌스러운 질문일까요?여기에 계신 훌륭한 분들의 의견을 듣고 싶습니다.
여기서 찾은 인상 깊은 글은 여기에 있고, https://groups.google.com/d/msg/xper/9Ae5MvPDfmY/UnuVij4bTbgJ
제가 드린 질문에 이렇게 좋은 답변도 해주셨습니다. http://allofsoftware.net/entry/IsDesignNeeded