소프트웨어공학

‍이세현·2024년 10월 15일

소프트웨어 공학은 기능적 요구사항, 비기능적 요구사항을 제대로 구현하기 위한 체계적인 절차, 소프트웨어 아키텍처 설계와 구현, 사람과 사업 측면에서의 소프트웨어 Management에 대한 것을 다루는 학문이다.

소프트웨어 엔지니어링 구성요소: 소프트웨어 개발 절차, 소프트웨어 구조, 소프트웨어 개발 도구

Development Process Model

매번 프로세스를 새로 만드는 것은 번거로우므로 model을 사용한다.

Plan Driven Process

  • 모든 절차가 사전에 수립된 계획에 의해서 진행되고 평가된다.
    • 사전에 전체 과정을 계획해야 한다.
  • 비행기, 자동차 등 요구사항이 지속적으로 바뀌지 않는 경우 주로 사용한다.
  1. Waterfall Process Model
    • 가장 전통적인 모델로, 물이 흘러가는 모양과 같다.
    • 요구사항 분석 → 설계 → 구현(coding) → 검증 → 유지보수
  2. 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에 해당한다.

Tools

  • 통합 개발 환경(Integrated Development Environmet)
    • VS code와 같이 프로그램 개발에 관련된 모든 작업을 하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어
  • 코드 에디터
    • IDE와 달리 하나의 파일에 대해서 수정할 때 용이하다.
  • 컴파일러
  • 소스코드 버전 관리 도구
    • Jira, Confluence(wiki 기능), Jenkins 등
  • 소스코드 빌드 도구
profile
Hi, there 👋

0개의 댓글