본문 바로가기
소프트웨어공학

[소프트웨어 공학] 소프트웨어 프로세스, 요구 공학 소프트웨어 아키텍처 디자인

by Lizardee 2024. 2. 19.
소프트웨어 공학이란?

: 초기 구상 단계부터 시스템 사용 이후 발생하는 유지보수까지 포함하는 소프트웨어 생산의 모든 관점과 관련한 공학적인 학문 분야이다. 소프트웨어 공학은 고품질 소프트웨어 시스템의 비용 효율적인 개발에 중점을 둔다.

  • 소프트웨어 공학에서의 비용(cost): 개발 + 테스트 비용

소프트웨어 프로세스
  1. 소프트웨어 명세화(specification): 시스템을 개발하기 위해 어떤 서비스가 필요한지 이해하고 정의하며, 시스템의 운영/개발에 대한 제약사항을 찾아내는 프로세스
  2. 소프트웨어 설계(design) 및 구현(implementation)
    : 명세를 실현하는 소프트웨어 구조를 설계하고, 소프트웨어 구조를 실행 가능한 프로그램으로 변환한다.
    • 아키텍처 설계: 시스템의 전체 구조, 주요 컴포넌트, 이들의 관계 및 배포 방법을 식별한다.
      **컴포넌트: 소프트웨어 개발에서 재사용 가능한 부품 또는 모듈
    • 인터페이스 설계: 시스템 컴포넌트들 사이의 인터페이스를 정의한다.
    • 컴포넌트 설계: 각 시스템 구성요소의 작동 방식을 설계한다.
    • 데이터베이스 설계: 시스템 데이터 구조를 설계하고, 데이터베이스에서 어떻게 표현할지를 결정한다.
  3. 소프트웨어 검증(validation)
    : 시스템이 주어진 명세를 잘 따르는지와 시스템 사용자의 정확한 요구를 충족하는지 확인하는 프로세스
    • 개발/컴포넌트 테스팅: 시스템 개발자가 시스템을 구성하는 컴포넌트를 테스트한다.
    • 시스템 테스팅: 시스템 전체를 테스트한다.
    • 고객 테스팅: 시스템이 고객의 요구사항을 충족하는지 확인하기 위해 고객 데이터로 테스트한다.
  4. 소프트웨어 진화(evolution)
    : 새로운 요구를 충족시키기 위해 기존 소프트웨어 시스템을 변경할 때 이루어진다. 변경은 지속적으로 이루어지기 때문에, 소프트웨어가 유용하기 위해서는 진화를 해야만 한다.

 

소프트웨어 프로세스 모델

: 소프트웨어 프로세스를 단순하게 나타낸 것

  • 폭포수 모델: 소프트웨어 개발 프로세스를 별도의 식별된 단계로 나누어 표현한다. 앞 단계가 끝나야 다음 단계로 넘어갈 수 있다. 프로젝트를 개별 단계로 유연하지 않게 분할하면, 고객의 요구사항에 대응하기 어렵다.
    자유로운 팀 커뮤니케이션이 가능하고 소프트웨어 요구사항이 빨리 변경되는 상황에서 폭포수 모델은 적합한 프로세스 모델이 아니다. 이러한 경우에는 반복적 개발 애자일 방법론이 더 적합하다.
    • 애자일 방법론(Agile Methodology): 소프트웨어 프로세스 중 반복적 개발과 오버헤드 감소에 중점을 둔다. 애자일 방법론에서는 초기 계획을 상세하게 수립하는 대신 유연하고 적응적인 개발 프로세스를 강조한다. 애자일 방법의 주요 특징은 기능을 빠르게 구현해서 배포하면서 고객의 요구사항 변경에 대응한다는 것이다.
  • 점층적 개발: 초기 구현을 개발하고, 사용자와 다른 사람들로부터 피드백을 받아서, 여러 버전을 거쳐 소프트웨어를 진화시킴으로써 요구한 최종 시스템을 개발하는 것이다. 명세화(specification), 개발(development), 검증(validation) 활동은 분리되었다기보다는 활동 간 빠른 피드백을 가지고 중첩되어 있다.
  • 재사용 기반 소프트웨어 공학 모델: 개발해야 하는 소프트웨어 양을 줄인다.

 

프로토타입 시스템

: 제품의 아이디어를 시현하고, 디자인 선택 사항들을 시도해볼 수 있는 시스템의 초기 버전 (=/= 최종적 결과물)

  • 장점: 사용자의 설계 요구사항에 가까워질 수 있다. 프로토타입 시스템은 시스템의 일부 주요 기능을 고객에게 보여주기 위해 개발될 수 있다.

 

요구 공학이란?

: 고객이 시스템에서 요구하는 서비스와 시스템의 운영, 개발에 대한 제약사항을 설명하는 과정

  • 사용자/시스템/도메인 요구사항
  • 기능/비기능 요구사항

 

요구 공학 프로세스
  1. 타당성 조사(Feasibility study)
  2. 요구사항 도출 및 분석(Requirements elicitation and analysis)
  3. 요구사항 명세화(Requirements specification)
  4. 요구사항 검증(Requirements validation)

소프트웨어 아키텍처 디자인(Software Architectural Design)
소프트웨어 아키텍처란?

: 소프트웨어 구성요소와 그들이 지니고 있는 특성 중 외부에 드러나는 특성, 구성요소들 간의 관계를 표현하는 시스템 구조

 

Software Architecture Design Process
  • 아키텍처 설계: 시스템의 전체 구조, 주요 컴포넌트, 이들의 관계 및 배포 방법을 식별한다.
  • 인터페이스 설계: 시스템 컴포넌트들 사이의 인터페이스를 정의한다.
  • 컴포넌트 설계: 각 시스템 구성요소의 작동 방식을 설계한다.
  • 데이터베이스 설계: 시스템 데이터 구조를 설계하고, 데이터베이스에서 어떻게 표현할지를 결정한다.

 

Software Architecture Style
  • Layered architecture
  • Repository architecture
  • Client-Server architecture
  • Pipe and Filter architecture
  • Model-View-Controller(MVC) architecture

 

Program Control Styles
  • 중앙집중식 제어:
    • 콜-리턴 모델
    • 관리자 모델
  • 이벤트 기반 제어:
    • 브로드캐스트 모델
    • 인터럽트 기반 모델