소프트웨어공학

[소프트웨어공학] - 3주차 : 프로젝트 계획과 관리

utf-8 2025. 3. 28. 15:41

계획

: 문제 정의, 타당성 분석, 개발 비용 산정, 개발 비용 산정 기법, 일정 구성, 위험 분석 등을 토대로 계획서 작성

 

: 누가 무엇을 어느 기간동안 어떻게 개발해야 하는지 예측하는 작업으로, 구현해야 할 기능과 요구하는 성능 및 인터페이스 성능에 따라 개발범위를 정하고, 구현할 프로젝트 특징과 자원 및 생산성에 따라 비용을 예측한다.

 

: 계획을 하지 않으면 불확실성이 높아지고, 일정 차질, 비용 초과, 저품질, 높은 유지보수 비용 등 프로젝트 실패로 이어짐.

 

 

계획 - 문제 정의

: 무엇을 개발할 것인지 명확히 정의하고, 개발 범위를 결정한다. 문제를 정의할 때 필요한 것은 개발하고자 하는 영역의 배경 지식과 기존에 존재하는 유사 시스템을 사용해보고 분석하는 것이다.

 

 

계획 - 타당성 분석

: 개발할 시스템에 대해 투자 효율성이 얼마나 높은지, 시장성은 얼마나 큰지 등을 검토 (경제적 타당성), 사용자가 원하는 수준으로 개발하기 위해 기술적인 어려움은 없는지 검토 (기술적 타당성), 개발 과정에서 사용하는 프로그램 등에 대해 소유권 등의 법적 문제는 없는 지 (법적 타당성) 등을 검토한다. 

 

: 경제적 타당성에서 경영자는 기업에 얼마나 많은 이윤을 남겨줄 지 투자 효율성을 분석하고, 분석가는 투자 대비 효과를 검토 후 경영자에게 정확한 정보 제공한다. 즉, 시장 분석을 통해 시장성을 확인하고, 이를 통해 개발 여부를 판단한다. 기술적 타당성에서는 현재의 기술로 사용자가 요구하는 기능을 구현할 수 있는지, 하드웨어 성능이 개발에 지장은 없는지, 개발자의 기술력에 문제가 없는지 검토한다. 법적 타당성에서는 개발용 소프트웨어와 도구의 사용이 법적으로 문제가 없는지 검토한다.

 

 

계획 - 개발 비용 산정

: 하드웨어의 경우 제품의 형상이 명확하고 투입되는 부품이 정해져 있다. 또한 생산 공정이 표준화, 자동화되어 있어 개발 비용 산정이 비교적 쉽다. 하지만 소프트웨어의 경우 사람(개발자)이 중심이어서 개발 인력의 능력에 따라 품질의 차이가 크다. 또한 개발 프로세스가 다양해서 표준화나 자동화가 어렵기 때문에 체계적인 개발 비용 산정 방법이 중요하다. 이때 소프트웨어 개발 비용에 영향을 주는 요소로는 개발자의 능력, 소프트웨어의 복잡도 및 크기, 요구되는 신뢰도 및 기술의 수준, 소프트웨어의 가용 시간 등이 존재한다. 

 

 

계획 - 개발 비용 산정 - 하향식 산정 기법

: 프로그램의 규모를 예측하고, 과거의 유사 경험을 바탕으로 회의를 통해 예측한 규모에 대한 소요 인력과 기간을 산정한다. 대표 기법으로는 전문가 판단 기법, 델파이 기법 등이 있다.

 

 

계획 - 개발 비용 산정 - 하향식 산정 기법 - 전문가 판단 기법

: 소프트웨어 개발 비용을 산정할 때 경험이 많은 전문가들의 의견을 듣고 결정하는 방법으로, 짧은 시간에 개발비를 산정하거나 입찰에 응해야 하는 경우에 사용한다. 경험이 많은 전문가가 판단을 내리기 때문에 신뢰성 있고 편리하다. 하지만 경험에만 의존하는 경우 부정확할 수 있으며, 새로운 프로젝트도 이전과 비슷하다고 쉽게 생각하여 과소평가 할 수 있다.

 

 

계획 - 개발 비용 산정 - 하향식 산정 기법 - 델파이 기법

: 전문가의 경험을 중요시하여 비용을 산정하는 것은 전문가 판단 기법과 같으며, 추가로, 전문자의 편견이나 분위기에 영향을 받지 않도록 조정자를 둔다. 

 

 

