CS 기본이론 소프트웨어공학

  1. toc

소프트웨어공학?

  • 소프트웨어가 어떻게 개발되어지는지 그 단계들을 수십년간 정리해 놓은 것.

소프트웨어 개발 생명 주기

  • 계획 단계에서 유지보수 단계에 이르기까지의 과정
  1. 정의 단계
    • 사용자의 요구사항 확인 및 타당성 검토
    • 개발에 필요한 요구사항 명세화
  2. 개발 단계
    • 코딩하여 실제 프로그램 개발
    • 단위/통합/시스템/인수/설치 테스트
  3. 유지보수 단계
    • 시스템 운영과정.
    • 운영 중 발생하는 문제 해결
    • 시스템 폐기.

소프트웨어 개발프로세스

  • 사용자의 요구사항을 SW로 구현하는 과정
  • 소프트웨어 개발 7단계
    1. 계획
    2. 요구분석
    3. 설계
    4. 구현
    5. 테스트
    6. 반영
    7. 유지보수

소프트웨어 프로세스 모델

  • 폭포수(Waterfall) 모델
    • 단점
      • 시간이 오래 걸림
  • 프로토타입 모델(Prototype) 모델

  • 나선형(Spiral) 모델
    • 짧은 단위로 개발하며 피드백을 받음.
  • 통합프로세스 모델
    • 모델링부터 테스트를 동시에 진행.
  • 애자일(Agile) 프로세스 모델
    • 문서보다 실제 테스트를 중시함.
    • 고객의 요구에 민첩하게 댜응하고, 그때그때 주어지는 문제를 풀어나감.
    • 프로세스와 도구 중심이 아닌, 상호 소통 중심.
    • 계획 중심이 아닌, 변화에 대한 민첩한 대응.

소프트웨어 아키텍처

아키텍처?

  • 소프트웨어의 전체적인 구조
  • 소프트웨어를 이루고 있는 여러 구성요소
  • 구성 요소들의 인터페이스 간의 상호작용 정의
  • 시스템 설계와 개발 시 적용되는 원칙과 지침.

아키텍처 구성

  • 구성 요소
  • 요소 사이의 관계
  • 요소들이 외부에 드러내는 속성
  • 요소와 주변 환셩 사이의 관계
  • 요소들이 제공하는 인터페이스
  • 요소들의 협력 및 조립 방법

아키텍처 모델

데이터 중심 모델

  • 주요 데이터가 repo에서 중앙 관리.
  • 데이터가 중앙에 있고, 그 주변에 소프트웨어가 있음.
  • repo와 repo에 접근하는 서브시스템으로 구성
  • 데이터가 한군데 모여 있기 때문에 일관성 있게 관리 가능.
  • 새로운 서브시스템 추가 용이
  • repo에서 병목 현상 발생 가능
  • repo와 소프트웨어 사이의 결합이 강해서, repo를 변경할 시 소프트웨어가 모두 영향을 받음.

Client-Server 모델

  • 네트워크를 이용하는 분산 시스템
  • 데이터와 처리 기능을 클라이언트와 서버에 분할하여 사용.
  • 역할
    • 서버
      • 클라이언트에게 서비스를 제공
    • 클라이언트
      • 서버에게 서비스를 요청.
      • 서비스 실행

Layering 모델

  • 기능을 몇 개의 계층으로 나누어 배치

MVC 모델

  • 모델, 뷰, 컨트롤러로 나누어 시스템을 구성
  • 같은 모델을 이용해서 여러 뷰를 만들 때 적합.
  • 장점
    • 뷰와 모델을 분리해서 느슨한 결합 가능
    • 구조 변경에 용이
  • 단번
    • 기본 설계의 복잡도 증가
    • 속도가 중요한 프로젝트에 부적합.