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
'CS > 소프트웨어공학' 카테고리의 다른 글
[소프트웨어공학] Software Testing (1) | 2023.12.17 |
---|---|
[소프트웨어공학] Architectural Design (0) | 2023.12.17 |
[소프트웨어공학] System Modeling (0) | 2023.12.17 |