계획 - 개발 비용 산정 - 상향식 산정 기법

: 프로젝트의 세부 작업 단위별로 비용을 산정한 후 전체 비용을 합산하는 방법으로, 원시 코드 라인 수(LOC) 기법과 개발 단계별 노력 기법이 존재한다.

 

 

계획 - 개발 비용 산정 - 상향식 산정 기법 - 원시 코드 라인 수 기법(LOC)

: 원시 코드 라인 수의 비관치, 낙관치, 중간치를 측정 후 예측치를 구해 비용 산정한다. 하지만 코드 라인 수를 예측하는 것은 쉽지 않으며, 해당 기법은 구현에만 초점이 맞춰져 있다는 문제가 있다. 즉, 실제 소프트웨어 개발에는 코딩 뿐 아니라 요구 분석, 설계 등에서도 인력과 자원이 많이 필요하다.

 

 

계획 - 개발 비용 산정 - 상향식 산정 기법 - 개별 단계별 노력 기법

: 각 기능을 구현하는 데 필요한 M/M을 소프트웨어 개발 생명주기의 각 단계에 적용해 단계별로 산정한다. 여기서 M/M은 프로젝트에 투입되는 월 인원을 나타내는 숫자로, 프로젝트 기간이 1달에 끝내기 위해 필요한 인원이다. 예를 들어, 1M/M은 1명이 한 달간 하면 끝낼 수 있고, 3M/M은 3명이 한 달간 하면 끝낼 수 있는 것이다. 만약 과거에 어떤 소프트웨어를 개발할 때, 5명의 개발자는 12개월, 7명의 개발자는 5개월 동안 참여했다고 하면, 노력 M/M = (5*12)M/M + (7*5)M/M = 95M/M가 되는 것이다. 즉, 비슷한 소프트웨어를 개발할 때 개발 기간이 12개월이라 한다면, 약 8명의 개발자가 필요한 것을 산정할 수 있는 것이다.

 

 

계획 - 개발 비용 산정 - 수학적 산정 기법

: 대표적으로 Constructive Cost Model (COCOMO)가 있으며, PM = a x (KDSI)^b를 구한다. 참고로 PM이랑 M/M랑 똑같은 의미를 지닌다. 여기서 KDSI는 소프트웨어 최종 원시 코드 라인 수이며 1KDSI = 1,000줄이다. a와 b는 개발하고자 하는 프로젝트가 단순형인지, 중간형인지, 내장형인지에 따라 구분된다. 또한, 프로젝트의 특징을 고려하여 PM에 EAF라는 노력 조정 수치를 곱하기도 한다. EAF는 제품 특성, 컴퓨터 특성, 개발자 특성, 프로젝트 특성 등을 고려한다. 계산한 PM으로 총 개발 기간을 계산할 수 있는데, TDEV = 2.5 * (PM)^c이며, c는 프로젝트가 단순형인지, 중간형인지, 내장형인지에 따라 달라지며, 단순형일수록 값이 크다. 즉, 복잡할 수록 더욱 체계적이므로 개발 기간이 짧은 것이다.

 

: 또 다른 기법으로는 기능 점수 산정 기법이 있다. COCOMO 방법의 한계로는 계획 단계에서 원시 코드의 라인 수를 정확히 예측할 수 없다는 것이다. 언어의 종류, 개발자의 수준, 알고리즘에 따라 생성되는 코드의 라인 수가 달라지기 때문이다. 기능 점수 산정 기법에서는 라인 수와 무관하게 기능이 많으면 규모도 크고 복잡도도 높다고 판단한다. 즉, 프로그래밍 언어 종류같은 것은 무관하고, 오로지 함수의 입출력 수를 고려한다. 

 

: 기능 점수 산정 기법의 장점으로는 사용자의 요구사항만으로 기능을 추출해 측정하기 때문에 구현 기술, 구현 언어, 개발자의 능력에 상관없이 소프트웨어의 규모를 일관성 있게 제공한다. 단점으로는 요구사항으로부터 기능을 도출하기 위해 높은 분석 능력이 필요하며, 따로 기능 점수 전문가가 필요하다. 또한 개발 규모를 예측하는 데는 적합하지만, 실제 개발과는 다를 수 있다.