In model-based systems engineering an essential part of the model verification/validation process concerns the dynamic,
closed-loop interactions between the actors and the model (i.e. the executable use-case model or system architecture
model). This interaction is performed via port(s) and associated (logical) interface(s).
With regard to the behavioral description there is an essential difference between the two types of participant:
-
The system behavior is captured through statecharts, depicting the different states of the system and the events
and actions associated with the relevant transitions.
-
The actor behavior is generally captured by means of a protocol state machine.
A protocol state machine does not show system states. It focuses on the communication protocol only. Typically, it
consists of one state, the reactive behavior of which is described via MOORE syntax (i.e. entering state or in state
-> Event[Condition(s)]/Action). Exception: Timeout events. In this case a timeout wait state has to be
added to the actor state machine.
Actor behavior may be active (i.e. the actor initiates system behavior) or reactive (i.e. the actor reacts to a
stimulus from the system). Model each of these as follows. In either case, a pre-condition is that the Actor
ports and interfaces have been defined.
Modeling active Actor behavior
If the actor initiates a trigger, create an external triggering event following the naming convention
A_<MessageName> and add an action representing the message to be sent to the system and the relevant
port. The exact syntax will depend upon the tool in use. For example, a message to the system block
syntax may be:
A_reqOperation1() / OPORT(pUseCase1) -> GEN(reqOperation1());
Modeling reactive Actor behavior
If the actor has to react to an incoming message with a guard condition, return the response via the relevant port
using MOORE syntax. The exact syntax will depend upon the tool in use. For example, a reactive message to
the system block using the Telelogic Rhapsody syntax may be:
reqGetDataX()[ConditionX==true] / Oport(pUseCase)-> GEN(retDataX();
|