소프트웨어 공학은 기능적 요구사항, 비기능적 요구사항을 제대로 구현하기 위한 체계적인 절차, 소프트웨어 아키텍처 설계와 구현, 사람과 사업 측면에서의 소프트웨어 Management에 대한 것을 다루는 학문이다.
소프트웨어 엔지니어링 구성요소: 소프트웨어 개발 절차, 소프트웨어 구조, 소프트웨어 개발 도구
Development Process Model
매번 프로세스를 새로 만드는 것은 번거로우므로 model을 사용한다.
Plan Driven Process
- 모든 절차가 사전에 수립된 계획에 의해서 진행되고 평가된다.
- 비행기, 자동차 등 요구사항이 지속적으로 바뀌지 않는 경우 주로 사용한다.
- Waterfall Process Model
- 가장 전통적인 모델로, 물이 흘러가는 모양과 같다.
- 요구사항 분석 → 설계 → 구현(coding) → 검증 → 유지보수
- V-Cycle Process Model
- Verification/Validation이 강조된 모델
- 자동차 등 Safety가 중요한 시스템 개발에 주로 채택된다.
- ISO 26262 같은 표준에 적용되어 있는 모델이다.
- Verification(설계) → 구현 → Validation(검증)
Agile Process
- Early Release & Continual Evolution
- 요구사항을 빠르게 반영하여 조기에 초기 버전의 소프트웨어를 완성한다.
- 이후 계속적인 요구사항 변화에 기민하게 반응하여 지속적으로 진화시킨다.
- Software Defined Vehicle을 위해 자동차 분야에서도 빠르게 적용하고 있다.
- 자동차의 경우 내부적으로 먼저 출시하는 것 또한 early release에 포함된다.
- 대표적인 Agile Process: Scrum
- 완벽한 요구사항 분석이 불가능한 경우
- 참가 인원
- Product Owner: 제품 책임자
- Team: 개발팀
- Scrum Master: 애자일 프로세스 코치. 절차가 잘 진행되는지 확인하는 역할
- 주요 개념
- Sprint: 2~4주 단위의 tasks
- Daily stand-up: 15분 이하의 짧은 미팅
- Sprint과 Review, 짧은 plan을 반복한다.
- Agile 방법론과 연계하여 개발과 운영을 한팀에서 진행하는 DevOps 방법론도 있다.
Configuration Management
- 소프트웨어의 전주기적 변화를 관리하는 방법
- Meta Operation을 관리하는 것
- 소프트웨어 개발 과정에서 소프트웨어의 변경 사항을 추적하고 제어하는 프로세스
- Version Control: 소스코드의 변경 내역 관리
- Build Management: 빌드 자동화
- Change Management: 변경사항이 어디에 영향을 미치는지 분석
- Release Management: 제품 릴리즈 관리
Software Architecture
Layered Architecture
- 추상화 수준에 따른 구조
- 21세기의 모든 소프트웨어는 Layered Architecture 기반으로 설계된다.
- Hardware → OS → Virtualization → Middleware → Application Framework → Applications
- 자율주행 아키텍처로 Apollo가 있다.
Data Stream Architecture: ROS-based Autoware
- 센서가 포함된임베디드 시스템에서 사용하는 아키텍처
- ROS는 middleware에 해당한다.
- 통합 개발 환경(Integrated Development Environmet)
- VS code와 같이 프로그램 개발에 관련된 모든 작업을 하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어
- 코드 에디터
- IDE와 달리 하나의 파일에 대해서 수정할 때 용이하다.
- 컴파일러
- 소스코드 버전 관리 도구
- Jira, Confluence(wiki 기능), Jenkins 등
- 소스코드 빌드 도구