호우동의 개발일지

Today :

article thumbnail

소프트웨어 설계와 구현

  • 실행 가능한 소프트웨어 시스템이 개발되는 소프트웨어 공학 프로세스 단계
  • 간단한 시스템
    • 소프트웨어 설계와 구현을 의미
    • 다른 모든 소프트웨어 공학 활동들은 이 프로세스에 병합

  • 큰 시스템
    • 많은 소프트웨어 공학 프로세스들 중 하나

  • 설계
    • 고객의 요구사항을 기반으로 소프트웨어 컴포넌트들과 그들 간의 관계를 식별하는 창의적인 활동

  • 구현
    • 설계를 프로그램으로 실현하는 프로세스

  • 설계 방식
    • 때때로 분리된 설계 단계가 있어 설계가 모델링되고 문서화됨
    • 프로그래머의 머리에 있거나 화이트보드나 종이에 개략적으로 스케치
      → 항상 프로세스가 있는 것은 아님

  • 설계 시 구현 이슈
    • 설계 문서화를 위해 UML를 사용하는 것
      • 객체 지향 언어로 프로그래밍 → 적절
      • 동적 타입 언어 → 부적절

    • 애자일 방법 사용
      • 설계할 때 대략적인 스케치만 하여 설계 결정은 프로그래머에게 남김

 


UML을 이용한 객체 지향 설계

  • 객체 지향 시스템
    • 상호 작용하는 객체로 구성
      • 객체 - 자신의 내부 상태를 유지하고 그 상태에 대한 오퍼레이션을 제공
      • 객체의 상태 - 표현은 비공개이고 객체 외부에서 직접 접근 불가

  • 객체지향 설계 프로세스
    • 객체 클래스들과 이 클래스들 간의 관계를 설계하는 것과 관련
      • 클래스 - 시스템에 있는 객체들과 그들 간의 상호작용을 정의

    • 객체는 클래스 정의로부터 동적으로 생성

  • 객체의 특징
    • 데이터와 데이터를 조작하는 오퍼레이션 모두 포함
      • 독립적인 개체로서 이해될 수 있고 수정 가능
      • 객체 구현의 변경 및 서비스 추가가 다른 객체에 영향 주지 않아야 함

  • 객체 지향 설계 절차
    1. 시스템의 콘텍스트와 시스템과 외부의 상호 작용을 이해하고 정의
    2. 시스템 아키텍처 설계
    3. 시스템의 주요 객체를 식별
    4. 설계 모델을 개발
    5. 인터페이스 명시

  • 설계는 순차적인 프로세스가 아님

 


시스템 컨텍스트와 상호작용

  • 소프트웨어 설계 프로세스의 첫 단계
    • 설계될 소프트웨어와 외부 환경 사이의 관계에 대한 이해를 발전시키는 것
    • 다음의 두 가지 결정
      • 요구되는 시스템 기능을 어떻게 제공하는지
      • 시스템을 그 환경과 통신하도록 어떻게 구조화하는지

  • 시스템 경계를 정함
    • 어떤 특징들이 설계 중인 시스템에 구현되는지
    • 어떤 특징들이 다른 관련된 시스템에 있는지

 


시스템 컨텍스트 모델과 상호 작용 모델

  • 시스템과 환경 간 관계에 대한 상호 보완적 관점 제공
  • 시스템 컨텍스트 모델 : 개발되는 시스템의 환경에 있는 다른 시스템들을 보여주는 구조 모델
  • 상호 작용 모델 : 시스템이 사용될 때 어떻게 그 환경과 상호 작용하는지 보여주는 동적 모델

 


시스템 컨텍스트 모델

  • 연관을 이용하여 표현
    • 연관 : 단순히 개체들 간의 어떤 관계가 있다는 것을 표명

제어 시스템

 

  • 단순한 블록 다이어그램을 이용해 시스템의 환경을 문서화
    • 블록 다이어그램은 시스템의 개체들과 그들의 관계를 보여줌

  • 시스템이 환경과 상호작용하는 것을 모델링할 때 주의점
    • 너무 자세하지 않게 추상적인 접근법 사용
    • 유스케이스 모델 사용하는 것도 하나의 방법
      • 유스케이스
        • 시스템과의 상호작용
          유스케이스

 


