[4+1 view 모델]
: 시스템 규모 커지고 복잡해짐에 따라 개발에 참여하는 사람(이해관계자)이 증가
: 이해관계들의 역할에 따라 적합한 관점을 보여준다.
1) 유스케이스 관점(Usecase View)
: 개발 참여하는 모든 이해관계자가 시스템 이해토록, 요구사항 정의 하는것을 목적
: 모든 개발의 기반
2) 논리 관점(Logical View)
: 유스케이스 다이어그램, 요구사항 기술서에 기능들 프로그래밍 시각으로 변경 관점
: 객체를 추출하고, 객체들의 세부적인 속성과 동작에 대해 정의
3) 프로세스 관점(Process View)
: Integrator가 이해관계자들이 수행한 작업 통합하기 위해 사용
: 시스템 개발 전반의 작업 수행 주체와 작업의 흐름 정의에 중점
4) 개발 관점(Development View)
: 실제 코드를 작성하는 개발자들의 관점
: 시스템이 어떻게 개발되는지에 대해 정의
: 시스템 구현을 위한 요건(계층구조, 제약사항, 코드재사용등)을 정의
5) 물리 관점(Physical View)
: 소프트웨어와 하드웨어의 관계와 결합구조를 정의하기 위한 관점
[클래스 다이어그램(Class Diagram)]
: 클래스(Class)들과 그들의 관계를 나타내는 다이어그램
: 클래스를 식별, 그 관계를 정의
# 클래스 다이어 그램 구성요소와 표기법
1) 클래스(Class)
– 클래스 이름 : 클래스의 고유한 이름
– 특성(속성) : 클래스의 데이터
– 메소드(=함수) : 클래스의 행위적 특징
– 클래스의 특성 표기법
: '+' : public : 자신의 속성이나 동작 외부에 공개
: '-' : private :외부에서 액세스 불가 접근 제어
: '#' : protected : 상속된 하위 클래스만 접근가능
2) 관계(Relationship)
: 클래스간 상호작용을 관계로 표시
# 관계의 종류
- 일반화(Generalization) 관계 : 어떤 클래스의 속성을 물려받아 새로운 클래스를 도출 (= 상속)
- 연관(Association) 관계 : 클래스간 서로 개념적으로 연결된 경우, 실선으로 표현 (서로 의존)
- 직접 연관(Directional association) 관계 : 연관 관계지만 하나의 클래스만 다른 클래스의 행위를 요청하고 사용하는 관계
- 집합(Aggregation) 관계 : 여러개의 독립적인 클래스들이 하나의 클래스를 구성하는 경우
– 다중성(Muliplicity) : 클래스들 간의 간계에서 대응하고 있는 각 클래스들에게 허용되는 객체의 개수 의미
- 1 : 한 객체와 연관 - 0..1 : 0 or 1개의 객체와 연관 - 0..* : 0 or 그이상 객체와 연관 - n - n..m |
[클래스 다이어그램 작성]
: 클래스 다이어그램을 작성하기 위해서는 먼저 어떤 종류의 클래스들이 있고, 그 클래스들이 어떤 역할 하는지 알아야한다.
: 시스템에서 클래스 추출하고, 클래스 구성요소, 클래스간 관계를 정의해 클래스 다이어그램을 작성한다.
# 클래스 타입별 분류
1) 엔티티 클래스(Entity Class)
: 문제영역을 구성하는 컴포넌트들
: 사용사례에서 반복되어 나오는 용어로 명사 추출법을 이용해 추출
2) 경계 클래스(Boundary Class)
: 시스템 외부의 액터와 상호작용하는 클래스
: 사용자 인터페이스 역할
3) 제어 클래스(Control Class)
: 경계와 엔티티 클래스 사이에서 중간 역할
: 경계 클래스가 사용자 요청사항 전달, 제어 클래스는 요청사항 수행 엔티티 클래스 호출
: 시스템의 실질적인 기능 담당 (정보처리, 계산등)
ex) 인터넷 서점 검색 시스템 - 경계 클래스 : 검색화면클래스 - 엔티티 클래스 : 앨범 / 책 / DVD 시스템 구성 요소 - 제어 클래스 : 위 두개 연결 역할 담당 검색 시스템 클래스 |
- 클래스 추출 : 클래스 타입별로 추출 과정 차이 있음
1) 경계 클래스 : 화면 요구사항 참고해 클래스 추출
2) 제어 클래스 : 유스케이스 참고해 클래스 추출 (ex. 검색하다, 장바구니에 담는다)
3) 엔티티 클래스 : ‘명사추출법‘ 이용해 추출
- 명사 추출법 : 요구사항이 적혀있는 한 문단의 시스템 개요에서 명사들을 식별한후 클래스로 적당하지 않은 명사등을 삭제해 엔티티 클래스를 추출하는 방법
1) 문단으로 시스템 개요를 서술 2) 명사들을 식별 3) 문제의 경계 밖에 있는 명사나 추상 명사 제외 4) 클래스 후보 도출 5) 클래스 선정 |
[클래스 다이어그램 예제]
# 시스템 개요
본 시스템은 책, 음반, DVD를 구입할 수 있는 시스템이다. 시스템을 이용해서 상품 목록을 조회할 수 있고, 상품명을 통한 검색을 할 수 있다. 이때, 출력되는 화면에는 종류(책,음반,DVD), 상품명, 가격이 포함된다. 출력된 목록에서 상품을 선택해 구입할 수 있다. |
# 풀이
1. 클래스 추출
1) 엔티티 클래스 : ‘명사 추출법’
(1) 문단으로 시스템 개요 서술
(2) 명사 식별
본 시스템은 책, 음반, DVD를 구입할 수 있는 시스템이다. 시스템을 이용해서 상품 목록을 조회할 수 있고, 상품명을 통한 검색을 할 수 있다. 이때, 출력되는 화면에는 종류(책,음반,DVD), 상품명, 가격이 포함된다. 출력된 목록에서 상품을 선택해 구입할 수 있다. |
(3) 문제의 경계 밖에 있는 명사나 추상명사 제외
시스템, 화면, 종류 |
(4) 엔티티 클래스 후보 도출
책, 음반, DVD, 상품목록, 상품명, 가격, 상품 |
(5) 엔티티 클래스 선정
책, 음반, DVD, 삼품, 상품목록 |
2) 경계 클래스 : 제시된 화면 요구사항에서 추출
3) 제어 클래스 : 유스케이스 다이어그램의 유스케이스 참조
- 상품을 조회한다 => 조회 시스템
- 상품을 검색한다 => 검색 시스템
- 상품을 구입한다 => 구입 시스템
2. 클래스 관계
– 엔티티 클래스 간의 관계
: DVD, 음반, 책은 상품 클래스가 가진 가격, 제품이름등의 특성을 상속
: 상품목록 클래스는 시스템에 등록된 DVD, 음반, 책들의 목록을 가짐
– 경계 클래스와 제어 클래스의 관계
: 경계 클래스인 메인 화면에서 상품조회 버튼을 클릭하는 이벤트 발생시, 조회 시스템 호출
: 검색 버튼을 클릭하는 이벤트 발생시 검색 시스템을 호출
: 상품 선택하고 구입 버튼 클릭 이벤트 발생시 구입 시스템 호출
– 제어 클래스와 엔티티 클래스의 관계
: 제어 클래스 3개는 모두 엔티티 클래스 DVD, 음반, 책 정보 호출
: DVD, 음반 ,책 클래스는 모두 상위 클래스인 상품 클래스의 관계를 상속
: 조회, 검색 시스템은 시스템의 등록된 상품 목록의 정보를 호출
– 전체 클래스 간 관계 나타내기 : 위에서 그린거 합치면 된다.
[시퀀스 다이어그램]
: 객체들 사이에서 시간에 따라 발생하는 상호작용을 보여주는 다이어그램
: 일반적으로 화면 요구사항과 클래스 다이어그램 기반으로 작성
# 시퀀스 다이어그램의 예
[시퀀스 다이어그램 구성요소와 표기법]
# 시퀀스 다이어그램 세부사항
1. 객체(Object) : 메세지를 송수신하는 주체
2. 액터(Actor) : 객체. “객체명 : 클래스명” 형태로 정의 (객체명 생략 가능)
3. 라이프라인(LifeLine) : 전체적 흐름에서 참여하는 액터 or 객체의 생성, 소멸, 활성화될때를 나타내는 선(점선)
4. 활성화(Activation) : 객체가 동작하고 있음을 표현(직사각형)
5. 메세지(Message) : 각 개체를 호출하는 선 / 이 선으로 객체들의 상호작용을 표현 (스스로에게 메세지 전송 가능)
# 메세지 종류와 표기법 : 리턴이 있는 호출은 리턴 받을때까지 다른 동작 안하고 대기
[시퀀스 다이어 그램 예제]
# 개요 : 유스케이스 기술서중 ‘상품을 검색한다’와 화면 요구사항이 다음과 같이 주어진다.
# 풀이
1. 이를 기반으로 클래스 추출
2. 추출된 클래스 다이어 그램으로 시퀀스 다이어그램 작성
# 프래그먼트(Combined Fragment)
: 조건문, 다중 조건문, 반복문을 시퀀스 다이어그램 내에서 알아보기 쉽도록 박스 형태로 나타낸 것
1) alt : 다중 조건문. else if 같이 대안 있는 조건문
2) opt : 단일 조건문. if, switch
3) loop : 반복문. for, while
'기타 > [소프트웨어 공학]' 카테고리의 다른 글
소프트웨어 공학 8, 9강 - 생략 (0) | 2019.10.27 |
---|---|
소프트웨어 공학 7장. 설계 및 구현 (0) | 2019.05.01 |
6.5장. 소프트웨어 공학 중간정리 (0) | 2019.04.22 |
6장. 리스크 관리 (0) | 2019.04.17 |
5장. 프로젝트 계획 및 통제 (0) | 2019.04.10 |