소프트웨어란 프로그램의 개발, 운용, 보수에 필요한 관련 정보 일체를 뜻한다

 

 

소프트웨어가 복잡해질수록 설계가 중요해진다.

 

소프트웨어의 특징을 알아보자

 

소프트웨어 특징

 

1. 손에 잡히지 않는다(intangible) (invisible)

- 개발 작업을 이해하기 어렵고, 소프트웨어의 구조를 파악하기 쉽지가 않다. 구조를 파악하기 어려우면 구조를 망가뜨리기도 쉽다. 이 점이  소프트웨어의 어려운 점이다.

 

2. 대량 생산하기 쉽다 (reproducible)

- 비용의 대부분이 개발 과정에 소요된다. 건축과 같은 다른 엔지니어링은 생산(제조) 단게의 비용이 크나 소프트웨어는 개발 과정에 소요된다. 따라서 한 번 개발을 한 후 최종 산출물이 만들어지면 그 다음 카피를 만들어내는 것은 쉽다. 개발 비용만 들고 생산 비용은 들지 않기 때문에 대량 생산이 쉽다는 강점을 가진다. 

 

3. 노동 집약적(laobr-intensive) 

- 자동화하기 어렵다. 노동집약적이라는 말은 "1차산업" "2차산업" 과 같은 단어를 지칭할 때 많이 쓰이는 말이다. 소프트웨어 또한 노동집약적이라고 할 수 있다. 소프트웨어는 이에 대한 많은 교육을 받은 사람들이 산업에 투입된다. 따라서 여러 고용이 이루어지는 고부가가치 산업이다.

 

4. 잘 훈련 받지 않으면 제작하기 어려움

- 앞서 설명했듯이 소프트웨어는 복잡하고 정교한 시스템이기에 훈련을 잘 받은 사람만이 제작할 수 있다. 잘 훈련받지 않으면 품질 문제를 인식하기 어렵고 객체 지향, 컴포넌트, 분산 시스템 등의 여러 기술 사용이 어렵다.

 

5. 쉽게 변경 가능하다.

- 완전한 이해 없이 변경할 수 있다. 다만 변경을 가하면서 구조 전체가 망가질 수도 있다.

 

6. 닳아 없어지는 것이 아님.

소프트웨어는 잘 만들어지면 계속 쓸 수 있다. 플라스틱과 같은 자원은 닳을 수도 있지만 소프트웨어는 그렇지 않는다.

다만 설계 변경으로 인해 품질이 저하되거나 노후화 될 수는 있다. 예를 들어 오류를 발생하거나 소프트웨어가 복잡해질 수 있다. 

 

 

 

 

이번에는 소프트웨어의 종류를 살펴보자

 

 

 

소프트웨어 종류

 

1. 주문형 소프트웨어

- 특정 고객의 수요를 만족하기 위하여 개발된 소프트웨어이다.

ex) 항공 교통 제어 시스템, 재정관리 시스템, 학사정보관리 시스템

순수한 소프트웨어

 

2. 패키지 형(범용) 소프트웨어

- 공개된 시장에서 판매되는 소프트웨어이다.

COTS(Commercial Off-The-Shelf) 또는 Shrink-wrapped 라고도 불리어진다. 

ex) MSWord, MS-PowerPoint

순수한 소프트웨어

 

3. 임베디드 시스템

- 하드웨어에 탑재된 소프트웨어이다. 변경이 어렵다.

소프트웨어에서 상당히 핫한 분야이다. ex) 자동차 SW / 장난감, 세탁기 등에 들어가는 SW

SW+HW

주문형, 패키지형, 임베디드 소프트웨어의 차이점

 

 

 

소프트웨어는 다른 관점으로도 분류할 수 있다.

1. 실시간(Real-time) 소프트웨어 : 제어, 모니터링 소프트웨어로 신속하게 반응해야하며 안정성 확보가 중요함

2. 자료처리 소프트웨어 : 비즈니스 업무 처리에 사용되며 자료의 정확성, 보안이 관건이다. 일괄 처리한다.

( 두 가지 성격을 동시에 지니는 S/W 도 있음)

 

 

 

 

 

소프트웨어 공학이란 무엇일까?

 

 

 

소프트웨어 공학은

