소프트웨어란
소프트웨어 공학을 이해하기 앞서 소프트웨어에 대해 명확히 정의하고 넘어가자.
소프트웨어는 컴퓨터를 작동시키는 프로그램으로 하드웨어를 작동하도록 하는 수많은 명령어의 집합체이다.
이러한 개념적이고 무형적(형태가 없다, 눈에 보이지 않음)이다.
소프트웨어에는 4가지 큰 특징과 3가지의 종류로 구분된다.
소프트웨어의 특징
- 복잡성(complexity): 자동화하려는 대상도 복잡하며 내부 코드들이 복잡하다.
- 순응성(conformity): 요구나 환경, 데이터의 변화에 따라 적절하게 잘 변형된다.(말을 잘 듣는다)
- 변경성(changeability): 쉽게 변경할 수 있고 개발 과정에서 자주 변경된다.
- 비가시성(invisibility): 구조가 코드 안에 숨어 있어 잘 드러나지 않는다.
소프트웨어의 종류
- 주문형 소프트웨어: 특정 기업이나 고객의 요구로 제작되는 맞춤형 소프트웨어 (ex: 학교 모바일 앱)
- 패키지형 소프트웨어: 패키지화 하여 돈을 벌기 위해 상업적으로 판매하는 소프트웨어 (ex: 워드프로세서, 한글)
- 임베디드 소프트웨어: 다른 시스템에 내장된 소프트웨어 (ex: 자율주행 차량 내부 소프트웨어, 전투기 소프트웨어)
소프트웨어 공학은 소프트웨어 개발 과정에서의 비용(시간, 돈, 복잡도)을 최소화하는 것이 주 목적이다.
그러면 비용이 가장 많이 드는 소프트웨어는 어떤 것일까?
비용순으로 소프트웨어 종류를 나열하면 다음과 같다.
- 임베디드 소프트웨어 > 주문형 소프트웨어 > 패키지형 소프트웨어
시스템
시스템(System)은 한국말로 번역하면 주로 체제나 체계로 번역되는데, 주변을 아우르는 전체적인 생태계를 포함하는 것을 말한다.
소프트웨어를 생각해보면 소프트웨어만이 독립적으로 존재하는 것이 아니라 컴퓨터를 기반으로 하는 여러 시스템과 관계를 맺고 있다.
예를 들면, 공항의 수하물 처리 시스템을 생각해보자.
이때 수화물 처리 시스템은 컨베이어 벨트, 수화물을 체크인하고 컨베이어 벨트를 제어하는 소프트웨어, 수화물 처리 요원 등 이런 모든 주변 환경들이 시스템에 포함된다.
즉, 소프트웨어를 개발하는 일은 위 그림에 있는 시스템에 속하는 다양한 요소를 파악해 그들의 관계를 설정하는 작업이 포함되어 있다.
'Software Engineering' 카테고리의 다른 글
[애자일 방법론] 스크럼 기법(Scrum) (1) | 2023.10.05 |
---|---|
[소프트웨어 공학] 유스케이스 다이어그램(use case didagram) (1) | 2023.10.05 |
[소프트웨어 공학] 프로토타이핑 모델(Prototyping Model) (0) | 2023.09.24 |
[소프트웨어 공학] 폭포수 모델(Waterfall Model) (0) | 2023.09.24 |
[소프트웨어 공학] 주먹구구식 개발로 인한 소프트웨어 위기, 소프트웨어 공학의 시작 (0) | 2023.09.21 |