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)등

댓글