프로젝트 관리
- 소프트웨어 공학의 본질적인 부분
- 전문적인 소프트웨어 공학은 항상 조직의 예사과 일정에 대한 제약조건의 영향을 받음
- 전문적인 소프트웨어 공학은 항상 조직의 예사과 일정에 대한 제약조건의 영향을 받음
- 프로젝트 관리자의 임무
- 제약조건을 만족하고 극복하면서 고품질의 소프트웨어를 인도하도록 보장
- 제약조건을 만족하고 극복하면서 고품질의 소프트웨어를 인도하도록 보장
- 프로젝트 주요 목표
- 약속된 기한까지 고객에게 소프트웨어 인도
- 전체 비용을 예산 범위 이내에서 지출
- 고객의 기대치를 충족하는 소프트웨어 인도
- 일관적이고 잘 운영되는 개발팀 유지
소프트웨어 관리가 어려운 점
- 소프트웨어 제품은 형체가 없음
- 관리자는 개발 중인 제품에 대한 진척사항을 볼 수 없음
- 관리자는 개발 중인 제품에 대한 진척사항을 볼 수 없음
- 대형 소프트웨어 프로젝트는 종종 일회성 프로젝트임
- 대형 프로젝트는 개발되는 환경이 다른 것들과는 어느 정도 다르기 때문에 고유함
- 대형 프로젝트는 개발되는 환경이 다른 것들과는 어느 정도 다르기 때문에 고유함
- 소프트웨어 프로세스는 변동이 심하고 조직마다 다름
- 소프트웨어 기업들은 완전히 다른 개발 프로세스들을 사용
프로젝트 관리에 영향을 미치는 요인
기업체 규모
- 기업 규모가 클수록 관리 오버헤드가 커짐
- 대형 조직에는 반드시 지켜야 하는 것이 존재
- 관리 계층, 공식적인 보고 방식, 예산 정책, 승인 절차 등
- 대형 조직에는 반드시 지켜야 하는 것이 존재
- 기업 규모가 클수록 관리 오버헤드가 커짐
소프트웨어 고객
- 내부 고객일 때
→ 소통 방식은 비공식일 수도 있고 고객의 작업 방식에 맞추는 노력 필요 없음 - 외부 고객일 때
→ 맞춤형 소프트웨어를 개발하는 경우 공식적인 소통방식을 통해 합의에 도달해야 함
- 내부 고객일 때
소프트웨어 규모
- 소형 시스템
- 같은 사무실에서 작은 팀에 의해 개발 가능
- 같은 사무실에서 작은 팀에 의해 개발 가능
- 대형 시스템
- 여러 기업체의 다수의 개발팀을 필요로 함
- 프로젝트 관리자는 이런 팀들의 활동을 조정하고 소통을 정리해야 함
- 소형 시스템
소프트웨어 유형
- 일반 소비자 중심의 제품
- 공식적인 기록 필요 X
- 공식적인 기록 필요 X
- 안전성 중심 시스템
- 모든 프로젝트 관리 결정 기록
- 시스템 안전도에 미치는 영향의 타당성 입증
- 일반 소비자 중심의 제품
조직의 문화 직원
- 개개인의 능력에 의존하는 조직도 있고, 그룹 중심적인 조직도 있음
- 개개인의 능력에 의존하는 조직도 있고, 그룹 중심적인 조직도 있음
소프트웨어 개발 프로세스
- 애자일 프로세스
- 가벼운 관리로 운영
- 가벼운 관리로 운영
- 정형화된 프로세스
- 개발팀이 정의된 프로세스를 따르도록 하는 관리 요구
- 애자일 프로세스
기본적인 프로젝트 관리 활동
- 프로젝트 계획 수립
- 관리자는 계획 수립, 예산 추정, 프로젝트 개발 일정 관리, 직원 업무 할당 등을 책임
- 관리자는 계획 수립, 예산 추정, 프로젝트 개발 일정 관리, 직원 업무 할당 등을 책임
- 리스크 관리
- 관리자는 리스크를 측정하고 조치
- 관리자는 리스크를 측정하고 조치
- 인간 관리
- 팀의 인력을 선택하고 효과적인 성능을 발휘할 수 있도록 작업 방식 설정
- 팀의 인력을 선택하고 효과적인 성능을 발휘할 수 있도록 작업 방식 설정
- 보고
- 기업의 관리자에게 프로젝트 진행사항 보고
- 상세한 기술정 정보 ~ 관리 요약까지 다양한 수준으로 소통 가능해야 함
- 상세한 기술정 정보 ~ 관리 요약까지 다양한 수준으로 소통 가능해야 함
- 기업의 관리자에게 프로젝트 진행사항 보고
- 제안서 작성
- 소프트웨어 프로젝트는 첫 번째 단계는 작업을 수행하는 계약을 수주하기 위해 제안서 작성
- 소프트웨어 프로젝트는 첫 번째 단계는 작업을 수행하는 계약을 수주하기 위해 제안서 작성
리스크 관리
- 프로젝트 관리자의 가장 중요한 임무
리스크
- 발생하지 않았으면 하는 어떤 것
- 프로젝트 개발 중인 소프트웨어 또는 조직에 위협
리스크 관리
- 프로젝트/ 개발 중인 소프트웨어에 영향을 줄 수 있는 리스크를 예측하고 조치를 수행하는 것 포함
리스크 분류
프로젝트 리스크
- 프로젝트 일정 또는 자원에 영향
- 경험 많은 시스템 아키텍트의 손실
- 경험 많은 시스템 아키텍트의 손실
- 예 : 직원 교체, 관리 변화, 하드웨어 사용 불가능성, 요구사항 변경, 명세화 지연, 규모 과소추정
- 프로젝트 일정 또는 자원에 영향
제품 리스크
- 개발하고 있는 소프트웨어 품질이나 성능에 영향
- 구입한 컴포넌트가 기대했던 성능에 미치지 못함
- 구입한 컴포넌트가 기대했던 성능에 미치지 못함
- 예 : 요구사항 변경, 명세화 지연, 규모 과소 추정, 소프트웨어 도구의 성능 부족
- 개발하고 있는 소프트웨어 품질이나 성능에 영향
비즈니스 리스크
- 소프트웨어를 개발하고 있는 또는 구입한 조직에 영향
- 새로운 제품을 시장에 내놓은 경쟁회사
- 새로운 제품을 시장에 내놓은 경쟁회사
- 예 : 기술의 변화, 제품의 경쟁
- 소프트웨어를 개발하고 있는 또는 구입한 조직에 영향
리스크 분류 특징
- 위험 분류들은 겹칠 수 있음
- 효과적인 리스크 관리
- 문제 발생에 대한 대처를 쉽게 하는 것
- 리스크가 예산 또는 일정에 감당할 수 없는 영향을 미치지 않도록 하는 것
리스크 관리 프로세스
1. 리스크 식별
- 리스크 관리 프로세스의 첫 번째 단계
- 위협을 가져올 수 있는 리스크를 찾아내는 것
- 위협 → 소프트웨어 공학 프로세스, 개발 중인 소프트웨어, 개발 조직에 위협
- 위협 → 소프트웨어 공학 프로세스, 개발 중인 소프트웨어, 개발 조직에 위협
- 리스크 식별 작업
- 리스크 체크리스크 사용 가능
추정 리스크
- 소프트웨어 개발에 필요한 시간을 과소평가
- 오류 수정 비율 낮게 추정
- 소프트웨어 규모를 작게 추정
조직 리스크
- 조직에 구조변화가 와서 여러 관리 조직이 프로젝트에 관여
- 조직의 재정적 문제로 인해 프로젝트 예산 축소
인력 리스크
- 요구되는 기능을 직원 채용 불가
- 중요한 직원이 아픔
요구사항 리스크
- 주요한 설계 작업에 대한 재작업을 필요로 하는 요구사항에 대한 변경이 제안
- 고객들이 요구사항 변경에 대한 영향을 이해 못 함
기술 리스크
- 시스템에 사용되는 데이터베이스가 초당 처리하는 트랜잭션을 기대했던 것만큼 못함
- 재사용할 소프트웨어 컴포넌트가 결함 포함
도구 리스크
- 소프트웨어 코드 생성 도구에 의해 생성되는 코드가 비효율적
- 소프트웨어 도구들이 통합된 방식으로는 함께 동작하지 않음
- 리스크 체크리스크 사용 가능
2. 리스크 분석
- 식별한 리스크 각각에 대해 리스크의 발생가능성과 심각성을 측정
- 쉬운 수행방법은 없으며, 판단과 경험에 의존
- 발생가능성과 심각성을 간단한 수치로 평가하는 것은 불가능, 아래처럼 분류
- 리스크 발생 가능성 → 의미 없음 / 낮음 / 보통 / 높음 / 매우 높음
- 리스크가 미치는 영향 → 재앙 / 심각함 / 견딜만함 / 중요하지 않음
- 평가 기준은 임의적 → 프로젝트, 프로세스, 개발팀, 조직에 대한 상세 정보 필요
- 관리 프로세스 매 반복 주기마다 리스크 분석표 수정해야 함
- 가장 중요한 리스크가 무엇인지 평가해야 함
3. 리스크 계획 수립
- 프로젝트에 위협을 주는 주요한 리스크들을 관리하기 위한 전략 개발
- 리스크 발생 시 손실 최소화 할 수 있는 행동 생각
- 리스크 발생 시 손실 최소화 할 수 있는 행동 생각
- 리스크 관리 전략은 세 가지로 분류
회피 전략
- 위험이 발생할 가능성을 줄이는 것
- 예 - 결함을 포함하고 있는 컴포넌트에 대한 리스크를 처리하기 위한 전략
최소화 전략
- 리스크의 영향을 줄이는 것
- 예 - 직원들의 질병에 대한 전략
비상 전략
- 최악의 경우를 대비해 준비하고 그것을 다루기 위한 전략을 세워놓는 것
- 예 - 조직의 재정적 문제에 대한 전략
4. 리스크 감시
- 제품, 프로세스, 비즈니스 리스크에 변동사항이 있는지 검사하는 프로세스
- 식별한 각각의 리스크들을 정기적으로 평가
← 해당 리스크의 발생 가능성 증감 여부를 판단하기 위해 - 리스크의 영향 정도가 변화했는지에 대해서도 고려
- 리스크는 프로젝트의 모든 단계에서 정기적으로 감시되어야 함
- 모든 관리 검토 회의에서 주요한 리스크들을 독립적으로 평가하고 토의해야 함
- 모든 관리 검토 회의에서 주요한 리스크들을 독립적으로 평가하고 토의해야 함
- 식별한 각각의 리스크들을 정기적으로 평가
- 리스크 요인
- 추정 - 합의된 일정에 맞추는 것의 실패; 보고된 결함 제거 실패
- 조직 - 조직 내의 소문; 상급 관리자의 행동 결여
- 인력 - 직원의 낮은 도덕성; 팀 멤버 간의 낮은 공조체제, 직원 잦은 교체
- 요구사항 - 많은 요구사항 변경 요청; 고객의 불평
- 기술 - 하드웨어 또는 지원 소프트웨어의 공급 지연; 보고된 많은 기술적인 문제점들
- 도구 - 팀 멤버들이 도구 사용을 싫어함; 소프트웨어 도구들에 대한 불평
인간 관리
- 조직의 가장 큰 자산 → 소프트웨어 조직 내에서 일하는 사람
- 소프트웨어 관리자의 목표
- 프로젝트에서 일하는 엔지니어가 가능한 최대의 생산성을 올리도록 하는 것
- 프로젝트에서 일하는 엔지니어가 가능한 최대의 생산성을 올리도록 하는 것
- 소프트웨어 관리자가 소프트웨어 개발 작업에 영향을 미치는 기술적인 이슈들을 이해하는 것은 중요
인간 관리의 네 가지 주요 인자
일관성
- 프로젝트 팀의 모든 구성원은 비슷한 대우를 받아야 함
- 프로젝트 팀의 모든 구성원은 비슷한 대우를 받아야 함
존중
- 사람들은 서로 다른 능력을 가지고 있으며, 관리자는 이런 차이를 존중
- 사람들은 서로 다른 능력을 가지고 있으며, 관리자는 이런 차이를 존중
참여
- 모든 의견을 고려하는 작업 환경을 개발하는 것이 중요
- 모든 의견을 고려하는 작업 환경을 개발하는 것이 중요
정직
- 관리자는 팀에서 제대로 진행되는 것과 그렇지 않은 것에 대해 항상 정직해야 함
동기 부여하기
- 프로젝트 관리자는 일하는 사람들의 최상의 능력을 발휘할 수 있도록 동기를 부여해야 함
- 사람들은 자신의 욕구를 만족시키는 것에 동기부여를 받음
사회적인 욕구
- 사람들에게 동료들과 만날 수 있는 기회를 제공
- 소셜 네트워크 시스템과 원격화상회의 사용
명예 욕구
- 성취한 것에 대한 공개적인 인정
- 사람들은 제대로 보상받고 있다는 것도 느껴야 함
자아실현 욕구
- 더 배우고 싶은 사람들에게는 교육훈련은 중요한 동기부여
- 작업에 대한 책임감 부여, 부담되는 작업 할당(불가능하진 않아야 함)
사람의 심리적 유형
- 인간 욕구의 계층은 실제 동기부여에 대비하여 과하게 축약되어 있음
작업-지향인
: 그들이 하고 있는 일에 의해 동기부여받는 사람들자기-지향인
: 개인적인 성공과 자신에 대한 인정에 의해 동기 부여받는 사람들교류-지향인
: 동료와의 존재와 행동에 의해 동기를 부여받는 사람들
팀워크
단결된 그룹의 장점
- 그룹은 자신의 고유한 품질 표준을 설정할 수 있다.
- 구성원들이 공감하여 표준을 설정하므로, 그룹에 부과된 외부 표준보다 더 잘 지키게 됨
- 구성원들이 공감하여 표준을 설정하므로, 그룹에 부과된 외부 표준보다 더 잘 지키게 됨
- 구성원이 서로로부터 배우고 도움을 준다.
- 지식이 공유된다.
- 리팩토링과 지속적 개선이 장려된다.
팀 작업에 영향을 미치는 세 가지 요인
- 그룹의 구성원
- 프로젝트 그룹을 여러 유형의 사람들을 섞어서 구성
- 프로젝트 그룹을 여러 유형의 사람들을 섞어서 구성
- 그룹의 조직 방식
- 기술적 그리고 관리적 소통
- 그룹 멤버들 사이, 소프트웨어 공학팀, 프로젝트 이해당사자 사이의 좋은 소통 필수
그룹 멤버의 선택
- 관리자 또는 팀 리더의 임무
- 단결된 그룹을 만들고 그룹이 작업을 효과적으로 함께 할 수 있도록 조직
- 기술적인 능력과 개인의 특성 사이의 올바른 균형을 가진 그룹을 만드는 것과 관련
- 일반적으로, 다른 프로젝트에서 경험을 가진 현재의 직원들을 모아 구성됨
- 관리자들이 팀 선택에 대해 완전한 자율권을 가지는 경우는 거의 없음
- 업무에 꼭 맞는 사람이 아니어도 기업에서 가용한 인력을 사용하는 경우가 더러 있음
그룹 구성
- 같은 동기부여 유형을 가지는 사람들로 구성할 경우 문제 발생
- 효과적인 그룹은 모든 유형의 사람들이 균형을 이루는 그룹
그룹의 조직
- 그룹 조직되는 방식은 그룹의 결정, 정보가 교환되는 방식, 그리고 개발 그룹, 정보가 교환되는 방식,
개발 그룹과 외부의 프로젝트 이해당사자와의 상호 작용에 영향을 미침 - 프로젝트 관리자에게 중요한 조직에 대한 질문
- 프로젝트 관리자가 그룹의 기술적 리더여야 하는가?
- 중요한 기술적 결정을 내리는데 누가 관여? 그리고 이런 결정은 어떻게 내려야 하는가?
- 외부의 이해당사자 그리고 기업체의 상급 관리자와의 관계는 어떻게 처리할 것인가?
- 같은 지역에서 근무하지 않는 구성원을 통합하는 방법은?
- 그룹 내에서 지식을 공유하는 방법은?
- 작은 프로그래밍 그룹들은 대체로 비정형적인 방식으로 조직됨
- 큰 프로젝트에서는 계층적 구조로 그룹을 조직할 수 있음
- 에자일 그룹은 항상 비정형적 그룹
비정형적 그룹
- 그룹 전체가 하나로 활동, 시스템에 영향을 미치는 결정을 내릴 때 합의에 의해 결정
- 그룹 리더가 그룹 외부에 대한 인터페이스 역할 수행, 특정 작업들을 팀원들에게 할당하진 않음
- 그룹 전체가 수행할 작업에 대해 토의하고 능력과 경험에 따라 업무 할당
계층적 그룹
- 그룹의 리더가 계층의 꼭대기에 있음
- 리더가 많은 권한을 갖고, 멤버들의 작업을 지휘
- 리더가 많은 권한을 갖고, 멤버들의 작업을 지휘
- 조직의 구조가 명백하고, 의사 결정은 계층의 위로부터 내려짐
- 장점 : 신속한 의사결정
- 단점 : 소프트웨어 개발은 모든 단계에서 효과적인 팀 소통이 필수적이어서 잘 동작하지 않음
그룹 소통
- 작업 상황, 설계에 대한 결정 사항, 이전의 설계 결정에서의 변경 내용 정보는 반드시 교환해야 함
- 좋은 소통은 그룹의 단결력 강화
- 소통의 효과성과 효율성은 다음의 영향을 받음
그룹의 크기
- 그룹의 규모가 커질수록 멤버들이 효과적으로 소통하는 것 어려워짐
- 그룹의 규모가 커질수록 멤버들이 효과적으로 소통하는 것 어려워짐
그룹의 구조
- 비정형적으로 조직된 그룹이 정형적이고 계층적인 그룹보다 더 효과적으로 소통
- 비정형적으로 조직된 그룹이 정형적이고 계층적인 그룹보다 더 효과적으로 소통
그룹의 구성
- 동일한 성격 유형의 사람들은 충돌할 수 있고, 결과적으로 소통 억제될 수 있음
- 동일한 성격 유형의 사람들은 충돌할 수 있고, 결과적으로 소통 억제될 수 있음
물리적 작업환경
- 작업장의 구조가 소통을 활발하게 하거나 저해하게 만드는 주요한 요인
- 작업장의 구조가 소통을 활발하게 하거나 저해하게 만드는 주요한 요인
이용할 수 있는 대화수단
- 프로젝트 팀의 분산화를 위한 원격 화상 회의 기술 등등이 존재