소프트웨어의 영향
* 소프트웨어의 영향
- 기업의 경영과 시장, 학교 교육, 사무실의 작업환경
- 가정 생활과 여가 활동
- 미래의 경제와 우리 생활
* 소프트웨어의 개발
- 전문적인 기술을 가진 엔지니어가 필요
- 과거의 소프트웨어 : 개인의 특출한 솜씨로 게작 가능
* 소프트웨어 개발과 오케스트라
- 전체적인 하모니가 중요
- 그 집단의 엔지니어링 숙달정도에 크게 좌우
1.1 소프트웨어
* 소프트웨어
- 프로그램과 프로그램의 개발, 운용, 보수에 필요한 관련 정보 일체
- 프로그램 +(문서, 정보)
* SE 토픽 1.1 소프트웨어가 다른 점
- 다른 엔지니어링 결과물에 비해 개념적이고 무형적임
- 적은 비용으로 복제, 대량 생산 가능
- 노동 집약적 산업
- 초심자의 제품은 이해하기 어렵고, 수정하기 어려움
- SW는 쉽게 변경 가능
- SW는 닳아 없어지지 않음
* 소프트웨어 특징
- 품질 향상의 어려움
- 사용자 수준에 못 미치는 품질
* 소프트웨어 위기 현상(발생 원인)
- 납기 미 준수
- 예산 초과
- 결함으로 인한 부적합, 폐기, 수정의 필요
- 폭발적으로 늘어나는 수요
- 기하급수적으로 커지는 공급
- 느린 생산성 향상
- 품질 향상의 어려움
* 소프트웨어 위기 이유
- 소프트웨어의 복잡성
- 인간의 작업에 대한 예측의 어려움
* 소프트웨어 공학의 목적
- SW에 대한 공학적 접근 방법 습득
1.1.1 소프트웨어의 유형
* 주문형 소프트웨어
- 특정 고객의 수요를 만족하기 위하여 개발된 SW
- (예) 웹사이트, 대학의 종합정보시스템
* 패키지형 소프트웨어
- 공개된 시장에 내놓고 판매하기 위한 것
- (예) 워드프로세서, 웹브라우저, 운영체제
* 임베디드 소프트웨어
- 시장에서 판매되는 하드웨어 장치
- (예) 세탁기, VCR, 자동차 등에서 수행되는 소프트웨어
1.2 소프트웨어 공학
* 소프트웨어 개발 = 소프트웨어 공학(?)
* 집안 연못에 다리 구조물 설치 vs 한강 다리 건설
* 소프트웨어 엔지니어링이란?
- 고객의 문제를 해결해주기 위하여 대규모의 품질 좋은 소프트웨어 시스템을 정해진 시간과 비용으로 개발하거나 발전시키는 체계적인 프로세스.
1.2.1 고객의 문제를 해결
* SW ENG. 목표
- 고객의 문제 해결
* SW ENGer. 의 역할
- 현 시스템 그대로 사용, 새로 개발, 기성 제품 구입 판단 및 결정
1.2.2 체계적인 개발과 발전
* 소프트웨어 개발
- 엔지니어링 작업
- 개발자가 잘 이해하고 있는 기술을 조직된 원리와 방법으로 적용하는 과정
1.2.3 대규모 고품질 소프트웨어 시스템
* 소규모 시스템
- 프로그래머 홀로 성공적으로 개발 가능
* 대규모 시스템
- 매우 복잡함
- 엔지니어링 원리 적용이 필요
- 팀워크의 중요성
- 작업 분할 방법
1.2.4 비용, 시간 제약
* 엔지니어링 작업의 특징
- 경제적 제약 사항 고려
* 경제적인 제약이란?
- 시간, 인력 등의 자원에 대한 제한
- 비용 대비 이득이 있는가
* 소프트웨어 엔지니어 약할
- 정해진 예산과 시간 안에 완성
- 실현 가능한 계획 작성
- 시스템 개발 시 필요한 작업, 기간 예측 가능해야 함


