소프트웨어 개발 일정 계획하기 - WBS, CPM (Critical Path Method)

소프트웨어를 개발하기에 앞서 우선 어떤 기능을 구현해야 하는지 일정을 계획해야 한다.
여기서 우리는 작업 순서를 결정하고, 개발 기간, 순서, 필요한 자원 등의 일정을 계획한다.

 

 

 

 

작업 분할 구조도 소개 (WBS: Work Breakdown Structure)

 

일정을 계획할 때 작업 분할 구조도를 사용하면 좋다.

이것은 프로젝트 목표를 달성하기 위해 필요한 활동과 업무를 세분화하는 작업으로, 프로젝트 구성 요소들을 계층 구조로 분류한다.

이렇게 계층 구조에서 최하위에 세분화되어 있는 작업들을 작업 패키지라고 한다. 이와 같은 표를 보면서 사용자와 개발자 간의 의사소통 도구로 활용한다.

 

보다싶이 프로젝트 업무 내역을 가시화할 수 있어서 관리하기도 편하다. 이것으로 프로젝트에서 각 팀원의 책임과 역할이 분명해지고, 필요 인력과 일정 계획을 세우는 데 기초로 활용한다. 이걸로 개발비도 산정한다.

 

 

 

이렇게 WBS작업으로 프로젝트의 범위를 관리했다면, 다음으로 네트워크 차트를 통해 작업 의존성을 관리해보자.

 

네트워크 차트는 프로젝트 관리에서 사용되는 그래픽 도구로, 작업 간의 관계와 시간을 시각적으로 표현하는 방법이다.

주로 프로젝트 일정을 계획하고 관리하는 데 사용되어서 프로젝트의 전체 구조와 각 작업 간의 선후관계를 보여준다.

 

 

네트워크 차트에는 두 가지 주요 유형이 있다

  1. PERT (Program Evaluation and Review Technique): PERT는 각 작업의 예상 소요 시간을 추정하고, 작업 간의 관계를 표현하여 프로젝트의 예상 일정을 계획하는 데 사용된다. PERT 차트는 각 작업을 노드(node)로 표현하고, 활동 간의 선후관계를 화살표로 연결하여 작업의 흐름을 보여준다.
  2. CPM (Critical Path Method): CPM은 프로젝트의 중요 경로(critical path)를 파악하고, 이를 기반으로 프로젝트의 최소 기간을 계산하는 데 사용된다. CPM 차트는 작업 간의 선후관계를 보여주며, 각 작업의 소요 시간과 작업 간의 의존 관계를 고려하여 전체 프로젝트의 최소 완료 시간을 계산한다.

우리는 일단 간단하게 CPM에 대해 알아보자.

 

 

 

 

 

CPM (Critical Path Method) 만들기

 

우선 작업 활동목록을 만든다. 작업의 설명과 선행작업으로 만들어진 것이 어떤게 있는지, 각각이 얼마만큼의 개발기간을 갖는지 대략적으로 알 수 있는 목록표를 만든다.

 

예를들어 위와 같은 활동 목록들이 있다면, 이를 기반으로 CPM 네트워크를 그린다.

 

 

 

이게 기본적인 CPM 그림이다. 시각적으로 보여주기 위한 것일 뿐 생각보다 별거 없다.

물론 critical한 경로를 따로 표시해야 하는 작업이 남아있다.

 

 

아무튼 다 그렸으면 이를 기반으로 ES ( Earliest Start Time ) 값을 구한다.
(가능한 빨리 시작할 수 있는 작업의 시간. 선행 작업이 완료됐을 때 해당작업을 시작할 수 있는 가장 빠른 시점)

 

 

 

다음으로, 이번엔 가장 빠른 시작 시간(ES)으로 시작했을 때의 가장 빠른 완료 시간 EF (Earliest Finish Time)을 구한다.
(그냥 가능한 빨리 끝낼 수 있는 시간. ES + 작업 소요 시간임.)

 

 

 

뭐 구할게 많은데, 다음으로 LS Latest Start Time을 구하자.
어떤 작업을 늦어도 시작해야 하는 시간, 즉 가장 늦게 시작할 수 있는 시간이다.

이 시간에 시작하지 않으면(이 시간보다 늦게 시작하면) 총 일정이 지연된다.

 

 

 

EF도 구했으니 LF Latest Finish Time 도 구해주자.
가장 늦게 시작할 수 있는 시간(LS)에 시작해 작업을 완료한 시간이다.

그냥 뭐, 작업을 가장 늦게 끝낼 수 있는 시간으로 ‘LS+작업 소요 시간' 이다.

 

 

 

이제 마지막이다. 마지막으로 여유 있는 시간 ST Slack Time 을 구해주자. 

 

 

 

그럼 지금까지 구했던 시간들을 바탕으로 우리는 critical path를 구할 것이다.

 

 

 

cpm을 기반으로 작성한 간트 차트

좀 더 보기 쉽게 표로 정리한 간트 차트Gantt chart를 이용해서 일정표를 작성하면 완성이다...
간트 차트는 프로젝트 일정 관리를 위한 바 bar 형태의 도구이다.

 

 

 

 

 

위험 분석

이제 대략적인 계획을 세웠으니 앞으로 어떤 위험이 일어날지 분석해보자.

예를들어 아침에 뉴스를 볼 때 내일 폭설이 예상된다고 한다. 그럼 우리는 위험에 대비하여 자동차 바퀴에 체인을 챙길 것이다. 이렇게 우리는 미리 위험을 예상, 감지하고 예방도구를 챙긴다.

 

 

 

소프트웨어도 다르지 않다. 위험요소를 식별해서 목록을 작성하고, 위험에 따라 갖는 가중치들을 정리하여 위험 목록을 만드는,, 이런 과정들을 위험 분석이라고 한다.

우선 위험 요소를 식별하자. 아마 요구 사항 변경이나 개발자의 이직, 개발 기간 부족 등이 있을 것이다.

 

이를 바탕으로 과거의 프로젝트에서의 데이터나 경험많은 개발자의 의견 등으로 이러한 위험 요소가 얼마나 영향력을 끼칠 것인지, 그리고 이 위험은 발생 확률이 높은지를 판단한다.

 

분석이 끝났으면 이제 어떻게 해결해야 할지 계획을 수립한다.

마지막으로 위험이 일어날지 감시하면서 적절한 전략이었는지 회사 DB에 정리한다. 이것을 반복한다.