Software Engineering

[소프트웨어공학] 제8장 코딩과 소프트웨어 유지보수

iseop 2023. 5. 18. 19:54   인쇄용 버전

1. 단원 요약

  • 코딩
    • 코딩 스타일: 가독성과 유지보수성을 높이기 위한 소스코드 작성 지침이나 관행
    • 내부 문서화: 소스코드 내에서 주석을 통해 코드에 대한 설명을 작성하는 행위
    • 코드 스멜: 잠재적으로 문제가 발생할 소지가 있는 소스코드의 일부분
    • 리팩토링: 기능 수정 없이, 구조를 개선하여 가독성과 유지보수성을 높이는 행위
  • 소프트웨어 유지보수
    • 제품 변경 전략
      • 아키텍처 수정 없이 변경
      • 아키텍처 수정
      • 유지보수성 향상을 위한 재공학
    • 유지보수 유형
      • 수정 유지보수: 오류 수정
      • 적응 유지보수: 외부 환경 변화에 대응하기 위한 수정
      • 완전 유지보수: 기능, 성능 개선을 위한 수정 *가장 자주 일어난다.
      • 예방 유지보수: 이해성, 유지보수성 개선을 위한 수정
  • 소프트웨어 유지보수: 형상관리
    • 형상: 시스템을 구성하는 요소들과 그 관계에 대한 정의
    • 형상관리: 품질보증(QA) 과정의 하나로, 변경을 통제/관리하기 위한 프로세스이다.
    • 형상관리자: 형상관리 프로세스를 주관하고, 적시에 고객에 새 버전을 릴리즈하는 책임자
    • 형상관리 계획: 조직 내 표준과 외부 표준에 기초하여 기술된 형상관리 절차
    • 형상관리 항목 
      • 계획서, 요구사항 명세서, 설계 문서, 개발 보고서
      • 개발 도구(컴파일러, 링커, 파서 등)
      • 소스코드, 바이너리
      • 테스트 계획, 테스트 케이스, 테스트 스크립트
      • 형상관리 항목이 완성되어 공식적으로 인정된 상태를 기준선(baseline)이라 한다.
    • 형상관리 활동
      • 형상관리 항목 식별: 형상관리 프로세스를 적용하여 통제할 항목을 정의
      • 버전 관리: major.minor.revision
      • 형상 구축: 특정 버전의 형상을 만들기 위해 그 구성요소들의 정확한 버전을 정의
      • 변경 통제: 변경통제 프로세스, 형상상태 보고, 형상감사
  • 소프트웨어 유지보수: 재공학
    • 이해도, 유지보수성, 재사용성 향상을 위해 기존 시스템을 변경하는 작업
    • 레거시 시스템의 수명 연장을 위한 대규모 유지보수 사업이다.
    • 새로 개발하는 것보다 위험과 비용이 축소된다.
    • 재공학 프로세스
      • 소스코드 변환: 최신 언어, 라이브러리 등으로 소스코드 변환
      • 역공학: 소스코드를 분석하여 설계 문서를 추출
      • 재구조화: 제어 구조를 개선 * 아키텍처를 변경하는 가장 큰 작업이다.
      • 모듈화: 모듈 구조를 개선
      • 데이터 재공학: 데이터 구조를 개선
    • 비용 요인
      • 관련 문서의 품질이 낮은 경우
      • 재공학 대상 데이터의 양이 많은 경우
      • 재공학 도구 사용이 불가능한 경우
  • 소프트웨어 유지보수: 역공학
    • 시스템이나 사용자매뉴얼로부터 명세서나 설계 문서를 추출하는 행위
    • 목적 코드(혹은 바이너리)로부터 소스 코드를 유도하는 행위
    • 낮은 추상 수준(바이너리)에서 높은 수준의 문서를 추출하는 프로세스
    • 재문서화(문서의 표현 방법 개선), 재구조화(리팩토링)
    • 역공학 프로세스: 구현체➡️설계 문서➡️요구사항 문서
  • 소프트웨어 유지보수: 재사용
    • 애플리케이션, 컴포넌트(클래스~서브시스템), 함수(~라이브러리) 단위의 재사용
    • 재사용의 장점: 비용 절감, 빠른 인도, 품질/신뢰도 향상, 위험 감소, 특화 전문가 활용
    • 재사용의 단점: 유지보수 난이도 상승, CASE 활용 제한, 의존성, 거부감
  • 소프트웨어 척도
    • 제품 척도: 제품의 크기, 복잡도 등의 특성
    • 프로세스 척도: 프로세스의 수행 비용, 성숙도, 효율성 등의 특성
    • 프로젝트 척도: 프로젝트의 비용, 일정, 생산성, 인사 등의 특성
    • 사이클로매틱 복잡도: 프로그램에 존재하는 독립적인 경로의 수에 비례
    • 소프트웨어 사이언스: 코드에서 측정한 연산/피연산자의 수에 비례
      • 길이, 부피, 난해성, 노력을 연산/피연산자 수에 기반한 식으로 계산

 

2. 연습문제 요약

  • 완전 유지보수(기능, 성능 개선)가 가장 빈번하게 일어난다. 차세대
  • MTTF = 500이면 평균 500시간을 연속으로 정상 가동이 가능하다는 의미
  • MTTR = 시스템 실패 시작 시각시스템 복구 완료 시각까지의 시간
  • MTBF = 시스템 실패 시작 시각과 그 다음번 시스템 실패 시각 사이의 평균 간격
  • MTBF = MTTF + MTTR
  • AVAIL = MTTF/MTTF+MTTR = MTTF/MTBF