2022. 3. 15. 01:05ㆍ강의 내용 정리/소프트웨어 공학
소프트웨어 개념
- 개인목적으로 만드는 것이 아닌 돈을 받고 파는 프로페셔널한 소프트웨어는 상업적인 목적을 가지고 있기에 이를 위한 이론 및 방법론을 의미
- 대부분 나라들은 경제의 대부분을 소프트웨어에 의존하고 있음
ex) 배민의 정보 및 라이더 연결 / 네이버 검색 등
- 하드웨어가 로봇으로 바뀌고 이를 통제하는 소프트웨어의 중요성이 점점 증가하고 있음
ex) 창구 -> 키오스크 / 단순업무 -> AI 등
소프트웨어의 비용 증가
- 소프트웨어를 상용적인 목적을 위해 만듦 -> 이러한 측면에서 고려되어야함
- 이에 따라 이는 매우 중요한 모멘텀이 될 수 있음
- 소프트웨어의 비용 유형
(1) 소프트웨어를 구동하기 위한 환경(컴퓨터 등)에 대한 비용
-> 점점 하드웨어보단 소프트웨어의 비용이 증가함(MS 오피스, 넷플릭스 등)
(2) 유지보수 비용
-> 적은 비용으로 유지보수하는 것이 중요함
이러한 측면들 때문에 소프트웨어를 지속가능하게 유지보수하며 개선되어야하는 것이 중요함
but 시스템의 복잡도가 증가, 소프트웨어 개발할 때의 소프트웨어 공학 방법론의 실패
(1) 굉장히 많은 컴퓨터가 돌아야하고, 동시에 메모리 처리 및 관리 등 하고, 예측가능하지 않음 -> 끊임없이 변화가 존재하기에 문제는 더 커지고 복잡도는 증가하며 요구는 변화하기에 소프트웨어는 빠르게 제공해야하기에 소프트웨어 프로젝트의 실패가 발생할 수 있음
(2) 소프트웨어 수요 예측을 고려해 소프트웨어 공학 기법을 사용한 소프트웨어 개발이 아닌 주먹구구식의 소프트웨어 개발은 나중에 사용자가 많아지거나 기능을 추가했을 때 발생하는 문제가 있다. 이는 추후에 확장을 할 때 비용이 더 많이 증가하고 불안한 시스템이 될 수 있음
소프트웨어란?
- 프로그래밍으로 만든 프로그램 + 도큐멘트가 포함된 돈을 받고 팔리는 프로그램이나 누군가에게 커스터마이징한 프로그램
- 프로그램을 짜고, 평가하기 위한 문서들이 존재함
- 좋은 소프트웨어는 다음을 만족한다.
(1) 필요한 기능을 제공하는가
(2) 그것을 빠른 시간 안에 적은 메모리로, 안정적으로 잘 수준 높게 제공하는가.
또한 좋은 소프트웨어는 유지보수해야하고, 계속 발전해야하고, 안정적이고 보안도 중요하고 신뢰할 수 있어야한다.
- 소프트웨어 공학은 소프트웨어가 태어나서 죽을 때까지의 측면
- 우리가 만들 소프트웨어의 기능을 정하고(명세) -> 소프트웨어를 만들고(개발) -> 잘 만들었는지 테스트하고(검증) -> 유지보수 및 발전하는 식(진화 및 버전업)으로 소프트웨어 개발의 사이클이 이루어짐
- 시스템 엔지니어링은 소프트웨어 엔지니어링을 포괄함
(1) 시스템 프로그래머: 운영체제와 다른 것들의 접경지대에 있는 것을 프로그래밍함
(2) 시스템 엔지니어링: 하드웨어 + 소프트웨어 + 인프라, 유틸리티 등 굉장히 큰 부분을 담당
소프트웨어 엔지니어링의 도전적인 이슈
- 다양해지는데 개발 시간은 줄고, 신뢰 보증은 중요해짐
- 소프트웨어의 개발 비용 뿐만 아니라 유지보수 비용을 고려해야함
- 따로 정해진 좋은 소프트웨어 엔지니어링 기술과 방법론은 없기에 여러 경험을 쌓고, 이론 및 방법을 체크하여 활용하는 것이 중요함
Generic products
- 불특정 다수를 위한 프로그램
- Software specification(프로그램의 기능 및 성능 체크 등)은 기업이 정의함 -> 시작 단계
ex) 포토샵, MS 오피스
Customized products
- 특정한 요구사항에 맞춘 프로그램
- Softwart specification은 프로그램을 사용할 고객이 정의함
ex) Embedded control system, 공항
좋은 소프트웨어에 대한 특징
- Acceptability
- Efficiency
- dependability and security
- maintainability
소프트웨어 엔지니어링의 중요성
- 소프트웨어 공학의 무용론이 존재하지만 다른 사람의 경험을 기반으로 시행착오를 줄인다는 관점으로 접근하는 것이 좋음
소프트웨어 공학 프로세스
- Software specification: 내가 만든 소프트웨어가 누구의 요구사항을 반영하는 것인가.
- Software development: 요구 사항에 맞춰 코딩
- Software validation: 요구사항에 맞춰 제대로 동작하는지 체크
- Software evolution: 버그도 줄이고 기능을 추가하며 유지 보수함
소프트웨어 이슈
- Heterogeneity (다양성): 한번 만들어진 소프트웨어가 다양한 컴퓨터(스마트폰, 컴퓨터, 노트북 등)에서 대응되어야하기에 복잡해지고 이슈가 발생함
- 비즈니스나 사회 환경의 변화: 컴퓨터 사용 -> 스마트폰 사용으로 변화 -> 이에 맞춰서 개발해야함
- 보안 및 신뢰: 돈이 소프트웨어를 통해 움직이므로 안정적이고 보안이 매우 중요해지면서 복잡해짐
- Scale: 점점 많은 사람들이 사용함
어플리케이션 타입
- Stand-alone applications: 다운받아서 로컬 컴퓨터에서 사용 가능
- Interactive transaction-based applications: 요구에 따른 응답이 오고가는 웹 어플리케이션
- Embedded control systems: 디바이스에 포함된 어플리케이션
- Batch processing systems: 쌓아놓고 한번에 처리하는 어플리케이션
- Entertainment systems: 영화, 게임 등에 관한 어플리케이션
- Systems for modeling and simulation: 모델링 및 상호작용을 하는 어플리 케이션
- Data collection systems: iot와 같은 센서에서 많이 사용하는 것으로 데이터를 모으는 어플리케이션
- Systems of systems: MIS와 같이 기존의 시스템을 위한 시스템
소프트웨어 엔지니어링 fundamentals
- 소프트웨어를 만들 때 체계화된 개발 프로세스를 사용하고, 기능과 퍼포먼스를 체크하기도 하고, 소프트웨어 명세를 이해하고 관리해야하고, 재사용(중요)이 가능해야함.
웹 소프트웨어 개발
- 빠르게 개발해야하기에 소프트웨어 공학의 무용론이 등장하게 되나, 소프트웨어 공학과 어우러지는 면이 있음
- 소프트웨어 재사용
- agile development 기법
- service-oriented systems: 최근에는 잘게 쪼개서 단순한 인터페이스를 제공하는 작은 서버로 서비스를 제공함
- rich interfaces: 상호작용을 위한 인터페이스가 중요함
'강의 내용 정리 > 소프트웨어 공학' 카테고리의 다른 글
소프트웨어 공학 (6) Requirement Engineering (0) | 2022.04.16 |
---|---|
소프트웨어 공학 (5), Agile software development (0) | 2022.04.14 |
소프트웨어 공학 (4), 소프트웨어 프로세스 2 (0) | 2022.04.13 |
소프트웨어 공학 (3), 소프트웨어 프로세스 1 (0) | 2022.04.06 |
소프트웨어 공학 (2) 소프트웨어 공학의 윤리 와 케이스 스터디 (0) | 2022.03.15 |