1. 소프트웨어 유지보수
1.1 소프트웨어 유지보수
1.1.1 소프트웨어 유지보수의 개념
- 개발 완료 시점부터 폐기될 때까지, 지속적으로 수행하는 작업
- 소프트웨어의 수명을 연장하기 위한 활동
- 소프트웨어 생명주기 동안
가장 많은 비용이 소모되는 단계 - 기능개선 / 하자보수 / 환경적응 / 예방조치가 목적이다.
1.1.2 유지보수의 중요성
- 소프트웨어 예산에서 유지, 보수비용의 비중이 증가하고 있다.
- 신규 프로젝트보다는 기존 소프트웨어 개선에 더 많이 투자할 것이라는 전망
- 소프트웨어 기술발전이 용역 개발보다 패키지 구매쪽으로 변화
1.1.3 유지보수가 어려운 이유
- 업무 프로세스와 구축된 시스템을 이해해야 함
- 유지보수 계약이 개발과 계획과 별개인 경우 시간이 지나면서 소프트웨어 구조와 가독성이 떨어짐
1.2 유지보수의 구분 : 예수고향 적응⭐
예수가 고향에 적응하기
1.2.1 예방 보수(Preventive Maintenance)
- 장래에 유지보수성 또는 신뢰성을 보장하기 위해 선제적으로 하는 유지보수
- 소프트웨어의 잠재적인 오류발생에 대비하여 미리 예방수단을 강구해 두는 유지보수
1.2.2 수정 보수(Corrective Maintenance)
- 소프트웨어 구축 시 테스트 단계에 미처 발견하지 못한 잠재적인 오류를 찾아 수정한다.
- 수리 보수, 수정 보수, 정정 보수, 하자 보수라고도 한다.
1.2.3 향상 보수(Perfective Maintenance)
- 기존 기능과 다른 새로운 기능을 추가하거나, 기존 기능을 개선
- 소프트웨어 확장 및 리모델링
- 유지보수 활동 중 가장 자원이 많이 소모되는 활동
1.2.4 적응 보수(Adaptive Maintenance)
- 운영체제, 하드웨어와 같은 프로그램 환경변화에 맞추기 위해 수행하는 유지보수
1.3 유지보수 비용 예측 방법
- 주먹구구식 방법
- Belady와 Lehman의 방법
- COCOMO 방법
- SMI(Software Maturity Index, 소프트웨어 성숙 색인)
1.4 유지보수 관련 용어
레거시 시스템(legacy system)⭐- 낡은 기술이나 방법론, 컴퓨터 시스템, 소프트웨어 등을 말한다.
- 더이상 쓰이지 않더라도 현대의 기술에 영향을 주는 경우도 포함한다.
외계인 코드(Alien Code)- 아주 오래되거나 참고 문서 또는 개발자가 없어 유지보수 작업이 어려운 프로그램 코드
- 프로그램 문서화(Documentation)을 통해 외계인 코드를 방지 가능
스파게티 코드(Spaghetti Code)- 복잡한 프로그래밍 소스 코드
- 작동 자체는 제대로 하거나 하는 것처럼 보이지만, 추후 유지보수가 매우 어려워진다.