소프트웨어 공학 CH. 6 디자인과 구현

Alpha, Orderly·2023년 5월 17일
0

소프트웨어 공학

목록 보기
7/9

Design and Implementation

  • 소프트웨어 설계 및 구현 활동은 항상 상호 연관되어 있습니다.
  • 시스템을 구매해서 요구사항에 맞게 맞출수도 있습니다.

Object-oriented design using the UML

  • 객체지향 설계기법을 사용 가능

예시

  • Define the context and modes of use of the system
    • 우리의 시스템이 할 것과 하지 않을 것에 대한 경계를 정의함.
  • Design the system architecture
    • 우리가 해야 할 것과 다른 것들의 상호작용을 시스템레벨에서 정의함
  • Identify the principal system objects
    • 시스템의 내부에 구성요소를 정의함
    • 아래 두 과정에서 내부, 외부에서의 상호작용을 정의함
  • Develop design models
  • Specify object interfaces

System context and Interaction

  • 시스템의 경게를 정의하고, System context 즉 시스템의 상호작용을 구조화한다.

Interaction model

  • 상호작용을 그림으로 표현 Ex. 유즈케이스



Approaches to identification

  • scenario-based analysis
    • 누가 누구에게 어떤 행동을 하는지가 들어난다. 시퀀스 차트를 만들어 보면 시스템의 행동과 관계 같은 것들을 구현해 낼 수 있다.

예시

  • 센서들을 추출해서 각각에 상응하는 객체를 만들 수 있다.
    • weather station -> 외부와의 상호작용을 담당
    • weather data -> 센서에서 받은 데이터를 저장
  • Sequence model – 동적인 행동을 표현
  • State machine model – 바뀌는 상태를 표현

Subsystem model

  • coherent : 응집도 / 일관성
  • coupling : 의존도
  • coherent 는 높이고, coupling 은 줄이는것이 중요하다.

Interface specification

  • Java interface 설계와 유사하다.
  • 객체가 어떤 메소드를 사용할지에 대한 인터페이스를 제공받는것

Design pattern

  • 특정 문제와 답에 대한 추상적 지식을 재사용하는것
  • 다른 현장에서도 사용 가능하게 추상화가 잘 되어 있다.

Observer pattern

  • 객체의 상태와 출력을 분리하는것
  • 객체의 상태가 바뀌었을때 이를 출력에 제때 알리는것이 중요하다.

단점

  • 보편화해서 만들어졌기 때문에 특정적인 것은 개발자의 별도의 개발이 필요하다.
  • 위 경우는 객체가 observer를 가지고 있다.

Implementation issues

Reuse - 재사용

  • 백지상태에서 시작x, 기존에 있는 것을 변경, 변화시키는 방향으로 진행함
  • 초기에는 대부분의 소프트웨어를 새로 짰지만 현재는 누적된 데이터들과 통신이 가능해지면서 이전에 만들어졌던 것들을 공유하여 활용함.

종류

  • abstraction level – 디자인에 대한 재사용
    • 직접적인 재사용이 아닌 지식이나 추상화 단계를 사용
  • object level – 객체를 재사용
    • 직접적으로 라이브러리에서 재사용한다,
  • component level – 컴포넌트 재사용
  • system level – 시스템을 통째로 재사용

비용

  • 큰 시스템의 경우 이것이 내 의도와 일치하는지 확인하는 비용이 든다.
  • 새로 짜는것보다 이게 비쌀수도 있다.

Configuration management

  • 버전관리
    • 소프트웨어 컴포넌트의 버전을 트래킹하는것입니다.
  • 시스템 통합
    • 개발자가 구성 요소 버전을 정의하고, 필요한 구성 요소를 컴파일하고 연결하여 시스템을 자동으로 컴파일및 연결하여 시스템을 자동으로 구축하는 데 사용됩니다.
  • Problem tracking
    • 모든 유저들에게 버그를 알리고 언제 누가 고칠지 알수있게 모두에게 알린다.

Host-target development

  • 하나의 호스트에서 여러 타겟을 위한 프로그램을 개발한다.
  • 컴포넌트가 특정 하드웨어에서만 동작 가능할시, 거기에만 배포가 가능하다.
  • 고가용성 시스템의 경우 하나 이상의 플랫폼에 배포될수 있는것을 의미한다.
  • 컴포넌트간 트래픽이 많을경우 같은 플랫폼에 배포하는것이 일반적이다.

GPL

  • 오픈소스

LGPL

  • 소스코드 배포 미필요

BSD

  • 그냥 사용가능
profile
만능 컴덕후 겸 번지 팬

0개의 댓글