프로젝트 계획과 관리
전공-소프트웨어공학

프로젝트 관리

프로젝트는 시작과 끝이 명확해야 하므로, 이를 위한 관리가 필수적이다.

프로젝트 관리는 소프트웨어 프로젝트를 조직하고, 계획하고, 일정관리하는 것이다.

  • Planning: WBS 작성

    Activicy들을 정의한다(구체적인 시작일, 종료일은 아직 정하지 않음).

  • Estimating: 작업별 소요 시간 및 노력 예측

    Activity들의 SizeDuration을 결정한다.

  • Schedule: 작업 의존관계 정의 ~ 일정 개발

    구체적인 시작일, 종료일, 관계, 자원을 추가한다.

    • MileStone

      Milestones Deliverables
      이정표, 중간 산출물 전달물
      프로세스 활동의 결과물 주요 단계가 끝났을 때 나오는 Milestone
      내부 문서 고객에게 전달되는 문서

최종적으로, 각 Activity의 시작, 끝, 예비시간을 보여주는 간트 차트를 산출한다.


Planning

WBSWork Breakdown Structure(작업 분해 구조)를 통해 프로젝트를 취급(처리) 가능한 여러 개의 소작업으로 분해한다.

작업 분해는 개발 프로세스를 이루는 소작업들을 파악하고, 순서와 일정을 정하는 작업을 말한다.

페인트칠 작업을 예시로 들어보자. 페인트칠 작업을 분해하는 과정은 다음과 같다.

  • 재료 준비
    • 페인트 구매
    • 붓 구매
    • 롤러 구매
  • 물건 치우기
  • 페인트칠을 위한 준비 작업 등…

Estimating

개발 비용(작업별 소요 시간과 노력)을 예측한다.

COCOMO 또는 기능 점수를 사용할 수 있다.

💡 비용을 정확히 예측하는 것은 매우 어렵다.

COCOMO

가장 널리 사용되는 추정 모델로, 소프트웨어의 Size를 기반으로 비용을 예측한다.

모델은 Basic, Intermediate, Advanced(Detail) 중 하나를 사용한다.

개발 노력 $E$는 다음과 같이 계산한다.

  • Basic

    $E = A * (Size)^B$

  • Intermediate 또는 Advanced(Detail)

    $E = A * (Size)^B * M$

💡 COCOMO 모델의 단위는 K(1000)인 것에 주의해야 한다.

프로젝트 유형

$A$, $B$는 프로젝트 유형(Mode)에 따라 달라지는 상수 값이다. 모델에 적용 가능한 개발 모드는 다음과 같다.

프로젝트 유형 노력Effort 기간Schedule 비고
유기형Organic $E = 2.4 * (KDSI)^ {1.05}$ $TDEV=2.5*(E)^{0.38}$ 익숙하고, 안정적이고, 소규모의 프로젝트에 적합
반결합형Semideteched $E = 3.0 * (KDSI)^ {1.12}$ $TDEV=2.5*(E)^{0.35}$  
내장형Embedded $E = 3.6 * (KDSI)^ {1.20}$ $TDEV=2.5*(E)^{0.32}$  

노력

$M$은 프로젝트에 영향을 주는 15가지의 노력 보정 요소를 가공한 계수이며, 크게 4개로 분류할 수 있다.

$M$은 Basic 모델에서는 사용하지 않는다.

  • Product (제품의 특성)
  • Computer (컴퓨터의 특성)
  • Personal (개발 요원의 특성)
  • Project (프로젝트 성격)

단점

COCOMO 모델은 간단하게 비용을 예측할 수 있다. 단지 사용할 모델, 적용할 모드, 소프트웨어의 Size를 공식에 입력하기만 하면 대략적인 비용을 알 수 있다. 하지만 Size에 의존적이며, 다른 방법에 비해 정확도가 떨어진다는 단점이 존재한다.

기능 점수

기능 점수는 FPFunction Pointf라고도 하며, 5개 기능(입력, 출력, 질의, 파일, 인터페이스의 개수)으로 소프트웨어의 규모를 나타낸다. 총 기능 점수(GFPGross Function Point)와 처리 복잡도 보정 계수(PCAProcessing Complexity Adjustment)를 곱한다.

$FP = GFP * PCA$

GFP

$GFP = \sum_{i = 1}^{5}(Count(i) * Complexity(i))$

5개 기능에 각각에 대해 개수(Count)를 파악하고, 복잡도(Complexity)를 결정한다.

복잡도(Complexity) 단순 보통 복잡
입력 3 4 6
출력 4 5 7
질의 3 4 6
파일 7 10 15
인터페이스 5 7 10

PCA

$PCA = 0.65 + 0.01\sum_{i = 1}^{14}PC$

보정을 위한 14개의 질문을 이용하며, 각각의 질문에 대한 처리 복잡도의 정도에 따라 0부터 5까지 할당한다.


Schedule

