소프트웨어 프로세스는 소프트웨어를 개발하는 과정을 말한다. 아주 많은 과정이 있지만 다음과 같은 요소들을 포함한다.
소프트웨어 프로세스 모델은 누가, 무엇을, 언제, 어떻게 할 것인지를 정의하는 방법이다. 이를 통해 일, 방향, 역할 ,결과물 등을 관리하고 만들어내는 방법을 설정한다. 다른 말로 SDLC(SW Development Life-Cycle) model -> "SW생명주기모델"이라고도 불린다.

1960년도에 제안된 가장 클래식한 모델이다.


폭포수 모델은 요구사항을 빠르게 정할 수 있다. 또한 일들이 순차적으로 진행되므로 주변 사람들과 같이 개발해 나갈 수 있다. 그러나 요구사항이 변경되면 처음으로 돌아가서 다시 만들어야 한다는 단점이 있다. 요구사항이 처음부터 제대로 정의되고 개발에 투여되는 사람들이 많은 큰 프로젝트에서 많이 사용한다.

요구사항의 세세한 부분을 각자 구현하고 조금씩 병합하면서 만드는 모델이다. 요구사항을 처음부터 정하고 세세하게 나누어서 만들면 Incremental development고, 요구사항을 추상적으로 정하고 변하는 요구사항에 따라 그때그때 만들면 Evolutionary development다.
Incremental model은 필요한 기능에 따라 각각 독립적으로 소프트웨어를 만들기 때문에 필요한 기능간의 연결성이 많지 않을 때 주로 사용한다. 그렇게 만든 소프트웨어를 마지막에 합쳐서 최종 결과물을 낸다.
Evolutionary model은 기능간의 연결성이 많아 독립적으로 소프트웨어를 만들기 힘들 때 사용한다. 이전에 만든 모델은 일단 끝까지 만들고, 도중에 기능을 추가한 모델을 같이 만든다. 더 이상 추가할 것이 없는 모델을 최종결과물로 선택한다.

"risk analysis"가 들어간 모델으로, 각각의 과정이 시작하기 전에 리스크에 대한 분석을 하고 시작한다. 안전성이 중요한 모델을 만들 때 많이 사용한다.
독립적으로 구현하고 테스팅까지 끝난 컴포넌트를 만든다. 안에를 보지 않고도 무엇을 하는지 이해가 되기 때문에, 이 컴포넌트를 필요한 곳에 사용하여 프로젝트를 만든다.
CBD는 software reuse, 다시 말해 소프트웨어를 다시 사용하는 것을 기본으로 하는 모델이다. 문제는 Software Pool에 컴포넌트들이 쌓여야 원하는 것을 사용할 수 있는데, 개발자들은 그럴 시간이 없다는 것이다. 남이 이해할 수 있는 코드를 만드는 것은 훨씬 어렵고, 이미 개발한 컴포넌트들을 좀 더 다듬을 시간이 부족했다. 또한 인터넷의 발달로 많은 해결방법들을 공유할 수 있게 되면서 기업에서 굳이 Software Pool을 만들 필요가 없어졌다. 앞과 같은 이유로 자주 사용되지는 못했다.

장점 : 안전성이 보장되어 있으므로 리스크를 줄이고, 비용 또한 줄일 수 있다. 역할에 맞는 컴포넌트들만 뽑아서 조합하므로 빠른 개발이 가능하다.
단점 : 기능을 고치고 싶을 때 컴포넌트를 수정하기 쉽지 않으므로 유지보수가 어렵다. 또한 내가 정확히 원하는 컴포넌트를 찾기 힘들거나 애초에 없을 수 있다.

에자일 모델은 그때그때의 요구사항에 맞춰서 빠르게 프로그래밍 하는 것으로, 빠른 구현과 좋은 대처 능력이라는 장점때문에 최근에 제일 많이 사용하는 모델 중 하나이다.
불필요한 문서 작성이나 요구 사항 명세서 등을 작성하지 않는다. 계속 수정되기 때문에 쓸모없는 작업들을 줄이고 코드 자체를 좋게 만드는 데 노력을 한다. 그렇게 만들어진 코드들은 누가 봐도 이해 가능하며, 다른 사람들이 편하게 사용할 수 있다.
또한 사용자(Client)들이 프로젝트에 상주하여 있다. 사용자들이 소프트웨어를 같이 만들기 때문에 변경사항에 민첩하게 반응할 수 있고 폭포수 모델같이 뒤로 돌아갈 필요가 없어진다.
에자일은 폭포수 모델과 비교되는 특성들이 있다. 굵은 글씨는 에자일이고 취소선은 폭포수 모델이다.
에자일의 장점이자 단점인 문서를 쓰지 않는다는 점은 개발과정을 줄일 수 있지만, 유지 보수(maintanance)가 힘들다. 이를 극복하기 위해 나온 것이 RUP다.
