🎉 berenickt 블로그에 온 걸 환영합니다. 🎉
CS
소프트웨어공학
09-유지보수

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)
    • 복잡한 프로그래밍 소스 코드
    • 작동 자체는 제대로 하거나 하는 것처럼 보이지만, 추후 유지보수가 매우 어려워진다.