고객의 문제를 해결해 주기 위하여 대규모의 품질 좋은 소프트웨어 시스템을 정해진 시간과 비용으로 개발하거나 발전시키는 체계적인 프로세스이다.

 

 

 

고객의 문제를 해결하는 것이 소프트웨어 공학의 궁극적인 목표라고 할 수 있다. 문제를 해결하기 위해선 꼭 개발하지 않고, 솔루션을 구매할 수도 있다. 고객의 문제를 해결해야하므로 고객이 필요로하지 않는 불필요한 기능을 추가하는 것은 문제 해결에 도움이 되지 않는다. 문제를 파악하고 이해하기 위해 효과적으로 커뮤니케이션하는 것이 중요하다.

체계적인 개발과 발전을 위해선 표준을 따르고 공학적 프로세스를 따라야한다. 표준은 예를들면 ISO, IEEE.. 같은 표준을 말한다.

공학적 프로세스란 잘 이해하고 있는 기술을 조직화되고 훈련된 방식으로 적용하는 것이다. 대부분의 개발 작업은 진화적 개발이다.

 또한 대규모의 고품질 S/W 시스템을 만들어야한다. 개발에는 많은 시간과 노력이 필요하므로 고품질의 시스템을 만들어야 한다. 이 과정에서는 팀워크와 협동이 필요하다. 한 사람이 완전하게 이해하고 완성할 수 없기 때문에 엔지니어링 기술이 필요한 것이다. 작업의 분할과 시스템의 각 부분이 잘 작동하느냐가 관건이 된다. 

 비용, 시간, 기타 제약이 존재함을 인지해야 한다. 대부분의 소프트웨어 개발은 한정된 자원을 사용한다. 따라서 얻는 이익은 비용을 초과해야하며 더 빠르고 값 싸게 개발하여야한다. 대부분의 프로젝트는 비용과 시간의 부정확한 예측으로 실패로 끝나기도 한다.

 

 

 

 

 

 '소프트웨어 엔지니어링'

용어는 1968년 NATO conference 에서 처음 언급되었다. 소프트웨어 개발에 엔지니어링의 원리가 도입되어야 함을 처음으로 인식하였다. 초창기에는  소프트웨어 개발자가 자신이 만든 프로그램을 다른 사람이 이해하지 못하면 뿌듯해했다. 그러나 만들어진 코드를 내가 보고도 이해못하는 문제가 발생하였다. 또한 대규모 소프트웨어를 만들기 시작하면서 공학적 접근 방식의 필요성이 제기되었다.

 

 엔지니어링은 공공을 보호하기 위해 자격증 제도가 필수이다. 그러나 소프트웨어에서는 의사나 변호사들 처럼 필수까지는 아니다. 없는 것보단 있는 게 낫지만..

엔지니어의 설계 작업은 수학, 과학, 경제 등의 원리를 적용할 수 있도록 충분한 연습을 필요로 한다. 뿐만 아니라 도덕적 윤리 의식도 필수적이다. 

 

 

 

 

IEEE : 소프트웨어의 개발, 운용, 유지보수 및 파기에 대한 체계적인 접근 방법

W.Humphrey : 질 좋은 소프트웨어를 경제적으로 생산하기 위해서 공학, 과학, 수학적 원리에 의하여 소프트웨어를 개발하는 것

목표: 품질 좋은 소프트웨어를 최소의 비용으로 계획된 일정에 맞춰 개발하는 것

 

 

 

 

 

 

소프트웨어 공학 관련자

1. 사용자(유저) : 소프트웨어를 사용하는 사람들

2. 고객(customer) : 소프트웨어에 대해 비용을 지불하는 사람

3. 소프트웨어 개발자 : 요구분석가, 데이터베이스 전문가, 기술문서 작성자, 프로그래머, 테스트엔지니어, QA 엔지니어

4. 개발관리자 : 프로젝트 관리 및 비즈니스 경영하는 사람

 

 

 

 

소프트웨어 품질

소프트웨어에도 품질이 있다. 

 

몇 가지만 살펴보도록 하자.

 

1. 사용용이성 (usibility) 

