1. 프로젝트 관리 개요
01) 프로젝트 관리의 필요성
- 예산과 일정의 제약으로 관리가 필요
- 프로젝트 관리란 프로젝트를 계획하고 감독하는 일
- 계획의 수립
- 고객의 요구, 지켜야 하는 표준을 따르는지 확인
- 시간과 예산에 맞추어 개발되는지 사람과 프로세스를 제어
- 소프트웨어 프로젝트 관리가 어려운 점
- 진척 관리를 위해 문서에 의존함
- 소프트웨어 개발 프로세스에 관한 명확한 표준이 없음
- 기술 발전 속도가 빨라 프로젝트 경험을 살리기 어려움
02) 프로젝트 관리자의 업무
- 프로젝트 착수: 제안서의 작성
- 프로젝트 계획: 일정, 비용, 자원, 위험 계획
- 프로젝트 실행: 계획에 기초한 프로젝트 감시와 통제
- 프로젝트 종료: 보고서 작성, 프로젝트 평가
03) 프로젝트 관리
- 어떤 일을, 어느 정도의 비용으로, 누구에 의하여, 언제까지 행해져야 하는가를 결정하는 일
- 계획에 기초하여 산출물과 개발 절차를 관리함
- 브룩스의 법칙
- 가장 흔한 프로젝트 실패는 일정의 지연임
- "일정이 늦어진 소프트웨어 프로젝트에 인력을 추가하는 것은 일정을 더욱 늦추는 결과를 낳는다."
- 기존 업무의 이해, 의사소통 경로의 증가, 작업의 재분할이 필요하기 때문
04) 프로젝트 계획성의 구성
- 개요
- 개발 절차 계획
- 인원, 예산 및 일정 계획
- 문서화 계획
- 하드웨어와 소프트웨어 자원 계획
- 위험 관리 계획
2. 소프트웨어 일정 계획
01) 일정 계획과 작업
- 일정계획은 작업의 분할, 작업들 간의 관계, 인적/물적 자원의배정등을 계획하는 것
- 작업의 분할
- 요구명세서에 기초하여 전체 작업을 관리 가능하고 측정 가능한 소작업들로 분할
- 작업 분해 구조 (WBS)
- 작업의 명세화
- 소작업에 대해 일의 양, 필요한 산출물과 컴퓨터 자원 등을 결정
- 작업의 양을 인원-월(PM)로 표시함, 1PM은 중급 수준 개발자의 한 달간 작업량
- 작업 진행 순서의 정의
- 작업들의 선후 관계를 분석하여 순서를 정함
- PERT/CPM
- 인력 배정
- 작업 비용의 산정
- 개발 일정의 수립
- 작업별로 시작 시점과 종료 시점을 지정
- CPM으로 분석하고 간트(Gantt) 차트로 도표화
02) WBS
- 작업 분할 구조(Work Breakdown Structure)
- 프로젝트 수행을 위해 개발 업무를 분할하여 계층 구조로 표현
- 최하위 수준의 작업을 작업 패키지(work package)라고 함
- 비용이나 기간의 정량적 측정이 가능한 입력물과 출력물을 가짐
- 프로젝트 계획과 관리를 위한 기초 자료
03) PERT와 CPM
- PERT
- 작업들의 선후 관계를 표현한 사이클이 없는 방향 그래프
- CPM: 임계 경로 방법
- 일정 계획을 위한 알고리즘적 분석 방법
- 임계 경로는 시작에서 종료 작업까지의 경로 중 가장 긴 경로
- 임계 경로상의 작업들은 프로젝트의 일정 준수를 위해 지연이 허용되지 않는 작업
- 임계 경로상에 있지 않은 작업들은 여유 시간을 가짐
04) CPM 네트워크

A:3 = A작업은 3시간이 필요
C|3 = 7에는 시작해야하고, 22에 시작해도 된다.
- 이는
H|8이 좌측에있는 모든 작업이 이루어져야지만 시행이 가능하고, 왼쪽의 모든 작업이 이루어지는데 적어도 25의 시간이 필요하므로, 3시간이 걸리는 C는 22시간부터 시행되어도 된다는 것이 추론된다.
C는 7에 시작하면 10에, 22에 시작하면 25에 끝나게 된다.
05) 간트 차트
- 막대 모양으로 프로젝트 작업들의 순차 또는 병행 순서를 보여주는 차트
- 상단에 시간축을 표시, 작업별로 막대를 가로방향으로 표시
- 막대는 작업 시간에 맞추어지며, 길이는 소요 시간을 의미
- 일정 조정, 인력 배정 계획에 사용됨
- 직업별로 진척 비율이나 인력 배정을 표시할 수 있음.