아키텍처 설계

  • 시스템 아키텍처 설계를 위한 기반 정보
    • 소프트웨어 시스템과 시스템의 환경 간 상호작용 정보

  • 아키텍처 설계 시 수행해야 하는 작업
    • 시스템을 구성하는 주요 컴포넌트들과 그들 간의 상호 작용을 식별
    • 아키텍처 패턴을 이용하여 시스템 구조를 설계

 


기상 관측소의 상위 수준 아키텍처

  • 청취자 모델을 사용하여 구성
    • 분산 시스템을 위해 공통적으로 사용되는 아키텍처 스타일
    • 메시지의 송신자가 메시지의 주소를 특정 서브시스템으로 지정할 필요 없음

아키텍처 수준


데이터 수집 서브 시스템의 아키텍처

  • 생산자 소비자 패턴을 활용하여 구성

데이터 수집

 


객체 클래스 식별

  • 설계 시스템이 핵심 객체들에 대해 고려 → 유스케이스 기술이 도움 됨
  • 다음 객체들로 시스템의 일반적인 객체 식별 시작
    • 상위 수준 시스템 객체
    • 유스케이스에 정의된 시스템 상호 작용을 포함하는 객체
  • 객체 클래스 식별 과정 중 설계할 수 있는 객체
    • 시스템 외부로의 개체를 표현하는 개체
    • 일반적인 서비스를 제공하기 위해 사용되는 구현 객체
      • 검색과 유효성 검사 등

 


객체 지향 시스템의 객체 클래스를 식별하는 방법

  • 구축할 시스템에 대한 자연어 기술의 문법적 분석 사용
    • 객체와 속성은 명사
    • 오퍼레이션이나 서비스는 동사

  • 응용 도메인에 있는 실제의 개체를 사용
  • 시나리오 기반 분석을 사용

 


기상 관측소 객체

객체

 

  • 기상 관측소
    • 기상 관측소의 환경과 관련된 기본 인터페이스를 제공
    • 단일 객체 클래스 사용
      • 상호작용마다 하나의 클래스를 두어 여러 개의 클래스로 설계 가능

  • 기상 데이터
    • 기상 보고 명령 처리 담당
    • 기상 관측소 장치로부터 수집한 데이터를 요약하여 기상 정보 시스템으로 보냄

  • 지상 온도계, 풍속계, 기압계
    • 시스템의 장치들과 직접 관련
    • 자율적으로 동작하며 특정 주기로 데이터 수집

 


관련 응용 도메인 지식

  • 다른 객체와 속성, 서비스를 식별하기 위하여 활용
  • 기상 관측소
    • 대게 원격지에 위치, 가끔 고장이 날 수 있는 여러 장치 포함
    • 많은 원격 기상 관측소가 있음
    • 서로 다른 시기에 설치되므로 장치의 유형이 다를 수 있음

 


설계 모델

  • 시스템 요구사항과 시스템 구현 사이의 연결
    • 시스템의 객체들과 객체 클래스들을 보여줌
    • 개체들 간의 연관과 관계도 보여줌

  • 추상적이어야 하므로 과도하게 자세히 작성 X
    • 모델과 시스템 요구사항 간의 관계를 파악하기 쉽도록 도움
    • 프로그래머들이 구현 결정을 내릴 수 있도록 충분히 상세해야 함

  • 상세함의 수준은 사용되는 설계 프로세스에 달림
    • 애자일 개발 → 화이트보드에 나타낸 개요 설계 모델이 전부
    • 계획 기반 개발 프로세스 → 상위 수준의 추상 모델로부터 파생된 상세 모델 필요

 


