컴퓨터(Computer Science)/소프트웨어공학(Software engineering)

소프트웨어공학(1) 필요성과 특징

게임이 더 좋아 2020. 3. 29. 18:02
반응형
728x170

 

 

 

소프트웨어야 그냥 만들면 만드는거지

뭐 공학적으로 학문을 구분하여 배워야하느냐? 라고 할 수 있는데

 

소프트웨어 공학의 왜 필요한지 알아보자

 


 

#소프트웨어공학의 필요성

 

어떠한 상품에서 소프트웨어의 비중이 높아졌다.

예를 들어서 무인자동차는 "자동차"라서 지불하는 비용보다

"무인" 이라는 소프트웨어에 지불하는 비용이 많아진 것이다.

 

소프트웨어의 복잡도가 나날이 복잡해진다.

위에 무인자동차처럼 소프트웨어 많은 요구사항을 만족하게 만들어야하다보니깐

어떠한  원리, 순서 없이는 개발을 하기가 어려워졌다는 것이다.

 

소프트웨어는 고객의 요구에 맞춰서 개발해야한다.

즉 고품질, 저비용, 단기간에 완성되기를 원한다. 그래서 어떠한 원칙하에 효율적으로 개발해야한다.

 

웹환경의 소프트웨어 수요가 급증했다. 

온라인 쇼핑이라던가 모바일 네트워크 등의 분야가 그렇다.

 

결국 소프트웨어가 이제는 소프트웨어 공학에 대한 이해 정도가 얼마냐에 따라 결정된다라고 말할정도로 필요해졌다는 것이다.

 


 

소프트웨어란 뭘까?

 

#소프트웨어의 정의

 

단순히 프로그램이라고 말할 수 있는데 프로그램뿐만 아니라 프로그램의 개발, 운용, 보수에 필요한 관련 정보 모두를 아우른다. (설계 문서가 가장 큰 비중)

 

 


 

그렇다면 그러한 소프트웨어의 특성은?

 

#소프트웨어의 특성

 

설계/개발과정에서 비용이 많이 든다

이에 비해 완제품을 생산하는 과정은 비교적 저비용이다.

 

소프트웨어에 물리적인 부품은 없음

신뢰도를 결정하는 것은 생산과정이 아닌 설계과정.

결함을 설계과정의 테스팅으로 찾아내는 형식(물리적으로 찾지 못함)

 

비가시성

물리적인 부품이 없다보니 구조를 한 눈에 볼 수 없고

구조를 보기 어려움

 

설계와 구현은 다르다.

설계를 했다고 해서 설계가 구현을 보장하지는 않음

작은 오류가 큰 문제를 야기할 수 있음

 

 


그렇다면 우리가 소프트웨어공학에서 배울 것은 무엇일까?

 

 

#소프트웨어공학의 분야 4가지

 

1.방법 

소프트웨어 개발에 사용되는 기법을 말한다. 객체지향분석을 예로 들 수 있다.

 

2. 도구

자동화된 시스템을 말하는데 설계, 프로그래밍 테스트 도구를 말한다.

 

3. 프로세스

도구와 방법을 적용하는 순서를 말한다( 프로세스에 따라 효율이 결정된다)

 

4. 패러다임

방법론을 일컫는다(구조적, 객체지향적 방법론)

 

 


일반적으로 소프트웨어는 어떠한 순서로 개발하는 것일까?

 

#소프트웨어 개발 프로세스

 

요구 분석과 정의

 

설계

1. 시스템 설계(구조 설계) 2. 프로그램 설계(상세 설계)

 

프로그램 구현

 

테스팅

( 1. 단위 테스트 2. 통합 테스트 3. 시스템 테스트)

 

시스템 설치

 

유지보수

 

 


 

소프트웨어공학을 몰라서 가지는 우리의 잘못된 생각이 무엇이 있을까?

 

#소프트웨어 개발의 잘못된 통념

 

개발은 주로 프로그래밍 작업이다 >>> 대부분 설계와 요구분석 작업

 

소프트웨어는 고치기 쉽다 >> 고치기 매우 어려움

 

최신 첨단 기술이 문제를 해결해줄 것이다 >>> 구조적문제라 해결이 기술의 발전으로는 되기 힘듦

 

소프트웨어 개발은 프로그램 완성까지다. >>> 유지보수까지가 소프트웨어 개발이다.

 

개발자는 프로그램의 기능이 명세에 대하여 맞는지만 보인다 >>> 다른 클래스와 인터페이스도 맞춰줘야한다.

 


그렇다면 이러한 소프트웨어만이 가지는 특징이 무엇일까?

 

#소프트웨어 개발의 어려움

 

문제가 무엇인지 잘 정의할 수 없음

요구를 정확하게 정의할 수 없는 경우가 많음

요구되는 사항이 서로 상충되어 설계의 어려움

오류가 늦게 발견될수록 수정비용이 커짐

프로그래밍 작업에서 오류는 설계에서의 오류보다 적음

지연된 프로젝트에 인력을 투입하는 것은 의사소통의 필요를 증가시켜 완성을 더 지연시킴

유지보수는 정책하에 관리되어야 하고 그렇지 않으면 dirty system화 됨.

 

 


#좋은 소프트웨어가 가지는 5가지

 

Usability, 유용성

사용하기 용이해야 하고

누가 봐도 어떠한 구조인지 알아야함.

 

Efficiency, 효율성

CPU와 Memory의 자원을 효율적으로 사용해야함

 

Reliablity, 신뢰성

요구한 기능을 만족하면서 작동해야함

 

Maintanablity, 유지성

위와 같이 구조를 쉽게 알 수 있어서 개발자가 아닌 사람도 유지보수가 가능하게 만들어야함

 

Reusability, 재사용성

소프트웨어가 다른 소프트웨어에도 쓰일 수 있도록 범용성을 가져야함

 

 


 

구조적과 객체지향적의 짧은 소개를 하자면

 

프로그램언어 성격

 

 

이런식으로 다른 형식을 가지고 있다. 참고만하자

 

 

 

++++

 

소프트웨어의 품질은 설계 명세로도 평가는 가능하다.

 

 

 

 

 

반응형
그리드형