[SW 공학] 계획-1
▶소프트웨어 개발 과정
- (도메인 분석) → 계획 → (요구)분석 → 설계 → 구현 → 테스트 → 유지보수
- 소프트웨어를 만들기 위해 계획 단계에서 유지보수 단계까지 이르기까지 일어나는 일련의 과정
- 소프트웨어 개발 생명주기라고 함
▶도메인 분석
- 소프트웨어 엔지니어가 고객이나 사용자가 직면한 어려움의 배경, 성격, 범위를 파악해가는 과정
- 소프트웨어 개발은 기본적으로 광범위한 문제를 해결하는 작업
- 따라서 문제를 해결하기에 앞서 문제 자체를 이해하는 작업 필요
- 또한 사용자에게 필요한 사항을 파악하기 전에 문제의 배경과 성격, 범위를 파악해야 하는데 이를 도메인 분석이라함
- 도메인 분석을 하는동안 알아낸 정보는 잘 정리해서 도메인 분석서로 작성함
▷주요 작업: 현재 시스템 정의, 현재 시스템의 평가, 제안 시스템을 위한 비즈니스 요구 정의, 처리 요구 정의, 교육 및 시스템 인수 조건 정의
▷도메인 정의
- 소프트웨어를 사용할 것으로 예상되는 고객이 일하는 분야의 비즈니스나 기술
▶ 1단계: 계획
- 비용, 기간 등 프로젝트를 수행하는 데 필요한 것에 대해 계획함
- 계획 단계에서 비용을 산정하는 대표적인 방법으로 COCOMO 모델, 기능 점수(FP, Function Point)모델 존재
- 계획 단계에서는 일정 계획이 매우 중요
- 프로젝트를 작은 단위로 나누어 작업할 수 있도록 하는 작업 분할 구조도(WBS) 존재
- 작업의 순서와 시간을 중심으로 작업 일정을 나타내는 네트워크 차트(CPM) 존재
- 프로젝트를 수행할 때 어떤 위험이 존재하는지 파악하고 이를 예방할 수 있는 조치를 취해야함
▷계획 단계의 주요 작업: 문제 정의, 타당성 분석, 예산 계획, 일정 계획, 위험 분석, 계획서 작성
▶문제 정의
- 현재 상황과 구현될 시스템의 목표 및 제약 조건 등을 포함해 무엇을 개발할 것인지 명확히 정의하고, 개발 범위를 결정
- 문제를 정의하려면 개발하고자 하는 영역의 배경 지식이 필요
▷문제 이해
▷대책 수립
- 신규 시스템의 목표 설정
- 기능과 우선순위(투자 효과를 분석)
- 해결 방안 모색(사용자 요구, 개발 여건, 기술적 능력 고려)
▷목표 시스템 정의
- 문제의 기술
- 시스템의 필요성
- 시스템의 목표
- 제약 사항
- 시스템의 제공 기능
- 사용자의 특징
- 개발, 운용, 유지보수 환경
▶ 타당석 분석
▷ 경제적 타당성
- 개발할 시스템을 정의하고 신규 시스템 실현 방안을 모색하면서, 투자 효율성이 얼마나 높은지, 시장성은 얼마나 큰지 등을 검토해야함
- 경영자 입장에서 의사 결정을 하는 데 매우 중요한 요소
- 경영자는 큰 비용을 들여 개발한 시스템이 얼마나 많은 이윤을 기업에게 남겨줄 것인지, 투자한 금액을 회수하고 이득을 볼 수 있는 시점은 언제부터인지등을 검토해야함
- 이 제품이 얼마나 팔릴지, 출시 시기가 적절한지한지를와 주변 여건과 유사 제품의 판매 상황 등을 충분히 검토·분석해야함
▷기술적 타당성
- 사용자가 원하는 수준으로 개발하기 위해 기술적인 어려움이 없는지 검토해야함
- 현재의 기술로 사용자가 요구하는 기능을 구현할 수 있는지, 하드웨어 개발에 지장은 없는지, 개발자의 기술력에 문제가 없는지 등을 검토
▷법적 타당성
- 개발 과정에서 사용하는 프로그램이나 도구가 소유권 등의 법적인 문제가 없는지 검토해야함
▶ 예산 계획
- 소프트웨어 개발에 필요한 비용을 예측하는 것은 매우 어려운 일이며 예측이 어긋나는 경우가 많음
- 소프트웨어는 개발 프로세스가 다양하기 때문에 표준화나 자동화가 어려워, 개발 프로세스에 따라 생산성이나 품질이 서로 다를 수 있음
- 사람(개발자)에 의존도 크므로 개발에 참여하는 인력의 능력에 따라 차이가 큼
▷개발 비용에 영향을 주는 요소
- 프로그래머 자질
- 소프트웨어 복잡도
- 소프트웨어 크기
- 가용 시간
- 기술 수준
- 요구되는 신뢰도 수준 (사고나 오류가 발생했을 때 재산에 큰 영향을 끼치거나, 인명 피해가 발생할 수 있는 소프트웨어어들은 개발 시 높은 신뢰도를 요구기술 수준)
1) 비용 산정 기법 1:하향식 산정 기법(전문가 판단 기법, 델파이기법)
- 하향식 산정 기법은 과거의 유사한 경험을 바탕으로 회의를 통해 산정하는 비과학적인 기법
- 조직 내 경험이 있는 2명 이상의 전문가에게 비용 산정을 의로하는 전문가판단 기법 존재
- 한명의 조정자와 다수 전문가의 의견을 종합하여 비용을 산정하는 델파이 기법 존재
▷전문가 판단 기법
- 경험이 많은 여러 전문가가 프로젝트를 수행하는 데 비용이 어느 정도 들어가는지 평가한 금액을 개발 비용으로 산정
- 신뢰성 있고 편리하다는 장점 존재, 짧은 시간에 개발비를 산정하거나입찰에 응해야 하는 경우 많이 사용
- 그러나 수학적 계산에 산정하지 않고 경험에만 의존할 경우 부정확할 수도 있음
▷델파이 기법
- 전문가 판단 기법의 단점을 보완한 방식
- 전문가의 경험을 중요시하여 비용을 산정하는 것은 전문과 판단 기법과 동일
- 그러나 델파이 기법은 전문가들의 편견이나 분위기에 영향을 받지 않도록 조정자를 둠
- 여러 전문가가 모여 각자의 의견대로 비용을 산정, 그 결과를 서로 공유하여 의견 조율
- 조율 과정을 반복해 최종적으로 일치되는 결과 값(비용)이 나오면 이를 개발 비용으로 산정
● 델파이 기법의 비용 산정 진행 과정
1) 조정자는 전문가가 모여 비용 산정을 하는 회의에서 간사 역할을 한다.
2) 전문가는 비용을 산정할 수 있는 자료를 충분히 검토하고, 필요하다면 의견을 나눌 수 있다.
3) 전문가 각자가 비용을 산정한다. 이때 계산된 결과를 조정자에게 익명으로 제출한다.
4) 조정자는 각 전문가가 제출한 자료를 요약 형태로 정리한다.
5) 조정자는 각 전문가가 제출한 자료에서 산정 내용에 차이가 크면 이 문제를 해결하기 위해 회의를 소집한다.
6) 전문가는 다시 익명으로 산정 작업을 실시한다.
2) 비용 산정 기법 :상향식 산정 기법 (원시 코드 라인 수 기법, 개발 단계별 노력 기법)
- 상향식 산정 기법은 프로젝트의 세부 작업 단위별로 비용을 산정한 후 전체 비용을 합산하여 산정하는 방법
- 각 기능의 원시 코드 라인 수의 비관치(가장 많은 라인 수), 낙관치(가장 적은 라인 수), 중간치(기대치, 평균 라인 수)를 측정하여 예측치를 구해 비용을 산정하는 원시 코드 라인 수(LOC, Line of Line)기법 존재
- 생명주기의 각 단계별로 노력(인/월수, M/M(Man.Month))를 산정하는 개발 단계별 노력(effort per task)기법 존재
▷ 원시 코드 라인 수(LOC) 기법
- 소프트웨어 각 기능의 원시 코드 라인 수의 비관치, 낙관치, 중간치를 측정하여 예측치를 구하고 이를 이용해 노력, 개발 비용, 개발 시간, 생산성 등의 비용을 산정하는 기법
• 낙관치 : 한 모듈의 라인 수를 가장 적게 생각할 때의 예상 라인 수(가중치 1 부여)
• 비관치 : 한 모듈의 라인 수를 가장 많게 생각할 때의 예상 라인 수(가중치 1 부여)
• 중간치 : 한 모듈의 라인 수를 보통이라고 생각할 때의 예상 라인 수(가중치 4 부여)
• 추정 LOC : (낙관치+(4×중간치)+비관치)/6
● LOC 기법의 비용 산정 공식
노력(인/월수 M/M)=(참여 인력/월)×개발 기간=추정 LOC/1인당 월 평균 생산 코드 라인 수
개발 비용=(M/M)×단위 비용(1인당 월 평균 인건비)
개발 기간=(M/M)/참여 인원
생산성=LOC/(M/M)
▷개발 단계별 노력(MM) 기법
- LOC기법은 개발하려는 소프트웨어의 총 코드 라인 수를 예측하여 M/M을 산정, 그런데 이는 구현 단계에 대한 M/M을 산정한 것.
- 실제 소프트웨어 개발에는 코딩뿐만 아니라 요구 분석, 설계 등의 단계에서도 인력과 자원이 필요
- 개발 단계별 노력 기법은 LOC 기법을 보완하기 위해 각 기능을 구현하는데 필요한 M/M을 소프트웨어 개발 생명주기의 각 단게에 적용하여 단계별로 산정
3) 비용 산정 기법 :수학적 산정 기법
- 수학적 산정 기법은 상형식 비용 산정 기법으로 개발할 소프트웨어의 규모(LOC)를 예측한 후,
- 소프트웨어 종류에 따라 각 비용 산정 공식에 대입하여 비용을 산정하는 COCOMO 방법 존재
- 소프트웨어 생명주기의 전 과정에 사용될 노력의 분포를 가정해주는 putnam(풋남)방법 존재
- 기능 점수를 구한 후 이를 이용해 비용을 산정하는 기능 점수(FP)방법 존재
▷ COCOMO 방법
- 완성될 소프트웨어 크기(라인 수, LOC)를 추정하고 이를 준비된 식에 대입하여 개발에 필요한 M/M을 예측하는 것
▷기능 점수 방법
- 개발자 중심의 물리적 접근 방법이 아닌 시스템 구현에 사용되는 기술적 요구사항에 초첨을 맞추는 것
- 기능(입출력, 데이터베이스 테이블, 인터페이스, 조회 등)의 수를 판단 근거로 삼음.
- 즉 사용자 관점에서, 개발하려는 소프트웨어 기능을 정량화하여 소프트웨어 개발 비용 산정에 활용하는 방법