X

3R(Reverse Engineering, Re-engineering, Reuse)

I. 소프트웨어 생산성 향상을 위한 3R

가. 소프트웨어 3R(Reverse Engineering, Re-engineering, Reuse)의 개념

  • Repository를 기반으로 역공학(Reverse Engineering), 재공학(Re-engineering), 재사용(Reuse)을 통해 소프트웨어 생산성을 극대화하는 기법
  • 정보저장소(Repository)는 3R을 구현하는 수단으로 사용됨

나. 소프트웨어 3R의 특징

  • 소프트웨어 위기 극복 및 개발 생산성 향상
  • 유지보수 비용의 절감
  • 소프트웨어 변경 요구사항의 신속한 대처

II. 소프트웨어 3R의 개념도 및 구성요소

가. 소프트웨어 3R의 개념도

  • 요구분석, 설계, 구현의 순서로 소프트웨어를 개발하는 것을 ‘순공학’이라고 하며, 반대로 이미 개발된 소프트웨어를 분석하는 것을 ‘역공학’이라고 함

나. 소프트웨어 3R의 구성요소

접근방법 주요 내용
역공학
(Reverse Engineering)
자동화된 도구의 도움으로 물리적 수준의 정보를 논리적인 소프트웨어 정보의 서술로 추출하는 프로세스
재공학
(Re-engineering)
자동화된 도구로 현존하는 시스템을 점검 또는 수정하는 프로세스
재사용
(Reuse)
이미 개발되어 기능, 성능 및 품질을 인정받았던 소프트웨어의 전체 또는 일부분을 다시 사용

III. 소프트웨어 역공학의 개요

가. 역공학(Reverse Engineering)의 정의

  • 자동화된 도구(CASE)의 도움으로 물리적 수준의 소프트웨어 정보를 논리적인 소프트웨어 정보의 서술로 추출하는 프로세스

나. 역공학의 특징

  • 상용화되거나 기 개발된 소프트웨어의 분석을 도와줌
  • 기존 시스템의 자료와 정보를 설계 수준에서 분석 가능해 유지보수성 향상
  • 기존 시스템 정보를 Repository에 보관하여 CASE의 사용을 용이하게 함

다. 역공학의 장점

  • 재문서화를 통하여 현존하는 시스템의 지식을 재 회득함.
  • 현존 시스템의 데이터와 논리에 효율적인 분석을 통하여 유지보수 신속수행
  • 현존하는 시스템의 정보를 Repository에 펼칠 수 있음
  • 시스템 개발과 유지보수를 자동화
  • 현존 시스템 설계를 재 사용함
  • 구현 독립적인 논리적인 레벨에서 작업함

라. 소프트웨어 역공학의 종류

구분 내용
논리 역공학 원시 코드로부터 정보를 추출하여 물리적 설계 정보 저장소에 저장, 물리적 설계정보를 얻어 내는 수단
자료 역공학 기존 데이터베이스를 수정하거나 새로운 데이터베이스 관리 시스템으로 전이 하는 역할

마. 역공학이 필요한 경우

  • 기 가동중인 시스템의 유지보수가 어려운 경우
  • 변경이 빈번하여 시스템 효율이 저하된 경우
  • 파일 시스템으로 개발 된 업무를 관계형 데이터베이스로 재구축하려는 경우
  • 기존 메인프레임을 다운받아 다운사이징하는 경우

바. 소프트웨어 역공학 프로세스

IV. 소프트웨어 재공학의 개요

가. 소프트웨어 재공학(Re-engineering)의 정의

  • 자동화된 도구로 현존하는 시스템을 점검 또는 수정하는 프로세스로 시스템의 재설계, 교체를 CASE도구로 사용하도록 순공학을 준비하는 과정

나. 소프트웨어 재공학의 특징

  • 현 시스템의 유지보수성 향상
  • 시스템의 이해와 변형을 용이하게 하며, 유지보수 비용 및 시간 절감
  • 표준 준수 및 CASE의 사용 용이

다. 재공학의 단계

