All of Software 블로그를 RSS Feed에 등록을 해 놓으시면 편리하게 받아보실 수 있습니다.
RSS Feed
며칠 전 프로토타입에 관해 올린 글에 대해서 프로토타입 재사용에 대해서 여러 의견이 있어서 이 내용에 대해서 조금더 설명해보려고 한다.
2011/11/03 - [프로젝트/요구사항분석] - 프로토타입이란?
소프트웨어공학의 목적은 가장 적은 비용으로 가장 빠른 시간에 Software를 만들어내는 것이다.
여기에 부합되면 옳은 방법인 것이다. 하지만 우물 안에서 자신의 방법이 가장 좋은 방법이라고 우기는 것은 미숙함일 뿐이다.
여러가지 의견이 있었지만 모두 옳고 그름으로 구분 지을 수는 없다. 여러 답변들을 맞다 틀리다 얘기를 할 수 없으므로 좀더 원칙에 치중해서 얘기를 해보겠다.
필자의 의견은 프로토타입은 만들어 보고 버리는 것이라고 했다. 또한 버리는 코드라고 생각하고 만들어야 하는 것이다. 프로토타입을 버리는 것이 프로젝트를 가장 빨리 끝낼 수 있는 방법이기 때문이다.
그 이유는 다음과 같은 것들이 있다.
- 프로토타입의 목적은 가장 빠른 시간내에 Feaserbility study(실현가능성 검증)을 하는 것이다. 보통 실제 프로젝트에 반영될 때 제대로 적히는 소스코드 양의 20%정도의 코드만 적는다.
- 보통 에러처리와 약간의 버그는 무시한다.
- 검증된 것은 스펙에 기능으로 포함될 수 있고 이렇게 작성된 스펙을 외주를 줘서 개발할 수도 있고 회사의 다른 개발자들이 설계, 구현을 할 수도 있다.
- 이렇게 검증된 기능들은 모두 제품에 반영되는 것이 아니고 많은 기능은 최종 스펙에서 제외 될 수가 있다.
- 프로토타입은 C언어로 했지만 실제 개발은 Java로 할 수도 있다.
따라서 재사용 가능하도록 만든다면 낭비가 될 수 있다.
보통 개발자들은 자신이 정성들여서 만들어 놓은 소스코들 버리기 싫어한다. 그래서 어떻게든 소스코드를 재활용해보고자 노력하는 것이 보통이다. 따라서 제품의 비전이나 가치와는 상관없이 자신이 작성해 놓은 코드의 기능을 살려보고자 마케팅의 의견과 반대되게 우겨서 제품에 기능을 포함하기도 한다.
제품의 스펙은 개발자가 일방적으로 정하는 것이 아니고 여러 부서가 같이 정하는 것이지만 특히 개발자보다는 마케팅의 의견이 주가 되는 것이다.
그런데 개발자가 미리 잘 작성해 놓은 코드가 이런 결정에 방해가 되는 경우가 많고 대부분의 소프트웨어 회사의 마케팅은 별 생각이 없기 때문에 그냥 따라가는 경우가 허다하다.
그럼 프로토타입을 재사용한다는 생각을 하고 만들게 되는 상황은 어떠한가?
이러한 가정들을 사실로 생각하고 개발을 하는 것이다.
- 내가 스펙을 쓰고 설계를 하고 구현까지 모두 나 혼자 다한다.
- 프로토타입을 해본 것들은 제품에 모두 포함될 기능들이다.
- 프로토타입 해본 그 기능 그대로 제품에 반영될 것이다.
- 프로토타입을 해본 개발 언어 그대로 제품을 개발할 것이다.
- 프로토타입을 하기 전에 이미 아키텍처도 다 정해서 재 사용하는데 전혀 문제가 안된다.
사실 아주 작은 제품이나 소수의 팀이 개발하는 제품이 아니라면 위의 모든 것을 가정하기는 대단히 어렵다.
스펙을 작성하는 과정에서 수많이 기능이 추가되고 제거되며 무슨 개발 언어로 개발을 할 것인지 보통 스펙을 작성할 때는 정하지도 않는다.
어떠한 프로토타입은 개발언어를 정해야 하는 경우도 있고, 라이브러리도 정해야 하는 경우도 있다. 이런 경우라면 프로젝트에 또 제약사항이 생긴 것이다. 물론 프로젝트에 따라서는 스펙단계부터 개발언어와 특정 프레임워크를 사용하도록 정하는 경우도 있다.
스펙을 제대로 작성해야 하는 이유가 이러한 가능성이 있는 수많은 요소들과 제약사항, 가정들을 모아놓고 스펙을 정하는 것이다. 이런 것들을 정하지도 않고 코딩부터 시작하는 것이 흔히 개발하는 방식이다.
이런 프로젝트는 개발자 의지대로 그냥 개발이 되던가 나중에 뒤엎는라고 비용가 시간을 낭비하던가 제품이 점점 뒤죽박죽이 되어서 못써먹게 되는 경우가 많다.
프로토타입을 재활용할지 말지 하나의 이슈만 보면 원칙은 재활용하지 않는 것이 맞다.
하지만 위에서 말한 것들을 모두 알고 스펙도 제대로 쓰고 설계도 제대로 하고 개발을 하는데 재활용하는 것이 옳다고 생각한다면 프로토타입재사용도 틀린 방법은 아니다.
단, 적은 경험과 미숙함을 기반으로 기존에 하던 방식을 그냥 따라하는 것은 주먹구구의 연장선이 될 수 있다.
Image by
ッ Zach Hoeken ッ
전규현
프로젝트/요구사항분석
매번 글 재밌게 읽고 있습니다.
스펙을 정확하진 않더라도 간략히나마 추릴수 있는 방법은 어떤건가요?
항상 혼자서 취미 및 공부로 코팅하는 저는 어떤 프로그램을 짜고나서 결과는 생각처럼 움직이지만 더 구조적인 방법이 생각나서 다시 만들까 매일 고민합니다ㅡㅜ
안녕하세요. althea
스펙은 개발이 가능한 수준에서 가장 간략하게 적는 것이 중요합니다. 본인이 개발할 것이면 그냥 Text파일로 간단히 정리하는 것도 좋습니다. 형식은 구애받지 마세요.
흔히 스펙을 기능명세로 착각하는 경우가 많은데 스펙에는 회사의 목표, 비즈니스 전략, 비기능, 인터페이스, 환경 등 여러가지가 적힙니다.
개발해 놓고 나중에 아키텍처 개선이 생각나는 것은 스펙에서 충분히 아키텍처를 고민하지 못했거나 경험이 적은 제품이라서 개발해보지 않고 미리 좋은 아키텍처를 생각하기 어려운 경우 입니다. 이런 경험이 쌓여서 나중 제품의 아키텍처는 점점 좋아집니다. 그래서 경험이 많은 개발자들이 좋은 아키텍처를 만듭니다.