juuuding
[소프트웨어공학] 1. Introduction 본문
📖 소프트웨어
소프트웨어란?
💡 소프트 웨어란?
- 프로그램 자체만이 아니라 관련 문서, 라이브러리, 지원 웹사이트 등 필요한 환경 설정 데이터 포함
- 소프트웨어 제품은 특정 고객을 위해 개발되거나, 범용으로 개발됨
💡 소프트웨어 제품 유형
- 일반 제품 : 독립형 시스템, 어떠한 고객이든 원하면 살 수 있음. 예를 들어 그래픽 패키지, 프로젝트 관리 도구, CAD 같은 PC 소프트웨어, 특화된 마켓을 위한 소프트웨어
- 맞춤식 소프트웨어 : 특정 고객에 맞추어 개발한 시스템. 예를 들어 전자기기 제어 시스템, 항공 관제 시스템
+ 임베디드 시스템은 특정 하드웨어 장치에서 특정 기능을 수행하도록 개발된 sw기 때문에 맞춤식 소프트웨어라고 생각..
=> 새 소프트웨어 개발은 완전히 새롭게 개발을 하거나, 소프트웨어 시스템을 구성하거나, 기존 소프트웨어를 재사용하여 만들 수 있음
소프트웨어 오류
💡 소프트웨어 오류 사례
- Mars Climate Orbiter(MCO)
- Jeep Cherokee
- Boeing 747
- Teska Autopilot
좋은 소프트웨어의 필수 특성
💡 유지보수성 (Maintainability)
- 변화화는 요구를 충족시킬 수 있도록 진화가능하게 만들어야 한다. 비즈니스 환경이 변화하기 때문이다.
💡 확실성과 보안성 (Dependability and security)
- 확실성: 신뢰성, 보안성, 안전성 포함하는 특성. sw 시스템에 장애가 발생하더라도 물리적이거나 경제적인 피해를 일으키면 안된다. 보안을 철저히 하여 악의적 사용자에 의해 피해 받지 않아야 한다.
💡 효율성 (Efficiency)
- 메모리, 프로세스 사이클 같은 시스템 자원을 낭비해선 안된다. 효율성은 응답성, 처리 시간, 자원 활용을 포함한다.
💡 수용성 (Acceptability)
- 목표로 하는 사용자가 이해할 수 있어야 하고, 사용하기 쉬워야 하며, 해당 사용자가 이용하는 다른 시스템과도 호환되어야 한다.
📖 소프트웨어 공학
소프트웨어 공학이란?
💡 소프트웨어 공학이란?
- 소프트웨어 공학 개념은 1968년 'software crisis' 에서 처음 등장
- 시스템 명세화 초기 단계부터, 시스템 사용 이후 유지보수에 이르기까지 소프트웨어 생산의 모든 측면과 관련된 공학적 학문
- sw 엔지니어는 작업에 체계적이고 조직적인 접근 방식을 채택하고 해결할 문제, 개발 제약 조건 및 사용 가능한 리소스에 따라 적절한 도구와 기술을 사용해야함
- 고품질 소프트웨어 시스템의 비용 효율적인 개발에 중점을 둔 공학 분야
💡 소프트웨어 공학과 컴퓨터 과학의 차이
- 컴퓨터 과학: 컴퓨터와 소프트웨어 시스템이 가지고 있는 이론과 방법을 다룸
- 소프트웨어 공학: 유용한 소프트웨어를 만드는데 필요한 실제적 문제를 다룸
=> sw 해결 방안이 크고 복잡한 문제에는 컴퓨터 과학의 이론이 잘 맞지 않을 수 있기에, sw 엔지니어는 종종 임시 접근 방식(ad hoc approaches)를 사용함
소프트웨어 공학에서의 비용(Cost)
- sw 개발에 들어가는 전체 비용 중 60%는 개발 비용, 40%는 테스트 비용
- sw는 개발보다 유지 관리에 더 많은 비용이 들어감. 수명이 긴 시스템의 경우 유지 관리 비용이 개발 비용의 몇 배
- 비용은 개발 중인 시스템 유형과 성능 및 시스템 안정성과 같은 시스템 속성의 요구 사항에 따라 다름
- 비용의 분포는 개발 모델에 따라 다름
- 소프트웨어 비용은 종종 컴퓨터 시스템 비용 중 대부분 차지하기도 함. PC의 소프트웨어 비용은 종종 하드웨어 비용보다 높음
+ 맞춤식 소프트웨어의 경우, 진화 비용이 개발 비용을 앞지르는 경우가 많음.
진화 비용, 유지 관리 비용은 테스트 비용에 속하나?
소프트웨어 개발 프로젝트가 실패하는 원인
- 소프트웨어 규모의 대형화 및 복잡화에 따른 개발 비용 증대
- 하드웨어 기술의 급진전으로 인한 소프트웨어 개발 기술의 상대적 부진
- 하드웨어 비용 대비 소프트웨어 가격 상승 폭 증가
- 소프트웨어 유지보수의 어려움과 개발 정체 현상 발생
- 소프트웨어 개발 프로젝트 기간 및 소요 예산에 대한 정확한 예측의 어려움
- 신기술에 대한 교육 및 훈련 부족
- 사용자의 sw에 대한 기대치 증가
- 사용자 요구사항의 빈번한 변경 및 반영
=> 예산 초과, 일정 지연, 낮은 품질의 sw 개발, 사용자 요구사항 불만족, 산출물 관리 어려움으로 인한 sw 개발 실패
※ 소프트웨어 공학이 직면한 주요 도전 과제: 증가하는 다양성, 빠른 인도에 대한 요구와 신뢰할 수 있는 sw 개발에 대응
인공지능 시대의 소프트웨어 위기
초연결 , 초융합, 초지능
- 지능 소프트웨어 개발의 남발: 응용 소프트웨어 개발에 너무 많은 인공지능 학습 알고리즘이 무분별하게 적용
- 지능 소프트웨어 사고 위험: 학습되지 않은 예외 상황이나 예상하지 못했던 환경에서 사고 발생
소프트웨어 공학과 시스템 공학의 차이
💡시스템 공학
- 컴퓨터 기반 시스템 개발의 모든 관점을 다룸. 따라서 sw뿐만 아니라 하드웨어 개발, 정책과 프로세스 설계 및 시스템 설치 등을 모두 다룸
💡소프트웨어 공학
- 시스템에 포함된 소프트웨어 인프라, 제어, 응용 프로그램 및 데이터베이스 개발과 관련되어 있음
애플리케이션 유형
💡 독립형 애플리케이션
- pc, 모바일 기기 같은 개별 환경에서 동작하는 애플리케이션. 필요한 기능을 모두 가지고 있고 네트워크 연결이 필요하지 않음
ex) MS Office, Adobe Photoshop, 계산기, 오프라인 게임
💡 대화형 트랜잭션 기반 애플리케이션
- 원격 컴퓨터에서 실행하는 애플리케이션. 사용자의 컴퓨터나 모바일 기기로 접근. 전자상거래 애플리케이션과 같은 웹 애플리케이션도 해당
ex) 은행 ATM, 온라인 쇼핑몰, 항공권 예약, 병원 예약, 배민
💡 임베디드 제어 시스템
- 하드웨어 기기를 제어하고 관리하는 sw 제어 시스템. 시스템 유형 중 가장 많은 비중 차지
ex) 세탁기 제어, 드론 제어, 엘리베이터 제어
💡 일괄처리 시스템
- 대규모 데이터를 처리하도록 설게된 비즈니스 시스템. 많은 수의 개별 입력을 가공하여 각각에 해당하는 출력을 만들어냄
ex) 직원 급여 계산 시스템, 대학 성적 처리, 세금 신고 및 정산, 데이터베이스 백업
💡 엔터테인먼트 시스템
- 사용자의 즐거움을 위해 개인적으로 사용하는 시스템
ex) 게임 콘솔, 스트리밍, VR
💡 모델링 및 시뮬레이션 시스템
- 물리적 진행이나 상황을 모델링하기 위해 개발한 시스템. 독립적으로 상호 작용하는 수많은 객체를 가짐
ex) 비행 시뮬레이터, 교통 시뮬레이션, 의료 시뮬레이션
💡 데이터 수집 및 분석 시스템
- 환경으로부터 데이터를 수집한 후, 처리를 위해 다른 세스템으로 전달하는 시스템
💡 복합 시스템 (SoS, System of Systems)
- 여러 다른 소프트웨어 시스템으로 구성된 시스템
+ 웹은 대규모의 고도로 분산된 서비스 기반 시스템 개발을 이끌었고, 모바일 기기용 앱 산업의 탄생에 도움
소프트웨어 다양성
- 소프트웨어 시스템은 매우 다양한 유형이 존재. 다양한 유형의 소프트웨어에 모두 적용할 수 있는 보편적인 소프트웨어 기법은 존재하지 않음
- 소프트웨어 공학의 방법과 도구는 개발 대상 소프트웨어의 유형, 고객의 요구 및 개발 팀의 역량에 따라 달라짐
'컴퓨터공학 > 소프트웨어공학' 카테고리의 다른 글
[소프트웨어공학] 5. Architecture Design (5) | 2024.10.19 |
---|---|
[소프트웨어공학] 4. Requirements Engineering (4) | 2024.10.16 |
[소프트웨어공학] 3. Software Processes (0) | 2024.10.15 |
[소프트웨어공학] 2. Planning (1) | 2024.10.14 |