-
소프트웨어 공학의 발전적 추세 Evolution of Software Engineering프로그래밍/컴퓨터 공학 2017. 11. 27. 16:11반응형
# 소프트웨어 재사용의 개요
- 이미 개발되어 있는 인정받은 소프트웨어의 전체 혹은 일부분을 다른 소프트웨어 개발이나 유지에 사용하는 것
- 소프트웨어 개발의 품질과 생산성을 높이기 위한 방법으로 기존에 개발된 소프트웨어와 경험, 지식등을 새로운 소프트웨어에 적용함
- 클래스, 객체 등의 소프트웨어 요소는 소프트웨어 재사용성을 크게 향상시켰음
- 소프트웨어 부품(모듈)의 크기가 작고, 일반적일수록 재사용률이 높음
# 재사용이 가능한 요소
- 전체 프로그램
- 프로세스 구조
- 부분 코드
- 시험계획
- 응용 분야에 관한 지식
- 설계에 관한 결정
- 논리적인 데이터 모형
- 시스템 구조에 관한 지식 등
# 소프트웨어 재사용의 장점
- 개발 시간과 비용을 단축
- 소프트웨어 품질 향상
- 소프트웨어 개발의 생산성 향상
- 프로젝트 실패의 위험 감소
- 시스템 구축 방법에 대한 지식 공유
- 시스템 명세, 설계, 코드 등의 문서 공유
# 소프트웨어 재사용의 단점
- 어떤것을 재사용할 것인지 선정해야함
- 시스템에 공통적으로 사용되는 요소들을 발견해야 함
- 프로그램의 표준화 부족
- 새로운 개발 방법론 도입 어려움
- 재사용을 위한 관리 및 지원 부족
- 기존 소프트웨어에 재사용 소프트웨어를 추가하기 어려움
- 프로그램 언어 종속적
- 소프트웨어 요소의 내부와 함께 인터페이스 요구 사항의 이해가 필요
- 라이브러리 안에 포함시킬 재사용 요소의 명확한 결정 기준이 없음
# 재사용 방법
- 합성 중심 (Composition-based) : 전자칩과 같은 소프트웨어 부품, 즉 블록을 만들어 끼워 맞추어 소프트웨어를 완성시키는 방법, 블록 구성방법이라고도 함
- 생성 중심 (Generation-based) : 추상화 형태로 써진 명세를 구체화하여 프로그램을 만드는 방법, 패턴 구성 방법이라고도 함
# 소프트웨어 재공학 (Software Reengineering)
- 새로운 요구에 맞도록 기존 시스템을 이용하여 보다 나은 시스템을 구축하고 새로운 기능을 추가하여 소프트웨어 성능을 향상시키는 것
- 유지보수 비용이 소프트웨어 개발 비용의 대부분을 차지하는 문제를 염두에 두어 기존 소프트웨어의 데이터와 기능들의 개조 및 개선을 통해 유지보수성과 품질을 향상시키려는 기술
- 유지보수 생산성 향상을 통해 소프트웨어 위기를 해결하는 방법
- 기존 소프트웨어의 기능을 개조하고나 개선하므로 예방(Preventive) 유지보수 측면에서 소프트웨어 위기를 해결하는 방법이라고 할 수 있음
- 자동화된 도구를 사용하여 소프트웨어를 분석하고 수정하는 과정을 포함함
- 소프트웨어 수명이 연장되고, 소프트웨어 기술이 향상됨
- 소프트웨어에서 발생할 수 있는 오류가 줄어들고 비용이 절감됨
# 소프트웨어 재공학의 등장 배경
- 기존의 소프트웨어가 노후되어 새로운 소프트웨어로 대치해야할 경우 현재 시스템보다 훨씬 좋은 시스템을 만들 수 있다는 보장이 없음
- 현재 소프트웨어 품질이 더 좋은 소프트웨어로 교체된다고 해도 사용상의 문제점이 없다고 장담할 수 없음
- 새로운 소프트웨어 개발에도 기존 시스템과의 호환성이 100%이루어질수도 없을뿐만 아니라 사용자의 교육에도 많은 영향을 줄 수 있음
# 소프트웨어 재공학의 목적과 목표
- 유지보수성 및 기술 향상
- 유지보수의 생산성 향상
- 소프트웨어 수명 연장
- 소프트웨어 요소들을 추출하여 정보 저장소에 저장
- 복잡한 시스템을 다루는 방법 구현 : 시스템이 복잡해질수록 시스템을 다루는 방법이 필요하여 이를 위해 자동화 도구 등을 사용할 수 있음
- 다른 뷰의 생성 : 기존 시스템 개발에 대한 관점 외에 다른 방향의 관점을 생성함
- 잃어버린 정보의 복구 및 제거 : 시스템이 계속적인 개발을 거치면서 잃어버린 정보를 복구하거나 필요없는 정보를 제거함
- 부작용의 발견 : 의도되지 않았던 내용이 구현될 경우 이를 발견함
- 고수준의 추상 : 추상화된 어려운 내용을 여러 형태로 추출하여 이해에 도움을 줌
- 재사용 용이 : 재사용이 가능한 모듈을 추출하여 재사용이 용이하도록 함
# 소프트웨어 재공학의 주요 활동
- 분석(Anaysis) : 기존 소프트웨어의 명세서를 확인하여 소프트웨어의 동작을 이해하고 재공학 대상을 선정하는 것
- 개조(Restruring), 재구성 : 상대적으로 같은 추상적 수준에서 하나의 표현을 다른 표현 형태로 바꾸는것, 기존의 소프트웨어의 구조를 향상시키기 위하여 코드를 재구성하는 것으로 소프트웨어 기능과 외적인 동작은 바뀌지 않음
- 이식(Migration) : 기존 소프트웨어를 다른 운영체제나 하드웨어 환경에서 사용할수 있도록 변환하는 작업
# 역공학(Reverse Engineering)
- 기존 소프트웨어를 분석하여 소프트웨어 개발 과정과 데이터 처리과정을 설명하는 분석 및 설계정보를 재발견하거나 다시 만들어내는 작업
- 정공학(일반적인 개발 단계)과는 반대 방향으로 기존 코드를 복구하는 방법
- 대상 소프트웨어가 있어야하며 이로부터 작업이 시작됨
- 기존 소프트웨어의 구성요소와 그 관계를 파악하여 설계도를 추출하거나 구현과는 독립적인 추상화된 표현을 만듬
- 코드의 역공학 : 코드->흐름도->자료 구조도->자료 흐름도 순으로 재생함
- 데이터 역공학 : 코드->자료 사전->개체 관계도 순으로 재생함
- 역공학의 가장 간단하고 오래된 형태 : 재문서화(Redocumentation)
# CASE : Computer Aided Software Engineering
- 소프트웨어 개발 과정에서 사용되는 요구 분석, 설계, 구현, 검사 및 디버깅 과정 전체 또는 일부를 컴퓨터와 전용 소프트웨어 도구를 사용하여 자동화하는 것
- 소프트웨어 생명 주기의 전체 단계를 연결해 주고 자동화해 주는 통합된 도구를 제공하는 기술
- 소프트웨어 개발 도구와 방법론이 결합된것으로 정형화된 구조 및 방법을 소프트웨어 개발에 적용하여 생산성 향상을 구현하는 공학 기법
- 소프트웨어 개발의 모든 단계에 걸쳐 일관된 방법론을 제공하는 자동화 도구들을 지원하고 개발자들은 이 도구를 사용하여 소프트웨어 개발의 표준화를 지향하며 자동화의 이점을 얻을 수 있게 해줌
# CASE 사용의 이점
- 소프트웨어 개발 기간 단축, 개발 비용 절감
- 자동화된 기법을 통해 소프트웨어 품질 향상
- 소프트웨어의 유지보수를 간편하게 수행
- 생산성 향상, 생산 운용활동을 효과적으로 관리, 통제
- 품질과 일관성을 효과적으로 관리, 통제할수 있음
- 품질과 일관석을 효과적으로 제어 가능
- 소프트웨어 개발의 모든 단계에 걸친 표준을 확립
- 소프트웨어 모듈의 재사용성이 향상
- 소프트웨어 개발 기법을 실용화할 수 있고 문서화가 쉬워짐
# 상위(Upper) CASE
- 소프트웨어 생명 주기의 전반부에서 사용되는 것으로 문제를 기술(description)하고 계획하며 요구 분석과 설계 단계를 지원하는 CASE
- 상위 CASE 도구(tool) : SREM, PSL/PSA, SERA, FOUNDATION 등
# 하위(Lower) CASE
- 소프트웨어 생명 주기의 후반부에서 사용되는 것으로 코드의 작성과 테스트 문서화하는 과정을 지원하는 CASE
- 하위 CASE 도구(tool) : 구문 중심 편집기, 코드 생성기 등
# 통합(Integrate) CASE
- 소프트웨 생명주기에 포함되는 전체 과정을 지원하기 위한 CASE
- 공통의 정보 저장장소와 통일된 사용자 인터페이스를 사용하여 도구들을 통합함
- 통합 CASE 도구(tool) : IEF, POWERTOOLS, TAGS/IORL, TEAMWORK 등
# 정보 저장소(Repository)
- 소프트웨어를 개발하는 과정 동안에 모아진 정보를 보관하여 관리하는 곳
- CASE 정보저장소, CASE데이터베이스, 요구 사항 사전 저장소라고도 함
- 초기의 소프트웨어 개발 환경에서는 사람이 정보 저장소 역할을 하였지만 오늘날에는 데이터베이스가 정보 저장소 역할을 담당함
- 도구들의 통합, 소프트웨어 시스템의 표준화, 소프트웨어 시스템 정보의 공유, 소프트웨어 재사용성의 기본이 됨
# 정보 저장소 사용의 이점
- 도구들과 생명 주기 활동, 사용자들 응용 소프트웨어 사이들의 통신과 소프트웨어 시스템의 정보 공유를 향상
- 소프트웨어 시스템 구성 요소들과 시스템 정보가 정보 저장소에 의해 관리되므로 유지보수성이 향상
- CASE도구들 간에 정보를 쉽게 교환하고 사용자가 쉽게 새로운 도구를 추가할 수 있도록 해줌
- CASE 도구들을 통합하여 통합 CASE 도구 사용을 가능하게 함
- 중복된 공통 정보를 통합하며 불필요한 정보를 제거함
- 생명 주기 정보를 재사용할 수 있도록 함
- 소프트웨어 시스템의 이식과 변환을 용이하게 함
반응형'프로그래밍 > 컴퓨터 공학' 카테고리의 다른 글
[네트워크] 최단 경로 우선 프로토콜 OSPF (Open Shortest Path First) (0) 2017.11.29 소프트웨어 프로젝트 계획 Software Project Planning (0) 2017.11.25 소프트웨어 개발 생명주기 모델 Software Development Life Cycle Model (0) 2017.11.25 소프트웨어 개발 방법론 Software Development Methodology (0) 2017.11.25 소프트웨어 공학의 개요 Overview of Software Engineering (0) 2017.11.24