소프트웨어 프로젝트 관리(Software project management)
프로젝트 관리(Project Management)
Software project management
- 소프트웨어 프로젝트에서는 소프트웨어를 개발하고 구매하는 조직의 요구와 정해진 기한을 염두해야 함
- 프로젝트 관리(Project management)는 소프트웨어 개발이 항상 소프트웨어를 개발하는 조직에 의해 설정된 예산과 일정 제약을 받기 때문에 필요하다.
Success criteria
- customer에게 합의된 시간에 소프트웨어를 인도
- 전체 비용이 예산을 넘지 않아야 함
- customer의 기대에 부응하는 소프트웨어를 제공
- 일관되고 잘 작동하는(well-fuctioning) 개발 팀을 유지
소프트웨어 관리 특징(Software management distinctions)
- SW는 intangible함
- 보거나 만질 수 없다
- 소프트웨어 프로젝트 관리자는 단순히 제작 중인 아티팩트를 보면서 진행 상황을 볼 수 없다
- 많은 SW 프로젝트는 'one-off'(일회성) projects이고, 고유한 특징을 가지고 있다
- 대규모 프로젝트일수록 이전 프로젝트와의 차이점이 존재할 가능성이 높다
- 경험이 풍부한 관리자라도 새로운 문제를 예상하기 어려울 수 있다
- 소프트웨어 개발 프로세스는 가변적이고 조직마다 다름
- 특정 프로세스가 문제를 일으킬 가능성을 정확히 예측하기 어려움
보편적인 관리 활동(Universal management activities)
- People management(인적 관리)
- 적합한 팀 구성원을 선발하고 효율적인 팀워크를 이끌어내는 작업 방식을 마련합니다.
- Risk management(위험 관리)
- 프로젝트에 영향을 줄 수 있는 위험을 평가하고, 이를 모니터링하며 필요한 경우 적절한 조치를 취합니다.
- Project planning(프로젝트 계획)
- 프로젝트의 전체적인 계획을 수립
- 개발 작업을 추정 및 스케줄링하며, 팀원들을 각각의 작업에 배정
People Management
Managing people
- 조직에서 사람들은 가장 중요한 자산이다
- 관리자의 역할은 본질적으로 사람 중심적이며(people-oriented), 사람들에 대한 이해가 없다면 관리는 실패할 것이다
- 프로젝트에서 일하는 사람들을 동기부여하는 것이 관리자의 중요한 역할 중 하나이다
- 부족한 인적 관리는 프로젝트 실패의 중요한 원인이다
Teamwork
- 대부분의 SE는 그룹 활동이다
- 대부분의 비단순 소프트웨어(non-trivial software) 프로젝트는 혼자서 완료할 수 없을 정도로 개발 일정이 있습니다.
- 좋은 그룹은 결속력이 있고 팀 정신을 가지고 있다
- 참여하는 사람들은 그룹의 성공과 개인적인 목표 모두에 의해 동기부여된다
- group interaction은 group performance의 중요한 요소이다
- 그룹 구성의 유연성은 제한적임
- 관리자는 사용 가능한 사람들을 가지고 최선을 다해야 한다
Group cohesivenesss(그룹 결속력)
- 그룹 구성원들에 의해 그룹 품질 기준이 개발될 수 있습니다.
- 팀 구성원들은 서로로부터 배우고 서로의 작업을 알게 됩니다.
- 무지로 인한 억제가 줄어듭니다.
- 지식이 공유됩니다.
- 그룹 구성원이 떠나더라도 연속성을 유지할 수 있습니다.
- 리팩토링과 지속적인 개선이 장려됩니다.
- 그룹 구성원들은 원래 디자인이나 프로그램을 만든 개인과 상관없이 함께 고품질의 결과를 내고 문제를 해결하기 위해 협력합니다.
Selecting group members(그룹 구성원 선정)
- 관리자나 팀 리더의 역할은 결속력 있는 그룹을 만들고 이들이 효과적으로 협력할 수 있도록 그룹을 조직하는 것입니다
- 이는 적절한 기술 스킬과 성격의 균형을 갖춘 그룹을 만들고 이 그룹이 효과적으로 협력할 수 있도록 조직하는 것을 포함합니다.
팀 구성 (Assembling a team)
- 이상적인 사람들을 프로젝트에 배정하는 것이 불가능할 수 있습니다.
- 프로젝트 예산이 높은 급여를 지불할 수 없을 수 있고, 적절한 경험을 가진 스태프가 없을 수 있습니다.
- 조직 내에서 새로운 기술을 습득하려는 의도 등으로 인해 제한될 수 있습니다
- 관리자는 훈련된 스태프의 부족, 특히 이러한 제약 사항 내에서 작업해야 합니다.
그룹 조직 (Group Organization)
- 소규모의 소프트웨어 개발 팀은 보통 정형화되어있지 않고 뻣뻣하지 않은 구조로 운영된다
- 대규모 프로젝트의 경우, 하위 프로젝트별로 책임을 지는 계층적 구조가 필요할 수 있다
- 애자일 개발과 같은 방법론은 정보 교환을 촉진하기 위해 informal(격식에 얼메이지 않는, 비공식) 그룹을 선호합니다.
Informal groups
- 이러한 그룹은 전체로서 행동하며, 시스템에 영향을 미치는 결정에 대해 합의에 도달합니다
- 그룹 리더는 그룹의 외부 인터페이스 역할을 수행하지만, 특정 작업 항목을 할당하지는 않습니다
- 대신, 작업은 그룹 전체에 의해 논의되며, 작업은 능력과 경험에 따라 할당됩니다
- 이 접근 방식은 모든 구성원이 경험적이고 유능할 때 성공적입니다.
Group communications
- 소프트웨어 공학에서의 효과적인 그룹 작업을 위해 우수한 커뮤니케이션이 필수적입니다
- 작업의 현황, 설계 결정 사항 및 이전 결정의 변경 사항에 대한 정보가 교환되어야 합니다.
- 또한, 우수한 커뮤니케이션은 이해를 증진시키기 때문에 그룹의 결속력을 강화시킨다
Risk management(위험 관리)
- 위험 관리는 위험을 식별하고 이러한 위험의 영향을 최소화하기 위한 계획을 수립하는 데에 초점을 맞추고 있습니다.
- 소프트웨어 위험 관리는 소프트웨어 개발에 내재된 불확실성 때문에 중요하며, 이러한 불확실성은 아래와 같은 것에서 비롯됩니다.
- 정의가 불분명한 요구사항,
- 고객 요구 사항 변화로 인한 요구사항 변경,
- 소프트웨어 개발에 필요한 시간 및 자원 추정의 어려움,
- 개인의 기술 차이.
- 위험을 예측하고, 이러한 위험이 프로젝트, 제품 및 비즈니스에 미치는 영향을 이해하고, 이러한 위험을 피하기 위한 조치를 취해야 합니다.
Risk Classification(위험 분류)
- 위험 분류에는 두 가지 차원이 있습니다.
- 위험의 유형(기술적, 조직적 등),
- 위험에 의해 영향을 받는 것:
- 프로젝트 위험(Project risks)은 일정 또는 자원에 영향을 미칩니다;
- 제품 위험(Product risks)은 개발 중인 소프트웨어의 품질이나 성능에 영향을 미칩니다;
- 비즈니스 위험(Business risks)은 소프트웨어를 개발하거나 구매하는 조직에 영향을 미칩니다.
Examples of project, product, and business risks(프로젝트, 제품, 비즈니스 위험의 예)
위험 | 영향 | 설명 |
직원 이직 | 프로젝트 | 경험이 풍부한 직원이 프로젝트가 끝나기 전에 떠날 것입니다. |
요구사항 변경 | 프로젝트 및 제품 | 예상보다 많은 요구사항 변경이 있을 것입니다. |
규모 과소평가 | 프로젝트 및 제품 | 시스템의 크기가 과소평가되었습니다. |
기술 변경 | 비즈니스 | 시스템이 구축된 기본 기술이 새로운 기술로 대체됩니다. |
제품 경쟁 | 비즈니스 | 시스템이 완성되기 전에 경쟁 제품이 시장에 출시될 것입니다. |
The risk management process(위험 관리 프로세스)
- 위험 식별(Risk identification)
- 프로젝트, 제품 및 비즈니스 위험 식별;
- 위험 분석(Risk analysis)
- 이러한 위험의 가능성과 결과 평가;
- 위험 계획(Risk planning)
- 위험의 영향을 피하거나 최소화하기 위한 계획 수립;
- 위험 모니터링(Risk monitoring)
- 프로젝트 전반에 걸쳐 위험을 모니터링;
Risk Identification and Risk Types(위험 식별 및 위험 유형)
- 추정, 조직, 사람, 요구사항, 기술 및 도구와 같은 다양한 유형의 위험이 있습니다.
- 예) 소프트웨어 개발에 필요한 시간을 과소평가함.
- 조직 재정 문제로 프로젝트 예산이 삭감됨.
- 필요한 인력을 모집하는 것이 불가능함.
- 고객이 요구사항 변경의 영향을 이해하지 못함.
- 재사용이 가능한 소프트웨어 구성 요소에 결함이 있음.
Risk Analysis(위험 분석)
- 식별된 위험을 분석하고 그 확률 및 영향을 평가합니다.
- 위험의 가능성을 낮음에서 높음까지 평가합니다.
- 위험의 영향을 그 중요도에 따라 분류합니다.
- 치명적, 심각, 용납 가능, 하찮음.
Risk planning(위험 계획)
- 각 위험을 고려하고 그 위험을 관리하기 위한 전략을 개발합니다.
- 회피 전략(Avodance strategies)
- 위험이 발생할 확률을 줄입니다.
- ex) 하드웨어 고장을 방지하기 위해 정기적인 유지보수를 실행
- 위험이 발생할 확률을 줄입니다.
- 최소화 전략(Minimization strategies)
- 프로젝트 또는 제품에 대한 위험의 영향을 줄입니다.
- change impact를 줄이기 위해서 정보을 최대한 숨기기
- 프로젝트 또는 제품에 대한 위험의 영향을 줄입니다.
- 비상 계획(Contigency plans)
- 위험이 발생하면 그 위험에 대처하기 위한 계획이 있습니다.
- 화재가 발생하면 트랙픅을 다른 데이터 센터로 전환
- 위험이 발생하면 그 위험에 대처하기 위한 계획이 있습니다.
Risk monitoring(위험 모니터링)
- 식별된 위험을 정기적으로 평가하여 그 위험이 더 이상 혹은 더 많이 발생할 가능성이 있는지를 결정합니다.
- 위험의 영향이 변했는지도 평가합니다.
- 각 주요 위험은 관리 진행 회의에서 논의되어야 합니다.
Project planning(프로젝트 계획)
- 프로젝트 계획은 업무를 여러 부분으로 나누고 이들을 프로젝트 팀 구성원에게 할당하는 것을 포함합니다.
- 발생할 수 있는 문제를 예상하고 잠정적인 해결책을 준비합니다.
- 프로젝트의 시작 단계에서 생성된 프로젝트 계획은
- 프로젝트 팀 및 고객에게 작업 방식을 전달하고,
- 프로젝트 진행 상황을 평가하는 데 사용됩니다.
Planning stages(계획 단계)
- 제안 단계(proposal stage)에서, 소프트웨어 시스템을 개발하거나 제공하기 위한 계약에 입찰할 때.
- 프로젝트 시작 단계(project startup phase)에서, 누가 프로젝트에서 일할지 계획할 때,
- 프로젝트가 어떻게 단계별로 나누어 질지, 자원이 회사 전체에 어떻게 배정될지 등.
- 프로젝트 전반에 걸쳐 주기적으로(개발 계획 중에), 경험을 바탕으로 계획을 수정하고 작업 진행 상황을 모니터링한 정보에서.
Project scheduling(프로젝트 스케줄링)
- 프로젝트 스케줄링은 프로젝트 내 업무를 별도의 작업으로 구성하고, 이러한 작업이 언제, 어떻게 수행될지 결정하는 과정입니다.
- 각 작업을 완료하는 데 필요한 달력 시간을 추정하고, 필요한 노력과 해당 작업을 수행할 사람을 예상합니다.
- 서버에 필요한 디스크 공간, 시뮬레이터와 같은 특수 하드웨어에서 필요한 시간, 여행 예산 등 각 작업을 완료하는 데 필요한 자원을 추정해야 합니다.
The project scheduling process(프로젝트 스케줄링 프로세스)
Scheduling problems(스케줄링 문제)
- 문제의 어려움과 따라서 해결책을 개발하는 비용을 추정하는 것은 어렵습니다.
- 생산성은 작업에 참여하는 사람 수에 비례하지 않습니다.
- 늦은 프로젝트에 사람을 추가하는 것은 의사소통 오버헤드로 인해 더 지연됩니다.
- 예상치 못한 상황은 항상 발생합니다. 계획에 여유를 두세요.
Project activities(프로젝트 활동)
- 프로젝트 활동(작업)은 기본적인 계획 요소입니다. 각 활동에는:
- 일정 기간(duration)(달력 일 또는 월),
- 노력 추정치(effor estimate), 작업을 완료하는 데 필요한 인력-일 또는 인력-월을 나타냅니다,
- 활동이 완료되어야 하는 마감일(deadline),
- 검토 회의, 모든 테스트의 성공적인 수행 등이 될 수 있는 정의된 종료 지점(Defined end-point)이 있습니다.
Milestones and deliverables(이정표 및 납품물)
- 이정표는 진행 상황을 평가할 수 있는 스케줄 상의 지점입니다.
- 예) 시스템을 테스트하기 위한 인계.
- 납품물은 고객에게 전달되는 작업 제품입니다.
- 예) 시스템에 대한 요구사항 문서.
요약
소프트웨어 개발에서 위험을 어떻게 관리할까요?
일관성 있는 팀을 어떻게 구성하고 좋은 팀워크를 유지할 수 있을까요?
소프트웨어 개발 프로젝트를 어떻게 계획할까요?
그리고 그것에 대한 노력과 비용을 어떻게 추정할 수 있을까요?
'소프트웨어 공학 > Theorem' 카테고리의 다른 글
[소프트웨어 공학] 06&07. Architecture Design / Design and Implementation (0) | 2024.04.13 |
---|---|
[소프트웨어 공학] 05. Requirements engineering (0) | 2024.04.13 |
[소프트웨어 공학] 04. Quality Configuration and Management (0) | 2024.04.13 |
[소프트웨어 공학] 03. Agile Software Development (0) | 2024.04.13 |
[소프트웨어 공학] 02. Software Process (0) | 2024.04.11 |