[소프트웨어 공학] 1강. 소프트웨어란?

소프트웨어란?

컴퓨터 프로그램과 그와 관계된 요구분석, 설계모델, 사용자 매뉴얼과 같은 문서


소프트 웨어

일반적 형태 주문형 형태
다양한 계층의 소비자를 위해 개발 특정고객의 사양에 맞게 개발
엑셀/워드와 같은 PC 소프트웨어 SI - Admin


시스템

여러 기능요소의 역할을 모아 특정한 목적을 달성하는 집합체


시스템의 기능요소


레거시 시스템

기존 가동 운영중인 중요한 시스템
회사 업무의 주요부분 및 부수업무 등.. 대부분 IT 시스템을 의존함.

운영중인 시스템은 기존의 업무 및 기술을 사용하여 개발되어 옴


소프트웨어 공학

소프트웨어 공학에 대한 다양한 정의

정의한 사람 내용
Fritz Bauer * 컴퓨터 하드웨어에서 신뢰성있게 운영되는 소프트웨어를 경제성있게 개발하기 위해 공학적 원리를 응용하고 확립시킨 이론

* 기계에서 안정적이고 효율적으로 작동하는 소프트웨어를 얻기 위한 올바른 공학원칙을 수립하고 사용하는 것
ANSI / IEEE * 소프트웨어 개발, 운영, 유지보수 및 폐기 과정에 적용되는 체계적인 접근 방식 및 일련의 기술
Berry Boehm * 컴퓨터 프로그램을 설계, 개발, 운영, 유지보수에 관련된 문서를 작성하는데 필요한 과학적인 지식의 실용화
Richard R.Fairley * 전산학, 경제학, 경영과학 및 의사소통기술과 문제 해결을 위한 공학적인 접근방안을 토대로 소프트웨어 개발에 임하는 신기술 체계
교수님 소프트웨어를 잘 만들고 돌리고 고치고 버리는 방법을 배움


소프트웨어 위기




위기의 원인?

그렇기 떄문에 우리는

  1. 쳬계적이고 조직적인 접근 방법을 적용하여야 한다.
  2. 직면한 문제, 개발에 따르는 제약과 자원을 활용하기 위해서 적절한 도구와 기술을 사용해야 한다.


시스템 공학


시스템 공학의 요소

서브 시스템 개발 (Bottom - Up)


시스템 통합 (System Intergation) : SI


시스템 설치 (System Setup or Deploy)


시스템 개선 (System Management) : SM(유지보수)




시스템 해체


중대한 시스템

장애(실패: Failure)시 커다란 영향을 주는 시스템 : 장애발생시 크리티컬한 시스템


시스템 확실성 (신뢰성과 헷갈리지 말 것!!)

사용할 수 있지만 믿을 수 없는 시스템도 있다.


가용성, 신뢰성, 안전성, 보안성

시스템 확실성을 위해 필요(필수)한 것들이다.

가용성 : 시스템이 임의의 시점에서 요청한 서비스를 수행할 수 있는 확률
(가용성 부족 : 일일 100명의 접속자를 처리해야 하는데, 본 시스템은 30명 밖에 처리 못함)
(가용성 부족을 극복하기 위해(고가용성을 위해) 클라우드 시스템을 쓴다던가 추가적인 시스템 사용)

신뢰성 : 주어진 목적을 위해 지정된 기간 동안 시스템이 고장나지 않을 확률
(신뢰성 부족 : 1+1연산이 2가 나와야하는데 간혹 3, 4가 나오는 시스템..)
(테스트 주도 개발 및 QA와 같은 개발단계에서 신뢰성 확보 가능)

안전성 : 시스템이 정상적이든 비정상적이든 시스템의 큰 손상이 없어야 함
(안전성 부족 : 시스템 가동 시 다른 시스템의 파일을 침범하며, 프로그램의 잦은 다운등…)
(예외처리등을 미리 하여, 비정상적인 상황에서 큰 손상을 주지 않도록 해줘야함)

보안성 : 침해사고나 외부의 공격으로부터 보호하는 능력, 보안은 가용성, 신뢰성, 안전성보다 기본 요건
(언급하지 않아도 당연시 되는 요건)
(보안성 부족 : 외부에서 접근하여 DB를 털어가거나, 은행 시스템에 일반 직원이 접근하여 이자율 조정을 하는 것..)


자문자답해보기

1. 소프트웨어란 무엇인가?
2. 소프트웨어공학이란 무엇인가?
3. 소프트웨어공학과 컴퓨터과학의 차이는 무엇인가?
4. 소프트웨어공학과 시스템공학의 차이는 무엇인가?
5. 소프트웨어 프로세스란 무엇인가?
6. 좋은 소프트웨어란 어떠한 속성을 가지는가?
7. 소프트웨어공학이 직면하고 있는 어려움은 무엇인가?