본문 바로가기

23년 2학기 학교공부/소프트웨어공학

[SE] 동적 모델링 : 시퀀스, 상태, 활동 다이어그램

728x90
반응형
SMALL
2023학년도 2학기 충남대학교 김현수 교수님의 소프트웨어공학 수업 정리자료입니다.

 

 

 

 

📁 동적모델링

 

동적모델링이란, 유스케이스로 표현한 시스템의 기능을 만족시키기 위해 시스템 내부의 구성요소들이 어떻게 상호작용하는지를 나타내는 모델링을 말한다.

 

시스템의 전반적인 부분보다는 가장 복잡하다고 판단되는 일부분을 동적 다이어그램으로 만든다.

 

일반적으로 동적모델을 표현할 때 UML 다이어그램을 사용하며, 동적 모델의 종류에는 시퀀스 다이어그램, 상태 다이어그램, 액티비티 다이어그램이 있다.

  • 액티비티 다이어그램과 상태 다이어그램은 구현을 올바르게 하도록 도와준다.
  • 동일한 이벤트에도 다양한 조건에 따라 인스턴스들이 다르게 반응할 때는 상태 다이어그램이 적합하다.

 

 

 

 

 

🌱 시퀀스 다이어그램

시퀀스 다이어그램은 시스템의 동적인 행위를 모델링하고자 할때 사용하여, 시스템의 동작 과정을 시각화하는데 도움을 준다.

 

유스케이스 다이어그램을 기반으로 작성되어, 유스케이스의 각 task를 수행하기 위해 객체들이 메시지를 교환하는 순서를 보여준다.

 

 

 

 

예를 들어 아래 클래스 다이어그램을 다음과 같이 시퀀스 다이어그램으로 만들 수 있다.

 

 

 

 

 

🌙 시퀀스 다이어그램 구성 요소

1) 객체(클래스의 인스턴스) : 박스 안에 클래스 이름과 객체 식별자를 명시하고 밑줄 쳐 표기한다.

2) 액터 : 유스케이스 다이어그램에 그려진 막대 인간 심볼을 사용한다.

3) 메시지 : 액터에서 객체로, 객체에서 객체로 이동하는 화살표로 표시한다.

 

 

  • 객체는 다이어그램에 수평으로 정렬시킨다.
  • 상호작용을 구동하는 액터는 왼쪽에 표시한다.
  • 수직 축은 시간의 흐름을 나타낸다.
  • 객체마다 라이프라인이라고 불리는 수직 점선을 붙인다.
  • 객체의 활성화를 표현하기 위해 lifeline 위에 수직 얇은 사각형을 표시하며, 이를 activation box라고 부른다.
  • 메시지는 송신자와 수신자의 activation box 사이에 화살표로 표시하고, 메시지 이름과 매개변수를 나타내는 레이블을 붙인다.
  • 객체가 소멸되는 경우, 라이프라인이 중지되며 'X'로 표시한다.

 

 

 

 

🌙 combined fragments와 oprators

 

시퀀스 다이어그램에서 [ ] 괄호 안의 내용은 해당 메세지에 대해 조건을 명시하며, guard(가드)라고 부른다.

 

가드는 하나의 메세지에 적용할 수도 있고, 범위를 지정하여 적용할 수도 있는데, 이때 범위를 지정하여 조건을 명시하는 부분을 fragment(프래그먼트)라고 부른다. 위 다이어그램에서 combined fragment라고 표시된 네모박스 부분에 해당한다.

 

fragment 내부에 점선으로 분리된 operand는 guard에 따라 실행될 수 있는 경우들을 나타낸다.

 

fragment의 종류에는 대안(alt), 옵션(opt), 반복(loop) 등이 있다.

 

 

 

 

🌙 opt와 alt

alt는 else if문과 같이 대안이 존재하는 다중 조건문을 나타낼때 사용하고,

opt는 if문이나 switch문처럼 단일 조건문을 나타낼 때 사용한다.

 

 

 

opt와 alt를 사용하는 예시를 살펴보자.

 

 

 

 

 

