소프트웨어 재공학

기존 소프트웨어를 버리지 않고 기능을 개선시키거나 기능을 새로운 소프트웨어로 재활용하는 등 소프트웨어 재사용 공법
  • 소프트웨어의 유지보수성과 품질을 향상시킬 수 있음
  • 부작용을 미연에 발견하여 위험부담 제거 및 복구비용 절감
  • 예방 유지보수 측면에서 소프트웨어 위기 해결

1. 종류[편집]

  • 분석(Analysis)
    • 기존 소프트웨어 명세를 확인하여 동작을 이해하고 재공학 대상을 선정
    • 재공학 가치판단 및 재공학 여부 판단
  • 재구성(Restructuring)
    • 소프트웨어 구조를 향상시키기 위해 코드를 재구성
    • 소프트웨어의 기능과 외적인 동작은 변경되지 않음
  • 역공학(Reverse Engineering)
    • 소프트웨어 동작 과정 및 설계 정보를 재발견 혹은 재생성
    • 소프트웨어를 구성하는 원시 코드를 복구하는 작업
    • 원시 코드로부터 설계정보 추출 및 절차 설계표현, 프로그램과 데이터 구조 정보 추출
    • 역공학의 가장 오래된 형태는 재문서화
  • 이관(Migration)
    • 기존 소프트웨어를 다른 운영체제, 하드웨어, 프레임워크 등에서 사용할 수 있도록 변환
    • 재구성 또는 재개발을 통한 새로운 소프트웨어에 기존 데이터를 옮겨 담는 작업

2. 단계[편집]

  1. 원시코드로부터의 정보 추출 단계
    • 원시코드나 데이터베이스 정보 등에서 필요한 정보들을 정보저장소에 저장
  2. 역공학 단계
    • 정보저장소에 있는 정보들로부터 새로운 정보 도출
  3. 시스템의 향상과 검증단계
    • 정보구조, 흐름과 같은 응용분야 성능 향상
  4. 순공학 단계
    • 도출된 정보과 향상된 응용분야 성능을 기반으로 새로운 프로그램 명세 작성
  5. 설계와 최적화 단계
    • 기존 파일과 데이터, 프로그램 명세를 이용하여 최적화 설계
  6. 원시코드의 생성 단계
    • 설계를 기반으로 개발, 원시코드 생성