Задать вопрос
Ответы пользователя по тегу Проектирование программного обеспечения
  • Как рассмотреть все возможные сочетания во времени случайных событий?

    @WhoMe
    Если я правильно понял пример, то он выглядит довольно линейно.
    Если предположить что X запускается только по событиям А, то логику можно оформить псевдокодом.
    На_Событие_А() {
        if "5 событий C, паузы S секунд и ещё 5 событий C" было меньше P секунда назад {
            X();
        } else if 10 событий B в окне M секунд отменяют было меньше L секунд нада {
            // не запускаем X
        } if (Последний запуск Х был позже 5 сек) или (не было ещё K событий A) {
            Х();
        }
    }


    Графически можно попробовать представить в виде систем переходов.
    680bae0d736a5965525484.png

    Где состояния:
    x_idle - Х не запущен
    x_running - X работает
    x_cooldown - N секунд с запуска X не прошло
    not_yet_K_A - K событий A еще не было
    K_A_occured - K событий A было
    L_cooldown_ON - отмена всех запусков механизма X на следующие L секунд активна
    ...
    ну и т.д.


    Событиями будут, например:
    A
    B
    C
    Запуск X
    Прошло N секунд с запуска X
    K событий A
    10 событий B в окне M секунд
    Прошло L секунд с момента 10 событий B в окне M секунд
    5 событий C, паузы S секунд и ещё 5 событий C
    Прошло P секунд (с момента 5 событий C, паузы S секунд и ещё 5 событий C)

    Соответственно, все возможные сочетания это произведение всех состояний всех систем помноженное на события.

    Т.е берем первую комбинацию
    x_idle, not_yet_K_A, l_cooldown_OFF, green_light_off и проверяем как система реагиурет на каждое событие.
    Это не законченная схема, просто направление мысли.

    Для исчерпывающих тестов также можно попробовать какой-нибудь автоматический верификатор вроде NuSMV, Alloy.
    Ответ написан
    Комментировать