🌙 Iteration with loop and break

loop는 for문이나 while문처럼 반복을 나타낼 때 사용한다.

break는 자신이 포함되어있는 fragment 도중에 break하거나 예외상황을 나타낼 때 사용한다. break문에도 guard가 존재하며, 해당 guard 조건의 결과가 false인 경우에는 break를 하지 않고 무시한다.

 

 

loop와 break를 사용하는 예시를 살펴보자.

 

 

 

 

 

🌱 상태 다이어그램

 

상태 다이어그램이란 시스템 전체, 시스템의 일부, 클래스 및 개별 객체의 동적인 측면을 표현할 목적으로 작성하는 다이어그램으로, 하나의 객체가 다른 객체와의 상호작용에 따라 어떻게 상태가 변화하는지를 표현한다. 

 

  • 주어진 시점에 시스템이 어떤 상태에 있다는 것은 발생 이벤트에 대응하여 특정한 방법으로 동작한다는 것을 의미한다.
  • 어떤 이벤트는 시스템의 상태를 변화시키고, 어떤 상태에서 이벤트에 대해 시스템은 여러 방법으로 작동한다.

 

 

상태 다이어그램은 상태와 트랜지션으로 구성된다.

 

 

 

 

🌙 상태(State)

상태 다이어그램에서 상태는 노드로 표현된다.

 

주어진 시점에 시스템은 어떤 한 상태에 있고, 이벤트가 발생하여 상태를 변화시키기 전까지는 그 상태에 계속 머물러있다.

 

일반적인 상태는 둥근 사각형 안에 상태 이름을 표시하여 나타내며, 특수 상태인 시작상태와 종료상태는 각각 검은 원과 원으로 둘러싼 검은 원으로 표시한다.

 

 

 

 

🌙 트랜지션(transition)

이벤트가 발생함으로써 일어나는 상태의 변화를 트랜지션(transition)이라고 하며, 트랜지션은 이벤트가 발생하는 즉시 동작(spontaneous)하는 것이 원칙이다.

 

트랜지션은 아크(arc), 즉 화살표로 표시하며, 상태 변화를 일으키는 이벤트를 함께 표시한다.

 

트랜지션의 종류에는 경과 시간 표시 트랜지션과 조건 표시 트랜지션이 있다.

 

 

 

1. 경과 시간 표시 트랜지션

 

해당 트랜지션의 이벤트가 즉시 발생하는 것이 아니라 일정 시간 경과 후에 발생하는 이벤트인 경우를 나타낸다.

 

예를 들면 신호등 클래스 인스턴스의 행위가 있다.

 

 

 

2. 조건 표시 트랜지션

 

 

 

해당 트랜지션의 이벤트가 조건(boolean operator)이며, 이 조건이 만족될 때 일어나는 트랜지션을 말한다.

 

예를 들면 Course Section 클래스 인스턴스의 행위가 있다.

 

 

 

 

 

🌙 액티비티(activity)

시스템이 어떤 상태에 있을 때 수행하는 행위를 액티비티(activity) 라고 하며, 일정 시간이 소요된다.

 

액티비티가 완료되면 어떤 상태에서 빠져나오는 트랜지션이 발생.

액티비티의 인터럽트란, 액티비티가 완료되기 이전에 다른 트랜지션이 먼저 트리거될 경우 발생한다. 이땐 액티비티를 중단하고 그 상태에서 빠져나온다.

 

상태를 나타내는 둥근 사각형 내부에 사각형 박스로 표시한다.

박스 내에는 "do: ~"의 형태로 표시하며, 상태에 진입했을 때 무엇을 수행할 것인지를 표현한다.

예를 들어 주크박스(jukebox)의 상태 다이어그램이있다.

 

 

 

 

🌙 액션(action)

시간 경과 없이 즉시 일어날 수 있는 동작을 액션(action)이라고 하며, 감지할 수 없을 만큼의 적은 시간이 소요된다.

 

