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)
- 변경 요청 보고 (Change Reports)
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의 승인을 받은 툴이다.
- C 언어 소스 코드 분석 도구:
- 바이너리 소프트웨어 역공학 (Reverse Engineering of Binary Software)
- 디스어셈블리 (Disassembly): 기계어를 어셈블리어로 변환
- IDA Pro: 상용 디스어셈블러, Windows, Mac, Linux 실행 파일 지원
- 디컴파일 (Decompilation): 저수준 코드 → 고수준 코드 변환
- dcc Decompiler: DOS 실행 파일을 C 코드로 변환
- 디스어셈블리 (Disassembly): 기계어를 어셈블리어로 변환
- 저수준 역공학 (Low-Level Reverse Engineering)
- 하드웨어 추적 (Hardware Trace)
- 마이크로프로세서가 수행하는 모든 작업을 기록
- ARM7, ARM9, IBM PowerPC 지원
- 로직 분석기 (Logic Analyzer)
- 디지털 신호를 포착하고 분석하여 회로의 동작을 검사
- 패킷 스니퍼 (Packet Sniffer)
- 네트워크 트래픽을 가로채고 분석하는 소프트웨어 또는 하드웨어
Reengineering
- 소프트웨어를 개선하거나 새 환경에 적응시키기 위한 활동
- 리엔지니어링 주요 활동
- 코드 수정 (Code Modification)
- 프로그램 구조 개선
- 모듈화
- 버그 수정
- 새로운 기능 추가
- 데이터 재구성 (Data Restructuring)
- 데이터 추상화
- 소스 코드 변환 (Source Code Translation)
- 예: FORTRAN → C
- 코드 수정 (Code Modification)
728x90
'Computer Science > Software Engineering' 카테고리의 다른 글
[Software Engineering] Configuration Management (0) | 2025.02.23 |
---|---|
[Software Engineering] Debugging (0) | 2025.02.22 |
[Software Engineering] Mutation Analysis, Automated Testing (0) | 2025.02.21 |
[Software Engineering] RBT, TDD, Test Coverage (0) | 2025.02.20 |
[Software Engineering] Testing Techniques (0) | 2025.02.19 |