소프트웨어공학

[소프트웨어공학] 1. An Introduction to Software Engineering

leziwn.cs 2023. 9. 7. 04:51
소프트웨어란 무엇인가?

: 프로그램 자체뿐만 아니라, 모든 관련 문서들, 라이브러리, 지원 웹사이트, 이 프로그램을 유용하게 쓰는 데에 필요한 환경 설정 데이터도 포함한다.

 

▶ 소프트웨어 제품 유형

  • 일반 제품(Generic product)
  • 맞춤식 소프트웨어(Customized product)

Cf) 임베디드 소프트웨어: 일반 제품(Generic product)

 

--> 새로운 소프트웨어의 개발은 완전히 새롭게 개발을 하거나, 소프트웨어 시스템을 구성하거나, 기존 소프트웨어를 재사용하여 만들 수 있다.

 

 

좋은 소프트웨어의 필수적인 특성
  • 유지보수성(maintainability): 고객의 변화하는 요구를 충족시킬 수 있도록
  • 확실성과 보안성(dependability and security): 신뢰성, 보안성, 안전
  • 효율성(efficiency): 메모리, 프로세서 사이클과 같은 시스템 자원을 낭비해서 사용하지 않도록
  • 수용성(acceptability): 사용자가 사용하기 편리하도록

 

 

소프트웨어 공학이란?
  • 'software crisis' 에서 처음 시작
    : 한가한 교차로(신호등이 오히려 운전자에게 불편함) --> 통행량의 증가(신호등이 없으므로 불편하고, 정체가 심해짐) --> 복잡한 도로(신호등 없이는 교통 흐름 제어 불가능)

1980년대 소프트웨어 개발 프로젝트

  • 소프트웨어 공학
    : 시스템 명세화의 초기 단계부터 시스템 사용 이후 발생하는 유지보수에 이르기가지 소프트웨어 생산의 모든 측면과 관련된 공학적 학문 분야
  • 소프트웨어 엔지니어는 작업에 대해 체계적이고 조직적인 접근 방식을 채택하고, 해결해야 할 문제, 개발 제약 조건 및 사용 가능한 리소스에 따라 적절한 도구, 기술을 사용해야 한다.
  • 소프트웨어 공학은 고품질 소프트웨어 시스템의 비용 효율적인 개발에 중점을 둔 학문 분야이다.

 

 

소프트웨어 개발 프로젝트가 실패하는 원인
  • 소프트웨어 규모의 대형화/복잡화 --> 개발 비용 증대
  • 하드웨어 기술의 급진적 발전에 비해, 소프트웨어 개발 기술의 상대적 부진
  • 하드웨어 비용 대비 소프트웨어 가격 상승 폭 증가
  • 소프트웨어 유지보수의 어려움, 개발 정체 현상
  • 소프트웨어 개발 프로젝트 기간, 소요 예산에 대한 정확한 예측의 어려움
  • 신기술에 대한 교육, 훈련의 부족
  • 사용자의 소프트웨어에 대한 기대치 증가
  • 소프트웨어에 대한 사용자 요구사항의 빈번한 변경, 반영

 

 

인공지능 시대의 소프트웨어 위기
  • 지능 소프트웨어 개발의 남발
  • 지능 소프트웨어 사고 위험

 

 

소프트웨어 공학 vs. 컴퓨터 과학
  • 컴퓨터 과학: 컴퓨터와 소프트웨어 시스템이 가지고 있는 이론, 방법에 대해 다룬다.
  • 소프트웨어 공학: 유용한 소프트웨어를 만드는데 필요한 실제적 문제를 다룬다.

 

 

소프트웨어 공학 vs. 시스템 공학
  • 시스템 공학: 컴퓨터 기반 시스템 개발의 모든 관점을 다루므로, 소프트웨어 뿐 아니라 하드웨어 개발, 정책, 프로세스 설계 및 시스템 설치 등을 모두 다룬다.
  • 소프트웨어 공학: 시스템에 포함된 소프트웨어 인프라, 제어, 응용 프로그램 및 데이터베이스 개발과 관련되어 있다.

 

 

소프트웨어 공학에서의 비용(cost)

: 개발 + 테스트 비용

  • 소프트웨어는 개발보다 유지 관리에 더 많은 비용이 들어간다.

 

 

최선의 소프트웨어 공학 기법과 방법 (소프트웨어 다양성)

: 소프트웨어 시스템은 매우 다양한 유형이 존재한다. 하지만 다양한 유형의 소프트웨어에 모두 적용할 수 있는 보편적인 소프트웨어 기법은 존재하지 않는다.

 

 

애플리케이션 유형
  • 독립적 애플리케이션
    : PC, 모바일 기기와 같은 개별 환경에서 동작하는 애플리케이션
    - 필요한 기능을 모두 가지고 있으며, 네트워크 연결이 필요하지 않다.
    - 예) 계산기, 워드
  • 대화형 트랜잭션 기반 애플리케이션
    : 원격 컴퓨터에서 실행하는 애플리케이션으로, 사용자의 컴퓨터, 모바일 기기 등을 이용해서 접근한다. (웹 브라우저에 접속)
    - 예) 전자상거래 애플리케이션(웹 애플리케이션)
  • 임베디드 제어 시스템
    : 하드웨어 기기를 제어/관리하는 소프트웨어 제어 시스템
    - 예) 차량 제어 시스템
  • 일괄 처리 시스템
    : 대규모로 데이터를 처리하도록 설계된 비즈니스 시스템
    - 많은 수의 개별 입력을 가공하여 각각에 해당하는 출력을 만들어낸다.
    - 예) 공장
  • 엔터테인먼트 시스템
    - 예) 유튜브, 멜론
  • 모델링 및 시뮬레이션 시스템
    : 물리적 진행, 상황을 모델링하기 위해 과학자와 엔지니어가 개발한 시스템
  • 데이터 수집 및 분석 시스템
    : 환경으로부터 데이터를 수집한 후, 처리를 위해 다른 시스템으로 전달하는 시스템
  • 복합 시스템(SoS; Systems of System)
    : 여러 다른 소프트웨어 시스템으로 구성된 시스템
    - 예) 학교 수강신청 시스템, 학교 학생 정보 관리 시스템

 

 

소프트웨어 공학에 관한 FAQ