액션이 발생할 수 있는 시점은 특정 트랜지션이 이루어질때, 특정 상태로 진입할 때, 특정 상태에서 빠져나올때가 있다.

 

 

 

특정 상태로 진입할 때 혹은 빠져나올때 발생하는 액션은 "Enter / action" 또는 "Exit / action"의 형태로 표시한다.

 

예를 들어 다음과 같은 주차장 문 개폐기의 상태 다이어그램에서 enter action과 exit action을 확인할 수 있다.

 

 

 

특정 트랜지션이 이루어질때, 즉 어떤 상태로 전이될 때 발생하는 액션은 트랜지션의 위에서 "event / action" 의 형태로 표시한다.

 

예를 들어 다음과 같은 카세트의 상태 다이어그램에서 event / action을 확인할 수 있다.

 

 

 

 

 

🌙 서브상태(substate)

상태 다이어그램이 상태 안에 내장될 수 있는데, 이렇게 내장된 내부의 상태를 서브상태(substate)라고 한다. 

 

 

 

예를 들어 자동 기어의 상태 다이어그램을 보자.

최상위층에는 neutral, reverse, drive 세 개의 상태가 존재하고,

drive 상태 내에는 first, second, third 세 개의 서브 상태가 존재한다.

만족될 경우 시스템이 표시된 이벤트에 반응하는 조건은 시퀀스 다이어그램과 같이 guard로 표현하며, 위에서는 [driveSelected]라고 표현되었다.

 

 

또다른 서브상태의 예시는 다음과 같다.

 

 

 

 

 

🌱 액티비티 다이어그램

액티비티 다이어그램이란 객체나 컴포넌트가 수행하는 작업의 흐름을 표현하기 위해 작성하는 다이어그램이다.

 

상태 다이어그램과 유사하나, 대부분의 트랜지션이 내부 이벤트(계산 종료)에 의해 이루어진다는 점이 다르다.

 

 

액티비티 다이어그램은 객체나 컴포넌트가 수행하는 작업의 흐름을 이해하고, 다른 유스케이스 사이의 관계나 상호작용을 가시화하기 위해 사용한다. 하나의 다이어그램은 대부분 여러개의 클래스와 관련되며, 병행 액티비티를 표현할 수 있다는 강점이 있다.

 

 

 

 

 

🌙 액티비티 다이어그램의 구성요소

1) 시작점 : 검은 점으로 표현한다.

2) 종료점 : 원으로 둘러쌓인 검은 점으로 표현한다.

3) activity : 모서리가 둥근 사각형으로 표현한다.

4) transitions(전이) : 가드 컨디션, 전송-절, 액션 표현을 함께 표현하는 화살표로 표시한다. 상태 다이어그램과 동일한 문법을 사용하는데, 상태 다이어그램에서는 이벤트만을 나타냈었다.

5) decision point : 다이아몬드 심볼로 표현한다. 하나 이상의 진입 트랜지션이 존재하고, 두 개 이상의 진출 트랜지션이 존재한다.

 

 

 

액티비티 다이어그램의 예시는 다음과 같다.

 

 

 

🌙 병행 처리

병행 처리는 Fork, Rendezous, Join, swimlane을 사용하여 표현한다.

 

1) Fork

단일 입력 트랜지션과 다수 출력 트랜지션을 가진다.

실행 경로가 두 개의 병행 쓰레드로 분할된다.

 

2) Rendezvous

다수의 입력 트랜지션과 다수의 출력 트랜지션을 가진다.

모든 입력 트랜지션이 트리거되면 모든 출력 트랜지션이 이루어진다.

 

3) Join

다수의 입력 트랜지션과 단일 출력 트랜지션을 가진다.

모든 입력 트랜지션이 수행된 후 출력 트랜지션이 발생한다.

입력 트랜지션은 분리된 쓰레드에 의해 트리거된다.

먼저 수행된 입력 트랜지션은 다른 입력 트랜지션이 수행될 때까지 기다린다.

 

4) Swimlane

액티비티 다이어그램은 대체로 여러개의 클래스와 관련되는데, 이때 같은 swimlane 안에 있는 액티비티들은 동일한 클래스와 관련되어 있음을 나타낸다.