- 하얗게만 보이는 것들은 여유시간이 없는 데이터
- 연한 초록색은 여유시간
C와 D, E와 F와 G는 나란히 배치되어 있는데, 동시에 시행이 가능함을 의미한다.
- 최종적으로
M이 끝나야 작업이 마무리되는 것.
3. 소프트웨어 규모의 산정
01) 소프트웨어 프로젝트 산정
- 규모 추정 -> 개발 노력(비용) 추정, 일정 계획
- 규모 산정의 정확성이다른 부분에 영향을 줌
- 고객 요구사항과 시스템 명세서를 참고
- 라인수(LOC)를 추정하는 방법, 기능 점수(FP) 방법
- 노력 추정과 과거 데이터와 프로젝트의 특성을 고려
- 일정 계획에는 투입 되는 인력을 고려
- 추정의 정확성은 과거 프로젝트 데이터의 정확성, 제공되는 입력의 정확성, 개발 조직에서 프로세스의 성숙도에 좌우됨

- 사용자 요구사항 > 규모 추정 > 노력 추정 > 비용 추정의 순서
- 사용자 요구사항과 과거의 프로젝트 데이터를 기반으로 규모를 추정
- 노력 추정과 비용 추정은 거의 하나
02) 기능 점수
- 기능 점수는 기능의 규모를 측정하기 위한 단위
- 소프트웨어의 기능을 다섯 가지 유형으로 분류하여 계산함
- 프로그램의 기능에 초점을 맞춘 논리적 규모 척도
- 구현 기술이나 구현 언어와 무관
- 사무 정보 시스템의 규모 산정에 적합함
- 보정 기능 점수(AFP)는 미보정 기능 점수(UFP)와 보정 계수(VAF)의 곱
미보정 기능 점수(UFP)
- 프로그램에서 표현되거나 사용되는 데이터의 총량을 계량화
- 데이터 기능(내부 논리 파일1, 외부 인터페이스 파일2)과 트랜잭션 기능(외부 입력3, 외부 조회4, 외부 출력5)의 개수를 측정
- 각각에 복잡도에 따른 가중치를 곱하여 합산함
보정 기능 점수(AFP)
AFP = UFP*VAF, 여기서 VAF = 0.65 + 0.01 * TDI(총 영향도)
- VAF는 보정 계수이며(0.65~1.35), TDI는 기술적 복잡도를 반영하기 위해 14개 항목의 영향도(0~5)를 모두 합한 것(0(014)~70(514))

03) 기능 점수 고찰
- 프로그래밍 언어별로 LOC/FP 즉, 기능 점수 1점을 구현하기 위해 필요한 라인 수가 존재
- 기능 점수로부터 라인 수를 계산할 수 있음
- 초기 단계에서 라인 수 추정에 효과적
- 프로그래머의 평균 생산성(FP/PM)을 안다면, 전체 PM을 계산할 수 있음
- 사무 정보 시스템의 규모 산정에 적합함
4. 소프트웨어 개발 비용 산정
01) 비용 산정 방법의 분류
- 판단에 의한 방법
- 전문가의 판단, 델파이 방법, 작업 부내에 의한 방법
- 수학적 모델을 이용한 방법
- COCOMO
- 가장 잘 알려진 소프트웨어 비용 산정 모델(COnstructive COst Model)
- 프로젝트 유형을 3가지로 구분 (기본/중간/내장형)
- 분석 정도에 따른 3가지 모델을 제시 (기본/중급/상세)
02) COCOMO
- 효과적 산정을 위해 먼저 규모를 추정해야 함
- 기본 COCOMO는 라인 수만으로 비용을 추정함
- 대략적으로 개발 노력은 소프트웨어 규모에 선형적으로 비례
- 라인수(LOC)
- 간단하며 비용 산정 방법과의 연결이 용이하고 직관적임
- 계획단계에서 산정하기 어렵고 프로그래밍 언어에 따라 다름
- 과거의 경험, 전문가의 판단, 구성 요소별 산출한 후 합산
03) 기본 COCOMO
- 프로젝트 유형
- 기본형: 소규모 프로젝트(~50KDSI), 경험 있는 개발자, 까다롭지 않은 요구사항
- 중간형: 중규모 프로젝트(~300KDSI), 중간 정도의 경험, 요구사항의 혼재
- 내장형: 대규모 프로젝트, 제한된 하드웨어, 엄격한 운영 조건

- 32,000 LOC 기본형 소프트웨어의 추정 예
- 총 노력 = 2.4 * 32^(1.05) = 91 PM
- 총 개발 기간 = 2.5*(91)^(0.38) = 14 개월
- 평균 인력 = 91/14 = 6.5 명
- 생산성 = 32,000/91 = 352 LOC/PM
04) 기본 COCOMO - 프로젝트 크기와 노력

크기가 늘어남에 따라 노력이 증가되는 모습. 기본형의 경우 크기가 증가함에 따라 노력역시 선형적으로 증가하는 모습을 볼 수 있다.
05) 중급 COCOMO
- 15개의 비용 승수를 곱하여 노력 보정 계수(EAF)를 계산
- 각 비용 승수는 6개의 등급으로 나뉨
- 총 노력을 걔산할 때 EAF를 곱함

