본문 바로가기
Computer Science/Software Engineering

[Software Engineering] Software Maintenance and Evolution

by __K.Jun__ 2025. 2. 23.

Software Maintenance and Evolution

  • 소프트웨어 변경 (Software Change)
    • 소프트웨어 변경은 불가피함
      • 소프트웨어 사용 중 새로운 요구사항이 발생
      • 비즈니스 환경 변화
      • 오류 수정 필요
      • 새로운 하드웨어 및 장비 도입
      • 성능 및 신뢰성 개선 필요
    • 기존 소프트웨어 시스템의 변경을 관리하는 것이 조직의 주요 과제
  • 소프트웨어 유지보수 및 발전 (Software Maintenance and Evolution)
    • 유지보수(Maintenance): 소프트웨어가 배포된 후 수정하는 작업
    • 유지보수, 발전(Evolution), 리엔지니어링(Reengineering)은 종종 같은 의미로 사용됨
    • 유지보수의 유형
      • 소프트웨어 결함 수정 유지보수
        • 시스템의 요구사항 충족을 위한 문제 해결
      • 운영 환경 변화에 따른 적응 유지보수
        • 새로운 하드웨어, OS 등에 적응하도록 시스템 변경
      • 기능 추가 및 수정 유지보수
        • 새로운 요구사항을 만족시키기 위한 시스템 수정
  • 유지보수 프로세스 (Maintenance Process)
    • 변경 요청 보고 (Change Reports)
      • 모든 변경 사항은 먼저 보고되어야 함 (예: 오류 보고)
    • 변경 승인 (Change Authorization)
      • 변경 사항은 검토 및 승인 절차를 거쳐야 함
    • 소프트웨어 리엔지니어링 (Software Reengineering)
      • 역공학(Reverse Engineering)
      • 순공학(Forward Engineering)

 

Reverse Engineering

  • 역공학(Reverse Engineering): 소프트웨어의 설계를 복구하는 과정
  • 프로그램을 분석하여 더 높은 수준의 개념을 도출하는 기술
  • 역공학의 두 가지 유형
    • 소스 코드가 있는 경우
      • 문서화가 부족하거나 오래되어 무효한 경우 프로그램의 고급 개념을 복원
    • 소스 코드가 없는 경우
      • 실행 파일을 분석하여 가능한 소스 코드를 복구
  • 클린룸 설계 (Clean Room Design)
    • 클린룸 설계(Chinese Wall Technique): 저작권 및 영업 비밀을 침해하지 않으면서 역공학을 통해 동일한 기능의 새로운 설계를 생성하는 방법
    • 특허 보호된 기술에는 적용할 수 없음
  • 소스 코드 역공학
    • C 언어 소스 코드 분석 도구:
      • ctags: 함수 인덱스 생성
      • cxref: 코드에서 기호가 사용된 위치 표시
      • cflow: 함수 호출 관계 표시
    • UML 다이어그램 생성:
      • Java Studio Enterprise 8: Java 소스 코드 → UML 변환
      • IBM Rational Software Modeler: UML 모델 변환 가능
    • 문서 자동 생성 도구
      • Doxygen: 여러 프로그래밍 언어 지원 (C++, Java, Python 등)
      • Javadoc: Java API 문서 생성
      • ROBODoc: Javadoc과 유사한 문서 생성 툴, GPL의 승인을 받은 툴이다.

ctags
cxref
cflow
ROBODoc: Code
ROBODoc: Doc

  • 바이너리 소프트웨어 역공학 (Reverse Engineering of Binary Software)
    • 디스어셈블리 (Disassembly): 기계어를 어셈블리어로 변환
      • IDA Pro: 상용 디스어셈블러, Windows, Mac, Linux 실행 파일 지원
    • 디컴파일 (Decompilation): 저수준 코드 → 고수준 코드 변환
      • dcc Decompiler: DOS 실행 파일을 C 코드로 변환

  • 저수준 역공학 (Low-Level Reverse Engineering)
    • 하드웨어 추적 (Hardware Trace)
    • 마이크로프로세서가 수행하는 모든 작업을 기록
    • ARM7, ARM9, IBM PowerPC 지원
    • 로직 분석기 (Logic Analyzer)
      • 디지털 신호를 포착하고 분석하여 회로의 동작을 검사
    • 패킷 스니퍼 (Packet Sniffer)
      • 네트워크 트래픽을 가로채고 분석하는 소프트웨어 또는 하드웨어

 

Reengineering

  • 소프트웨어를 개선하거나 새 환경에 적응시키기 위한 활동
  • 리엔지니어링 주요 활동
    • 코드 수정 (Code Modification)
      • 프로그램 구조 개선
      • 모듈화
      • 버그 수정
      • 새로운 기능 추가
    • 데이터 재구성 (Data Restructuring)
      • 데이터 추상화
    • 소스 코드 변환 (Source Code Translation)
      • 예: FORTRAN → C

Program Structure Improvement (before)
Program Structure Improvement (after)
Data Restructuring

 

728x90