[소프트웨어공학] 프로젝트 관리 (Project Management)

👑 프로젝트 관리

소프트웨어 공학에서 프로젝트 관리는 소프트웨어 개발 과정 전반에 걸쳐 프로젝트를 성공적으로

완수하기 위한 필수 요소이다. 프로젝트 관리는 프로젝트 계획 수립부터 일정 관리, 위험 관리,

인적 자원 관리까지 다양한 작업을 포함한다.



👑 프로젝트 관리 활동

프로젝트 관리자는 아래와 같은 활동들을 통해 프로젝트를 관리한다.

  • 프로젝트 계획 및 스케줄링

    • 초기 개념에서 시스템 제공에 이르기까지의 모든 계획을 수립한다.

    • 새로운 정보를 이용할 수 있을 때마다 계획을 정기적으로 수정해야 한다.


  • 프로젝트 비용 계획

    • 프로젝트 개발에 필요한 자원과 예산을 산정한다.


  • 인력 선발 및 평가

    • 적절한 인재를 선정하고 성과를 평가한다.


  • 프로젝트 모니터링 및 검토

    • 정기적으로 프로젝트 진행 상황을 점검한다.


  • 보고서 작성 및 프레젠테이션

    • 프로젝트 진행 결과를 팀과 이해 관계자에게 보고



💡 프로젝트 계획

프로젝트 계획은 프로젝트 관리의 중심 요소로, 품질 계획, 검증 계획, 유지보수 계획, 등의

다양한 계획으로 구성된다.


✔ 프로젝트 개발 노력 추정

노력 추정이란 소프트웨어 개발에 필요한 비용 및 소요기간 등을 예측하는 작업으로,

소프트웨어 프로젝트에서는 기능 점수(Function Point) 모델을 사용해 소프트웨어의

규모와 복잡도를 정량화할 수 있다. 데이터 관리 위주의 소프트웨어에 적합하며, 조직에 관계없이

애플리케이션 복잡도 계산의 일관성을 제공할 수 있다. 기능 점수 산정 절차는 다음과 같다.


  • 기능 점수 모델: UFP(Unadjusted Function Point) 산정

    • 다섯 가지 소프트웨어 구성 요소에 점수를 매긴다.

    • 외부 입력, 외부 출력, 외부 질의, 내부 논리 파일, 외부 인터페이스 파일

    • UFP = 개수 × 가중치


  • 기능 점수 모델: VAF(Value Adjustment Factor) 산정

    • 14개 기술적 분야에 대한 복잡도를 고려하여 0 ~ 5의 점수를 부여한다.

    • 데이터 통신, 분산 데이터, 성능 중요도, 이식성, 유지 보수성 등의 14개 항목 존재

    • TCF(Total Complexity Factor) 계산:

      • $ TCF = 0.65 + [ 0.01 × \sum_1^{14} VAF_i ] $ , ( TCF 값 범위: 0.65 ~ 1.35 )


  • 기능 점수 모델: AFP(Adjusted Function Point) 산정

    • AFP(FP) = UFP × TCF



💡 프로젝트 일정 관리

프로젝트 일정 관리는 활동 정의부터 일정 계획 수립과 통제까지 포함한다.

이를 위한 주요 도구와 기법은 다음과 같다.

  • PERT/CPM 차트

    • Program Evaluation and Review Technique/Critical Path Method

    • 세분화된 작업을 효율적으로 일정 관리하고 지원하기 위한 기법

    • 관리에 대한 작업도 포함하며, 작업 시간을 정확하게 예측할 필요가 있다.

    • 관리자의 일정 계획 수립에 도움을 주며, 일정을 시뮬레이션하고, 점검, 관리가 가능하다는 장점이 있다.


  • 임계 경로(Critical Path)

    • PERT 차트에서 소요 기간이 가장 긴 경로

    • 프로젝트를 완수하기 위해 필요한 최소 시간을 나타낸다.


  • 간트(Gantt) 차트

    • 활동 별로 작업의 시작과 끝을 나타낸 그래프



💡 프로젝트 인적 자원 관리

효율적인 팀 구성은 프로젝트 성공의 핵심이다. 조직(팀)의 구성은 결과물 및 소프트웨어 개발

생산성에 큰 영향을 준다. 소프트웨어 개발 팀 구성 방식은 크게 다음의 세 가지로 나뉜다.

  • 계층형 팀

    • 초보자와 경험자를 분리하여 계층적 구조로 운연된다.

    • 프로젝트 관리자와 고급 프로그래머에게 지휘 권한이 주어진다.

    • 소프트웨어의 구조가 계층적으로 잘 나누어진 경우에 적합하지만, 의사 전달 경로가 길다.


  • 에고리스(egoless) 팀

    • 모든 팀원이 동등한 책임과 권한을 가지며 민주적으로 운영된다.

    • 의사 교류가 활발하고, 작업 만족도가 높으며, 복잡한 문제가 많은 장기 프로젝트에 적합하다.

    • 책임이 명확하지 않으며, 대규모 프로젝트에는 적합하지 않다(의사 결정 지연 가능)는 단점이 존재한다.


  • 책임 프로그래머 팀

    • 주요 의사 결정을 책임 프로그래머가 담당하는 소규모 팀으로 구성된다.

    • 의사 결정이 집중되어 있어 의사 결정이 빠르며, 소규모 프로젝트에 적합하다.

    • 초보 프로그래머를 훈련시키는 기회로 적합하나, 한 사람의 능력과 경험이 프로젝트의
      성패를 좌우한다는 단점을 가진다.


팀 규모는 프로젝트의 요구 사항과 자원에 따라 최적화되어야 한다. 너무 큰 팀은 의사소통 비용을

증가시키고, 너무 작은 팀은 작업량을 감당하지 못할 수 있다. 따라서 효과적인 팀 규모의 선택은

프로젝트의 성패에 중요한 문제이다.



💡 프로젝트 위험 관리

위험 관리란 위험을 식별하고 프로젝트에 미치는 영향을 최소화하기 위한 계획을 수립하는 것으로,

프로젝트 성공을 위해 잠재적 위험을 식별하고 관리하는 것은 필수적이다. 위험 관리 프로세스는

다음과 같다.

  • 위험 식별(Risk Identification)

    • 프로젝트, 제품 및 비즈니스 위험을 파악
  • 위험 분석(Risk Analysis)

    • 위험의 발생 가능성과 영향을 평가
  • 위험 대처 계획 수립(Risk Planning)

    • 위험의 회피 전략, 최소화 전략, 비상계획 수립
  • 위험 모니터링(Risk Monitoring)

    • 프로젝트 전반에 걸쳐 위험의 변화를 지속적으로 평가 및 대응

Categories:

Updated:

Leave a comment