프로젝트 일정
- 개발 프로젝트의 프로세스를 이루는 작은 작업을 파악하고 순서와 일정을 정하는 작업
- 프로젝트 개발 기간의 지연을 방지하고 프로젝트가 계획대로 진행되도록 일정을 관리하는 것
- 소프트웨어 생명주기에 기초, 개발단계가 일정 계획에 준해 잘 진행되고 있는지 감시・통제하는 것
작업순서
- 작업 분해: WBS(Work Breakdown Structure) 작성
- CPM(Critical Path Method) 네트워크 작성
- 최소 소요 기간(Best Case)을 구함 (위험 분석을 위해, Worst Case도 작성해 봄)
- 소요 MM, 기간 산정하여 CPM 수정
- 간트 차트로 그려, 일정을 구체화 함
일정 계획 방법
WBS
- Work Breakdown Structure, 업무 분류식 구조
- 도표 내에 있는 각 관리 단위의 성분을 밝히고 각 성분에 비용을 할당하고 이들을 합산하여 산정하는 기법
- 개발 프로젝트의 프로세스를 이루는 작은 작업을 파악하고 순서와 일정을 정하는 작업
- 큰 단위의 일을 관리하기 쉬운 작은 일로 나누기 위한 도구
- 공정들 간의 순서는 나타내지 않음
PERT
- Program Evaluation and Review Technique
- PERT(프로그램 평가 및 검토 기술)는 불확실성을 고려
- 낙관치, 기대치, 비관치 등 베타 분포를 가정하여 예측치를 계산
- 신규사업(미경험사업) 및 비반복 사업에 주로 이용
CPM
- Critical Path Method
- CPM 네트워크를 사용하여, 프로젝트 완성에 필요한 작업을 나열하고 작업에 필요한 소요기간을 예측하는데 사용
- 방향성 그래프 (Directed Graph)
CPM 네트워크 그리는 예
- 노드(node): 소작업을 표시
- - 원형 노드 : 소작업의 이름과 소요 기간을 기재
- - 박스 노드 : 프로젝트 중간 점검(milestone)을 의미하며, 예상 종료일을 기재
- 에지(edge): 작업 사이의 선후 관계를 표시
CPM 장점
- 관리자의 일정 계획 수립에 도움
- 프로젝트 안에 포함된 작업 사이의 관계를 파악할 수 있음
- 병행 작업 계획 → ParalleProcessing 가능
- 일정 시뮬레이션, 일정 점검 및 관리
임계 경로 (Critical Path)
- 프로젝트를 마치는데 있어서 가장 기간을 많이 차지하는 경로
- 임계 경로 내의 작업이 늦어지면 프로젝트 전체 일정이 늦어짐
- 관리자는 임계 경로의 작업에 많은 신경을 써야 함
프로젝트 일정표 (간트 차트, Gantt Chart)
- WBS 또는 CPM 네트워크를 기초로 프로젝트 진행 일정표 작성에 사용
- 작업의 시작과 종료를 막대 그래프로 표시하고 막대 길이는 작업 소요되는 기간을 의미
- 막대의 흰색 부분: 작업 수행에 소요되는 기간
- 막대의 회색 부분: 작업 수행 기간의 최대 연장 기간(slack time: 예비 시간)
- Slack time(예비 시간): 다음 작업에 영향을 주지 않고 작업을 연장, 수행할 수 있는 시간
- 다른 형태의 간트 차트
- 작업계획 대비 진척도
- 자원 할당 및 인력 배치도
- 간트 차트
출처: Wikipedia Gantt Chart 문서
- 인력 배치도 (Staff Allocation)
- 자원 히스토그램
조직 계획
조직의 구성
- 소프트웨어 개발 생산성에 큰 영향을 줌
- 작업의 특성과 팀 구성원 사이의 의사 교류
프로젝트의 구조
- 프로젝트별 조직: 프로젝트 시작에서 개발 완료까지 전담 팀 구성
- 기능별 조직: 계획수립 분석팀, 설계 구현 팀, 테스트 및 유지보수 팀
- 매트릭스 조직: 필요에 따라 요원을 차출 팀을 구성하고 끝나면 원래의 소속으로 복귀
조직 구성 노하우
- 경험이 많은 사람과 적은 사람을 적당히 혼합하여 노하우 전수
- 이직의 최소화가 대규모 프로젝트의 성패를 좌우
- 기간 단축을 위해서 인원을 추가 투입하는 것은 의미가 없음
- 프로젝트를 너무 잘게 나누면, 팀(모듈)간 의사 교환 문제가 발생
개발 조직 방법
책임 프로그래머 팀 (Chief Programmer Team)
- 의사 결정권이 리더에게 집중
- 계층적 팀 구조
- 외과 수술 팀 구성에서 따옴
- 책임 프로그래머: 제품설계, 주요 부분 코딩, 중요한 기술적 결정, 작업의 지시
- 프로그램 사서: 프로그램 리스트 관리, 설계 문서 및 테스트 계획 관리
- 보조 프로그래머: 기술적 문제에 대하여 논의, 고객/출판/품질 보증 그룹과 접촉, 부분적 분석/설계/구현을 담당
- 프로그래머: (책임 프로그래머의 지시에 따라) 각 모듈을 프로그래밍
- 특징
- 의사 결정이 빠름
- 소규모 프로젝트에 적합
- 초보 프로그래머를 훈련시키는 기회로 적합
- 단점
- 한 사람의 능력과 경험이 프로젝트의 성패 좌우
- 책임 프로그래머에게 오버로드가 걸릴 수 있음
- 보조 프로그래머의 역할이 모호
에고레스(Egoless) 팀 조직
- 민주주의식 의사 결정
- 서로 협동하여 수행하는 비이기적인 팀
- 자신이 있는 일을 알아서 수행
- 구성원이 동등한 책임과 권한
- 다각도의 의사 교환 경로 제공
- 특징
- 작업 만족도 높음 (이직률이 낮음)
- 의사 교류 활성화
- 장기 프로젝트에 적합
- 단점
- 책임이 명확하지 않은 일이 발생
- 대규모에 적합하지 않음(의사 결정 지연 가능)
계층적 팀 조직
- 초보자와 경험자를 분리
- 프로젝트 관리자와 고급 프로그래머에게 지휘 권한이 주어짐
- 의사 교환은 초보 엔지니어나 중간 관리층으로 분산
- 의사 전달 경로가 김
위험 분석 및 관리
위험 분석
- 프로젝트에 내재된 위험 요소를 인식하고 그 영향을 분석하여 이를 관리하는 활동
- 실패에 영향을 미칠 위험 요소 인식하고 그 대책 수립
- 인력의 부족
- 비용에 많은 영향을 미치는 요소
- 일정 지연의 위험
위험 관리
- Risk Management
- 위험이 발생되었을 때의 영향을 최소화하기 위해 필요함
- Boehm이 제안한 위험 관리: 위험 파악 → 위험 분석 → 위험 우선순위 정하기 → 위험 해결 → 위험 모니터링
위험 요소 파악
- 인력 부족: 유능한 인력 확보, 교육 실시
- 비현실적 일정 및 예산: 일정 예측 및 원가 분석
- 잘못된 기능의 소프트웨어 개발: 사용자 회람, 프로토타이핑
- 잘못된 인터페이스의 개발: 시나리오 및 태스크 분석
- 과포장: 요구조건 삭감
- 계속적인 요구 변경: 변경 상한선 설정, 점증적 개발
- 외부 모양의 빈약: 벤치마킹, 검사, 대조확인
- 외부 기능의 빈약: 사전 검증, 대조 확인
- 실시간 성능의 빈약: 시뮬레이션, 튜닝
- 기술적 취약: 기술분석, 점검
위험 분석 & 위험 우선순위 정하기
- 위험 분석: 각 위험에 대한 피해 정도, 위험 해결 방법, 이에 대한 비용 등을 결정하는 것
- 손실 발생 확률, 손실 발생 규모, 위험 노출(exposure) 분석
- 우선 순위 정하기: 위험 중에서 대처할 항목들의 우선 순위를 정함
- 고위험, 고비용 위험을 우선 VS 고위험, 저비용 위험을 우선
위험 해결 & 위험 모니터링
- 위험 해결: 위험 관리 계획에 명시된 위험을 줄이는 기법을 구현하고 실행
- 위험 모니터링: 위험 경감을 위한 정책이 일정대로 잘 구현되고 실행되는지 감시하는 것
위험 관리 프로세스