UML 상태차트의 기초
UML 상태차트
1. 계층형 상태 / Hierarchical States
- 계층형으로 중첩된 상태
- 복합상태(composite state) : 다른 상태를 포함하는 상태
- 단순상태(simple state) : 내부구조가 없는 상태
- 직접하위상태(direct substate) : 하위상태가 상위상태에 직접 포함돼 있을 경우
- 추이적 중첩 하위상태(transitively nested substate) : 하위상태가 또 다른 하위상태 안에 포함된 경우
- 모든 상태머신에는 항상 최상위 상태(top state) 존재
- 계층형으로 상태를 분해하는 것은 비헤비어를 공유하고자 만듬, 하위상태는 상위상태와의 차이점만을 정의
- 하위상태는 상위상태에 있는 공용 비헤비어를 쉽게 재사용, 처리할 이벤트를 무시하면 상위수준 상태에서 이를 자동으로 처리
- 복잡함을 완화시키는 강력한 고전 기법인 추상화
2. 비헤비어 상속 / Behavioral Inheritance
- 계층형 상태는 단순히 "다른 의미없이 중첩된 상태머신을 한데 모아놓은 것"이 아니다
- 중첩된 상태 역시 "이벤트가 몇몇 하위상태에 적용되는 것을 그림을 통해 훌륭하게 단순화한 것" 이상이다
- 상태중첩은 하위상태가 상위상태를 비롯한 조상상태로부터 상태 비헤비어를 상속하도록 한다
- 비헤비어 상속은 하위상태와 상위상태의 관계
- 비헤비어 상속은 HSM의 효율적 활용과 비헤비어 재사용에 필수적인것, QP에 초석
3. 직교영역 / Orthogonal Region
- 계층형 상태분해는 exclusive-OR 분해
- AND 분해는 복합상태가 2개 이상의 직교영역을 둘 수 있으며, 이러한 복합상태 안에 있다는 것은 복합상태에 속한 모든 직교영역 안에 동시에 위치한다는 것을 나타낸다는 것을 의미
- 시스템은 비헤비어를 독립적으로 활성화 되는 여러 부분으로 나눌 경우, 직교영역은 상태의 수가 폭발적으로 증가하는 문제를 해결
- 직교영역은 근사적으로 직교할 뿐이며 완전히 독립적이지는 않다
- 따라서 UML 상태차트는 직교영역에 비헤비어를 교환하고 동기화하는 많은 방법을 제공
- 직교영역은 실행의 독립성을 의미하지만, UML 명세는 각 직교영역마다 실행 스레드를 따로 두도록 요구하고 있지는 않다. 오히려 직교영역은 같은 스레드에서 수행되는 경우도 많다
4. 진입액션과 탈출액션 / Entry Action and Exit Action
- 상태의 모든 진입액션과 탈출액션은 그 상태에 들어오고 나가는 방법과는 관계없이 실행 : Moore Automata 처럼 동작
- 생성자와 소멸자처럼 초기화 / 소멸을 할 수 있는 확실한 수단
- 진입액션 : 상태에 들어가면 항상 자동으로 실행, 상태의 동작조건이나 고유성을 결정
5. 전이 실행 시퀀스 / Transition Execution Sequence
- HSM에서는 둘 이상의 상태가 동시에 활성화될 수 있다.
- 상태머신이 복합상태에 내부의 단순상태 안에 있고, 이 복합상태도 역시 상위수준의 복합상태 안에 있는 경우, 직간접적으로 이 단순상태를 포함하고 있는 모든 복합상태는 활성상태가 된다.
- 상태형상 : 몇몇 복합상태는 직교영역을 가지고 있을 것이기 때문에, 현재 활성상태는 실제로 루트에 있는 하나의 최상위 상태부터 최하위에 있는 간단한 상태 여럿으로 이뤄진 트리로 표현, 이런 상태트리를 상태형상
- Exit from to current state
- Action
- Enter to the next state
- 소스상태형상의 탈출액션에서 현재 활성상태에 중첩된 모든 상태를 빠져나와야 하지만, 소스상태와 타겟상태의 최소공통조상에서 빠져나와서는 안된다
6. 내부전이
- 실행할 내부 액션 몇 가지만을 발생시키고, 상태전이를 유발하지 않는 경우
- 진입액션과 탈출액션을 제외하면 내부전이는 자기전이(self transition)와 같다
7. 의사상태 / Pseudostate
- 상태차트는 도식적인 형태로 시작했기 때문에 다이어그램에서 일반적인 상태 말고도 몇몇 노드를 이용하면 다양한 기능을 구현하거나 축약해서 표기하는데 효과적이라는 사실이 입증됐다. 이 노드를 의사상태라 한다
- 시스템이 일시적으로 머무르게 되는 상태머신 그래프의 여러 노드를 아우르는 추상적 개념
- 초기 의사상태 : 검은점으로 표시하며 기본전이의 소스
- 얕은 이력 의사상태 : H 원문자로 표시하며 복합상태가 포함하고 있는 상태 가운데 가장 최근에 활성화된 하위상태를 간략히 나타내는 표기법
- 깊은 이력 의사상태 : H* 원문자로 표시하며 의사상태를 직접 포함하고 있는 복합상태의 최근 상태형상 전체를 나타낸다는 점이 다르다
- 결합 의사상태 : 수직막대로 표기하며 서로 다른 직교영역에 있는 소스 점으로부터 나온 몇 개의 전이를 병합
- 분기 의사상태 : 수직막대로 표기하며 서로 다른 직교영역으로 들어가는 2개 이상의 전이로 나눈다
- 연결 의사상태 : 검은점으로 표기하며 여러 전이를 연결하는 자유로운 용법을 갖고 있는 점
- 선택 의사상태 : 반원이나 마름모로 동적인 조건 분기에 쓰임
8. 정교한 이벤트 처리
- SingleEvent : 특정한 비동기 신호( 신호의 이름 '(' 쉼표로 구분한 매개변수 목록 ')' ), FSM에서도 쓰였고 가장 많이 쓰이는 이벤트
- TimeEvent : 지정한 제한시간의 만료를 모델링, after + 시간의 길이
- CallEvent : 지정한 작업을 동기적으로 호출하라는 요청 작업이름'(' 쉼표로 구분한 매개변수 목록')'
- ChangeEvent : 명시적 불린식이 참일 때 발생하는 이벤트를 모델링 when + 불린식
- 다형성 이벤트 촉발 : 주어진 신호 이벤트가 촉발한 전이는, 원래 이벤트에서 직간접적으로 파생된 하위이벤트로도 촉발할 수 있다
- 이벤트 지연에 관한 구문도 제공
9. 의미와 표기법
- 상태차트는 복잡한 시스템을 그림으로 표현한 형식
- UML상태차트의 표기법은 많은 양의 텍스트 정보를 요하기 때문에 완전히 도식적이지는 않다
- 액션과 가드표현식의 정확한 문법이 UML 명세에 정해지지 않음
- UML 상태차트 표기법이 특정 프로그래밍 언어에 많이 의존한다는 것
10. 상태차트와 플로우차트
- UML명세에서는 상태머신 패키지에 행동 그래프를 포함
- 행동그래프는 개선된 플로우차트
11. 상태차트와 코드자동생성
- 상태차트를 지원하고 현재 출시도 있는 몇 가지 CASE툴
- Statemate and Rhapsody www.ilogix.com
- Rational Suite Development Studio Real-Time www.rational.com
- BetterState www.wrs.com
- Stateflow www.mathworks.com
- VisualState www.iar.com
- ObjectGeode www.telelogic.com
참조문헌 : 실시간 임베디드 퀀텀 프로그래밍 (원서:Pratical Statecharts in C/C++)