소프트웨어공학

[소프트웨어공학] Design and Implementation

gyujh 2023. 12. 17. 21:59

Design and Implementation

  • 둘은 서로 밀접히 연관되어 있음
  • 설계는 창의적 활동, 구현은 설계를 하나의 형태로 만드는 것

 

Commercial-off-the-shelf(COTS)

  • 구축보다 구매가 더 나을 수 있다.
  • 예를 들어 의료 기록 시스템을 개발하고자 한다면, 병원에서 사용하는 시스템 패키지를 구매하는 게 더 효율적일 수 있다.

 

An object-oriented design process

객체지향 개발 방법론은 굉장히 넓고 방대한 과정을 포함하기에 간단한 시스템이나 agile 경우 일부만 추출해 사용하는 것이 좋다.

Process Stage

  • Define the context and modes of use of the system - use case, table 이용
  • Design the system architecture - use case를 보고 내외부 상호작용을 구현 관점에서 고민
  • Identify the principal system objects - 시스템의 내부를 구성할 시스템 객체를 정의
  • Develop design models - 서브시스템(정적), 시퀀스모델(동적), 상태머신(동적) 등 사용할 수 있다.
  • Specify object interfaces - 오브젝트와 외부와의 상호관계..

객체 식별하기

  • 마법의 공식은 없다. 시스템 설계자의 도메인 지식과 경험에 의존
  • 반복적 프로세스이다.
  • 하드웨어가 있다면 거기 집결된 데이터를 객체화
  • 시나리오에서, 행동 기반 객체화
  • 행동의 양식을 객체화 

 

디자인 모델의 종류

정적 모델

객체 클래스와 관계 측면에서 시스템의 정적 구조 설명

동적 모델

객체 사이의 동적 상호작용 설명

 

Interface Specification

  • 객체 인터페이스가 지정되어야 함 (객체와 기타 구성 요소의 병렬 설계를 위해)
  • Component interface는 객체를 사용할 수 있도록 정확히 지정되어 있어야 함
  • 인터페이스의 데이터 표현을 디자인하는 걸 피해야하고 이를 객체 자체에서 숨겨야함
  • 숨김으로써 본질적으로 유지보수가 용이해지는 설계가 된다.. 데이터 표현이 숨겨져 있어서 

 

디자인 패턴

  • inheritance and polymorphism : 객체지향의 특징을 가짐
  • 설계 과정에 패턴이 있다. 이를 기록하고 공유하여 발전된 설계 방식을 가지자
  • 고민이 줄어들고 해결할 특정 부분에 집중할 수 있다 -> 생산성 증가
  • 생각하지 못했던 부분에 대해 정보를 얻을 수 있다.
  • 검증된 방법을 참조하여 나의 소프트웨어의 신뢰성과 안정성 증가
  • 패턴 별로 장단점이 존재하고, 동일한 문제에 대해 여러 패턴이 존재할 수 있음. 따라 알맞는 패턴을 선택하는 것이 중요

 

패턴의 구성 요소

  • name: 의미있는 패턴 식별
  • problem description: 문제/분야에 대한 설명
  • solution description: 패턴 동작 방식, 적용 방식, 설계 모양 등 설명.. 다양한 방법으로 인스턴스화 할 수 있는 템플릿 같은 것
  • consequences: 결과, 그리고 나타날 수 있는 Trade-Off에 대한 설명

 

Opserver Pattern

  • name: Observer
  • description: object state(data)와 display(view)의 분리
  • problem description: multiple displays of state가 필요할 때 사용
  • solution description: UML(아래 그림)
  • consequences: 디스플레이 성능을 향상시키기 위한 최적화는 실용적이지 않다. ?

   

 

[디자인패턴] 옵저버 패턴 (Observer Pattern) 아주 간단하게 정리해보기

옵저버 패턴이란? 옵저버란 스타크래프트 프로토스의 유닛으로 적들을 관찰하기 위해 탄생한 유닛이다. 테란전에서 필수 유닛이며 옵저버 패턴(observer pattern)은 객체의 상태 변화를 관찰하는 관

pjh3749.tistory.com

 

Implementation issues

Reuse

재사용이 중요해지는 추세다.

Reuse level

  • the abstraction level : 해당 분야의 성공적인 아이디어를 차용한다. (아키텍처, 디자인)
  • the object level : function, class를 공유하는 레벨
  • the componenet level : 클래스’들’을 공유하는 레벨
  • the system level : 전체 어플리케이션을 공유하는 레벨(COTS)

Reuse cost

  • 재사용할 소프트웨어를 찾고 사용자의 요구를 충족하는지 여부를 평가하는 데 소요되는 시간 비용
  • 해당되는 경우 재사용 가능한 소프트웨어를 구입하는 비용이 든다.
  • 대규모 기성 시스템의 경우 이러한 비용이 매우 높을 수 있음
  • 새 시스템의 요구 사항을 반영하기 위해, 재사용하는 소프트웨어의 구성 요소나 시스템을 재구성, 조정하는 비용
  • 재사용 가능한 소프트웨어 요소들을 통합하는 데 드는 비용 + 개발한 새 코드를 사용하는 데 드는 비용.

Configuration management

  • 소프트웨어가 굉장히 많은 소스파일로 이뤄질 텐데, 이들의 버전을 어떻게 관리할 건지를 고민해야 한다.
  • System integration을 고려해서, 버전을 맞춰서 관리해야 한다.
  • 버그 tracking과 reporting

Host-target development

  • 특정한 운영환경이나 하드웨어를 사용할 때, 개발환경과 다른 경우가 있다.

 

Open Source

  • 가장 잘 알려진, Linux 운영체제, java, mysql, apache..
  • 재사용 여부와 개발환경 구축할 때 Open Source를 고려할 수 있다. Open Source business로 오픈소스 기술지원이 있다.
  • 오픈소스를 사용할 때, 오픈 소스 라이선스를 잘 살펴보고, 의무사항 수행 여부 등을 확인해야 한다.
  • 시간이 지났을 때의 유지보수가 되는지 여부를 따져봐야 한다.
  • 오픈 소스에 대한 교육과 기여가 필요하다.

GPL : 사용하면 사용한 것도 모두 공개해야 한다.
LGPL : 소스코드는 바이너리 형태로 저장되어 있는데 링킹하여 통신하여 기능만 활용할때는 공개하지 않아도 된다.
BSD : 모두 공개되어 있지만 고지의무가 있다.

 

 

 

소프트웨어공학 강의자료와 타 블로그를 참고해 정리한 내용입니다.

 

Software Engineering – Design and Implementation

Software Engineering –Design and Implementation

velog.io