호우동의 개발일지

Today :

article thumbnail

소프트웨어 유지보수

  • 시스템을 인도한 후에 변경하는 일반적인 프로세스
  • 변경의 범위
    • 코딩 오류
    • 설계오류
    • 요구사항 오류

 


소프트웨어 유지보수 유형

  • 버그와 취약점을 고치기 위한 결함 수리
    • 수리의 종류에 따라 비용 상이(코딩 오류/설계 오류/요구사항 오류)

  • 소프트웨어를 새로운 플랫폼과 환경에 맞추기 위한 환경적 적응
  • 새로운 기능을 추가하고 새로운 요구사항을 지원하기 위한 기능성 추가

 


유지보수 비용 분포

유지보수 비용 분포

 


유지보수 비용

  • 개발비용보다 많이 필요
  • 기술적/비기술적 요인 둘 다 영향받음
  • 소프트웨어가 유지보수됨에 따라 증가
    → 소프트웨어 구조가 망가짐에 따라 유지보수가 힘듦

  • 오래된 소프트웨어의 경우 높은 비용 필요

 


유지보수 비용이 높은 이유

  • 유지보수 과정에서 새로운 기능 추가가 초기 개발과정에서 동일한 기능을 구현하는 것보다 비용이 더 듦
    • 새로운 팀이 유지보수되는 프로그램을 이해해야 함
    • 프로그램 유지보수 업무는 인기가 없음
    • 프로그램이 오래될수록 구조는 엉망진창이 되고 변경하기 어려워짐
    • 유지보수와 개발의 분리는 개발팀이 유지보수가 쉬운 소프트웨어를 작성하는데 이점이 없다는 것을 의미

 


유지보수 예측

  • 소프트웨어 시스템에 요구될 수 있는 변경을 평가하는 것
  • 변경 비용이 가장 많이 들 것 같은 시스템 부분을 식별
  • 시스템 변경 예측
    • 변경 가능성이 가장 높은 소프트웨어 컴포넌트를 변경에 더 잘 적응할 수 있도록 설계할 수 있음
    • 예 : 얼마나 많은 변경 요청이 예상될 수 있는가?

  • 유지보수성 예측
    • 유지보수 비용을 절감할 수 있는 컴포넌트 개선에 노력을 투자할 수 있음
    • 예 : 시스템의 어느 부분이 유지보수하는데 가장 비용이 많이 들 것인가?

  • 유지보수 비용 예측
    • 소프트웨어 유지보수를 위한 예산을 설정할 수 있음
    • 예 : 이 시스템의 전체 수명에 관한 유지보수 비용은 얼마나 될 것인가?

 


변경 예측

  • 시스템에 대한 변경 요청 횟수를 예측하기 위해서는 시스템과 외부 환경사이의 관계를 이해해야 함
  • 시스템과 환경 사이의 관계를 판단하기 위해 살펴봐야 하는 것
    • 시스템 인터페이스의 개수와 복잡도
    • 본래 변하기 쉬운 시스템 요구사항의 개수
      • 조직의 정책과 절차를 반영하는 욕사항은 도메인 특성 기반 요구사항보다 변하기 쉬움

    • 시스템이 사용되는 비즈니스 프로세스
      • 비즈니스 프로세스가 많아질수록 변경 요구 증가

 


복잡도 지표

  • 복잡도 측정은 유지보수 비용이 많이 들 것 같은 프로그램 컴포넌트를 식별하는데 유용
  • 시스템이나 컴포넌트가 복잡할수록 유지보수 비용이 많이 듦
  • 시스템이 서비스되기 시작한 이후에 유지보수성을 예측하는데 프로세스 데이터를 이용할 수 있음

 


프로세스 지표

  • 다음 항목으로 유지보수성 파악 가능
    • 수정 유지보수를 위한 요청 횟수
    • 영향 분석에 필요한 평균 시간
    • 변경 요구를 구현하는데 걸리는 평균 시간
    • 아직 처리되지 않은 변경 요구의 개수
      → 위의 모든 사항이 증가하면 유지보수성이 하락하는 것을 가리키는 것을 의미

 

 


소프트웨어 재공학

  • 다음의 작업들을 포함
    1. 시스템을 다시 문서화
    2. 시스템 아키텍처를 리팩토링
    3. 프로그램을 최신의 프로그래밍 언어로 변환
    4. 시스템 데이터의 구조와 값을 수정하고 업데이트

  • 소프트웨어의 기능은 변경하지 않으며, 시스템 아키텍처에 대한 중대한 변경을 피하도록 노력
  • 장점
    • 리스크 감소
      • 비즈니스에 중요한 소프트웨어를 다시 개발하는 것에는 매우 높은 리스크가 존재

    • 비용 절감
      • 새로운 소프트웨어를 개발하는 비용에 비해 재공학 비용은 상당히 적을 수 있음

 


재공학 프로세스

재공학 프로세스

  • 소스 코드 변환
    • 변환 도구로 프로그램에 오래된 프로그래밍 언어에서 동일한 언어의 최신 버전이나 다른 언어로 변환

  • 역공학
    • 프로그램을 분석하고 정보 추출 - 기능과 구성을 문서화하는데 도움

  • 프로그램 구조 개선
    • 제어구조가 분석되어 읽고 이해하기 쉽게 수정

  • 프로그램 모듈화
    • 프로그램의 관련된 부분들이 함께 그룹으로 묶이고, 적절한 경우에는 중복성이 제거

  • 데이터 재공학
    • 프로그램이 처리하는 데이터가 프로그램의 변화를 반영하기 위해 변경
      • 스키마 재정의, 기존 데이터배이스 구조 변환, 데이터 정리

 


재공학 접근법

재공학 접근법

 


재공학 비용

  • 수행되는 작업의 범위에 명백하게 좌우됨
  • 소프트웨어 재공학의 문제
    • 시스템을 향상하는 데에 실제적인 제한이 있음
    • 새로 개발된 시스템만큼 유지보수성이 좋지는 않음

 


리팩토링

  • 변경에 따른 프로그램의 품질 저하를 느리게 하기 위해 프로그램을 개선하는 프로세스
  • 미래의 변경 문제를 감소시켜 주는 예방 유지보수
  • 구조 개선, 복잡도 감소, 프로그램 이해하기 쉽도록 수정
  • 기능 추가 X, 프로그램 개선에 집중

 


리팩토링과 재공학 비교

  • 재공학
    • 시스템이 일정 시간 동안 유지보수되고 유지보수 비용이 증가하고 있을 때 발생
    • 유지보수성이 더 좋은 시스템을 만들기 위해 레거시 시스템을 처리하고 재공학하는데 자동화된 도구 사용

  • 리팩토링
    • 개발 및 진화 과정 전반에 걸쳐 개선하는 연속 프로세스
    • 시스템 유지 보수 비용과 어려움을 증가시키는 구조 및 코드의 품질 저하를 방지하기 위한 것

 


프로그램 코드 개선할 수 있는 상황

  • 중복 코드
    • 하나의 메서드나 함수로 구현하여 호출함으로 제거

  • 길이가 긴 메서드
    • 길이 가 너무 긴 메서드는 다수의 짧은 메서드들로 재설계

  • 스위치 케이스 문
    • 객체 지향 언어에서 종종 같은 것을 달성하기 위해 다형성을 사용할 수 있음

  • 데이터 군집
    • 모든 데이터를 캡슐화하는 객체로 대체

  • 추측에 근거한 일반성
    • 개발자들이 앞으로 필요할 경우를 대비하여 프로그램에 일반성을 포함시킬 때 발생
    • 종종 간단하게 제거 가능