각 소작업(Activity)들에 대한 선행작업소요기간을 바탕으로 CPM 네트워크를 작성하고 임계 경로를 계산한다.

소요 MM, 기간을 고려해 CPM을 수정한 다음, 최종적으로 간트 찬트를 산출한다.

작업 분해

CPM 네트워크 작성

임계 경로 계산

간트 차트

CPM PETT

CPM PERT 방법을 사용해 작업 의존관계를 정의한다.

💡 CPM 및 PERT에 대한 정의는 다음과 같다.

  • CPMCritical Path Method

    각 Activity 시간을 확정적으로 추정하는 방법

  • PERTProgram Evaluation and Review Technique

    각 Activity 시간을 세 가지 방법을 통해 확률적으로 추정하고, 평균시간을 계산하는 방법

CPM PERT 방법을 통해 다음을 알 수 있다.

  • 프로젝트를 완성에 걸리는 총 시간
  • Activity 각각의 시작일과 종료일
  • 임계 경로의 Activity
  • 지연 가능한 Activity

CPM 네트워크

CPM PERT 방법을 사용해 작성한 Activity 네트워크를 CPM 네트워크라 한다.

화살표와 노드 중 어느 것을 Activity로 설정하는지에 따라 AOA와 AON으로 나눌 수 있다.

  • AOAActivity of Arrow

    CPM 네트워크의 화살표를 Activity로 설정한다.

    AOA에서는 한 화살표에 두 개의 Activity를 설정할 수 없다. 따라서 선후관계를 표현하기 위해서는 가상 활동선(점선 화살표)을 사용해야 한다.

  • AONActivity of Node

    CPM 네트워크의 노드를 Activity로 설정한다.

CPM 네트워크의 구성원칙은 다음과 같다.

  • 단계원칙

    최초 시작단계와 최종 완료단계를 제외한 모든 단계는 반드시 선행활동과 후속활동을 갖는다.

  • 활동원칙

    모든 선행활동들이 완료되지 않으면 그 후속활동은 착수할 수 없다.

  • 연결원칙

    • 화살표 길이와 Activity의 소요시간은 무관하다.
    • 순환할 수 없다.
    • 한 쌍의 단계는 오직 하나의 활동선만을 가진다.
    • 선후관계나 종속관계만을 나타낼 경우 가상활동선을 사용한다.
    • 활동의 상호관계는 화살표의 위치에 의해 표시된다.

전진-후진 계산법

전진-후진 계산법에 사용되는 용어를 정리한다.

용어 설명
$t(a)$ 활동 a의 활동시간
$ES(a)$ 활동 a의 가장 빠른 시작시간
$EF(a)$ 활동 a의 가장 빠른 완료시간
$LS(a)$ 전체 프로젝트의 완료시간을 지연시키지 않는 범위 내에서 활동 a의 가장 늦은 시작시간
$LF(a)$ 전체 프로젝트의 완료시간을 지연시키지 않는 범위 내에서 활동 a의 가장 늦은 완료시간

먼저, CPM 네트워크의 끝 방향으로 이동하면서 빠른 시간(ES, EF)을 계산한다.


$ES(a) =$

$\qquad 0\; if 활동\; a가\; 시작활동일\; 때$

$\qquad max[EF(활동\; a의\; 모든\; 직전\; 선행활동)]\; if활동\; a가\; 직전\; 선행활동을\; 가질\; 때$


$EF(a) = ES(a) + t(a)$


다음으로, CPM 네트워크의 처음 방향으로 이동하면서 늦은 시간(ES, EF)을 계산한다.


$LF(a) =$

$\qquad EF(a)\; if 활동\; a가\; 최종활동일\; 때$

$\qquad min[EF(활동\; a의\; 모든\; 직후\; 후속활동)]\; if활동\; a가\; 직후\; 후속활동을\; 가질\; 때$


$LS(a) = LF(a) - t(a)$


여유시간

  • 총 여유시간Total Float

    전체 공정을 지연시키지 않는 선에서 지연될 수 있는 시간


    $TF(a)$

    $\qquad = LF(a) - ES(a) - t(a)$

    $\qquad = LF(a) - (ES(a) + t(a))$

    $\qquad = LF(a) - EF(a)$

    $\qquad = LS(a) - ES(a)$


  • 자유 여유시간Free FLoat

    바로 다음 활동들의 가장 빠른 시작 시간을 지연시키지 않는 선에서 지연될 수 있는 시간


    $FF(a)$

    $\qquad = min[ES(활동 a의 모든 직후 Activity)] - EF(a)$

    $\qquad = ES(a+1) - EF(a)$


  • 독립 여유시간Independent Float

    모든 $ES$ 및 $LF$에 영항을 주지 않는 선에서 지연될 수 있는 시간


    $IndF(a)$

    $\qquad = ES(a + 1) - LF(a - 1) - t(a)$


  • 간섭 여유시간Interfering FLoat

    영향을 준다면?


    $IntF(a)$

    $\qquad = TF(a) - FF(a)$