빨리 배우고 작업을 쉽게 할 수 있는 특성이다. 상업용 시스템에서는 굉장히 중요하다. 기능이 잘 동작하는지만 생각하는 것이 아닌 쉽게 작업할 수 있도록 해야한다. 

2. 효율성 ( efficiency)

CPU 시간과 메모리 같은 자원을 효율적으로 사용할 수 있는 특성이다. 적절한 자료구조의 사용이 중요하다.

3. 신뢰성(reliability)

요구한 기능을 실패없이 수행할 수 있는 특성이다. 이 소프트웨어가 오류 없이 동작하는지에 관한 문제이다. 오류를 찾고 없애는 과정에 노력이 들어가야 신뢰성을 높일 수 있다.

4. 유지보수성(maintainability)

유지 보수를 쉽게 수행할 수 있는 특성이다. 소프트웨어는 한 번 개발된 후 발전을 겪게 된다. 이러한 유지 보수를 쉽게 할 수 있어야 한다. 

5. 재사용성(reusability)

부품이 다른 프로젝트에서 사용될 수 있는 특성이다. 소프트웨어를 한 덩어리를 크게 만들어놓으면 다른 데서는 사용되기 어렵다. 만약 모듈화해서 만들어놓으면 다른 데서도 사용되기 쉽다.

 

 

 이러한 품질들은 상충되는 경우도 있다. 예를 들어 효율성을 높이면 유지보수성이나 재사용성이 낮아질 수 있다. 유지보수성이 높다는 것은 여러 모듈, 컴포넌트로 나누는 것을 의미한다. 기능을 개선하려면 어떤 모듈을 다른 모듈로 대체해야한다. 이러다 보면 모듈의 개수가 늘어날 수 있다.따라서 효율성을 개선하면 유지보수성이나 재사용성은 낮아질 수 있고 사용용이성을 높이면 효율성이 낮아질 수 있다.

 품질들은 상충되는 경우도 있고 관계자에 따라 중요하게 여기는 품질 관점도 다르기 때문에 품질의 목표설정이 중요한 작업이 된다. 목표를 설정한 후 이에 맞게 설계해야한다. 이에 따라 자원을 과다하게 낭비하는 엔지니어링은 피해야한다. 

또 품질을 위해선 때때로 최적화가 필요하다. 한정된 예산으로 최대의 효율/ 신뢰도를 얻기 위해서이다.

 

 

소프트웨어 품질 관점

1. 고객 : 고객입장에서는 받아들일 만한 비용을 지불해서 문제를 해결할 수 있는지가 문제

2. 사용자 : 배우기 쉽다. 효율적이다. 일을 끝내는데 도움이 된다.

3. 개발자 : 디자인하기 쉽다. 유지보수가 쉽다. 재사용이 쉽다.

4. 개발관리자 : 더 많이 팔고 비용이 적게 들어야한다.

 

 

단기/ 장기 품질

1. 단기적 품질 : 고객의 당면 문제, 요구사항을 만족하고 있는가, 현재 처리할 자료의 분량을 효율적으로 처리할 수 있는가

2. 장기적 품질 : 유지보수성, 고객의 미래 요구

 

 

 

 

 

 

소프트웨어 프로젝트 유형

 

 

 

소프트웨어 프로젝트 작업

- 요구분석과 명세화

 : 도메인 분석, 문제정의 , 요구 추출(가능한 많은 소스에서 입력을 취함), 요구 분석(정보를 분석하고 정리), 요구 명세화(소프트웨어가 어떻게 작동하는지에 대한 자세한 사항을 기술)

- 설계

 : 요구사항이 가용한 기수롤 어떻게 구현되어야 하는지를 기술

 : 중요 기술 

 - 시스템 엔지니어링, 소프트웨어 아키텍처 , 서브시스템의 내부에 대한 상세 설계, 사용자 인터페이스 설계, 데이터베이스 설계

- 모델링

 : 요구사항 명세 ~> 설계 과정에서 등장함. 도메인이나 소프트웨어의 표현을 만들어나가는 과정이다.

 : 유스케이스 모델링, 정적 모델링, 동적 모델링, 행위 모델링

- 프로그래밍

- 품질 보증

  :  테스트 - unit test , integration test, system test

      리뷰 인스펙션

- 배포

- 프로세스 관리

728x90

+ Recent posts