Как рассмотреть все возможные сочетания во времени случайных событий?
Какие используют диаграммы или может иные методики для описания логики во времени, чтобы не упустить ни одного возможного сочетания событий?
В линейной логике if-else – дерево вариантов, все ветки очевидны. Несложные асинхронные процессы описывал UML-диаграммой. Всё неплохо, пока нет ветвления. Но заметно усложняется диаграмма с появлением новых условий, и есть риск упустить какой-то из сценариев.
Выдуманный пример: три независимых источника событий A, B и C. Каждый рандомно выпускает события то редко, то может вдруг кучно.
Механизм X должен запускаться по первому событию А, если до этого не было запусков в течение N секунд, или не было ещё K событий A. В то же время 10 событий B в окне M секунд отменяют все запуски механизма X на следующие L секунд. Однако группа из (5 событий C, паузы S секунд и ещё 5 событий C) даёт зелёный свет на запуск X безо всяких ограничений в течение P секунд. (Не стал усложнять пример кросс-взаимодействиями всех трех).
Как можно наглядно изобразить диаграмму такой логики, и как быть уверенным, что тесты исчерпывающе проверяют работу?
Выглядит как набор правил с приоритетами. Собственно можно определить правила как управляющиеся сигналами блоки, и расположить их в порядке приоритета действия. Что-то на подобии правил файервола - выход (или запуск) по первому подходящему правилу.
Пишете простой скрипт, в котором описываете все ваши условия и который на выходе выдаст все возможные связи и зависимости событий и элементов в виде какого-то формата. Ну и далее создаёте граф/диаграмму в виде картинки любой тулзой - например, через тот же UML или какой-нибудь mermaid.