Как правильно выйти из вложенных состояний в диаграммах состояний UML?

Я новичок в UML и пытаюсь задокументировать процесс разработки программного обеспечения. Я сделал следующую диаграмму с помощью PlantUML:

введите описание изображения здесь

Во внутренних состояниях я хотел бы показать, что после того, как сделаны их соответствующие выпуски (то есть несовершеннолетний / патч), состояние следующего наивысшего уровня должно быть возвращено.

Например, после PatchRelease, Patch должен выйти в EvalStory, То же самое для MinorRelease --> EvalEpic, Как мне это показать? (Ответ, содержащий код PlantUML, не понадобится, но будет неплохо)

[*] --> Major
state Major {
[*] --> CreateEpic
note right : An 'Epic' describes the set of desired\nfeatures the end-user would like to see
CreateEpic --> EvalEpic
EvalEpic --> Minor : unfulfilled
EvalEpic --> MajorRelease : fulfilled
MajorRelease --> [*]

state Minor {
[*] --> CreateStory
CreateStory --> EvalStory
EvalStory --> Patch : unfulfilled
EvalStory --> MinorRelease : fulfilled
MinorRelease --> DeployLive

state Patch {
[*] --> Testing
Testing --> DeployTest
DeployTest --> EvalTest
EvalTest --> Testing : bugs found
EvalTest --> PatchRelease: no bugs found

state Testing {
[*] --> WriteTests
WriteTests --> RunTests

RunTests --> WriteCode: test(s) failed
RunTests  -left-> WriteTests: tests passed
WriteCode --> RunTests
}
Patch --> EvalStory

}
Minor --> EvalEpic

}



}

2 ответа

Решение

Например, после PatchRelease, Patch должен выйти в EvalStory

Это уже происходит, так как это поведение по умолчанию.

После завершения PatchRelease больше некуда идти, поэтому Patch завершает свою работу, а затем вы можете посмотреть на него снова, как если бы внутри Patch не было состояний.

Если вы хотите быть явным, вы можете

  1. добавьте конечное состояние после EvalStory, чтобы читатель знал, что вы действительно хотели закончить, и это не было случайным упущением
  2. использовать состояния входа / выхода; к сожалению, PlantUML не поддерживает эти

вы можете прочитать о состоянии входа / выхода, например, здесь http://www.uml-diagrams.org/state-machine-diagrams.html

Добавьте конечное псевдосостояние после последнего состояния внутри составного состояния.

Например, если вы добавите код

PatchRelease -> [*]

это будет означать, что после завершения PatchRelease также завершается весь Patch, и, таким образом, он может переходить в следующее состояние (то есть EvalStory)

Другие вопросы по тегам