단계 설 명
원시코드로부터의
정보 추출 단계
원시코드나 데이터베이스 정보 등에서 필요한 정보들을 정보저장소에 저장
역 공학 단계 정보저장소에 있는 정보들로부터 새로운 정보를 인식하여 그들의 성질과 선택 사항들 결정
시스템의 향상과 검증단계 시스템 분석가가 정보구조, 정보흐름과 같은 응용분야에 대한 명세 단계의 정의를 향상
순 공학 단계 파일과 데이터베이스 설계, 프로그램 명세를 이용하여 최적화 설계로 기능을 향상
설계와 최적화 단계 파일과 데이터베이스 설계, 프로그램 명세를 이용하여 최적화 설계로 기능을 향상
원시코드의 생성 단계 정보저장소로부터 구현단계의 설계 내역을 바탕으로 원시코드를 생성

라. 재공학 적용기법의 종류 및 특징

종류 특징
재구조화 소프트웨어 부품을 라이브러리에 모아놓고 새로운 소프트웨어 개발에 필요한 부품을 찾아내어 결합하는 방법
재모듈화 시스템의 모듈 구조를 변화시키는 것으로 시스템 구성요소의 클러스터 분석 및 결합도와 관련(결합도, 응집도)
의미론적
정보추출
코드수준이 아닌 문서 수준이 설계 재공학 기법

마. 재공학의 기술 접근 방법

접근방법 설명
프로그램 제어의
재구조화
오래된 언어로 작성된 시스템의 경우 프로그램의 수정 및 유지보수의 어려움이 많아 이러한 부분들을 따로 독립된 모듈로 분리하면 유지 보수가 용이
신규 시스템
구성
새로운 시스템으로 구성하기 위하여 노후 시스템의 설계 사양을 복원하여 시스템의 구조와 각 모듈간의 관계를 파악이 필수적
시스템
유지보수
노후 시스템의 파악이 힘든 경우 시스템을 새로운 시스템의 한 부분 요소로 캡슐화하는 방법

 

V. 소프트웨어 재사용의 개요

가. 소프트웨어 재사용(Reuse)의 정의

  • 이미 개발되어 그 기능, 성능 및 품질을 인정 받았던 소프트웨어의 전체 또는 일부분을 다시 사용

나. 소프트웨어 재사용의 특징

  • 소프트웨어 생산의 TCO (Total Cost Overhead) 절감
  • 높은 품질의 소프트웨어 생산을 위한 공유 및 활용 효과

다. 소프트웨어 재사용의 기본 원칙

  • 범용성
  • 모듈성
  • 하드웨어 독립성
  • 소프트웨어 독립성
  • 자기 문서화

라. 소프트웨어 재사용의 목표

목표 설 명
신뢰성
(Reliability)
기능, 안정, 속도 등의 사전 성능 검증됨
확장성
(Extensibility)
검증된 기능 기반으로 Upgrade 용이함
생산성
(Productivity)
비용,시간,위험 등 전체적 개발 프로세스 향상됨
사용성
(Usability)
독립된 컴포넌트로써 조립성 제공됨
유지보수성
(Maintainability)
품질개선, 오류수정, 운영,Upgrade이 용이함
적응성
(Adaptability)
독립된 컴포넌트로써 새로운 Process 적용에 용이함

마. 소프트웨어 재사용의 기술적 접근방법

접근방법 설명
부품조립방안 소프트웨어 부품들을 라이브러리에 모아놓고 새로운 소프트웨어 개발에 필요한 부품들을 찾아내어 결합시켜 나가는 방법
모형화방안 소프트웨어에 대한 일반적인 모형을 만들어 놓고 거기에 필요한 매개변수를 적용하여 필요에 따라 소프트웨어를 생성해 내는 방법
기존 소프트웨어
수정방안
기존의 소프트웨어를 새로운 소프트웨어로 발전 시킬 수 있도록 하며 전체 소프트웨어를 먼저 정립한 후 새로운 모듈을 개발하고 기존의 모듈을 수정, 삭제하면서 단계적으로 개선 시켜 나감

