juuuding

[소프트웨어공학] 1. Introduction 본문

컴퓨터공학/소프트웨어공학

[소프트웨어공학] 1. Introduction

jiuuu 2024. 10. 12. 21:51

📖 소프트웨어

 

 소프트웨어란?

 

💡 소프트 웨어란?

 - 프로그램 자체만이 아니라 관련 문서, 라이브러리, 지원 웹사이트 등 필요한 환경 설정 데이터 포함

 - 소프트웨어 제품은 특정 고객을 위해 개발되거나, 범용으로 개발됨

 

💡 소프트웨어 제품 유형

 - 일반 제품 : 독립형 시스템, 어떠한 고객이든 원하면 살 수 있음. 예를 들어 그래픽 패키지, 프로젝트 관리 도구, 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)

 - 여러 다른 소프트웨어 시스템으로 구성된 시스템

 

+ 웹은 대규모의 고도로 분산된 서비스 기반 시스템 개발을 이끌었고, 모바일 기기용 앱 산업의 탄생에 도움

 

 

 소프트웨어 다양성

 

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

 - 소프트웨어 공학의 방법과 도구개발 대상 소프트웨어의 유형, 고객의 요구 및 개발 팀의 역량에 따라 달라짐