프로세스의 종류
개발 프로세스는 프로젝트에서 이루어져야 할 중심 프로세스입니다. 작업을 계획하고 모니터링 하는 일은 프로젝트 관리 프로세스에 해당되게 됩니다. 일반적으로 소프트웨어 개발에는 개발 프로세스와 프로젝트 관리 프로세스로 나눌 수 있습니다. 개발 프로세스는 앞으로 수행해야 할 개발과 품질 보증 작업들이 해당되며 관리 프로세스는 비용, 품질. 기타 목표를 맞추기 위한 계획, 제어 작업을 말합니다.
소프트웨어 프로젝트를 수행하는 과정에서 여러 가지 결과물이 생산되며 이들은 여러 아이템으로 구성됩니다. 예를 들게 되면 최종 원시 코드는 여러 개의 파일로 구성됩니다. 이런 결과물은 프로젝트를 진행하면서 계속 발전 갱신되어 여러 개의 버전이 생성됩니다. 일반적으로는 개발 프로세스는 발전이나 변경에 초점을 가지지 않기 때문에 별도의 프로세스의 목적은 변경을 관리하여 제품의 일관성을 유지하려고 하는 것입니다.
지금까지 설명한 세 개의 프로세스는 프로젝트와 프로덕트에 중점을 둔 것으로 프로젝트 엔지니어링 프로세스를 이룹니다. 만약 소프트웨어 프로세스가 변화하지 않는 정적인 것이라면 세 가지 프로세스로 충분합니다. 하지만 소프트웨어 프로세스는 동적인 요소를 소프트웨어 개발에 대한 이해가 생기고 새로운 기술과 도구를 도입함으로써 변경되어야 합니다. 여러 가지의 이유로 소프트웨어 프로세스를 관리하기 위한 프로세스는 필요로 합니다.
프로세스 관리 프로세스의 목적은 소프트웨어 프로세스를 개선하는 것에 있습니다. 개선이란 것은 좋은 품질의 상품을 낮은 비용으로 생산할 수 있게 프로세스 역량을 개선 한다라는 의미입니다. 이를 위하여 현재 진행되는 소프트웨어 프로세스를 공부하고 이를 사용하여 작업하는 프로젝트를 연구합니다. 현재 프로세스를 이해하고 그 특성을 분석하여 어떠한 방향으로 개선할 것인지 결정하는 일이 관리 프로세스에서 해야 할 작업입니다.
프로세스의 종류는 각 단계에서 하는 작업만 다른 것이 아니라 프로세스에 명시된 작업을 수행하는 사람도 다릅니다. 대부분 프로젝트 관리 프로세스는 프로젝트 관리자가 수행하고 형상 관리는 품질 보증 팀 안의 형상 관리 담당자가 하며 프로세스 관리는 프로세스 관리 그룹이 합니다.
프로세를 자세히 다루며 여러 가지 작업 결과의 품질을 다루는 품질 보증 프로세스도 설명합니다. 프로세스 관리는 지금 수준에서는 벗어나는 주제이므로 주로 프로덕트 엔지니어링 프로세스에서 다룹니다. 개발 프로세스의 단계 및 각 단계에서 사용하는 방법도 설명하겠습니다. 앞으로 별도의 언급이 없으면 소프트웨어 프로세스는 프로덕트 엔지니어링 관련 프로세스를 뜻합니다.
프로세스 정하기
프로세스는 단계로 아우러지며 각 단계는 프로젝트의 목표를 만족시킬 수 있는 정의된 작업을 수행합니다. 프로세스는 비용을 줄이기 위하여 그 단계에 유입된 결함을 찾아내는데 초점을 두어야 합니다. 이렇게 하기 위하여 각 단계의 결과를 명확히 정의하고 끝나는 시점에서 검증을 진행해야 합니다. 다시 말하면 어떤 단계의 결과가 어느 사람의 아이디어라는 등의 생각에 머무르는 것이 아니고 정형화되어 눈에 보여야 합니다. 프로젝트의 최종 결과가 아니더라도 개발 프로세의 결과는 작업 결과라고 부릅니다. 소프트웨어에서 작업 결과는 요구 분석서, 설계 문서, 코드. 프로토타입 등이 있습니다.
각 단계의 결과가 검증되어야 하기 때문에 프로세스를 너무 많은 단계로 쪼개지 말아야 합니다. 너무 많은 단계로 나누게 되면 문서나 결과물이 너무 많아져 관리가 안되기 때문입니다. 이런 이유로 최상위 단계는 소수의 프로세스로 나누며 목적이 명확하고 검증이 가능한 문서를 생성해야 합니다. 결국 프로세스를 정하는 일은 특정 단계의 어떤 작업을 수행하는 지를 언급해야 합니다.
다음에 다루어야 할 것은 각 단계가 언제 시작되고 끝내야 하는가 입니다. 주로 각 단계의 진입 조건, 출구 조건을 나타냅니다. 진입 조건이라 함은 단계의 작업을 시작하기 위하여 만족하여야 할 조건을 뜻합니다. 출구 조건은 단계의 작업을 종료하기 위하여 결과물이 만족하여야 할 조건을 의미합니다. 즉 작업을 언제 시작하고 언제 종료하는지를 나타내는 것입니다. 각 작업의 진입 조건은 그 전 단계의 종료 조건과 일관되어야 하며, 결국 어떤 프로세스를 정의하려면 입력과 결과물, 즉 진입 조건과 출구 조건, 결함을 찾기 위한 검증 작업을 진행해야 합니다.
입출력을 위한 진입, 출구 조건 이외에도 프로세스 관리를 위한 정보를 생성할 필요가 있습니다. 프로세스의 상태를 나타내기 위한 정보를 생성하여, 관리 프로세스에 제공합니다. 이러한 정보는 프로세스를 컨트롤 하기 위하여 적절한 조치를 할 때 사용됩니다.
올바른 프로세스의 특성
프로세스를 정의할 때 과연 이 프로세스가 사용하기가 바람직한 가를 판단라는 기준은 어떻게 될까요? 바람직한 프로세스가 가져야 할 특성을 살펴봐야 합니다. 정의한 프로세스는 여러 프로젝트에서 사용될 수 있기 때문에 특정 프로젝트의 목표를 만족하는 것 이상의 특성을 가져야 합니다. 성숙한 개발 역량을 갖추기 위하여 매우 중요한 요소는 앞으로 천천히 알아가 볼 것입니다. 예측 가능성부터 시작하여 테스트와 유보수의 편의성 그리고 변경의 용이성까지 다음 포스팅부터 알아가 봅시다. 그럼 다음장인 예측 가능성을 다음 포스팅에서 살펴봅시다. 이번 포스팅은 여기서 끝입니다. 즐거운 하루 보내세요.
참고자료 출처 : 새로쓴 소프트웨어 공학 (저자 : 최은만)