진화적 모델
초기의 소프트웨어 개발은 몇 년이라는 긴 시간이 걸리더라도 고객이 이해하고 기다렸습니다. 그러나 최근의 비즈니스 환경은 개발 사이클이 긴 것을 허용하지 않습니다. 새로운 소프트웨어 시스템을 빠른 시간에 시장에 내놓는 것이 기업의 이윤과 사활에 직결되기 때문입니다. 결국 진화적 모델은 폭포수 모델이 한 번에 릴리스 하기 전에는 사용자가 아무것도 경험하지 못하고 피드백 할 수 없는 단점, 즉 빅뱅(big bang) 릴리스를 보완하려는 방법입니다.
기본적인 아이디어는 사용자에게 시스템을 조기에 경험하게 하고 출시를 빠르게 하기 위하여 아래 그림에 표현한 것처럼 조금씩 점증적으로 개발하는 것입니다. 즉 시스템을 여러 번 나누어 릴리스 하는 방법으로 중 요하고 기초적인 기능을 우선 개발하여 사용하게 하고 나머지는 다음번에 개발하여 확장해 나가는 방법입니다. 따라서 이 방법은 개발되어 운용되고 있는 시스템과 개발되고 있는 시스템이 병행 존재합니다. 다음 릴리스 후에는 현재 운용되는 시스템을 개발 시스템으로 교체하게 됩니다.
릴리스가 반복되면서 시스템이 완전히 구현될 때까지 기능적 능력이 추가됩니다. 반복 단계마다 확장과 설계 조정이 일어날 수 있습니다. 이런 방법의 장점은 테스트를 잘 할 수 있다는 점입니다. 반복의 증가분을 테스트하는 것이 폭포수 모델과 같이 전체 시스템을 단번에 테스트하는 것보다 쉽기 때문입니다. 또한 프로토타이핑과 같이 시스템의 최종 요구를 결정하는 데 유용한 피드백을 사 용자에게 제공할 수 있습니다.
개발 과정에서 릴리스를 구성 방법은 크게 두 가지가 있습니다. 점증적인 방법과 반복적인 방법이다. 점증적인 개발 방법은 요구분석서에 나타낸 시스템을 기능별로 여러 개의 서브시스템으로 나누고 일부 기능 만을 포함한 서브시스템을 릴리스하고 다음에 새로운 기능을 추가해 나가는 형태입니다. 따라서 새로운 릴리스가 발표됨에 따라 시스템의 기능이 완성되어 갑니다.
반복적인 방법은 처음부터 시스템 전체 기능을 대상으로 하되 릴리스 할 때 마다 기능을 더 완벽히 개발하는 형태입니다. 예를 들어 워드프로세서를 개발한다고 할 때 릴리스 1에 문서의 입력 기능을 완성하고 릴리스 2에 편집기능을 추가하며 릴리스 3에 다양한 글자체와 서식을 사용할 수 있도록 포매팅 기능을 추가하였다면 이는 점증적인 방법입니다. 반복적 방법은 릴리스 1에 입력, 편집, 포매팅 기능이 기본적으로 가능하게 하고 릴리스 2에서는 같은 기능이 지만 성능을 향상한다든지 기능을 개선합니다.
점증적인 방법과 반복적인 방법을 병행하여 사용하는 경우도 많이 있습니다. 새로운 릴리스에 새 기능을 추가할 수도 있고 릴리스 된 기능을 향상시킬 수도 있다. 이 두 가지 방법을 단계적 개발(phased development)이라고 부르기 도 하며 다음과 같은 이유로 각광을 받고 있습니다.
- 몇 가지 기능이 부족하더라도 초기에 사용 교육을 할 수 있다. 사용법을 교육하는 과정에 개발자들은 부족한 점들을 발견하여 다음 릴리스에 향상시킬 수 있다. 이렇게 되면 사용자의 요구를 빠르게 반영할 수가 있습니다.
- 이전에는 없었던 기능을 가진 소프트웨어에 대한 시장을 빨리 형성시킬수 있습니다.
- 자주 릴리스 하면 가동 중인 시스템에서 일어나는 예상하지 못했던 문제를 신속하고 꾸준하게 고쳐 나갈 수 있습니다.
개발팀이 릴리스마다 다른 영역에 초점을 둘 수 있습니다. 예를 들어 첫 번째 릴리스에서는 사용자 인터페이스에 초점을 두고 명령어 중심의 인터페이스를 아이콘 중심의 포인트-클릭 형태로 바꾸고 두 번째 릴리스에 서는 시스템의 성능을 향상시키는 쪽으로 중점을 둘 수 있습니다.
반복적 모형은 프로덕트의 증분을 정확히 계획하고 릴리스 한 다는 점에서 진화적 (evolution) 모형과 다릅니다. 반면 고객에게 모든 증분을 릴리스하고 고객의 우선순위를 고려하여 고객과 밀접하다는 의미에서 애자일 모델과 유사합니다.
결론적으로 진화적 모델은 탐구적인 프로젝트에 적합합니다. 즉 시스템이 동작되어 사용해 보아야 정확한 요구와 알고리즘이 파악되는 유형의 프로젝트를 말합니다. 대부분의 지능형 시스템, 유전자 배열과 같이 아직 알려지지 않은 것을 발견하려는 목적의 연구를 위한 소프트웨어, 환경과 활발히 상호작용하는 임베디드 시스템이 여기에 속합니다. 진화적 모델은 일정이 정확히 예측되어 야 하는 프로젝트에는 적합하지 않습니다.
참고자료 출처 : 새로쓴 소프트웨어 공학 (저자 : 최은만)