설계 모델과 상세 수준 결정

  • 생성되는 모델의 개수를 최소화하는 것 → 설계 비용과 소요 시간을 줄임
  • 설계를 위해 UML을 사용할 때 두 종류의 설계 모듈을 개발해야 함

    • 정적 모델 : 객체 클래스와 그들 간의 관계를 보여줌
      • 일반화(상속) 관계, 사용/사용됨 관계, 복합 관계를 문서화

    • 동적 모델 : 시스템 객체 간에 예상되는 런타임 상호 작용을 보여줌
      • 객체에 의한 서비스 요청 순서와 상호 작용에 의해 유발되는 상태 변화를 문서화

  • 모델 종류
    • 서브 시스템 모델(구조 모델)
      • 객체들의 논리적인 그룹들을 일관된 서브시스템들로 보여줌

    • 시퀀스 모델(동적 모델)
      • 객체 상호 작용의 순서를 보여줌
      • UML 시퀀스 다이어그램 또는 협력 다이어그램으로 표현

    • 상태 기계 모델(동적 모델)
      • 객체들이 이벤트에 반응하여 어떻게 그들의 상태를 변경하는지 보여줌
      • UML 상태 다이어그램으로 표현

    • 기타 : 유스케이스 모델, 집계 모델, 일반화 모델 등등.

 


서브시스템 모델 - 세부 사항을 추가하는데 유용한 UML 모델

서브 시스템

  • 설계가 어떠한 방식으로 논리적으로 연관된 객체의 그룹으로 구성되는지 보여주는 유용한 정적모델
    • 객체들을 둘러싸는 패키지로 각 서브시스템을 나타내는 클래스 다이어그램 형태로 표현

  • 상세 객체 모델도 같이 설계할 수 있음
    • 시스템의 객체들과 그들 간의 연관을 보여줌

  • 지나친 모델링에는 위험이 있음
    • 너무 상세한 결정을 내리지 마라

 


시퀀스 모델 - 세부 사항을 추가하는데 유용한 UML 모델

  • 객체 상호 작용이 일어나는 순서를 각 상호 작용 방식에 대해 보여주는 동적 모델
    • 설계를 문서화할 때 각각의 의미 있는 상호 작용에 대해 시퀀스 모델을 생성해야 함
    • 유스케이스 모델을 개발한다면 식별된 각 유스케이스에 대해 시퀀스 모델이 있어야

 


시퀀스 모델 설명

  • 열린 화살표 : 외부 시스템이 요청에 대한 응답을 기다리지 않고 다른 처리를 계속 함을 표시

시퀀스 모델

 

  • 객체들은 가장 윗부분에 수평으로 나란히 정렬하여 표현
  • 시간은 위에서 아래로 흐르는 것으로 표현
  • 상호작용은 레이블이 지정된 화살표로 표현
  • 객체가 시스템에서 관리하는 오브젝트일 때의 시간을 얇은 직사각형으로 표시
  • 시퀀스 다이어그램은 객체 그룹의 결합된 행동을 모델링하는 데 사용
    • 하나의 객체 또는 하나의 서브시스템이 메시지나 이벤트에 반응하는 행동을 요약하기에는 알맞지 않음
      → 이경우는 상태 모델 사용

 


기상 관측소 상태 다이어그램

기상 관측소 다이어그램

 


인터페이스 명세

  • 설계 컴포넌트 간의 인터페이스 명세는 설계 프로세스의 중요한 부분
    • 객체들과 서브시스템들이 병행하여 설계될 수 있기 때문

  • 객체 또는 객체 그룹의 인터페이스의 상세 내역을 명시하는 것과 관련
    • 객체 또는 객체 그룹에 의해 제공되는 서비스들의 시그니처와 의미를 정의하는 것과 의미

  • 클래스 다이어그램과 동일한 표기법을 사용하여 UML에서 명시 가능




인터페이스 설계

  • 데이터 표현의 세부사항을 포함 X
    • 데이터는 인터페이스 명세에 정의되지 않음
    • 데이터 오퍼레이션은 포함

  • 데이터 표현이 숨겨져 있음
    • 데이터를 사용하는 객체에 영향 X, 데이터 표현 쉽게 변경 가능
    • 유지보수하기 쉬운 설계로 이어짐

  • 동일한 객체가 여러 개의 인터페이스를 가질 수 있음

 


인터페이스 설계 예시

  • 기상 관측소에 정의될 수 있는 인터페이스
    예시
    • Reporting 인터페이스
      • 기상 보고와 상태 보고를 생성하는 데 사용되는 오퍼레이션 이름을 정의

    • Remote Control 인터페이스
      • WeatehrStation 객체의 단일 메서드에 대응되는 4개의 오퍼레이션 제공
        인터페이스