정보처리기사 필기 - 4과목 소프트웨어 공학
5장 S/W 공학의 발전적 추세
142 소프트웨어 재사용
① 재사용의 개요
소프트웨어 재사용(Software Reuse)은 이미 개발되어 인정받은 소프트웨어의 전체 혹은 일부분을 다른 소프트웨어 개발이나 유지에 사용하는 것
· 소프트웨어 개발의 품질과 생산성을 높이기 위한 방법으로, 기존에 개발된 소프트웨어와 경험, 지식 등을 새로운 소프트웨어에 적용
· 클래스, 잭체 등의 소프트웨어 요소는 소프트웨어 재사용성을 크게 향상 시킴
· 소프트웨어 재사요에 가장 많이 이용되는 것은 소스 코드(Source Code)
· 재사용이 가능한 요소 : 전체 프로그램, 부분 코드, 응용 분야에 관한 지식, 논리적인 데이터 모형, 프로세스 구조, 시험 계획, 설계에 관한 결정, 시스템 구조에 관한 지식, 요구 분석 사항, 문서화, 전문적인 기술과 개발 경험, 품질 보증, 응용 분야 지식 등
· 소프트웨어 부품(모듈)의 크기가 작고 일반적인 설계일수록 재사용률이 높다
② 재사용의 이점
· 개발 시간과 비용 단축
· 소프트웨어 품질 향상
· 소프트웨어 개발의 생산성 향상
· 프로젝트 실패의 위험 감소
· 시스템 구축 방법에 대한 지식 공유
· 시스템 명세, 설계, 코드 등 문서를 공유
③ 재사용 도입이 문제점
· 어떤 것을 재사용할 것인지 선정해야함
· 시스템에 공통적으로 사용되는 요소들을 발견해야 함
· 프로그램의 표준화가 부족
· 새로운 개발 방법론을 도입하기 어려움
· 재사용을 위한 관리 및 지원이 부족함
· 기존 소프트웨어에 재사용 소프트웨어를 추가하기 어려움
· 프로그램 언어 종속적
· 소프트웨어 요소의 내부뿐만 아니라 인터페이스 요구사항의 이해 필요
· 라이브러리 안에 포함시킬 재사용 요소의 명확한 결정 기준 없음
④ 재사용 방법
합성 중심 (Composition-Based) |
전자 칩과 같은 소프트웨어 부품, 즉 블록(모듈)을 만들어서 끼워 맞추어 소프트웨어를 완성시키는 방법으로, 블록 구성 방법이락도 함 |
생성 중심 (Generation-Based) |
추상화 형태로 쓰여진 명세를 구체화하여 프로그램을 만드는 방법으로, 패턴 구성 방법이라고도 함 |
143 소프트웨어 재공학
① 재공학의 개요
소프트웨어 재공학(Software Reengineering)은 새로운 요구에 맞도록 기존 시스템을 이용하여 보다 나은 시스템을 구축하고, 새로운 기능을 ㅜ가하여 소프트웨어 성능을 향상시키는 것
· 유지보수 비용이 소프트웨어 개발 비용의 대부분을 차지하는 문제를 염두에 두어 기존 소프트웨어의 데이터와 기능들의 개조 및 개선을 통해 유지보수성과 품질을 향상시키려는 기술
· 유지보수 생산성 향상을 통해 소프트웨어 위기를 해결하는 방법
· 기존 소프트웨어의 기능을 개조하거나 개선하므로, 예방 유지보수 측면에서 소프트웨어 위기를 해결하는 방법
· 소프트웨어 재공학도 자동화된 도구를 이용하여 소프트웨어를 분석하고 수정하는 과정을 포함
· 스프트웨어에서 발생할 수 있는 오류가 줄어 들고, 비용이 절감 됨
② 재공학의 등장 배경
· 기존 소프트웨어가 노후되어 새로운 소프트웨어로 대치해야할 경우 현재 시스템보다 훨씬 더 좋은 시스템을 만들 수 있다는 보장 없음
· 현재 소프트웨어 품질이 더 좋은 소프트웨어로 교체된다고 해도 사용상의 문제점이 없다고 장담할 수 없음
· 새로운 소프트웨어를 개발해도 기존 시스템과의 호환성이 100% 이루어질 수도 없을 뿐만 아니라, 사용자의 교육에도 많은 영향을 줄 수 있음
③ 재공학의 목표
소프트웨어 재공학은 유지보수성 및 기술 향상, 유지보수의 생산성 향상, 소프트웨어 수명 연장, 소프트웨어 요소들을 추출하여 정보 저장소에 저장하는 것을 주된 목적으로 하며, 다음과 같은 목표를 가지고 있음
· 복잡한 시스템을 다루는 방법 구현 : 시스템이 복잡해질수록 시스템을 다루는 방법이 필요하여 이를 위해 자동화 도구 사용 가능
· 다른 뷰의 생성 : 기존 시스템 개발에 대한 관점 외에 다른 방향의 관점 생성
· 잃어버린 정보의 복구 및 제거 : 시스템이 계속적인 개발을 거치면서 잃어버린 정보를 복구하거나 필요없는 정보 제거
· 부작용의 발견 : 의도되지 않았던 내용이 구현될 경우 이를 발견
· 고수준의 추상 : 추상화된 어려운 내요을 여러 형태로 추출하여 이해에 도움 줌
· 재사용 용이 : 재사용이 가능한 모듈을 추출하여 재사용이 용이하도록 함
④ 소프트웨어 재공학의 주요 활동
분석(Analysis) |
기존 소프트웨어의 명세서를 확인하여 소프트웨어의 동작을 이해하고, 제공할 대상 선정 |
개조(재구조, 재구성) |
· 개조(Restructuring)는 상대적으로 같은 추상적 수준에서 하나의 표현을 다른 표현 형태로 바꾸는 것 · 기존 소프트웨어의 구조를 향상시키기 위하여 코드를 재구성하는 것으로 소프트웨어의 기능과 외적인 동작은 바뀌지 않음 |
역공학(Reverse Engineering) |
기존 소프트웨어를 분석하여 소프트웨어 개발 과정과 데이터 처리 과정을 설명하는 분석 및 설계 정보를 재발견하거나 다시 만들어내는 작업 · 정공학(일반적인 개발 단계)과는 반대 방향으로 기존 코드를 복구하는 방법 · 대상 소프트웨어가 있어야 하므로 이로부터 작업 시작됨 · 기존 소프트웨어의 구성 요소와 그 관계를 파악하여 설계도를 추출하거나, 구현과는 독립적인 추상화 표현 만듦 · 코드 역공학 : 코드→흐름도→자료 구조도→자료 흐름도 순으로 재생 · 데이터 역공학 : 코드→자료사전→개체 관계도 순으로 재생 · 역공학의 가장 간단하고 오래된 형태 : 재문서화(같은 수준의 추상 표현을 새로이 만들거나 다시 제작) |
이식(Migration) |
기존 소프트웨어를 다른 운영체제나 하드웨어 환경에서 사용할 수 있도록 변환하는 작업 |
144 클라이언트/서버/ S/W 공학
① 클라이언트/서버 시스템의 개요
· 클라이언트/서버 시스템은 분산 시스템의 가장 대표적인 모델로, 정보를 제공하는 서버와 정보를 요구하는 클라이언트로 구성된 방식
· LAN을 통하여 클라이언트(워크스테이션, PC)와 서버가 하나의 작업을 분산, 협동 처리
· 중대형 컴퓨터보다 훨씬 적은 비용으로 지원 가능
· 처리햘 자료가 발생한 그 지역에서 처리 가능
· 고성능 워크스테이션에서 가능한 그래픽 사용자 인터페이스를 쉽게 지원
· 서버는 공유된 다양한 시스템 기능과 자원을 클라이언트에게 제공
· 서비스 기능에 따른 서버의 종류
파일 서버(File Server) |
클라이언트가 요청한 파일 내의 레코드 제공 |
데이터베이스 서버(Database Server) |
클라이언트가 요청한 SQL(질의어) 처리하여 결과 제공 |
트랜잭션 서버(Transaction Server) |
클라이언트가 요청한 원격 프로시저 실행 후 결과 제공 |
그룹웨어 서버(Groupware Server) |
서버가 클라이언트와 통신할 수 있도록 하는 응용 소프트웨어 집합을 제공 |
② 클라이언트/서버 시스템의 소프트웨어 요소
· 애플리케이션(응용 프로그램) 요소 : 응용 프로그램에 의해 정의된 요구사항을 구현하는 것으로, 서버와 클라이언트에 위치 가능
· 데이터베이스 요소 : 응용 프로그램에서 요구하는 데이터 조작과 관리를 수행하는 것으로 서버에 위치
· 프레젠테이션/상호작용 요소 : 그래픽 사용자 인터페이스(GUI)와 관련된 모든 기능을 구현하는 것으로, 클라이언틍에 위치
③ 미들웨어
미들웨어(Middleware)는 클라이언트가 서버 측에 어떠한 처리를 요구하고, 또 서버가 그 처리한 결과를 클라이언트에게 돌려주는 과정을 효율적으로 수행하도록 도와주는 소프트웨어로 클라이언트와 서버 사이에 존재
· 미들웨어가 정상적으로 수행되기 위해서는 클라이언트와 서버에 각각의 미들웨어 있어야 함
· 클라이언트와 서버 간의 데이터 통로 제공, 작업 처리 서비스 검색, 프로그램 보안 및 감시 등의 기능 수행
· 미들웨어의 종류
통신 미들웨어 |
NOS(Network Operating System) |
데이터베이스 미들웨어 |
ODBC |
분산 객체 미들웨어 |
CORBA, DCOM |
※ 객체 요청 브로커 / CORBA
· 객체 요청 브로커(ORB; Object Request Broker)
- 객체 요청 브로커는 분산 객체 미들웨어의 일종으로 기존의 미들웨어보다 기능이 강화되었으며 클라이언트의 객체가 서버 객체의 캡슐화된 메소드에게 메시지를 보낼 수 있게 하는 것
· CORBA(Common Object Request Broker Architecture)
- 가장 많이 사용되는 객체 요청 브로커의 표준이며, OMG(Object Management Group)라는 개발자 연합에서 인기했음
- CORBA가 클라이언트/서버 시스템에서 구현될 때 클라이언트와 서버 간에 정보를 송·수신하는 데 필요한 인터페이스 언어는 IDL(Interface Description Language)
145 CASE
① CASE의 개요
CASE(Computer Aided Software Engineering)는 소프트웨어 개발 과정에서 사용되는 요구 분석, 설계, 구현, 검사 및 디버깅 과정 전체 또는 일부를 컴퓨터와 전용 소프트웨어 도구를 사용하여 자동화하는 것
· 소프트웨어 생명 주기의 전체 단계를 연결해주고 자동화해주는 통합된 도구를 제공해주는 기술
· 소프트웨어 개발 도구와 방법론이 결합된 것으로, 정형화된 구조 및 방법(메커니즘)을 소프트웨어 개발에 적용하여 생산성 향상을 구현하는 공학 기법
· 소프트웨어 개바르이 모든 단계에 걸쳐 일관된 방법론을 제공하는 자동화 도구(CASE Tool)들을 지원하고, 개발자들은 이 도구를 사용하겨 소프트웨어 개발의 표준화를 지향하며, 자동화의 이점을 얻을 수 있게 해줌
· CASE의 주요 기능 : 소프트웨어 생명주기 전 단계의 연결, 다양한 소프트웨어 개발 모형 지원, 그래픽 지원 등
② CASE 사용의 이점
· 소프트웨어 개발 기간을 단축하고 개발 비용 절감 가능
· 자동화된 기법을 통해 소프트웨어 품질 향상
· 소프트웨어의 유지보수를 간편하게 수행 가능
· 소프트웨어의 생산성이 향상되고 생산, 운용 활동을 효과적으로 관리·통제 가능
· 품질과 일관성을 효과적으로 제어 가능
· 소프트웨어 개발의 모든 단계에 걸친 표준 확립 가능
· 소프트웨어 모듈의 재사용성 향상됨
· 소프트웨어의 개발 기법을 실용화할 수 있고, 문서화를 쉽게 작성 가능
③ CASE 분류
CASE는 소프트웨어 생명 주기의 어느 부분을 지원하느냐에 다라 다음과 같이 분류 가능
상위(Upper) CASE
· 소프트웨어 생명 주기의 전반부에서 사용되는 것으로, 문제를 기술하고 계획하며 요구 분석과 설계 단계를 지원하는 CASE
· 여러 가지 명세와 문서를 작성하는 데 사용됨
· 상위 CASE 도구에는 SREM, PSL/PSA, SERA, FOUNDATION
하위(Lower) CASE
· 소프트웨어 생명 주기의 하반부에서 사용되는 것으로 코드의 작성과 테스트, 문서화하는 과정을 지원하는 CASE
· 하위 CASE 도구에는 구문 중심 편집기, 코드 생성기
통합(Integrate) CASE
· 소프트웨어 생명 주기에 포함되는 전체 과정을 지원하기 위한 CASE로, 공통의 정보 저장 장소와 통일된 사용자 인터페이스를 사용하여 도구들을 통합
· 통합 CASE 도구에는 IEF, POWERTOOLS, TAGS/IORL, TEAMWORK
④ 정보 저장소
정보 저장소의 개요
정보 저장소는 소프트웨어를 개발하는 과정 동안에 모아진 정보를 보관하여 관리하는 곳으로 CASE 정보 저장소, CASE 데이터베이스, 요구사항 사전, 저장소
· 초기의 소프트 개발 환경에서는 사람이 정보 저장소 역할을 했지만 오늘날에는 데이터베이스가 정보 저장소 역할 담당
· 도구들의 통합, 소프트웨어 시스템의 표준화, 소프트웨어 시스템 정보의 공유, 소프트웨어 재사용성의 기본이 됨
정보 저장소 사용의 이점
· 도구들과 생명 주기 활동, 사용자들, 응용 소프트웨어들 사이의 통신과 소프트웨어 시스템의 정보 공유 향상
· 소프트웨어 시스템 구성 요소들과 시스템 정보 저장소에 의해 관리되므로 유지 보수성 향상됨
· CASE 도구들 간에 정보를 쉽게 교환하고, 사용자가 쉽게 새로운 도구를 추가 가능하도록 해줌
· CASE 도구들을 통합하여 통합 CASE 도구 사용 가능
· 중복된 공통 정보를 통합하며 불필요한 정보 제거
· 생명 주기 정보를 재사용할 수 있도록 함
· 소프트웨어 시스템의 이식과 변환을 용이하게 함
출처 : 2017 시나공 정보처리기사 필기
'정보처리기사 > 소프트웨어 공학' 카테고리의 다른 글
소프트웨어 공학 오답노트 (0) | 2017.02.26 |
---|---|
4장 객체지향 S/W 공학 (0) | 2017.02.09 |
3장 전통적 S/W 개발 방법론 (0) | 2017.02.09 |
2장 소프트웨어 프로젝트 관리 (0) | 2017.02.06 |
1장 소프트웨어 공학의 개요 (0) | 2017.02.06 |