바. 소프트웨어 재사용 활용 및 구현 기법

  • 활용 기법 종류
기법 종류 내용
Copy 소프트웨어 코드를 Copy하여 목적에 맞게 수정하여 사용하는 방법
Pre-Processing Include 함수를 사용하여 Compile시에 포함되도록 하는 방법
Library Sub Program 집합인 Library를 활용해 Link시에 포함되도록 하는 방법
Package Global Variable, Package Interface를 통한 정적인 활용 방법
Object Global Variable, Object Interface를 통한 실행중의 동적인 활용방법
Generics Object의 다형성을 이용하는 방법
객체 지향 객체 지향 방법의 상속성, 다형성 등의 성질을 활용하는 방법
Component 컴포넌트의 독립성, 조립성, 표준성 등을 활용하는 방법
  • 구현 기법 종류
기법 특 징
Classification -코드, 객체, 변수 등의 속성에 대해 표준 Pool활용
-Code Generation, Variable Standardization
-소프트웨어 생산의 TCO(Total Cost Overhead)절감
Design Pattern -특정 도메인에 대한 시스템 개발 경험자의 설계 및 구현의 결과를 재활용
– Business Process, 공통함수/언어 등
Modulation -시스템 분해, 추상화 등으로 Debugging, Test Integration, Modification을 수행
-Loosely Coupled, Tightly cohesion추구
OOM
(Object Oriented Methodology)
– 상속성, 추상성, 다형성, 동적 Binding등의 활용
– Class, 4GL에서의 Component 등(OOM)
CBD (Component Based Development) – ITA, EAP 기반의 Component 활용
– Active X, DCOM, EJB, CORBA 등

 

VI. 3R 비교

구분 역공학 재공학 재사용
개념 개발 단계를 역으로 올라가 코드에서 설계명세서 등을 도출 역공학 및 재구조화로 정보 추출 후 순공학으로 구현 타 시스템의 재사용 SW 분석 후 재구성하여 새 시스템에 적용
목적 현 시스템 분석작업으로 유지보수 향상 재사용 가능한 컴포넌트 개발로 유지보수 비용 절감, 시간 단축 신뢰성, 확장성, 생산성, 사용성, 유지보수성, 적응성
특징 완성SW분석시 유용
설계수준 분석으로 유지보수 향상
CASE 사용 용이하여 유지보수 향상
표준 준수로 시스템 이래 및 변형 용이
개발기간 및 비용 감소
SW품질, 생산성 향상
시스템 개발 정보공유
적용
시점
운영중인 시스템 분석분 어려운 경우
잦은 변경으로 시스템 성능이 저하된 경우
잃어버린 정보 복구
복잡한 시스템
다른 뷰 생성
부작용 발견
멀티폼 환경의 분산배치 및 통합 구축 시
CBD방법론 프로젝트
Tool Design Recovery, Scan/COBOL 등 Retool, FOR_STRUCT
PM/SS, Recorder 등
Software Factory
GURU, EIFFEL 등
한계 순공학의 자동화 기술 발전으로 역공학 필요가 상대적으로 낮아짐 CASE에 대한 정확한 이해 부족 및 사용미숙
전문 인력 부족
재사용에 대한 인식 전환 필요
재사용 기반 기술 부족

 

VII. 소프트웨어 동향 및 3R의 활성화 방안

가. 현재 시점

  • 시스템의 다운사이징과 더불어 역공학 및 재공학이 활성화 되었다면, 현재는 객체지향기술의 발달과 더불어 재사용이 활성화 되고 있는 시점

나. 3R의 활성화 방안

구 분 상세 설명
재사용에 대한 Vision 공유 경영자, 관리자, 개발자 간의 공통된 이해필요
재사용의 필요성 및 장점에 대한 정량적인 Vision 제시
재사용 대상의 자산화에 대한 인식 증진
재사용에 대한 Infrastructure 구축 사용을 위한 공동 Repository Matrix, 활용시스템 구축
재사용 프로세스 관리팀의 구축 및 활용관리
체계적, 지속적 교육 및 객체지향방법론, CBD 활용

 

도리: