본문 바로가기

ComputerScience/Software Engineering

소프트웨어공학 - 10. UML Sequence diagram

728x90

1. Interaction Diagram

- 특정 상황의 interaction 시나리오를 표현하는데 주로 사용된다.

- actor와 시스템, 시스템을 구성하는 서로 다른 파트들 간의 interaction을 묘사한다. 혹은 여러 process간의 소통도 묘사할 수 있을 것이다.

- 수평축 : object들 나열하는 축

- 수직축 : 시간축

- interaction diagram의 구성요소들에 대해 자세히 알아보자.

2. Interaction Partners

- 상호작용 객체들은 lifeline을 그린다.

- lifeline은 header, body로 구성된다.

- 직사각형 안에 Role이름, 클래스이름, role이름:class이름을 적을 수 있다.

- (d) 여러 partners는 배열로 표현할 수 있다.

- (e) partner가 독립된 쓰레드를 갖는 경우

- (f) 시스템 당사자를 다른 클래스와 구별해서 사용해야 할 때

3. Exchanging Messages

- 상호작용을 위해 주고 받는 이벤트 메시지이다.

- 경우에 따라서는 두꺼운 선을 생략하고 점선으로만 표현할 수도 있다.

- 메시지의 순서는 당연히 시간축에 따라 정렬된다. 

- 하지만 서로 구별되어 있는 독립적인 lifeline의 경우 (오른쪽 위 예시) a->c, c->a 모두 가능하다.

- synchronous message, 동기 메시지, 이벤트를 보낸 sender는 response가 올때까지 기다린다.

- asynchronous message, 비동기 메시지, 이벤트를 보낸 sender는 메시지를 보내고 자기 할 일을 이어서 한다

- response 메시지는 점선으로 표현한다. (보통은 생략하는 경우가 많다)

- 새로운 object가 시나리오 중간에 생성되고 소멸되는 것을 나타내는 방법이다.

- 메시지를 받았는데 누가 보냈는지 모르겠거나 중요하지 않을때 표현하는 방법이다.

- 반대로 patner가 누군가에게 메시지를 보냈는데 누가 받는지 중요하지 않거나 표현하기 어렵거나 모르는 경우 표현하는 방법이다 (ex. broad cast)

- 보통 transmission에 걸리는 시간은 없다고 가정한다. 하지만 이 duration을 표현할 필요가 있는 경우는 이렇게 나타낼 수 있다.

4. Frames

- sequence diagram을 감싸는 큰 사각형을 말한다.

- 특정 Operation 이름을 붙인다.

- 이 그림은 delete 메서드의 Operation을 나타내고 있다.

- delete 메서드를 포함하고 있는 객체 자기 자신을 self라고 나타내고 있고 그 클래스 이름은 Order이다

- 이렇게 operation이 필요로하는 매개변수(parameter)나 지역변수(local attributes)를 표현할 수도 있다.

5. Combined Fragments

- combine fragment alt와 loop의 모습이다. 총 12개를 알아볼 것이다.

1) ALT, 2) OPT

- alt는 switch문과 유사하다. 위 예시에서는 status가 ok, wl, else인 세 가지 경우를 점선으로 구분해서 표현하고 있다.

- opt는 if () {} 문과 비슷하다. register on WL == true인 경우 분기를 나타낸다. (else파트는 없는 경우)

3) LOOP

- 반복 시나리오를 위해 사용한다.

- guard는 종료조건이다. 하지만 loop가 min만큼 도는 동안은 guard를 따지지 않는다. 즉 min이 보장되고나서 guard를 통한 탈출이 이루어질 수 있다.

- 위의 예시에서는 최소 한번 loop를 수행하고 나서 a<1이 될때까지 loop가 반복된다.

4) BREAK

- 조건에 해당하는 경우(예시에서는 a<1인 경우) break fragment가 수행된다. 

- 단 opt와의 차이점은 break fragment종료 후 d를 수행하지 않고 seq fragment를 벗어나서 e를 수행한다.

- 즉 부모 clause를 탈출하고 다음 동작을 수행한다.

 

- 만약 조건에 해당하지 않는 경우 a -> d -> e 순으로 동작이 수행될 수 있다.

- 총 세번 login을 수행할 수 있다. 최소 1번 루프는 실행되고 그 이후 부터 incorrect password인 경우 루프를 최대 세번까지 반복하게 된다.

- 3번의 루프가 끝나고 여전히 incorrect password상태인 경우 break fragment로 들어간다. break의 부모 clause는 sequence diagram 전체이기 때문에 register 메시지를 보내는 단계를 건너 뛴다.

- 반면 3번의 루프이내 correct password라면 break문을 건너 뛰고 register가 수행된다.

- seq안에서 no free place의 경우 break fragment가 수행되고 종료시 examine()을 건너 뛰고 info()로 흐름이 넘어간다.

7. Concurrency and order : Combined Fragments

1) SEQ

- sequence fragment는 기본으로 탑재되는 fragment이다. 따로 표시가 안되어 있으면 모두 seq fragment이다.

- weak sequencing : 위 그림처럼 서로 다른 lifeline에서의 메시지들의 순서는 자유롭다. 단 하나의 lifeline에서의 메시지들의 경우 순서는 시간축을 따른다. T01, T02, T03 모두 가능한 경우이다.

 

- 조건1. a 다음에는 b가 와야 한다.

- 조건2. a 다음에는 d가 와야 한다.

- 조건3. c 다음 d 다음 e가 와야 한다.

- 조건4. c 다음 e가 와야 한다.

- 이 네가지 조건만 만족한다면 어떤 trace도 가능하다.

- 이번에는 operand로 나뉘어진 경우를 살펴보자.

- 하나의 lifeline에서 서로 다른 Operand는 순서가 정렬된다. bing검색 다음에 yahoo검색이 가능하다.

- 하지만 서로 다른 operand에서 서로 다른 lifeline에 대한 동작들이라면 순서는 자유롭다.

- {google} -> {bing->yahoo} 또는 {bing->yahoo} -> {google} 또는 {bing-> google -> yahoo}  모두 가능하다.

2) STRICT

- 서로 다른 operand들끼리의 순서도 엄격히 제약하고자 할때 strict fragment를 사용한다.

- 만약 일반 seq fragment였다면 가능했던 세 가지 경우는 여기서는 불가능하다.

- 하지만 strict fragment라고해서 반드시 한가지 trace만 가능한 것은 아니다.

- strict fragment에서 점선으로 나뉜 두 operand는 어쨌든 각각 seq fragment들이고 각 seq fragment안에서의 가능한 Trace는 얼마든지 있을 수 있다.

- { a-> b} 다음에 반드시 {c,d,e조합}만 나오면 된다.

- 반드시 register이후에 print가 수행된다.

- 반드시 google->bing->ask 순서로 검색을 수행한다.

3) PAR

- 분리된 두 Operand에서는 {a->b}, {c->d->e} 가 반드시 보장된다.

- 하지만 두 operand(seq)들은 얼마든지 서로 섞일 수 있다. {c->d->e} -> {a->b} 나  {a -> c-> d -> b ->e} 처럼 얼마든지 섞을 수 있다.

- 즉 각 seq안에서의 order만 보장되면 된다.

- google, bing, ask 아무데나 자유롭게 순서에 상관없이 search할 수 있다. 심지어 동시에 수행할 수도 있다.

- 동일한 lifeline이지만 par기 때문에 operand끼리의 순서는 자유롭다.

4) CRITICAL

- critical section은 오직 하나의 프로세스 혹은 쓰레드만 진입한 상태를 보장해야 하는 구역을 말한다.

- atomic area라고도 한다.

- 위 예시는 par이기 때문에 두 operand는 병렬적으로 수행되거나 순서가 엇갈려도 된다.

- 하지만 critical section은 atomic area이기 때문에 {c->d} 사이에 다른 메시지가 끼어들 수 없다. 

- 참고로 두번째 operand는 critical section -> e 는 보장되어야 한다. 단 par기 때문에 그 사이에 어떤 다른 operand의 메시지도 끼어들 수 있다.

- 이런 경우라면 c->d, d->c 모두 가능하다. 하지만 여전히 그 사이에는 어떤 메시지도 개입할 수 없다.

- 두 operand의 순서는 자유롭다 단 critical사이에는 어떤 메시지도 끼어들 수 없다.

8. Filters and assertions : Combined Fragments

1) Ignore 2) Consider

- fragment에서 발생하는 메시지 중에서 크게 중요하지 않은 메시지는 ignore {이름}라고 표기할 수 있다.

- 반대로 fragment에서 발생하는 메시지 중에 눈여겨 보아야 할 중요한 메시지를 consider{이름}으로 표기할 수 있다.

3) assert

- assert fragment가 담고있는 흐름 외에 다른 메시지가 발생하거나 하면 안된다는 의미이다.

- 등록 -> confirm 외에 다른 시나리오는 발생하면 안된다.

4) neg

- 절대 발생되어서는 안되는 시나리오를 강조하는 fragment이다.

9. Interaction Reference

- 이미 만들어 높은 sequence diagram을 예시처럼 ref, Login으로 담아서 재사용할 수 있다.

10. static method call

- static class에게 보내는 static method call은 이렇게 표현할 수 있다.

- <<metaclass>>를 더해주면 이 클래스가 static class임을 나타낸다.

11. Polymorphic message

- 다형성도 나타낼 수 있다.

- 예를들어 payment 추상클래스를 debitpayment, creditpayment가 상속하고 있다고 하자. 누구의  authorize 메서드를 호출하냐에 따라 총 세가지 경우가 나올 수 있다. 

- 이런 경우는 위처럼 나타낼 수 있다.

12. Asynchronous message

- 화살표 모양을 달리해서 동기, 비동기 콜을 구분할수도 있다.

- clock run은 asynchronous 비동기 메시지로 화살표가 좀 특이하다. 

- 그리고 :Clock은 활동중인 비동기 object임을 나타내기 위해 박스 모양도 좀 다르다.

13. Time Constraints

- 메시지 전송, 수신 시간, duration 제약을 걸 수도 있다.

- {max. 2h}는 해당하는 범위가 최대 2시간 이내에 이루어져야 한다는 뜻이고

- {t+5}는 5초 뒤를 의미한다.

14. State Invariant

- state에 기반한 interaction도 표현이 가능하다.

- 학생이 enrolled된 상태이고 examDate가 오늘부터인 경우 interation이 가능하다는 뜻이다.

- 귀가 접힌 메모지를 활용하여 examDate 이후부터 registration이 가능하다는 뜻을 더 명확하게 전달할 수 있다.

15. Facebook Login example

728x90
반응형