[소프트웨어공학] 소프트웨어 유지보수
소프트웨어 유지보수
소프트웨어가 사용자에게 인수, 설치된 이후에 발생하는 모든 공학적인 작업 활동을 의미
- 소프트웨어 비용 중 유지보수 비용이 가장 큰 비중을 차지
- 명세서의 유지보수란 명세서를 항상 최신의 상태로 만드는 것을 의미
- 소프트웨어는 계속 수정, 보완되기 때문에 명세서도 따라서 보완되지 않으면 일관성을 유지하기 어려움
- 소프트웨어 유지보수의 과정은 유지보수 요구, 현 시스템에 대한 이해, 수정 및 시험순으로 반복하여 일어남
문서화(Documentation)
- 유지보수와 시스템 개발을 위한 분석 설계가 용이하고, 확장성이 좋다
- 여러 사람이 알아보기 쉽고, 유지보수 작업이 용이하려면 문서화 작업이 표준화되어야 한다
- 문서의 표준화가 되었다고 해서 신뢰성이 높아지거나 프로그램 처리 속도가 향상되거나 개발 인력이 감소하는 것은 아니다
유지보수 작업의 종류
- 수리보수(
Corrective
Maintenance, 수정보수)- 밝혀지지 않은 모든 잠재적인 오류를 찾아 수정하는 활동
- 완전보수(
Perfective
Maintenance, 기능개선/향상보수)- 기능의 수정, 새 기능의 추가, 전반적인 기능 개선 등
- 유지보수 유형 중 제일 많은 비용이 소요
- 적응보수(
Adaptive
Maintenance, 환경적응)- 환경 변화에 대응하여 소프트웨어를 변경하는 경우
- 예방보수(
Preventive
Maintenance, 예비조치)- 프로그램의 변경을 미리 예측하여 준비하는 활동
유지보수 비용 측정 방법
- BL(Belady와 Lehman) 방법
M=$P+K\cdot e^{(c-d)}$
M:유지보수를 위한 노력(인원/월)
P:생산적인 활동에 드는 비용(개발 비용)
K:통계값에 구한 상수(주관적평가)
c:복잡도
d:소프트웨어에 대한 지식 정도 - COCOMO 방법
M = $ACT \times DE \times EAF$
ACT:유지보수 비율
DE:생산적인 활동에 드는 비용(개발 비용)
EAF:노력 조정 수치(주관적 평가) - Vessey & Webber 방법
M = $ACT \times 2.4 \times [KDSI]^{1.05}$
M:생산적인 활동에 드는 비용(개발 비용)
ACT:유지보수 비율
KDSI:1000당 명령어 라인 수
소프트웨어 품질 목표 항목
- 정확성
- 신뢰성
- 효율성
- 무결성 : 허용하지 않은 사용이나 자료의 변경을 제어하는 정도
- 유지보수 용이성
- 사용 용이성
- 검사 용이성
- 이식성
- 상호 운용성 : 다른 소프트웨어와 정보를 교환할 수 있는 정도
- 유연성 : 소프트웨어 품질 목표 중 새로운 요구사항에 접하여 쉽게 수정될 수 있는 시스템 능력을 요구하는 것의 정도
- 재사용성
소프트웨어 신뢰성
신뢰성(Reliability) : 주어진 시간 동안 주어진 환경에서 프로그램이 고장 없이 운영될 확률을 의미
가용성(Availability) : 프로그램이 주어진 시점에서 요구사항을 수행하는 확률
- 평균 사용 시간(
MTBF
: Mean Time Between Failures)
고장 수리가 끝난 시간부터 다음 고장이 발생할 때까지의 시간 평균치$\frac{(사용1 + 사용2 + … + 사용n)}{n}$
- 평균 수리 시간(
MTTR
: Mean Time to Repair)
고장이 일어난 시점부터 고장 수리가 완료되는 시점까지의 평균치$\frac{(고장1 + 고장2 + … + 고장n)}{n}$
- 평균 고장 시간(
MTTF
: Mean Time To Failures)
고장이 발생한 시점부터 다음 고장이 발생할 때까지의 평균치MTBF + MTTR
- 가용도 : 전체 시간 중에서 설계 가동하여 사용 중인 시간을 의미
$\frac{MTBF}{MTTF}$ = $\frac{MTBF}{MTBF+MTTR}$
소프트웨어 재사용(S/W Reuse)
이미 개발된 소프트웨어를 반복 사용하여 생산성을 향상시키는 방법
- 생성 중심(Generation Based, 모듈화)
재사용 단위를 찾아 발전시키는 기술 -
합성 중심(Composition Based, 모듈화)
모듈을 생산성있게 조립하는 기술 - 특징
- 모듈의 크기는 작을수록 재사용 비율이 높다
- 개발시간과 비용을 단축
- 개발 지식을 공유할 수 있다
- 소프트웨어 품질과 생산성을 향상
소프트웨어 재공학(S/W Re-Engineering)
과거에 사용하던 소프트웨어를 수명 연장을 위해 효과적으로 사용할 수 있도록 접근하는 기술
출현 배경
소프트웨어의 위기를 개발의 생산성이 아닌 유지보수의 생산성으로 해결하기 위해 출현
문서화 하는 과정에서 소프트웨어의 문제점들이 발견되고 이런 문제점을 수정 보완하여 다시금 소프트웨어를 수정하게 된 것이 재공학이 출현된 배경이다
이미 개발된 소프트웨어를 보고 문서화했으므로 역으로 진행했다하여 역공학의 개념이 출현하였고, 재공학은 역공학 이후에 출현된 기술 개념
정의
기존의 있던 소프트웨어를 파기하지 않고 변경된 사용자의 요구사항이나 수정된 환경으로 기존 소프트웨어를 수정, 보완하여 재구축하는 기술
노후된 시스템에 대한 재분석/문서화 작업을 통해 공학적으로 우수한 시스템을 만드는 것을 의미
재구조화(Restructuring) : 재공학의 한 유형으로 사용자의 요구사항이나 기술적인 변경 없이 프로그램을 개선
역공학(Reverse Engineering) : 기존 소프트웨어를 분석하여 소프트웨어 개발 과정과 데이터 처리 과정을 설명하는 분석 및 설계 정보를 재발견하거나 다시 만들어 내는 작업.
원시 프로그램으로부터 데이터, 아키텍처, 절차에 관한 분석 및 설계 정보를 추출하는 기술
- 코드의 역공학 : 소스 코드로부터 자료 흐름도를 추출하고 분석하여 변경
- 데이터의 역공학 : 소스 코드로부터 자료 사전을 추출하고 분석하여 변경
특징
- 재공학은 유지보수 중 예비 조치(Preventive)의 문제를 해결하기 위한 학문이다
- 자동화된 도구를 사용하여 소프트웨어를 분석하고 수정하는 과정을 포함
- 재공학 활동은 분석, 재구성, 역공학, 이식 활동 등으로 구분
목표
- 유지보수성, 생산성, 품질의 향상이 목적
- 소프트웨어 사용 기간을 연장시키고 비용을 감소시킨다
- 고수준의 추상을 합성할 수 있다
댓글남기기