2019년 2월 7일
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 활용 |