목차
📁 소프트웨어
소프트웨어란, 프로그램과 프로그램의 개발, 운용, 보수에 필요한 관련 정보를 모두 포함한 개념이다.
보통 프로그램과 소프트웨어를 같은 의미로 사용하지만, 프로그램은 소프트웨어에 포함되는 개념으로 동등한 의미가 아니다.
소프트웨어는 예술적 활동의 결과물과 달리 공학적 작업의 결과이다.
즉 프로그램 이외의 정보도 중요하며, 특히 소프트웨어가 복잡해지면서 공학적 과정, 즉 "설계"의 중요성이 커지고있다.
🌱 소프트웨어의 특징
1. 손에 잡히지 않는다.(intangible, invisible)
개발 작업을 이해하기가 어렵다. 예를 들어 진척도 부문을 보면, 작업이 어느정도까지 진행된건지 한 눈에 보고 파악하기 어렵다.
또한 소프트웨어의 구조(architecture)를 파악하는 것이 쉽지 않다. 소프트웨어에는 클라이언트 측에서 사용하는 소프트웨어도 있고, 서버 측의 소프트웨어도 있는 등 여러 종류가 있는데, 소스코드만 보고서는 어떤게 어떤 소프트웨어인지 파악하기 어렵다.
때문에 소프트웨어의 구조는 쉽게 망가질 수 있다. 이런 실수가 자주 일어나기 때문에 주의해야한다.
2. 대량 생산하기가 쉽다(reproducible)
비용의 대부분이 개발 과정에 소요되며, 생산비용이 들지 않는다. 소프트웨어 엔지니어링 외의 다른 엔지니어링에서는 생산(제조) 단계의 비용이 크다.
예를 들어 자동차를 만드는 과정을 보면, 자동차를 어떻게 만들지 아이디어를 내고, 요구사항을 명세하여 설계하는 단계 뿐만아니라 자동차의 부품을 구매하고, 가공하고, 조립하는 등의 생산 단계에서도 많은 비용이 든다.
하지만 소프트웨어 엔지니어링은 개발 과정 외에 생산 과정에서는 비용이 들지 않는다.
소프트웨어 엔지니어링의 개발 과정 : 아이디어 -> 요구사항 명세 -> 설계 -> 소프트웨어생산
3. 노동 집약적(labor-intensive)
자동화하기가 어렵기 때문에 많은 사람을 고용할 수 있다.
1, 2차 산업도 마찬가지로 노동 집약적이지만, 저수준의 노동자도 투입 가능한 1, 2차 산업과 달리 소프트웨어 공학에는 고수준의 노동자만 노동이 가능하다.
소프트웨어는 개발 비용이 많이 들고 생산비용이 적게드므로 "고부가가치" 산업이다.
4. 잘 훈련받지 않으면 제작하기 어렵다.
SW는 복잡하고 정교한 시스템이므로, 잘 푼련받지 않으면 제작하기 어렵고 품질 문제를 인식하기 어렵다.
이를 위해 객체지향, 컴포넌트, 분산 시스템 등의 다양한 기술이 필요하다.
5. 쉽게 변경 가능
SW는 완전하게 이해할 필요 없이 변경할 수 있다. 하지만 이 과정에서 구조가 쉽게 망가질 수 있어 파급효과가 크다.
6. 닳아 없어지지 않는다.
SW는 닳아 없어지지 않지만, SW 운영환경이 바뀌거나 설계가 변경되면서 품질저하 및 노후화가 생긴다.
이렇게 되면 SW에 오류가 발생하거나, release 이후 사람들이 요구사항을 추가하면서 소프트웨어가 복잡해질 수 있다.
이런 이유때문에 SW가 닳지 않음에도 불구하고 자주 update가 일어난다. 이를 SW가 진화한다고 표현한다.
🌱 소프트웨어의 종류
1. 주문형
특정 고객의 수요를 만족시키기 위해 개발된 소프트웨어로, 순수 SW 중 하나이다.
예를 들면 항공-교통 제어 시스템, 재정관리 시스템, 학사정보관리 시스템이 있다.
주문형 소프트웨어인 충남대학교의 학사정보관리 시스템은 충북대에 적용될 수 없다.
2. 패키지형(상업용, 범용 형태)
공개된 시장에서 판매되는 SW로, 순수 SW 중 하나이다.
COTS(Commercial Off-The-Shelf) 또는 Shrink-wrapped라고 불린다.
예를 들면 MS word, Powerpoint 등의 프로그램이 있다.
3. 임베디드 시스템
하드웨어에 탑재되어 결합된 SW로, 변경이 어렵다.
예를 들면 자동차 분야의 SW, 전자제어장치 시스템, 세탁기, 장난감에 탑재된 SW 등이 있다.
4. 실시간(Real-time) 소프트웨어
제어 및 모니터링을 하는 소프트웨어로, hard real-time software와 soft real-time software로 나뉜다.
신속하게 반응해야하고 안전성 확보가 중요하며, 주어진 시간 안에 미션이 완수됨을 보장해야한다.
예를 들면 비행기 제어 SW(이상기류 대처 등), 원자력 발전소 SW(핵원료 실시간 관리 SW 등)이 있다.
5. 자료처리 소프트웨어
비즈니스 업무 처리에 사용되는 소프트웨어이다.
자료의 정확성과 보안이 관건이고, 일괄 처리하므로 실시간성이 크게 요구되지 않는다.
실시간 SW와 자료처리 SW가 완전히 대응되는 것은 아니며, 두 가지 성격을 동시에 지니는 SW도 있다.
주문형, 범용, 임베디드 SW의 차이점은 다음과 같다.
📁 소프트웨어 공학
고객의 문제를 해결해 주기 위해 대규모의 품질 좋은 소프트웨어 시스템을 정해진 시간과 비용으로 개발하거나 발전시키는 체계적인 프로세스를 말한다.
'소프트웨어 엔지니어링'이라는 용어는 1968년 NATO conference에서 처음 언급되었으며, 소프트웨어 개발에 엔지니어링 원리가 도입되어야함을 처음으로 인식하였다.
🌱 소프트웨어 공학에 꼭 필요한 요소
1. 고객의 문제를 해결해주어야 한다.