레이블이 개발프로세스인 게시물을 표시합니다. 모든 게시물 표시
레이블이 개발프로세스인 게시물을 표시합니다. 모든 게시물 표시

2008년 12월 24일 수요일

Agile에 대한 단상

올 여름 휴가 차 미국에 방문 했을 때 나의 오랜 친구이며 소프트웨어 개발 동지인 Eddy를 만났습니다. 
그 친구는 UC버클리에서 컴퓨터 사이언스를 전공하고 실리콘밸리에서 오랫동안 잔뼈가 굵은 친구인데, 같이 소프트웨어 공학에 대해서 토론을 하게 되었습니다. 그때 대뜸 "Agile을 아냐"고 물어보더군요. 그리고는 현재 미국에서 Agile이 얼마나 인기가 있는지 장황하게 설명을 해주더군요. 이때 저는 한국의 열악한 소프트웨어 개발 실정을 적나라하게 설명해 줬습니다. 이 친구 역시 한국 업체와 몇 번 일을 해본 경험이 있어서 이해를 하더군요.

지금 한국에서도 Agile에 대한 관심이 참 높은 것 같습니다. 저는 Agile을 헐뜯을 의도는 전혀 없습니다. 하지만 소프트웨어 개발에 꼭 필요한 기초조차 갖추지 못한 회사라면 Agile방법론을 시도한다고 해서 문제가 해결될 수는 없을 것입니다. 과거에 나왔던 수많은 방법론처럼 또 이를 맹신하고 따른다면 과거와 똑같은 실패의 경험을 또 하게 될 것입니다. 또하나의 Silver bullet이 될 수도 있습니다.

소프트웨어 역량평가표를 올린 적이 있습니다. 여기서 10점 이하의 하위 점수를 받는 회사라면 먼저 기초를 갖추고 개발자들의 역량을 끌어올리는 일이 우선이라고 생각합니다. 그리고 나서 Agile이 되었든, 무슨 방법이라도 효과를 발휘할 수 있을 것입니다.

2008년 12월 20일 토요일

빌딩과 개집

시중에는 넘쳐나는 수많은 소프트웨어 개발 방법론이 있습니다. 지금까지 알려진 방법론만 100가지가 넘습니다. 인터넷에서 이에 대한 설명만 보고 Template만 복사해 와서 회사에 적용하기에는 무리가 있습니다. Template과 Sample만 보면 방법론을 적용하여 선진 개발 방식을 따라 할 수 있을 것 같지만, 이는 착각입니다. 
방법론 자체가 잘못되지 않았음에도 잘못된 방식으로 오해를 하여 적용을 하거나 특정 부분에 집착하여 전체를 놓치는 경우가 많습니다.

집을 짓는데 빌딩을 만드는 방법을 적용하면 안되고, 그렇다고 개집을 만들 때처럼 대충 지어서도 안 됩니다. 개집을 만들 때는 대충 만들어도 되고, 안되면 다시 만들면 됩니다. 빌딩을 만들 때는 한치의 오차도 없이 정확하고 복잡한 방법을 사용해야 합니다. 
빌딩을 만드는데 대충 만들고 마음에 안들면 다시 만들고, 요구사항을 중간에 마구 바꾸면 안된다는 누구나 알 수 있습니다. 
그 반대로 개집을 만드는데, 정교한 설계와 많은 시간과 비용을 들일 필요는 없겠지요.
하지만 소프트웨어를 개발하는 현실 세계에서는 이와 같은 일들이 흔히 벌어집니다. 
빌딩과 같은 시스템을 만들면서 형식적으로만 방법론을 따르지만, 아키텍쳐는 심각하게 고려하지 않고, 요구사항이 철저히 분석, 검토되지도 않고 나중에 요구사항을 마구 바꿀 수 있다고 생각합니다.

모든 개발 방법은 프로젝트의 특성에 따라서 적절히 정해져야 합니다. 많은 경우 작거나 중간 규모의 프로젝트를 진행하면서 거대 프로젝트에 적합한 방법론을 기계적으로 적용하려고 합니다. 또는 정반대로 완전 주먹구구식으로 진행하는 경우도 많습니다. 
작거나 중간 규모의 프로젝트에 개발 방법론을 적용하려면 뭔가 생략하고 간소화를 해서 적용해야 할 것입니다. 그런데 무엇을 생략할지는 그 원리를 모르면 알기가 어렵습니다. 따라서 인터넷이나 소프트웨어 공학책을 통해 쉽게 익힌 방법론을 회사에 적용하는 것은 무리가 있습니다. 각 회사에 맞는 개발 방법론을 적용하려면 전문가의 도움을 받는 것도 좋은 방법일 것입니다.


2008년 12월 12일 금요일

다 만들었어요. 이제 테스트만 하면 되요.

소프트웨어를 개발하는 회사에서는 자주 듣는 말입니다.
그런데, 이 테스트가 언제 끝날지 모르는 경우가 많습니다.

