ki hyun Lee
“소프트웨어 개발 커뮤니티에서 소프트웨어 개발 방법론과 이를 구현할 방법이라는 주제보다 더 많은 논쟁을 불러일으키는 주제는 없을 것이다" - 존 소메즈
소프트웨어 개발 방법론은 소프트웨어 제작 절차를 정의한다. 몇 가지 원칙 외에 크게 요구하는 게 없는 가벼운 방법론도 있고, 익스트림 프로그래밍처럼 지켜야 할 규칙이 무척 많은 방법론도 있다. 이번 글에서는 여전히 많은 조직에서 사용하고 있는 폭포수 프로세스와 오늘날 소프트웨어 개발계에서 가장 유행하고 있는, 누구나 하지만 아무도 제대로 하지 않는 애자일 개발 모델에 대해 살펴볼 예정이다. 마지막으로는 소메즈가 가장 중요하다고 생각하는 애자일 개발 방법론 세 가지를 소개하겠다.
전통적인 폭포수 개발
소메즈가 처음 개발을 배울 무렵에는 모두가 전통적인 폭포수 프로세스를 썻다고 한다. 폭포수라는 이름조차 없었고 이 방법을 비웃는 사람도 없을 정도로 당연하게 사용되는 방법론이었다.
폭포수 개발은 이름 그대로 바닥에 닿을 때까지 한 단계가 끝나면 다음 단계로 내려가며 소프트웨어를 한 번에 한 단계씩 만들어가는 방식이다. 폭포수 개발 방법론에는 소프트웨어 개발 생명주기(SDLC)가 포함되어 있다. 사실 폭포수 개발은 SDLC를 점진적으로 따라갈 뿐이라고 보아도 무방하다.
SDLC를 반대하는가?
소메즈는 SDLC를 반대한다고 한다. SDLC는 소프트웨어를 개발하기 위해 요구사항 분석부터 시작해 설계, 구현, 테스트, 배포, 유지 보수로 끝나는 일련의 과정을 가리킨다. 한 번에 한 단계씩 앞으로 전진하고 절대로 뒤로 가지는 않는다고 한다.
요구사항 분석
개발할 소프트웨어에 필요한 요구사항을 전부 알아내는 단계다. 고객이나 이해 당사자와 대화를 하면서 알아내기도 하고 그냥 직접 생각해내기도 한다. 어떤 방법을 쓰든 제작에 들어가기 전에 알아야 한다. (하지만 이게 늘 가능하지는 않다는 걸 금세 알게 된다.)
소프트웨어 디자인
전통적인 폭포수 방식에는 보통 방대한 사전 설계라고 알려진 방법을 쓴다. 세부 사항 대부분에 대한 계획을 아주 낮은 수준까지 설계 단계에서 정해두는 걸 가리키는데 현실에서는 요구사항이 바뀌고 예측하지 못한 일들이 일어나므로 이런 방식을 고수하기는 어렵다.
구현
간단하다 개발자들을 갈아넣어 멋진 코드를 만들면 그만이다.
테스트
테스터들이 개발자들이 열심히 짜놓은 코드에 일일이 태글을 걸며 버그를 잡는 시간이다. 소메즈의 말에 따르면 몇 번의 논쟁과 속임수를 거친 후에 모두가 다음 단계로 넘어가도 좋다고 동의할 때까지 최대한 많은 버그를 고친다고 한다.
배포
배포란 서버에 코드를 배포하는 작업일 수도 있고, 모든 고객에게 배송할 배포용 표준 CD를 만든다는 뜻일 수도 있다. 오늘날에는 앱 스토어에 앱을 업로드한다는 의미일 수도 있다. 어떤 방식으로든지 자신의 소프트웨어를 고객의 손에 전달하기만 하면 된다.
유지 보수
어떤 책에서 개발자들은 새로운 기능을 개발하는것보다 유지보수하고 문서를 작성하는데 시간을 더 쓴다는 말을 봤던 것 같다. 그만큼 유지보수는 중요하고도 지루한 일이다.
이게 바로 SDLC의 전 단계이다. 요구사항을 알아내고, 소프트웨어를 설계하고 제작하고 테스트한 후 배포해서 회사가 망하기 전까지 유지 보수하는 것이다.
다음 글에서는 폭포수 개발론에는 어떤 문제가 있는지와 애자일 방법론에 대해 살펴보자
