소프트웨어 유지보수
IT위키
더 많은 작업
- Maintenance
- 소프트웨어를 직접 운용하며 잔존 버그 등을 찾고 추가 개선사항을 도출한다.
- 하드웨어, 환경 변화에 따라 소프트웨어를 적응 및 유지시킨다.
- 시간과 비용이 가장 많이 투입된다.
- Corrective Maintenance
- 소프트웨어 구축 시 테스트 단계에 미처 발견하지 못한 잠재적인 오류를 찾아 수정한다.
- 수리 보수, 수정 보수, 정정 보수, 하자 보수라고도 한다.
- 예: 운영 중인 기능에서 발생한 오류를 고치는 것
- Adaptive Maintenance
- 운영체제, 하드웨어와 같은 프로그램 환경변화에 맞추기 위해 수행하는 유지보수
- 예: DBMS 를 다국어를 지원하는 제품으로 바꾸어 관련 프로그램을 고치는 것, 운영체제를 올린 뒤 프로그램을 맞추는 것
- Perfective Maintenance
- 기존 기능과 다른 새로운 기능을 추가하거나, 기존 기능을 개선 등
- 소프트웨어 확장 및 리모델링
- 유지보수 활동 중 가장 자원이 많이 소모되는 활동
- Preventive Maintenance
- 장래에 유지보수성 또는 신뢰성을 보장하기 위해 선재적으로 하는 유지보수
- 소프트웨어의 잠재적인 오류발생에 대비하여 미리 예방수단을 강구해 두는 유지보수
- 유지보수 활동은 수정(Corrective)·적응(Adaptive)·향상(Perfective)·예방(Preventive) 네 가지다
- Interfere Maintenance(간섭 보수) 같은 유형은 없다
- 변경이 들어와 처리되는 흐름은 소프트웨어 진화 문서에 있다
유지보수 비용은 운영 단계에서 생기지만, 그 크기는 개발 단계에서 정해진다. 페얼리(R. Fairley)는 개발 단계별로 유지보수 용이성(maintainability)을 높이는 활동을 다음과 같이 정리했다.[1]
| 단계 | 활동 |
|---|---|
| 분석 | 표준과 지침을 개발한다. 산출 문서의 이정표와 품질보증 절차를 정한다. 예상되는 개선 사항과 유지보수에 필요한 자원·비용을 미리 추정한다 |
| 기본(구조) 설계 | 명료성과 모듈성을 설계 기준으로 삼는다. 예상 개선을 쉽게 반영하도록 설계한다. 표준 표기법으로 자료 흐름·기능·구조를 문서화한다. 정보 은닉, 자료 추상화, 하향식 계층 분해 원리를 지킨다 |
| 상세 설계 | 표준 표기법으로 알고리즘·자료 구조·인터페이스를 명세한다. 루틴마다 부작용과 예외 처리 방안을 명시한다. 상호 참조 목록을 제공한다 |
| 구현 | 단일 입구·단일 출구 구조를 쓴다. 표준 들여쓰기와 단순 명료한 코딩 스타일을 따른다. 기호 상수로 루틴을 매개변수화한다. 루틴마다 표준 머리 주석을 단다 |
| 기타 | 유지보수 지침서와 테스트 묶음(test suite), 그 문서를 만들어 둔다 |
복수 입구·복수 출구 구조는 구조적 프로그래밍의 단일 입구·단일 출구 원칙에 어긋나 흐름을 따라가기 어렵게 만들므로 유지보수 용이성을 떨어뜨린다. SWEBOK 도 유지보수성을 운영 단계가 아니라 개발 중에 설계·구현으로 확보해야 하는 품질 특성으로 다룬다.[2]
- 외계인 코드: 개발된지 아주 오래되고 문서화가 되어 있지 않아 유지보수가 어려운 프로그램 코드
- 소프트웨어 개발 생명주기
- 구조적 프로그래밍
- 정보 은닉
- ↑ Richard E. Fairley, 『Software Engineering Concepts』, McGraw-Hill, 1985, 9장 Software Maintenance(Development Activities That Enhance Maintainability).
- ↑ 「Guide to the Software Engineering Body of Knowledge (SWEBOK) Version 3.0」, IEEE Computer Society, 2014, 5장 Software Maintenance, https://www.computer.org/education/bodies-of-knowledge/software-engineering, 확인일: 2026-11-04.