본문 바로가기
프로그래밍 놀이터/Tips

[실용주의 프로그래머] 추정

by 돼지왕 왕돼지 2018. 10. 16.
반응형



[실용주의 프로그래머] 추정


incremental development, trade off, [실용주의 프로그래머] 추정, 각 매개 변수에 값을 주어라, 간결함과 정확성을 맞교환, 누군가 추정에 대해 물으면 무엇이라 대답해야 할까?, 모델을 만드는 것은 추정 프로세스에 부정확성을 야기한다, 모델을 컴포넌트로 나누어라, 무엇을 묻고 있는지를 이해하자, 스프레드시트, 시스템 모델을 만들어보라, 어떤 의미에서 모든 답은 추정치다, 점증적 개발, 추정, 추정치는 어디에서 오는가, 추정치를 기록하는 용기, 프로젝트 일정 추정하기

-

정보가 누락되어 있는 무의미한 질문들이 있다.

그러나 추정에 익숙하다면 답할 수 있는 문제들도 있다.

추정치 산출 과정을 통해 여러분의 프로그램이 살고 있는 세계에 대해 좀 더 이해할 수 있게 될 것이다.



-

추정을 통해 놀람을 피하라.





얼마나 정확한 것이 충분히 정확한 것인가?


-

어떤 의미에서 모든 답은 추정치다.

단지 누가 남보다 좀 더 정확한지가 다를뿐이다.

그러므로 누군가 추정치를 물었을 때, 자신에게 물어보아야 할 첫 번째 질문은 여러분의 답변이 사용될 상황이다.

질문자가 매우 높은 정확도의 답을 요구하는가, 아니면 단순히 큰 그림만을 요구하는가?



-

추정에서 한 가지 재미있는 사실은 사용하는 단위가 결과의 해석에 차이를 가져온다는 것이다.


기간을 추정할 때 다음과 같은 단위를 사용하기를 추천한다.


1~15일 : 일

3~8주 : 주

8~30주 : 달

30주 이상 : 추정치를 말하기 전에 다시 한번 생각해 보라.


이러한 개념은 양의 추정치를 말할 때도 적용된다.

여러분이 전달하려는 정확도를 고려하여 답변의 단위를 선택하라.





추정치는 어디에서 오는가?


-

모든 추정치는 문제의 모델에 기반한다.



-

항상 좋은 답을 알려주는 기본적인 추정 기술은 이미 그 일을 해본 사람에게 물어보라는 것이다.





무엇을 묻고 있는지를 이해하자.


-

어떤 종류의 추정이건 연습의 첫 단계는 상대방이 무엇을 묻고 있는지에 대해 이해하는 것이다.





시스템의 모델을 만들어보라.


-

클라이언트가 요청한 것이 무엇인지 이해한 후에는 대략적이고, 꾸밈없는 모델을 만들어 보라.

프로젝트에서 모델은 여러분의 조직이 개발을 하는 동안 사용할 디딤대가 되어줄 뿐 아니라 시스템을 어떻게 구현해야 할지에 대한 대략적인 그림을 제공해 줄 것이다.



-

모델을 만들어 보는 것은 장기적으로 창의적이고도 유용한 작업이다. 흔히 모델을 만드는 과정에서 표면에 명확히 드러나지 않았던 이면의 패턴과 프로세스를 발견하게 된다.

초기의 질문을 재검토하길 원하게 될 수 있다.



-

모델을 만드는 것은 추정 프로세스에 부정확성을 야기한다.

하지만 이는 피할 수 없는 일이며, 또한 유익한 일이기도 하다.

우리는 간결함과 정확성을 맞교환하고 있는 것이다.

모델을 만드는 데 두 배의 노력을 들인다 하더라도 결과의 정확도는 조금 개선될 뿐이다.

언제 모델의 정교화를 그만두어야 할지는 경험이 이야기해 줄 것이다.






모델을 컴포넌트로 나누어라


-

모델을 가졌다면 이를 컴포넌트로 분해할 수 있다.

이제 이러한 컴포넌트들이 어떻게 상호작용하는지에 대해 기술해주는 수식을 찾을 필요가 있다.


여러분은 각 컴포넌트가 전체 모델에 어떻게 기여하는지에 영향을 미치는 매개 변수를 갖고 있다는 것을 알게 될 것이다.





각 매개 변수에 값을 주어라


-

매개 변수를 찾아냈다면, 이제 각 매개 변수에 값을 줄 차례다.

이 단계에서 약간의 부정확함이 있을 수 있다.

이 단계에서 적용해 볼만한 기술은 결과에 큰 영향을 미치는 매개 변수가 무엇인지를 규명하고, 이 매개 변수의 값들을 최대한 정확히 산출해내는 것이다.



-

실제로 추정을 하다 보면 어떤 추정치를 다른 하위 추정치를 통해 계산하는 경우가 있는데, 이때 큰 오류가 슬그머니 기어 들어올 확률이 높다.





답을 계산하라


-

문제가 매우 단순한 경우에만 추정치가 하나의 답을 갖게 될 것이다.

시스템이 복잡해지면 중요 매개 변수들의 값을 변경시켜 가면서 여러 번 계산을 해보고, 이 가운데 어떤 것이 모델과 잘 들어맞는지 찾아내라.

이 때 스프레드시트는 큰 도움이 된다.



-

계산 단계에서 언뜻 이상해 보이는 답을 얻을 수도 있다.

이 때 이 값을 너무 쉽게 버리면 안 된다.

만약 계산이 정확하다면, 아마도 문제를 잘못 이해했거나 모델이 잘못되었을 것이다.

이는 귀중한 정보다.





추정치를 기록하는 용기


-

여러분이 계산한 추정치를 기록해 놓고, 이 값이 실제 결과에 얼마나 가까운지를 평가해 보는 것은 좋은 생각이다.

여러분은 추정치가 꽤 좋다는 것을 자주 발견할 것이고, 점차로 이를 기대하게 될 것이다.



-

추정치가 잘못되었더라도 움츠리거나 도망가지 마라. 왜 여러분의 추측과 실제 값이 달라졌는지 원인을 찾아야 한다.

실제 문제와 맞지 않는 매개 변수를 선택했을 수도 있다.

아니면 모델 자체가 잘못되었을 수도 있다.

원인이 무엇이든, 시간을 들여 이를 규명하라.

다음 추정치는 훨씬 나아질 것이다.





프로젝트 일정 추정하기


-

추정에 대한 일반 법칙은 변화하는 앱의 복잡성과 변덕스러움 앞에 와해되기 쉽다.

프로젝트의 일정을 정할 수 있는 유일한 방법은 진행하는 해당 프로젝트를 경험하는 것 뿐이란 사실을 알게 된다.

단계를 반복하는 점증적 개발(incremental development)을 연습한다면 꼭 그런 것만은 아니다.

    

    요구사항 체크하기

    위험 분석하기

    설계, 구현, 통합

    사용자와 함께 검증하기



-

코드와 함께 일정도 반복하며 조정하라





누군가 추정에 대해 물으면 무엇이라 대답해야 할까?


-

나라면 “나중에 전화드릴께요” 라 말할 것이다.

프로젝트 도중 숨을 고르고, 잠시 시간을 내어 이번 항목에서 기술한 단계를 밟아나간다면 더 정확한 추정치를 알려줄 수 있다.




반응형

댓글