Таблицы решений — это краткое визуальное представление, позволяющее указать, какие действия следует выполнять в зависимости от заданных условий. Это алгоритмы , выходные данные которых представляют собой набор действий. Информация, выраженная в таблицах решений, также может быть представлена в виде деревьев решений или на языке программирования как серия операторов if-then-else и switch-case .
Каждое решение соответствует переменной, отношению или предикату, возможные значения которого перечислены среди альтернатив условий. Каждое действие представляет собой процедуру или операцию, которую необходимо выполнить, а записи указывают, должно ли (и в каком порядке) выполняться действие для набора альтернатив условий, которым соответствует запись.
Чтобы сделать их более краткими, многие таблицы решений включают в альтернативные условия символ « безразлично» . Это может быть дефис [1] [2] [3] или пробел [4] , хотя использование пробела не рекомендуется, поскольку это может просто указывать на то, что таблица решений не завершена. [ нужна цитация ] Одно из применений таблиц решений — выявить условия, при которых определенные входные факторы не имеют значения для предпринимаемых действий, что позволяет пропустить эти входные тесты и тем самым упростить процедуры принятия решений. [5]
Помимо базовой четырехквадрантной структуры, таблицы решений сильно различаются по способу представления альтернативных условий и записей действий. [6] [7] В некоторых таблицах решений используются простые значения true/false для представления альтернатив условию (аналогично if-then-else), в других таблицах могут использоваться пронумерованные альтернативы (аналогично переключателю), а в некоторых таблицах даже используйте нечеткую логику или вероятностные представления для альтернатив условий. [8] Аналогичным образом, записи действий могут просто обозначать, должно ли выполняться действие (проверить действия, которые необходимо выполнить), или, в более сложных таблицах решений, последовательность действий, которые необходимо выполнить (нумеровать действия, которые необходимо выполнить).
Таблица решений считается сбалансированной [4] или полной [3] , если она включает все возможные комбинации входных переменных. Другими словами, сбалансированные таблицы решений предписывают действие в каждой ситуации, когда заданы входные переменные. [4]
Таблицу решений с ограниченным входом описать проще всего. Альтернативные условия — это простые логические значения, а записи действий — это галочки, указывающие, какое из действий в данном столбце должно быть выполнено.
Следующая таблица сбалансированных решений представляет собой пример, в котором компания технической поддержки составляет таблицу решений, позволяющую сотрудникам службы технической поддержки эффективно диагностировать проблемы с принтером на основе симптомов, описанных им по телефону от клиентов.
Это всего лишь простой пример, и он не обязательно соответствует реальности устранения неполадок принтера. Тем не менее, он демонстрирует, как таблицы решений могут масштабироваться для нескольких условий с множеством возможностей.
Таблицы решений, особенно в сочетании с использованием предметно-ориентированного языка , позволяют разработчикам и экспертам по политике работать с одной и той же информацией — самими таблицами решений.
Инструменты для отображения вложенных операторов if из традиционных языков программирования в таблицы решений также можно использовать в качестве инструмента отладки. [9] [10]
Таблицы решений оказались более легкими для понимания и анализа, чем код, и они широко и успешно использовались для разработки спецификаций для сложных систем. [11]
В 1960-х и 1970-х годах для бизнес-программирования был популярен ряд языков, основанных на таблицах решений, таких как Filetab .
Таблицы решений могут быть и часто встроены в компьютерные программы и используются для «управления» логикой программы. Простым примером может быть таблица поиска , содержащая диапазон возможных входных значений и указатель функции на раздел кода для обработки этого ввода.
Несколько условий могут быть закодированы аналогичным образом, чтобы инкапсулировать всю логику программы в форме «исполняемой» таблицы решений или таблицы управления . На практике таких таблиц может быть несколько, работающих на разных уровнях и часто связанных друг с другом (либо указателями, либо значением индекса).