소프트웨어 개발 컨설팅을 하면서 정말 놀란 것 중의 하나가 대부분의 회사가 릴리즈 시 "알파", "베타", "RC", "GA", "FCS"와 같은 단계를 거치지 않는 다는 것이었습니다. 
대부분이 알파수준의 소프트웨어를 만들어서 만족스러울 때까지 테스트와 수정을 동시에 병행한다는 것이었습니다. 이는 큰 회사나 작은 회사나 별 차이가 없었습니다. 개발을 단계적으로 진행하지 않는 회사는 업무와 일정에 대한 정교한 구분 없이 일을 진행하다가 적당한 시점에서 한번의 테스트를 통해 제품을 완성하려고 합니다.
이를 빅뱅(Big bang) 테스트라 하는데 이 방법이 운 좋게 개발 기간을 단축시켜 줄지도 모른다는 기대감으로 일을 중구난방으로 진행하는 것입니다. 하지만 이는 전혀 근거가 없는 생각이며, 테스트를 한번에 끝낸다고 프로젝트가 더 빨리 끝나지는 않습니다. 이 방법은 테스트 기간 내내 혼란에 휩싸이게 만들고, 테스트가 언제 끝날지 도저히 예측할 수 없으며, 일정 기간 내에 품질이 얼마나 향상될 수 있을지 추측조차 하기 어렵습니다. 심지어 통합조차 잘 되지 않기 때문에 내포되어 있는 버그가 얼마나 되는지도 파악하기 어렵습니다. 결국 프로젝트 일정이 가시권에서 점점 멀어지게 됩니다. 운이 좋으면 밤을 새면서 일정대로 프로젝트를 마칠 것이고, 그렇지 않으면 프로젝트가 실패하게 됩니다. 


소프트웨어 프로젝트는 개발 단계 별로 관리하는 것이 좋습니다. 단계 별로 진행을 하면 각 단계가 명확해지기 때문에 프로젝트 진행 상황이 눈에 들어오고, 혼란으로 인한 재작업이 줄어 들며, 프로젝트 일정을 단축시키고, 비용을 절약해 줍니다.
특히, 높은 품질의 제품을 출시하기 위해서는 제품 및 프로젝트의 성격에 알맞게 단계 별 릴리즈를 하는 것이 좋습니다. 릴리즈는 알파, 베타, RC(Release Candidate)단계로 나뉘고 각각의 릴리즈 일정은 미리 계획하여 정해 둬야 합니다.



각 단계에는 다음과 같은 의미가 있습니다.

  • 프리알파(Pre-alpha): 알파 이전에 만들어내는 빌드들입니다. 개발 버전(Engineering version)이라고 하기도 합니다. 일일빌드(Daily Build)의 결과물도 프리알파에 해당합니다. 아직 기능이 모두 다 구현이 되어 있지 않습니다.
  • 알파(Alpha): 기능이 모두 구현되었으나, 버그는 꽤 많은 상태, 설치도 안되어서 기능을 확인해 볼 수도 없는 등의 버그는 없어서 모든 기능을 테스트 해 볼 수는 있습니다. 일부 작동이 안 되는 기능이 있습니다. 일반적으로 알파버전부터 테스트팀의 공식적인 테스트가 시작됩니다. 이를 알파테스트라고 부릅니다.
  • 베타(Beta): 중요한 버그는 거의 수정이 되어서 작은 버그들만 남아 있습니다. 베타 버전은 종종 사용자 평가(Evaluation) 및 외부 테스트(Field Test)를 위해서 외부에 배포되기도 합니다. 이런 목적으로 배포되는 버전을 베타 릴리즈라고 부르며 베타 버전을 사용해 보는 사용자를 베타 테스터라고 부릅니다. 베타버전 이전에 프리베타(Pre-beta)를 만드는 경우도 있습니다
  • RC(Release Candidate): 출시를 위해서 만들어진 버전입니다. FCS(First Customer Shipment), 감마(Gamma) 또는 델타(Delta)라고 부르기도 합니다.
  • GA(General availability)RTM(Release to Manufacturing)이라고 부르기도 합니다. RC 중에서 테스트를 통과하여 출시 할 수 있는 버전입니다. 일반적인 경우 마지막 RC와 동일합니다. 
이런 식으로 테스트팀에 전달하는 버전이 어느 수준인지 알려주어야 합니다. 그렇지 않으면 알파수준의 버전을 가지고 곧 고객에게 전달할 수 있을 것 같은 착각에 빠지기도 합니다.

모든 소프트웨어를 개발할 때마다 이 같은 단계를 전부 다 거쳐야 하는 것은 아닙니다. 제품의 규모와 난이도, 성격에 따라서 단계를 서로 다르게 정해야 합니다. 대규모 제품이거나 복잡한 팩키지 제품은 이 단계들을 거치는 것이 일반적입니다. 이런 제품을 한번에 높은 품질로 만들어 내기는 어렵기 때문입니다.

하지만 소규모 제품이거나, 고객의 수가 아주 적거나, 업그레이드 프로젝트라서 복잡도가 낮을 경우라면 처음부터 원하는 품질 수준에 근접하게 제품을 만들어 낼 수 있습니다. 이런 경우라면 테스트 단계를 간략하게 해서 진행할 수 있습니다.