06) COCOMO 비용 승수


15개의 승수에 정해진 값을 전부 곱해준다.
07) 중급 COCOMO 예
- 4,000 LOC 내장형 소프트웨어의 추정 예
- 보정 계수는 1.17로 가정
- 총 노력 = 2.8 4^(1.20) 1.17 = 17 PM
- 총 개발 기간 = 2.5 * 17^(0.32) = 6 개월
- 비용 = 17 PM * 5,000,000원/PM = 850,000,000원
08) 소프트웨어의 수정을 위한 노력
기존 소프트웨어를 수정할 때는 노력 측정을 어떻게 해야할까?
- 설계1, 코드2, 통합과 테스트3 부분에서 수정이 필요한 비율을 구하여 수정
보정 계수(AAF)를 계산함
- AAF = 0.4(설계 수정 비율) + 0.3(코드 수정 비율) + 0.3*(통합과
테스트 수정 비율)
상응 LOC = 기존 LOC * AAF
- AAF를 이용하여 수정이 요구되는 LOC를 계산한 후 공식에 대입
09) 기능 점수에 기초한 개발비 산정 사례
- 총 개발 비용은 (보정 후 개발원가 + 이윤 + 경비)
- 보정 후 개발원가는 (기능 점수기능 점수당 단가) 보정 계수
- 사례
- 보정 후 개발 원가 = 516.5FP
기능점수) 1.1223(보정계수 * 519,203원(기능점수형 단가)/FP = 300,965,338원
- 총 개발 비용=
300,965,338원+(이윤)27,086,880원+(경비)10,000,000원≒3억4천만원
5. 팀 구성 방식
01) 매트릭스 조직

- 프로젝트 조직과 기능별 조직의 장점을 조합한 형태
- 프로젝트 조직은 프로젝트 동안 유지되는 팀
- 기능별 조직은 분석/설계/구현 등 기능별로 전문화된 팀
- 개발자가 전문 기능 부서에 속하되, 일정 기간 프로젝트에 소속되는 형태
- 팀 구성원들 간에 정보와 경험을 공유할 수 있으나 기능 부서 관리자와 프로젝트 관리자 양쪽의 지배를 받음
02) 의사 결정 방법에 따른 팀 구성

6. 위험 분석과 관리
01) 위험
- 위험은 불확실성으로 인해 잠재해 있는 문제
- 불분명한 요구사항, 요구의 변경, 추정의 어려움 등 불확실성이 존재
- 위험이 발생하면 제품의 품질, 프로젝트 일정이나 비용, 조직 등에 부정적 영향을 줌
- 위험 관리
- 가능한 위험 요인들을 예측하고 발생 가능성과 영향력을 분석하여 대책을 계획하고 위험을 관리하는 것
02) 위험의 분류
- 제품 위험
- 제품의 품질이나 성능에 영향을 주는 위험
- 불안정한 요구사항이나 성능이 낮은 도구 등
- 조직 위험
- 조직의 비즈니스에 영향을 주는 위험
- 기술의 변화나 경쟁사 제품의 출시 등
- 프로젝트 위험
- 프로젝트 일정이나 자원 활용에 영향을 주는 위험
- 미흡한 조직의 지원, 중요 프로젝트 요원의 이직 등
03) 위험 관리 프로세스
- 위험 식별
- 위험 분석
- 위험 요인 별로 발생 가능성과 결과의 심각성을 평가
- 우선순위를 정하여 대책이 필요한 위험 요인들을 정리
- 위험 계획
- 회피 전략: 발생 가능성을 줄이는 것
- 최소화 전략: 위험 발생 시 충격을 줄이는 것
- 긴급 대책: 최악의 상황에 대비하는 것
- 위험 제어와 모니터링
Reference
소프트웨어 공학 관점에서 프로젝트 관리를 정리해주셔서 감사합니다! 예산과 일정 제약으로 인한 관리 필요성은 정말 공감됩니다.
30년 넘게 개발자로 일하고 20년 이상 SW공학 컨설팅을 하면서, 프로젝트 관리의 가장 큰 어려움은 "계획과 실행을 동기화하는 것"이었습니다. 특히 Excel WBS로 계획을 세우면 팀원들과 실시간 공유가 어렵고, 누가 최신 버전을 가지고 있는지 확인하는 것만으로도 시간이 소비되었죠.
이런 문제를 해결하기 위해 Plexo(https://plexo.work/ko)를 개발했습니다. WBS의 정확성 + 칸반의 직관성 + 실시간 협업을 결합하여, 간트차트도 자동 생성됩니다. 개발자 관점에서 설계한 프로젝트 관리 도구입니다.
소프트웨어 프로젝트 관리에 대한 추가 의견이 있으시면 피드백 부탁드립니다!