다이어그램을 나누는 수직선으로 표현한다.

 

 

위 예시들에서 두 개의 굵은 수평선을 보자.

 

첫번째 수평선은 단일 입력 트랜지션과 다수 출력 트랜지션을 가진 Fork Node를 나타내고,

두번째 수평선은 다수 입력 트랜지션과 단일 출력 트랜지션을 가진 Join Node를 나타낸다.

 

이때 오른쪽의 경우는 Student와 CourseSection으로 Swimlane을 이용하여 나누어져있다.

 

 

 

 

📝 Example : The CourseSection class

1. Class Diagram

 

 

2. Sequence diagram

 

 

 

 

 

 

📁 동적 모델링 프로세스

나중에 ...

 

1. 시스템 상호작용에 대한 시나리오 준비

2. 시나리오의 이벤트 식별

3. 시나리오 별 시퀀스 다이어그램 작성

4. 이벤트 및 상태를 상태 다이어그램으로 구성

5. 완전성 및 일관성을 위해 상태 다이어그램 검토

 

 

1. 시스템 상호작용에 대한 시나리오 준비

시나리오란 특정한 목표를 달성하기 위해 수행되는 일련의 행동을 말한다.

유스케이스는 주어진 기능에 대해 가능한 모든 시나리오의 집합을 정의한다. 즉 시나리오는 유스케이스의 한 예시이다.

그러므로 상호작용 시나리오를 준비할 때는 유스케이스 모델링의 결과를 사용한다.

 

 

2. 시나리오의 이벤트 식별

시나리오는 이벤트의 연속이다.

이벤트란 시스템 내 객체 간의 정보를 교환하며, 전달된 매개변수는 이벤트의 속성(attributes)를 말한다.

이때 신호 이벤트(signal event)는 매개변수를 갖지 않고, 단지 이벤트가 발생했음을 알린다.

내부 계산(internal computation)은 무시해라!

 

시나리오의 이벤트를 식별하기 위해서는 외부 이벤트에 대해 각 시나리오를 점검하는 것 부터 시작한다.

사용자 및 기타 외부 장치와의 상호 작용을 확인하고,

외부와 상호작용하는 내부 의사결정 지점을 포착한 뒤,

모든 객체와 객체 간 상호작용을 식별한다.

 

이벤트 매개 변수 및 제어 흐름에 대한 영향을 기반으로, 매개 변수 값이 다르더라도 이벤트를 이벤트클래스로 그룹화한다.

 

일부 이벤트는 객체 동작에 영향을 미치지 않을 수 있으며, 그럴 경우에는 무시할 수 있다.

 

이벤트를 보내고 받는 객체에 이벤트를 할당한다.

어떤 이벤트는 객체에 대한 입력과 출력 모두일 수 있다.

 

 

 

3. 시퀀스 다이어그램 작성

하나의 순서화된 시나리오를 기반으로 하나의 시퀀스 다이어그램을 작성한다.

다른 객체들은 다이어그램에서 다른 열에 할당한다.

 

예를 들어 self-service gasoline pump 예시를 보자.

시나리오는 다음과 같다.

Pump asks customer to select method of payment; customer selects “credit” • Pump asks customer to insert card • Customer slides card through card reader; pump reads card • Pump verifies card account with Corporate Credit; CC notifies pump “OK” • Pump asks customer to select grade; customer selects “Plus” • Pump activates “Plus” valve • Pump tells customer “Pump On”

• Customer removes nozzle • Pump displays initial unit cost, total cost, gallons dispensed • Customer depresses nozzle and pumps gas; pump updates display • Customer releases nozzle and replaces nozzle on pump • Pump disables valve and tells customer “Pump Off; Receipt Printing” • Pump prints receipt • Pump tells customer to take receipt; customer removes receipt • Pump asks customer to select method of payment

 

시퀀스 모델링은 아래와 같다.

 

 

 

4. 상태 다이어그램 작성

 

 

 

728x90
반응형
LIST