Как убедиться, что все случаи покрыты одновременной настройкой на основе событий? - PullRequest
0 голосов
/ 23 декабря 2018

В SICP 3.4.2 существует проблема порядка событий в разных процессах.

Предположим, у нас есть два процесса: один с тремя упорядоченными событиями (a, b, c) и один с тремя упорядоченными событиями (x, y, z).Если два процесса выполняются одновременно, без ограничений на то, как их выполнение чередуется, то существует 20 различных возможных упорядочений для событий, которые соответствуют отдельным упорядочениям для двух процессов.

20 orderings

Программисты, разрабатывающие эту систему, должны были бы рассмотреть влияние каждого из этих 20 порядков и проверить, является ли каждое поведение приемлемым.Такой подход быстро становится громоздким по мере увеличения числа процессов и событий.

Существует ли какой-либо инструмент / наилучшая практика, которая помогает программисту следить за тем, чтобы все логически различные случаи охватывались?

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

Учитывая список возможныхПотоки событий программист сможет добавлять / удалять / изменять ограничения.

Для меня важна проблема, потому что большая часть ошибок, которые у меня возникают, связана с некоторым состоянием гонки или с некоторыми не обработанными случаями.

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

Это был бы Святой Граальмне.

Я искал решение по следующим темам: формальные методы, формальная проверка, пролог (из-за исчерпывающего поиска и логики), параллелизм, зависимые типы, программирование на основе событий, многие виды тестирования,проектирование по контракту, цикломатическая сложность;но никто из них не дал мне ответа.Кроме того, углубление в теорию типов кажется излишним.

1 Ответ

0 голосов
/ 06 марта 2019

"три упорядоченных события (a, b, c)"
Это зависит от того, сколько существует чередующегося состояния и какие ресурсы должны (в течение какого времени) использоваться совместно.Проверьте книги по теории параллелизма для полной теории языков.Каким-то образом вам нужно формализовать зависимости процессов [которые опять-таки зависят от кода]

Условия гонки и не обработанные случаи можно сократить до объема и ресурсов, поэтому вам, вообще говоря, нужно либо ограничить свои возможности выраженияформально / автоматически проверять ваши коды в соответствии с ошибками или вам нужно ограничить ресурсы.

В языках / при программировании это делается, например, с помощью шаблонов, хороших API, языковых конструкций и т. д. Однако нет общей функции, и этозависит от варианта использования.

Условия гонки и необработанные случаи выглядят так, как будто вам нужна более строгая типизация и автоматическое ограничение ресурсов, иначе ваш программный дизайн может быть ошибочным.

...