소프트웨어란?
컴퓨터 프로그램과 그와 관계된 요구분석, 설계모델, 사용자 매뉴얼과 같은 문서
소프트 웨어
특정 고객을 위해
개발될 수도,일반적인 시장을 위해
개발될 수도 있음
일반적 형태 | 주문형 형태 |
---|---|
다양한 계층의 소비자를 위해 개발 | 특정고객의 사양에 맞게 개발 |
엑셀/워드와 같은 PC 소프트웨어 | SI - Admin |
-
새로운 소프트웨어는 새로 개발하거나, 기존의 소프트웨어를 재사용하거나, 일반적인 소프트웨어를 재구성하여 만들어짐
-
소프트웨어 공학은 소프트웨어 생산과 연관된 모든 사항을 고려한 공학적인 규칙임
-
소프트웨어 엔지니어(개발자, 프로젝트 관리자를 포괄하는 명칭)는 체계적이고 조직적인 접근방법을 적용해야 함.
(직면한 문제, 개발에 따르는 제약과 자원을 활용하기 위해서 적절한 도구와 기술을 사용해야 함)
시스템
여러 기능요소의 역할을 모아 특정한 목적을 달성하는 집합체
시스템의 기능요소
- 입력 (Input) : 처리 방법, 처리할 데이터, 조건을 시스템에 투입하는 것
- 처리 (Process) : 입력된 데이터를 처리 방법과 조건에 따라 처리하는 것
- 출력 (Output) : 처리된 결과를 시스템에서 산출하는 것
- 제어 (Control) : 자료를 입력하여, 출력될 때까지의 처리 과정이 올바르게 진행되는지 감독하는 것
- 피드백 (Feedback) : 출력된 결과가 예정된 목표를 만족시키지 못할 경우 목표 달성을 위해 반복 처리하는 것
레거시 시스템
기존 가동 운영중인 중요한 시스템
회사 업무의 주요부분 및 부수업무 등.. 대부분 IT 시스템을 의존함.
- 주요부분 : 은행 고객 계좌 시스템, 항공기 유지관리 시스템
- 부수업무 : 회계, 총무, 인사, 문서결제
운영중인 시스템은 기존의 업무 및 기술을 사용하여 개발
되어 옴
- 새로운 비즈니스 요청이나, 기술환경의 변화 등으로 주기적으로 새로운 시스템 구축을 요구함
- 사업의 운영에 결정적이기 때문에 과거의 시스템을 버리는 것은 매우 위험함
- 새로운 시스템을 구축하기 위해 비즈니스 프로세스를 분석하고 기존 시스템을 고려해야함
- 회사 예산의 많은 부분을 시스템 운영, 유지보수, 개발 등으로 소모함
소프트웨어 공학
소프트웨어 공학에 대한 다양한 정의
정의한 사람 | 내용 |
---|---|
Fritz Bauer | * 컴퓨터 하드웨어에서 신뢰성있게 운영되는 소프트웨어를 경제성있게 개발하기 위해 공학적 원리를 응용하고 확립 시킨 이론 * 기계에서 안정적이고 효율적으로 작동하는 소프트웨어를 얻기 위한 올바른 공학원칙을 수립하고 사용하는 것 |
ANSI / IEEE | * 소프트웨어 개발, 운영, 유지보수 및 폐기 과정에 적용되는 체계적인 접근 방식 및 일련의 기술 |
Berry Boehm | * 컴퓨터 프로그램을 설계, 개발, 운영, 유지보수에 관련된 문서를 작성하는데 필요한 과학적인 지식의 실용화 |
Richard R.Fairley | * 전산학, 경제학, 경영과학 및 의사소통기술과 문제 해결을 위한 공학적인 접근방안을 토대 로 소프트웨어 개발에 임하는 신기술 체계 |
교수님 | 소프트웨어를 잘 만들고 돌리고 고치고 버리는 방법 을 배움 |
소프트웨어 위기
하드웨어 기술의 급속한 발전
과범용컴퓨터의 광범위한 보급
및소프트웨어 엔지니어 위기
- 하드웨어 기술은 소프트웨어 개발 능력의 발전속도보다 훨씬 빠름.
- 새로운 소프트웨어를 요구하는 시장의 수요를 감당할 수 없음. (소프트웨어의 생명이 점점 짧아짐)
- 기존 정보기술로 개발된 소프트웨어의 유지보수가 어려워짐.
인건비 상승
과우수한 소프트웨어의 부족
및생산성에 대한 위기의식
소프트웨어 위기 도래
- 개발예산 초과
- 생산성 저하
- 개발일정 지연
- 품질 저하 (버그, 앱 사망등…)
위기의 원인?
- 소프트웨어 특성에 대한 이해의 부족
- 소프트웨어 프로그래밍에만 치중하고 관리의 부재
그렇기 떄문에 우리는
- 쳬계적이고 조직적인 접근 방법을 적용하여야 한다.
- 직면한 문제, 개발에 따르는 제약과 자원을 활용하기 위해서 적절한 도구와 기술을 사용해야 한다.
시스템 공학
- 시스템을
분석
,설계
,구현
,검증
,설치
그리고유지보수
하는 것 - 시스템이 사용되는 방법, 운영, 건설에 적용되는 제한과 시스템에 의해서 제공되는 서비스에 관련된 것
시스템 공학의 요소
서브 시스템 개발 (Bottom - Up)
- 일반적으로
하드웨어, 소프트웨어, 통신 개발이 동시에 이루어짐
- 각각의 서브 시스템(단위 시스템)을 구현하고 시스템을 통합하여 전체 시스템이 만들어짐
- 어떤 시스템은 상업용 구매를 통해 구입할 수도 있음
- 구현 팀 사이에 의사소통이 중요한 이슈임 (일정이 안맞거나, 결합시 이슈가 있을 수 있음)
시스템 통합 (System Intergation) : SI
- 하드웨어, 소프트웨어, 사람을 한 곳에 통합하여 시스템을 구성하는 과정임
- 점진적으로 해결해서 서브 시스템이 한번에 하나씩 통합함.
- 서브 시스템 간의 인터페이스 문제는 이 단계에서 발견됨.
- 시스템 컴포넌트 간에 조정되지 않은 납품 때문에 문제가 될 수도 있음.
시스템 설치 (System Setup or Deploy)
- 시스템 완성 후, 시스템은 고객의 환경에 맞도록 설치되어야 함.
- 다른 환경
- 새 시스템에 대한 저항 (익히는거 어려워… 요런 것도 포함)
- 동시에 두 개의 시스템이 공존
- 물리적 설치 문제
(케이블 문제, 공간 문제) - 운영자 훈련 시간필요
시스템 개선 (System Management) : SM(유지보수)
- 큰 시스템은 생명주기가 길기 때문에 변경요구를 수용할 수 있어야 함
- 개선은 본질저거으로 비용이 듦
- 기술적 관점, 사업의 관점에서 변경이 용이한지 분석함
- 각 서브 시스템이 변경에 대하여도 정확하게 유지 운영되는지 분석함
- 기존 시스템이 가진 시스템 성격을 변경하기 어려움 (완전 재개발)
- 변경이 이루어지면 시스템 구조가 훼손됨
- 레거시 시스템 (Legacy Systems)
- 반드시 유지되어야 하는 기존의 시스템
시스템 해체
- 유용하게 사용 후 시스템 사용 중지
- 환경을 오염시키는 유해물질을 제거 (하드웨어적인 부분)
- 다른 시스템에서 사용할 수 있도록 데이터를 재구성하거나 변환될 수도 있음 (DB, SW)
중대한 시스템
장애(실패: Failure)시 커다란 영향을 주는 시스템
: 장애발생시 크리티컬한 시스템
- 안전이 중대한 시스템 (화학공장 방재 시스템, 인슐린 공급 프로그램등..) : 장애시 생명이나 환경에 큰 영향을 줌
- 임무가 중대한 시스템 (우주통제 시스템, 적기 추적 레이더 시스템…) : 장애시 중요한 목적을 달성하지 못함
- 업무가 중대한 시스템 (은행의 예금처리 시스템, 증권 매매 시스템…) : 장애시 금전적으로 손실이 큼
시스템 확실성 (신뢰성과 헷갈리지 말 것!!)
- 중대한 시스템에서
가장 중요한 시스템 특성
임 - 사용자가
시스템에 대하여 신뢰할 수 있는 정도
임 - 사용자가
생각한 대로 작동
함. - 정상적인 경우에
고장이 나지 않음
. 사용성과 신뢰도는 다름
.
사용할 수 있지만 믿을 수 없는 시스템도 있다.
가용성, 신뢰성, 안전성, 보안성
시스템 확실성을 위해 필요(필수)한 것들이다.
가용성 : 시스템이 임의의 시점에서 요청한 서비스를 수행할 수 있는 확률
(가용성 부족 : 일일 100명의 접속자를 처리해야 하는데, 본 시스템은 30명 밖에 처리 못함)
(가용성 부족을 극복하기 위해(고가용성을 위해) 클라우드 시스템을 쓴다던가 추가적인 시스템 사용)
신뢰성 : 주어진 목적을 위해 지정된 기간 동안 시스템이 고장나지 않을 확률
(신뢰성 부족 : 1+1연산이 2가 나와야하는데 간혹 3, 4가 나오는 시스템..)
(테스트 주도 개발 및 QA와 같은 개발단계에서 신뢰성 확보 가능)
안전성 : 시스템이 정상적이든 비정상적이든 시스템의 큰 손상이 없어야 함
(안전성 부족 : 시스템 가동 시 다른 시스템의 파일을 침범하며, 프로그램의 잦은 다운등…)
(예외처리등을 미리 하여, 비정상적인 상황에서 큰 손상을 주지 않도록 해줘야함)
보안성 : 침해사고나 외부의 공격으로부터 보호하는 능력, 보안은 가용성, 신뢰성, 안전성보다 기본 요건
(언급하지 않아도 당연시 되는 요건)
(보안성 부족 : 외부에서 접근하여 DB를 털어가거나, 은행 시스템에 일반 직원이 접근하여 이자율 조정을 하는 것..)
자문자답해보기
1. 소프트웨어란 무엇인가?
2. 소프트웨어공학이란 무엇인가?
3. 소프트웨어공학과 컴퓨터과학의 차이는 무엇인가?
4. 소프트웨어공학과 시스템공학의 차이는 무엇인가?
5. 소프트웨어 프로세스란 무엇인가?
6. 좋은 소프트웨어란 어떠한 속성을 가지는가?
7. 소프트웨어공학이 직면하고 있는 어려움은 무엇인가?