Implementation Issues
Implementation 과정에서 자주 다뤄지지 않는 문제들에 대해 설명합니다.
- Reuse (재사용)
- 대부분의 현대 소프트웨어는 기존의 구성 요소나 시스템을 재사용하여 만들어집니다. 소프트웨어를 개발할 때는 가능한 한 기존의 코드를 활용해야 합니다. 이는 개발 속도와 비용 절감을 위한 중요한 전략입니다.
- Configuration Management (구성 관리)
- 소프트웨어 개발 중 여러 버전의 소프트웨어 구성 요소를 관리해야 하며, 이를 통해 버전 관리 시스템에서 각 구성 요소의 다양한 버전을 추적합니다. 또한 여러 프로그래머들이 동시에 개발하는 경우 이들을 조정하고 관리해야 합니다.
- Host-Target Development (호스트-타겟 개발)
- 생산 소프트웨어는 보통 개발 환경과 동일한 컴퓨터에서 실행되지 않습니다. 개발 환경(호스트 시스템)에서 개발한 후, 별도의 컴퓨터(타겟 시스템)에서 실행됩니다.
Reuse (재사용)
재사용은 기존 소프트웨어를 기반으로 개발을 진행하는 접근법입니다.
- 과거 소프트웨어 개발: 1990년대까지는 대부분 새로운 소프트웨어가 처음부터 끝까지 새로 작성되었습니다. 하지만 오늘날에는 다양한 프로그래밍 언어 라이브러리에서 함수나 객체를 재사용하는 방식이 많이 사용됩니다.
- 재사용 비용:
- 소프트웨어를 재사용하려면 재사용할 소프트웨어를 찾고, 그것이 필요에 맞는지 평가하는 시간과 비용이 들며, 이를 시스템 요구 사항에 맞게 적응시키는 비용도 발생합니다.
- 또한, 기존 코드와 새로 개발한 코드를 통합하는 데에도 비용이 듭니다.
Reuse Levels (재사용 수준)
재사용 수준은 재사용하는 소프트웨어의 범위에 따라 다릅니다.
- Object Level (객체 수준): 프로그래밍 언어 라이브러리에서 제공하는 객체를 그대로 재사용합니다.
- Component Level (컴포넌트 수준): 여러 객체와 객체 클래스를 모은 컴포넌트를 재사용합니다. (예: Component frameworks)
- System Level (시스템 수준): 전체 응용 시스템을 재사용합니다. (예: COTS)
- Abstraction Level (추상화 수준): 소프트웨어를 직접 재사용하지 않고, 성공적인 추상화 방법을 디자인에 반영하여 재사용합니다. (예: Architecture styles, Design patterns)
Configuration Management (구성 관리)
구성 관리는 소프트웨어 시스템의 변화를 관리하는 과정입니다.
- Version Management (버전 관리):
- 소프트웨어 구성 요소의 다양한 버전을 추적하고, 여러 프로그래머들이 개발하는 경우 이를 조정하는 도구를 제공합니다.
- System Integration (시스템 통합):
- 구성 요소가 사용될 시스템의 버전을 정의하고, 이를 기반으로 자동으로 시스템을 빌드할 수 있는 도구를 제공합니다.
- Problem Tracking (문제 추적):
- 사용자들이 버그와 문제를 보고하고, 이를 해결하는 개발자들이 누군지 확인할 수 있도록 도와줍니다.
Host-Target Development (호스트-타겟 개발)
호스트-타겟 개발은 대부분의 소프트웨어가 개발 환경(호스트 시스템)에서 개발되고, 실제 실행은 다른 시스템(타겟 시스템)에서 이루어지는 개발 방식을 말합니다.
- Development Platform vs. Execution Platform:
- 개발 플랫폼과 실행 플랫폼은 다를 수 있습니다. 개발 플랫폼은 개발에 필요한 운영 체제와 지원 소프트웨어가 설치되어 있는 시스템을 의미하고, 실행 플랫폼은 실제로 소프트웨어가 실행될 시스템입니다.
- 플랫폼 차이:
- 개발 플랫폼과 실행 플랫폼은 하드웨어, 소프트웨어, 아키텍처 등이 다를 수 있기 때문에, 이를 염두에 두고 개발해야 합니다.
Tools for Host-Target Development (호스트-타겟 개발 도구)
- 개발 도구:
- 통합 컴파일러 및 구문 편집 시스템: 코드를 생성, 편집 및 컴파일합니다.
- 언어 디버깅 시스템: 코드를 디버깅하는 도구입니다.
- 그래픽 편집 도구(예: UML 도구): 소프트웨어 디자인을 시각적으로 편집할 수 있는 도구입니다.
- 테스트 도구(예: JUnit): 새로운 프로그램 버전에 대해 자동으로 테스트를 실행할 수 있는 도구입니다.
- 프로젝트 지원 도구: 다양한 개발 프로젝트를 위해 코드를 조직하는 도구입니다.
- IDE (통합 개발 환경):
- 다양한 개발 도구를 통합하여 하나의 플랫폼에서 제공하는 소프트웨어로, 특정 프로그래밍 언어(예: Java)로 개발을 지원합니다.
Open-Source Development (오픈소스 개발)
오픈소스 개발은 소프트웨어의 소스 코드가 공개되고, 인터넷을 통해 자원봉사자들이 개발 과정에 참여하는 소프트웨어 개발 접근법입니다.
- 오픈소스의 원칙:
- 소스 코드는 자유롭게 사용하고 수정할 수 있어야 한다는 원칙에서 출발하며, Free Software Foundation(www.fsf.org)에서 이 개념을 지지합니다.
- 오픈소스 시스템의 예:
- 리눅스 운영 체제, Java, Apache 웹 서버, MySQL 데이터베이스 시스템 등이 대표적인 오픈소스 소프트웨어입니다.
Open-Source Issues (오픈소스 문제)
- 오픈소스를 사용하는 것에 대한 질문:
- "개발 중인 제품에 오픈소스 구성 요소를 사용할 것인가?" 또는 "소프트웨어 개발을 오픈소스 접근법으로 할 것인가?"에 대한 고민이 필요합니다.
- 오픈소스 비즈니스 모델:
- 점점 더 많은 제품 회사들이 오픈소스 개발 접근법을 채택하고 있으며, 제품 판매가 아닌 지원 서비스를 판매하는 모델을 적용하고 있습니다.
- 오픈소스 커뮤니티에 참여함으로써 더 저렴하고 빠르게 소프트웨어를 개발할 수 있으며, 소프트웨어의 사용자 커뮤니티를 형성할 수 있습니다.
Open-Source Licensing (오픈소스 라이센스)
- 오픈소스의 기본 원칙:
- 소스 코드는 자유롭게 제공되어야 한다는 원칙에 기반합니다.
- 라이센스 모델:
- GNU General Public License (GPL): '상호 라이선스'로, GPL 라이선스 하에 있는 오픈소스 소프트웨어를 사용하면 해당 소프트웨어도 오픈소스로 공개해야 합니다.
- GNU Lesser General Public License (LGPL): GPL의 변형으로, 오픈소스 코드와 연결된 컴포넌트를 개발하는 경우, 그 컴포넌트만 오픈소스로 공개하면 됩니다.
- Berkeley Standard Distribution (BSD) License: 비상호적 라이선스로, 오픈소스 코드에 대한 변경 사항을 공개할 의무가 없으며, 상용 소프트웨어에 포함하여 판매할 수 있습니다.
반응형
'CS 지식 > 소프트웨어 공학' 카테고리의 다른 글
Software Evolution(진화)와 유지보수, 리팩토링, 리엔지니어링 (0) | 2024.12.01 |
---|---|
Software Testing(소프트웨어 테스팅)과 개발 테스팅 (0) | 2024.12.01 |
Architectural Pattern(아키텍처 패턴)과 스타일 종류 (0) | 2024.12.01 |
Architectural Design (아키텍처 설계) 결정과 4+1 View (0) | 2024.12.01 |
Model-Driven Engineering (모델 기반 엔지니어링, MDE, MDA) 의 개념과 활용 (0) | 2024.12.01 |
댓글