Как правильно выйти из вложенных состояний в диаграммах состояний 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 не было состояний.
Если вы хотите быть явным, вы можете
- добавьте конечное состояние после EvalStory, чтобы читатель знал, что вы действительно хотели закончить, и это не было случайным упущением
- использовать состояния входа / выхода; к сожалению, PlantUML не поддерживает эти
вы можете прочитать о состоянии входа / выхода, например, здесь http://www.uml-diagrams.org/state-machine-diagrams.html
Добавьте конечное псевдосостояние после последнего состояния внутри составного состояния.
Например, если вы добавите код
PatchRelease -> [*]
это будет означать, что после завершения PatchRelease также завершается весь Patch, и, таким образом, он может переходить в следующее состояние (то есть EvalStory)