3R
태그 :
- 개념
- - 레포지토리(Repository)를 기반으로 역공학(Reverse Engineering), 재공학(Reengineering), 재사용(Reuse)을 통해 소프트웨어 생산성을 극대화하는 기법
1. 소프트웨어의 생산성 향상을 위한 3R의 개요
가. 소프트웨어 3R의 정의
- 레포지토리(Repository)를 기반으로 역공학(Reverse Engineering), 재공학(Reengineering), 재사용(Reuse)을 통해 소프트웨어 생산성을 극대화하는 기법
- 정보저장소(repository)는 3R을 구현하는 수단으로 사용됨.
나. 소프트웨어 3R의 추진 배경
- 소프트웨어 위기 극복
- 소프트웨어 개발 생산성 향상
- 유지보수 비용의 절감
- 소프트웨어 변경 요구사항의 신속한 대처
2. 소프트웨어 3R의 구성
가. 소프트웨어 3R의 개념도
- 요구분석, 설계, 구현의 순서로 소프트웨어를 개발하는 것을 순공학이라고 하며, 그 반대로 이미 개발된 소프트웨어를 분석하는 것을 역공학이라고 함.
- 역공학을 통해 기존의 설계를 복구한 결과를 재구조화를 통해 재공학 과정을 거친 후 만들어진 S/W의 단위들로 재사용을 함.
나. 3R의 구성요소
접근방법 |
주요 내용 |
역공학(Reverse Engineering) |
자동화된 도구의 도움으로 물리적 수준의 소프트웨어 정보를 논리적인 소프트웨어 정보의 서술로 추출하는 프로세스 |
재공학(Re-engineering) |
자동화된 도구를 현존하는 시스템을 점검 또는 수정하는 프로세스 |
재사용(Reuse) |
이미 개발되어 그 기능, 성능 및 품질을 인정받았던 소프트웨어의 전체 또는 일부분을 다시 사용 |
다. 소프트웨어 3R의 관련개념
접근방법 |
주요 내용 |
순공학 |
추상개념의 현실화, 요구분석 -> 설계 -> 구현 |
재구조화 |
기능 변경 없이 소스코드의 재편성(표현의 변형) |
순환공학 |
순공학 후에 다시 역공학을 하는 과정 |
동기 순환공학 |
순환공학 시에 설계와 코딩을 동시에 변환하는 과정 |
비동기 순환공학 |
순환공학 시에 설계와 코딩을 따로 변환하는 과정 |
3. 소프트웨어 역공학(Reverse Engineering)의 개요
가. 역공학의 정의
- 자동화된 도구(CASE)의 도움으로 물리적 수순의 소프트웨어 정보를 논리적인 소프트웨어 정보의 서술로 추출하는 프로세스
나. 역공학의 장점
- 재문서화를 통하여 현존하는 시스템의 지식을 재 회득함.
- 현존 시스템의 데이터와 논리에 효율적인 분석을 통하여 유지보수를 신속히 수행
- 현존하는 시스템의 정보를 Repository에 펼칠 수 있음
- 시스템 개발과 유지보수를 자동화
- 현존 시스템 설계를 재 사용함
- 구현 독립적인 논리적인 레벨에서 작업함
다. 소프트웨어 역공학의 종류
- 논리 역공학 : 원시코드로부터 정보를 뽑아내 물리적이고 논리적인 설계정보를 획득하는 Repository를 정의함, (원시코드 à 정보추출 à 물리적 설계정보)
- 자료 역공학 : 물리적인 데이터 서술로부터 개념적, 논리적인 정보를 추출, 기존 파일시스템에서 데이터베이스의 전이 또는 기존 데이터 베이스에서 신규 데이터베이스로 전이 수행
라. 역공학에 사용되는 입력유형과 그에 따른 출력유형
Input |
Output |
- 원시코드, 목적코드, 작업 제어 절차 - 라이브러리, 디스크 디렉토리 - 텍스트 자료, 데이터베이스 구조 - 입출력 형태와 자료, 각종 문서 |
- 구조도 - 자료사전 - 자료 흐름도 - 제어 흐름 그래프 - 객체 관계도 - 자료 흐름 그래프 |
마. 소프트웨어 역공학 프로세스
4. 소프트웨어 재공학(Reengineering)의 개요
가. 재공학(Reengineering)의 정의
- 자동화된 도구로 현전하는 시스템을 점검 또는 수정하는 프로세스
- 시스템의 재설계, 교체를 CASE 도구가 사용하도록 순공학을 준비하는 과정
나. 소프트웨어 재공학의 목적
- 현재 시스템의 유지보수 향상
- 시스템의 이해와 변형을 용이하게 하며, 유지보수비용 및 시간 절감
- 표준 준수
- CASE의 사용 용이
다. 재공학의 단계
구분 |
설 명 |
원시코드로부터의 정보 추출 단계 |
원시코드나 데이터베이스 정보 등에서 필요한 정보들을 정보저장소에 저장 |
역 공학 단계 |
정보저장소에 있는 정보들로부터 새로운 정보를 인식하여 그들의 성질과 선택 사항들 결정 |
시스템의 향상과 검증단계 |
시스템 분석가가 정보구조, 정보흐름과 같은 응용분야에 대한 명세 단계의 정의를 향상 |
순 공학 단계 |
파일과 데이터베이스 설계, 프로그램 명세를 이용하여 최적화 설계로 기능을 향상 |
설계와 최적화 단계 |
파일과 데이터베이스 설계, 프로그램 명세를 이용하여 최적화 설계로 기능을 향상 |
원시코드의 생성 단계 |
정보저장소로부터 구현단계의 설계 내역을 바탕으로 원시코드를 생성 |
라. 재공학 적용기법의 종류 및 특징
구분 |
설 명 |
재구조화 |
소프트웨어 부품을 라이브러리에 모아놓고 새로운 소프트웨어 개발에 필요한 부품을 찾아내어 결합하는 방법 |
재모듈화 |
시스템의 모듈 구조를 변화시키는 것으로 시스템 구성요소의 클러스터 분석 및 결합도와 관련(결합도, 응집도) |
의미론적 정보추출 |
코드수준이 아닌 문서 수준이 설계 재공학 기법 |
5.소프트웨어 재사용(Reuse)의 개요
가. 소프트웨어 재사용(Reuse)의 정의
- 이미 개발되어 그 기능, 성능 및 품질을 인정 받았던 소프트웨어의 전체 또는 일부분을 다시 사용
- 새롭게 개발되는 소프트웨어의 품질과 생산성 및 신뢰성을 높이고 개발기간과 비용을 감소시켜 소프트웨어 위기 극복
나. 소프트웨어 재사용의 필요성
- 소프트웨어 생산의 TCO (Total Cost Overhead) 절감
- 높은 품질의 소프트웨어 생산을 위한 공유 및 활용 효과
다. 소프트웨어 재사용의 기본원칙
- 범용성
- 모듈성
- 하드웨어 독립성
- 소프트웨어 독립성
- 자기 문서화
라. 소프트웨어 재사용의 목표
목표 |
설 명 |
Reliability |
신뢰성 향상 (기능, 안정, 속도 등의 사전 성능 검증됨) |
Extensibility |
확장성 향상 (검증된 기능 기반으로 Upgrade 용이함) |
Productivity |
생산성 향상 (비용,시간,위험 등 전체적 개발 프로세스 향상됨) |
Usability |
사용성 향상 (독립된 컴포넌트로써의 조립성 제공됨) |
Maintainability |
유지보수성 (품질개선,오류수정,운영,Upgrade이 용이함) |
Adaptability |
적응성 향상 (독립된 컴포넌트로써의 새로운 Process 적용에 용이함) |
마. 소프트웨어 재사용의 기술적 접근방법
기술적 접근방법 |
설 명 |
부품조립 방안 |
소프트웨어 부품들을 라이브러리에 모아놓고 새로운 소프트웨어 개발에 필요한 부품들을 찾아내어 결합시켜 나가는 방법 |
모형화 방안 |
소프트웨어에 대한 일반적인 모형을 만들어 놓고 거기에 필요한 매개변수를 적용하여 필요에 따라 소프트웨어를 생성해 내는 방법 |
기존 소프트웨어 수정방안 |
기존의 소프트웨어를 새로운 소프트웨어로 발전 시킬 수 있도록 하며 전체 소프트웨어를 먼저 정립한 후 새로운 모듈을 개발하고 기존의 모듈을 수정, 삭제하면서 단계적으로 개선 시켜 나감 |
6. 소프트웨어 재사용 활용 및 구현 기법
가. 활용 기법 종류
기법 종류 |
내용 |
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추구 |
OOD |
-상속성, 추상성, 다양성, 동적바인딩 등의 활용 -Class, 4GL에서의 Component |
CBD |
-ITA/EA기반의 Component활용 -분산객체 (DCOM, EJB, CORBA)등 |