하나의 목적을 위해 모아 놓은 대규모 소프트웨어 전제를 시스템이라고 부른다. 소프트웨어 시스템은 수많은 소프트웨어들이 상호 동작하면서 일을 처리한다. 미국의 NASA에서 사용하는 우주비행에 필요한 소프트웨어도 대규모의 소프트웨어 시스템이다. 여기서 소프트웨어를 개발할 때는 좀 독특한 방식으로 한다. 두 개의 프로젝트를 동시에 가동하여 같은 기능을 하는 소프트웨어를 각각 만든다고 한다. 우주비행 도중에 예기치 않은 오류가 발생하면 같이 개발되었던 다른 소프트웨어가 그 역할을 수행하여 우주비행의 실패를 막도록 준비하는 것이다.

소프트웨어의 알고리즘 오류로 사고가 발생하는 것을 미연에 막고자 동일한 기능을 하는 소프트웨어를 두 개의 프로젝트에서 각기 개발하는 사례는 흔치 않다. 대부분의 기업에서는 소프트웨어가 오동작을 하면 수작업으로 업무를 처리하는 방식을 울며 겨자 먹기 식의 방안으로 내세운다.

대규모 소프트웨어를 개발하기 위해서는 수 많은 소프트웨어 개발자 포함하여 전문가들이 들어가서 일을 한다. 이런 유형의 개발 방식을 소프트웨어 프로젝트라고 한다. 프로젝트의 맨 꼭대기 정점에는 프로젝트 관리자가 있다. 프로젝트에 투입되는 모든 사람들의 업무를 지시, 관리, 결정하는 사람이다. 프로젝트 관리자의 경험과 역량에 따라 프로젝트가 실패하기도 하고 성공하기도 한다. 마치 최고사령관 같은 사람이므로 그 사람의 지휘, 행정, 작전 역량과 모든 것에 대한 확신이 프로젝트의 미래를 결정한다. 프로젝트 관리자는 자신이 갖고 있는 자원인 사람, 예산, 시간을 적절히 분배하여 프로젝트가 잘 진행될 수 있도록 하는데 심혈을 기울인다.

대규모 소프트웨어 프로젝트에서 개개의 프로그램 개발자는 아주 작은 부분을 담당해서 프로그램을 개발한다. 프로젝트가 크면 클수록 자신의 역할은 적어지고 기여도가 거의 없는 것으로 느껴질 정도이다. 프로젝트에는 개발자 외에도 다양한 전문가가 투입된다. 프로젝트 초기에 아키텍처 전문가, 분석가, 설계자, DB 전문가가 투입되고 중반부터 본격적으로 프로그래머인 개발자가 투입된다. 투입되는 전문가들은 자신이 맡은 일을 끝내고 완수하면 프로젝트에서 나간다. 어떤 사람은 프로젝트 시작부터 종료 때가지 일하고 개발자 중에는 종료 후에도 소프트웨어 유지보수를 위하여 운영자로 남기도 한다.

소프트웨어 개발에는 어떤 일이 중요하고 어떤 일이 중요하지 않고의 구분이나 차이가 없다. 자기의 역할을 충실히 했을 때 모든 것이 문제없이 굴러가기 때문이다. 이것을 상호협조라고 하는데, 프로젝트 마다 상호협조가 잘 안 되는 경향이 있기 때문에 요즘 유행하는 애자일 방법론에서는 스크럼 미팅을 강조한다. 미팅은 하루의 일을 시작하기 전에 한 번 하고 일이 끝나면 다시 한 번 한다.

소프트웨어를 개발하다 보면 품질에 대한 얘기를 많이 듣게 된다. 개발자뿐만 아니라 일반 사용자도 입버릇처럼 얘기한다. 소프트웨어 품질이 나쁘다는 것은 프로그램에 오류가 있다는 의미뿐만 아니라 사용하기에도 불편하거나 자기가 원하는 기능을 하는 프로그램이 아니라는 뜻도 강하게 내포되어 있다. 품질이 안 좋으면 비용이 늘고 납기가 지연된다. 품질, 비용 및 납기는 하나라도 문제가 있으면 다른 요소에 서로 영향을 준다. 같은 내용을 다른 시각으로 표현한 것으로 생각해도 무방하다. 품질이 나쁘면 품질을 맞추기 위해 추가적인 기간이 필요하여 납기를 맞출 수 있다. 납기가 지연되면 개발자가 더 오랜 기간 일을 해여 하므로 개발자 월급을 깎지 않는 이상 비용은 올라 가게 된다.

품질의 핵심은 프로그램의 오류를 줄이는데 있는 것이 아니라 고객과 사용자가 원하는 것을 해주는 것이다. 개발자는 프로그램의 에러와 알고리즘 오류가 없으면 품질이 좋은 것으로 생각하기 십상이다. 하지만 프로그램이 에러가 없이 잘 돈다는 것만으로 품질이 좋다고 말할 수 없고, 고객이 원하는 기능이 제대로 수행되어야 한다.

비행기의 품질을 생각해 보자. 비행기가 제대로 날지 않고 날아가다가 추락하면 그 비행기는 비행기로써의 가치가 없다. 비행기를 타는 사람들은 안전한 비행기는 당연한 것이고, 장시간의 비행에서 편안한 비행기를 품질이 좋은 비행기라고 생각한다. 자리가 좁아서 불편하고, 기류 변화에 따라 기체 요동이 심하다면 좋은 비행기라고 생각하지 않는다. 이런 관점으로 프로그램의 품질을 생각하면 당연히 에러는 없어야 하고 고객이 사용하기에 편리한 프로그램이야 말로 좋은 품질의 소프트웨어라고 할 수 있다.

채성수 chaesungsoo@iabacus.co.kr 소프트웨어개발 전문기업 ㈜애버커스 사업총괄부사장. 엘지전자와 엘지씨엔에스(LG CNS)에서 다년간 컴퓨터 관련 사업을 추진한 전문가이다. 국가 공인 최고 자격인 정보관리기술사로 대학에서 컴퓨터 관련 연구를 하였다. ‘속도경쟁사회’, ‘코딩을위한컴퓨팅사고력’, ‘소프트웨어 인사이더’ 등 6권의 책을 저술하였으며 넥스트데일리의 컬럼니스트로 활동하고 있다.

(*이 칼럼은 Nextdaily의 편집방향과 다를 수 있습니다.)

저작권자 © 넥스트데일리 무단전재 및 재배포 금지