소프트웨어 공학/기본
개요
크리스티아스
2019. 7. 7. 12:57
소프트웨어 정의
물리적 실체인 하드웨어의 반대어로 만들어진 용어이다.
프로그램과 프로그램의 개발, 운용, 보수에 필요한 관련 일체 정보를 말한다. 소프트웨어에 프로그램 이외의 문서와 정보를 포함시키는 이유는 이들 모두가 소프트웨어 생산 작업의 결과이기 때문이다. 또한 프로그램은 프로그램 언어로 작성된 코드, 즉 정적인 표현을 의미하지만 소프트웨어는 프로그램이 컴퓨터를 가동시킨다는 동적인 의미를 포함하고 있다.
공학 정의
공학은 무엇인가를 만드는 활동이라고 정의할 수 있고, 창조(creation)한다는 것과 유사한 의미를 가지고 있다. 만드는 과정에서 비용, 자원, 기간이 소요되어 현실적 접근을 해야하고, 경제성, 효율성과 연관되어 계획 또는 관리 등의 분야와 연결되어야 한다. 즉, 공학은 경영학, 경제학, 분야까지 이르는 광범위한 학문 영역이다.
시스템 정의
시스템은 어떤 목적과 기능을 수행하기 위해 유기적인 관계를 맺으며 함께 적용하고 서로 의존하는 요소들의 집합이다.
소프트웨어 분류
1. 관리 소프트웨어
- 자료를 받아들여 가공한 후 정보를 제공하는 소프트웨어이다. 주로 데이터베이스에 저장한 후 검색을 통해 사용자가 원하는 형태로 정보를 제공해준다.
- 예) 인터넷 뱅킹, 학사업무 시스템, 비행기/기차 등과 같은 예약 시스템, 운송 예약 시스템 등
2. 제어 소프트웨어
- 데이터 베이스가 아닌 각종 센터를 통해 사용자가 원하는 형태로 정보를 제공해준다. 소프트웨어에 오류가 생기면 당연히 피해가 발생하는데 특히 제어 소프트웨어 오류는 치명적인 결과를 초래할 수 있다. 의료 시스템이 오동작하면 환자의 생명에 생명까지 잃게 할 수 있다.
- 예) 교통신호 제어, 의료기기 제어, 공장장비 제어 등
3. 임베디드 소프트웨어
- 장비나 기기에 내장된 형태의 소프트웨어이다.
- 예) 가전 제품, 각종 공정제어 시스템에도 소프트웨어 마이크로 칩 형태로 내장
4. 응용 소프트웨어
- 비즈니스 업무 등 한 회사 또는 기관의 내부에서 사용하는 시스템, 일맥상 관리 시스템과 비슷함
- 예) 급여 시스템, 회계 시스템, 재고 관리 시스템, 수강신청 시스템 등
5. 시스템 소프트웨어
- 운영체제, 장치 드라이버, 컴파일러, 코드 라이브러리
6. 주문형 소프트웨어
- 특정 고객 또는 기업의 요구를 만족시키기 위하여 제작한 소프트웨어
- 예) SI 업체에서 만드는 소프트웨어
7. 패키지 소프트웨어
- 패키지화 하여 상업적으로 판매하는 소프트웨어
- MS Office, 한글 등
소프트웨어의 특징
1. 제조가 아닌 개발
- 소프트웨어 개발 과정은 종종 건축에 비유된다. 생산성 향상을 강조하기 위해 하드웨어 조립라인 개념을 도입해 설명하기도 한다.
2. 소모가 아닌 품질저하
- 소프트 웨어는 하드웨어와 달리 닳지 않는다는 것이다.
- 소프트웨어 특징 중 하나는 사용 시작 단계부터 사용자의 요구가 계속 발생한다는 것이다. 또한 운영체제 등 설치 환경이 달라질 수도 있다. 따라서 어느 시점이 지나면 사용자의 요구를 모아 시스템에 반영해야 한다. 이처럼 새로운 기능 추가, 기존 기능 향상 등 변경 사항이 발생한다. 이 때 변경으로 인한 부작용으로 실패율이 급격히 증가할 수 있고, 반복적인 변경으로 인해 실패율도 반복적으로 증가한다.
소프트웨어 당면 문제
1. 소프트웨어 개발의 느린 발전 속도
- 하드웨어 발전 속도에 비해 느린 발전 속도
2. 새로운 소프트웨어에 대한 사용자의 요구의 증가
- 개발 속도를 높이고자 다양한 방법론이 등장
- 방법론은 영역별로 부품에 해당하는 컴포넌트를 만들어 놓고 이를 조립하는 방식
- 범용화가 되려면 표준화 등 해결해야 할 문제가 남아있다.
3. 관리기술의 부분적 활용
- 기계를 잘하면 수명이 길어지고 오랫동안 좋은 상태를 유지할 수 있다.
- 소프트웨어를 개발할 때에도 관리 기술이 필요하다.
- 관리가 효율적이어야 좋은 품질의 소프트웨어를 적기에 맞추어 납품할 수 있다.
- 주어진 예산, 일정, 개발자으로 에서 수행할 수 있도록 관리
- 관리자 이루어지기 위해서는 팀워크가 중요하다
4. 소프트웨어 개발의 어려움
- 개발 과정이 복잡하다.
- 참여 인력이 많다
- 개발 기간이 길다
5. 고비용
- 소프트웨어 개발에 많은 인력이 투입되어야 하기 때문에 비용이 많이 든다.
- LOC(Lines of Code): 소프트웨어 개발 규모를 측정하는데 가장 널리 사용
6. 낮은 신뢰도
- 예상대로 작동되지 않거나 예상하지 않았던 오작동을 일으키는 사례가 많다.
7. 유지보수와 재작업
- 소프트웨어가 배포 설치된 후에는 유지보수 단계로 들어간다.
- 최신 기술로 개발된 거의 모든 소프트웨어에도 잔존하는 오류가 포함되어 있다.
- 소프트웨어는 계속해서 업그레이드가 된다. 기능 제공, 운영 환경 변경의 이유로 소프트웨어 수정이 필요하다.
- 최초 요구 사항이 잘 정의되어도 개발이 진행되면서 시스템의 이해도가 깊어지면서 새로운 요구사항이 추가된다. 계속적인 요구사항에 의해 재작업을 요구하게 된다.
참고자료
이해하기 쉬운 소프트웨어 공학 에센셜, 생능출판, 윤청 지음(ISBN: 9788970508290)
소프트웨어 공학 5판, 정익사, 최은만(ISBN: 9788935305049)