본문 바로가기

프로그래밍 강좌/소프트웨어 개발

[소프트웨어] SW 개발 방법론(2) - 폭포수 모델 프로세스 나선형 통합 애자일 agile waterfall model process spiral unified 선언문 협업 UP

지난 시간에 소프트웨어 개발 방법론에 대해 기초를 알아봤습니다.

오늘은 소프트웨어 개발 프로세스에 대해 알아 보겠습니다.

1. 소프트웨어 개발 프로세스란?
2. 폭포수 모델
3. 나선형 모델
4. 통합 모델
5. 애자일 모델
소프트웨어 개발 프로세스란?

소프트웨어 개발 프로세스란 무엇일까요?

소프트웨어를 개발할 때 해야 하는 일의 순서를 정의하는 것이죠.

일의 순서는

입니다.

 

이 순서를 어떻게 수행하느냐에 따라 개발 프로세스의 종류가 나뉩니다.

1년짜리 프로젝트를 예로 들어보겠습니다.

 

Waterfall (폭포수) Process (1970년대)

분석(1~3월)

설계(4~6월)

구현(7~10월)

테스트(11, 12월)

이렇게 하게 됩니다.

위키 백과에 보면 아래와 같은 그림이 있습니다.

출처:  https://ko.wikipedia.org/wiki/%ED%8F%AD%ED%8F%AC%EC%88%98_%EB%AA%A8%EB%8D%B8

개발 순서를 그대로 나열하고 폭포처럼 흐르죠?

이는 순차적으로 한 단계, 한 단계 진행해 나가는 것으로 전 단계가 수행되어 완료되기 전에는 다음 단계로 진행 할 수 없는데, 각 단계를 완벽히 마무리 한 이후 다음 단계를 진행하는 것이 불가능하다는 것 입니다.

왜냐하면 요구사항도 계속 바뀔 것이고, 그렇게 되면 설계도 바뀌어야 하기 때문이죠.

 

이런 프로세스는 실패 확률이 높다는 것이 1970년대 후반에 제기가 되었고 그래서 나온 것이

Spiral Process 입니다.

 

Spiral(나선형) Process(1970년대 후반)

나선형 모델은 프로젝트 수행 시 발생하는 위험을 관리하고 최소화 하려는 것이 목적입니다.

성과를 보면서 점진적으로 개발을 진행하는 것으로 대규모 프로젝트나 국책 사업 등 위험 부담이 큰 시스템 개발에 적합하다고 합니다.

출처:  https://snowdeer.github.io/sw-architecture/2017/02/13/software-development-process/

이건 단순히

"요구사항이 변경될 수 있으니 폭포수 모델을 두번 돌리자." 이겁니다.

분석 → 설계 → 구현 → 테스트(1~6월)

분석 → 설계 → 구현 → 테스트(7~12월)

하는 거에요.

이것도 한계점을 드러내게 되죠.

1년에 몇번을 반복해야 하느냐? 요구사항이 계속 바뀐다면??

 

그래서 나온 것이 Unified Process 입니다.

 

Unified(통합) Process(1980년대)

혹시 이런 그림 보신적이 있나요? 매우 유명한 그림이죠.

출처:  http://www.ambysoft.com/unifiedprocess/agileUP.html

이 Process의 요점은 분석, 설계, 구현, 테스트를 매번 동시에 진행한다 입니다.

다만, 하는 일의 양이 단계별로 차이가 있다. 입니다.

1년짜리 10명이 참여하는 프로젝트를 예로 들면,

Inception(도입) 단계: 분석(5명) + 설계(3명) + 코딩(2명) + 테스트(1명)

Elaboration(구체화) 단계: 분석(2명) + 설계(4명) + 코딩(2명) + 테스트(1명)

Construction(구축) 단계: 분석(1명) + 설계(2명) + 코딩(5명) + 테스트(2명)

Transition(전이) 단계: 분석(1명) + 설계(2명) + 코딩(3명) + 테스트(4명)

식으로 참여하는 것 입니다.

 

그러다가 최근에는, Agile 이란 단어가 등장하게 되죠.

 

Agile(애자일) Process

애자일 선언문을 보시면,

개인과 개인간 상호작용이 프로세스 및 툴보다 우선되고, 작동하는 소프트웨어가 포괄적인 문서보다 우선되며,

고객과의 협업이 계약 협상보다 우선되고, 변화에 대응하는 것이 계획을 따르는 것보다 우선한다!

입니다.

 

애자일이란 기민한, 좋은 것을 빠르고 낭비 없게 만드는 것 이란 뜻입니다.

출처:  https://snowdeer.github.io/sw-architecture/2017/02/13/software-development-process/

1~2주의 짧은 간격 내에 working software를 만드는 것에 가치를 둡니다.

여기에서 중요한 것은 Collaboration이겠죠?

 

"자네 어떤 일을 언제까지 할 수 있나?" 라는 사고 방식에서 "자네 2주 후까지 어떤 기능을 개발할 수 있나?" 라는 사고 방식으로의 전환이 바로 애자일 입니다.

 

우리가 업무 단위의 일정 세우는 방식에서 시간 단위의 업무를 정하는 방식으로 사고를 전환할 때인 것 같습니다.