All of Software 블로그를 RSS Feed에 등록을 해 놓으시면 편리하게 받아보실 수 있습니다.
RSS Feed
소프트웨어를 개발하는 회사에서는 자주 듣는 말입니다.
그런데, 이 테스트가 언제 끝날지 모르는 경우가 많습니다.
소프트웨어 개발 컨설팅을 하면서 정말 놀란 것 중의 하나가 대부분의 회사가 릴리즈 시 "알파", "베타", "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와 동일합니다.
이런 식으로 테스트팀에 전달하는 버전이 어느 수준인지 알려주어야 합니다. 그렇지 않으면 알파수준의 버전을 가지고 곧 고객에게 전달할 수 있을 것 같은 착각에 빠지기도 합니다.
모든 소프트웨어를 개발할 때마다 이 같은 단계를 전부 다 거쳐야 하는 것은 아닙니다. 제품의 규모와 난이도, 성격에 따라서 단계를 서로 다르게 정해야 합니다. 대규모 제품이거나 복잡한 팩키지 제품은 이 단계들을 거치는 것이 일반적입니다. 이런 제품을 한번에 높은 품질로 만들어 내기는 어렵기 때문입니다.
하지만 소규모 제품이거나, 고객의 수가 아주 적거나, 업그레이드 프로젝트라서 복잡도가 낮을 경우라면 처음부터 원하는 품질 수준에 근접하게 제품을 만들어 낼 수 있습니다. 이런 경우라면 테스트 단계를 간략하게 해서 진행할 수 있습니다.
전규현
개발프로세스
STAGE,
소프트웨어 개발
유지보수 부분이 적게 나온건 의외이긴 합니다.
하지만, 가장 중요한 한가지를 투표하는것으로 기억되는데 그렇다고 한다면 제 생각과 얼추 비슷한 답변 분포인데요?
돌이아빠님 안녕하세요.
생각해보니 그렇겠군요.
유지보수가 정말 중요하지만, 대부분의 중견 개발자 분들은 유지보수를 맡지 않기 때문이 아닐까 생각해 봅니다. 다수의 프로젝트에서 유지보수는 경력이 짧거나, 초기 프로젝트를 수행하지 않은 멤버들에게 할당되는 경우가 많거든요. 물론 제 경험에 한정된 이야기입니다만, 우선 유지보수에 투입되는 예산이 적은 경우가 많고 따라서 경력자들에게 유지보수를 맡기기에 단가가 맞지 않으며, 게다가 유지보수 경험은 장기적인 경력 관리에 좋지 않다는 선입관도 작용하는 것 같구요.
물론, 유지보수의 중요성은 길게 얘기할 필요는 없겠지요. 예산이 적게 배정된다고 해서 중요도가 낮다는 얘기는 아니거든요.
써니님 안녕하세요.
유지보수에 초기 개발비용의 1.5배에서 5배까지 소요가 된다는 보고도 있듯이 제가 봐온 수많은 회사들이 유지보수 이슈로 어려워지고 문을 닫는 것을 봐았습니다. 그럼에도 불구하고 유지보수가 어떻게 왜 문제가 되었는지 모르고 지나가는 경우가 허다합니다. 제품은 1.5, 2.0으로 업그레이드가 되는데 유지보수 할 일은 점점 기하급수로 늘어서 더이상 감당이 안되곤 하는데, 개발 초기부터 이를 철저히 고려하지 않으면 안됩니다.
개발자 개인 관점에서 유지보수 경험에 따라서도 이야기 할 수 있지만, 대체로 프로젝트를 SM 주체와 다른 외주 업체가 수행하는 탓도 있는 듯 합니다.
사업수행 PM은 결국 예산, 기간 내에서 프로젝트를 완료해야 하는 탓에 품질이 우선순위가 밀리는 경우가 많습니다.
또한, 시스템의 기반 기술이 바뀌는 소위 말하는 "차세대" 성격의 경우 고객이나 유지보수 담당자가 모르는 기술로 구현하기 때문에 일종의 모럴 해저드가 발생할 우려가 있는 부분도 있습니다.
개발자의 모럴해저드에서 대해서도 많은 해야할 얘기가 많이 있습니다. 스펙에 아무리 유지보수 용이성등에 대해서 자세히 적는다고 해도 완전히 검증이 어렵고 많은 부분 결국 개발자의 양심과 윤리에 맡기는 측면도 있습니다. 개발자들이 다른 사람을 속이는 것은 어려운 일이 아니거든요.
또한 양심없이 만든 코드의 문제와 그 책임소재가 쉽게 드러나지 않는등 개발자들에게는 특히 윤리성이 많이 필요합니다. 그러나 현실은 그렇지 않고 대부분 환경만 탓하지요. 서로 까먹는 거죠.