소프트웨어 공학이란?
소프트웨어의 개발, 운영 및 유지관리에 대한 체계적이고, 규율되고, 정량화 가능한 접근법의 적용 - IEEE Standard Glossary of Software Engineering Terminology
소프트웨어 생산의 모든 측면과 관련된 엔지니어링 분야 - Ian Sommerville
다중 버전 소프트웨어의 다중 사용자 구성 - David Parnas
소프트웨어 공학이 필요한 이유
쉬운 시스템과 어려운 시스템을 구별하여, 어려운 시스템을 어떻게 체계적이고 정량적으로 개발할 것인지 배운다.
소프트웨어 공학의 관심사
-
소프트웨어 개발 프로세스
- 요구 사항 분석 및 사양
- 소프트웨어 모델링
- 소프트웨어 아키텍처 & 디자인
- 소프트웨어 개발(코딩)
- 소프트웨어 확인 및 검증
-
프로젝트 관리
- 조직화, 도구, 리스크 관리
- 예측, 스케줄링, 계획
- 퀄리티
-
구성 관리
-
소프트웨어 엔지니어링의 중요 관점
소프트웨어의 특징
![](https://velog.velcdn.com/images/sang1234yun/post/c1b5c35e-284f-4a68-82d7-0b1a3b0d2328/image.png)
![](https://velog.velcdn.com/images/sang1234yun/post/5c5084eb-dd6b-42c6-9759-65319ea9bdd6/image.png)
(사람을 투입할수록 개발 기간이 더 늘어난다.)
소프트웨어 개발 프로세스
- 소프트웨어 시스템을 개발하는 것이 목적인 프로젝트는 여러 활동으로 구성됨
- e.g. 요구사항 분석, 설계, 구현, 테스트, etc.
- 소프트웨어 개발 프로세스는 순서와 빈도를 표현하고 작업 결과물을 정의하여 활동 간의 상호 관계를 규정함
소프트웨어 모델링
- 모델 = 시스템의 추상화
- 불필요한 디테일들을 제거함으로써 복잡성을 처리하는 방법
- UML: 모델링을 위한 사실상 표준
소프트웨어 아키텍처
- 아키텍처 디자인
- 설계 프로세스 초기 단계
- 이후 변경이 어렵거나 불가능한 문제에 초점
- aka 큰그림
소프트웨어 설계
- 핵심 개념
- 추상화
- 정보 은닉, 인캡슐레이션
- 관심사 분리
- 인터페이스
- 모듈화
- 측정
- 원칙
확인 및 검증
-
테스트
-
V&V
- 소프트웨어 시스템이 의도한 목적을 달성할 수 있도록 사양 및 요구 사항을 충족하는지 확인하는 프로세스
-
Verification: 제품을 올바르게 구축하고 있는지
-
Validation: 올바른 제품을 만들고 있는지
-
테스트의 한계: 버그의 존재는 보여주지만, 버그가 없다는 것을 알려주진 못한다.