Добрый день можно поинтересоваться где брать литературу предложенную в курсе ?Большинство книг я не могу найти в известных источниках |
Выполнимость булевых функций и бинарные диаграммы в построении тестов
Как отмечалось в предыдущей лекции, где представлен метод SOCRATES, на этапе препроцессорной обработки можно найти нелокальные импликации, которые позволяют сократить число откатов в процессе поиска и тем самым его ускорить. Напомним, что для схемы рис. 19.9 имеет место нелокальная импликация: если , то отсюда следует
, и наоборот, равенство
имплицирует
. В соответствии с этим, в КНФ схемы можно явным образом добавить дизъюнкт
, что в результате дает для схемы следующую КНФ
![(E\vee \overline{B})\cdot(E\vee\overline{A})\cdot(\overline{E}\vee A\vee B)\cdot\\
(F\vee\overline{A})\cdot(F\vee\overline{C})\cdot(\overline{F}\vee A\vee C)\cdot\\
(\overline{D}\cdot E)\cdot(\overline{D}\vee F)\cdot(D\vee\overline{E}\vee\overline{F})\cdot\\
(A\vee\overline{D})](/sites/default/files/tex_cache/a99b2ee2d008add6510ba98a3c9a37a8.png)
Таким образом, можно дополнительно ввести нелокальные импликации. Однако, на практике они обычно вводятся в случае неудачи с использованием основной КНФ поскольку требуют дополнительных ресурсов.
Кроме этого, можно дополнительно ввести информацию об активизированных путях в схеме, которая используется в структурных методах. Если неисправность обнаружима, то существует, по крайней мере, один активизированный путь между неисправной линией и выходом схемы. Таких путей может быть несколько, но мы выбираем только один активный путь. Каждую линию этого пути назовем активной линией. Для определения активного пути мы для каждого элемента (входящего в путь) дополнительно вводим дизъюнкты, которые для каждой линии этого пути используют вспомогательные переменные. При этом для переменной вводится активная переменная
.
Для каждого вентиля с входом
и выходом
(входящими в активный путь) мы добавляем дизъюнкт
, который показывает, что если активно
, то активно
. Для элемента, имеющего несколько выходов (например, разветвление) со входом
и выходами
,
добавляем дизъюнкт
(если активно
, то активно
или
). На рис. 21.2, 21.3 представлены примеры таких дизъюнктов.
Если активно , то должно быть активно
.
Если активно , то должно быть активно
или
:
![(\overline{Act_{X}}\vee Act_{X_1}\vee Act_{X_2}).](/sites/default/files/tex_cache/f86445e90850a30fa26618a229e8dc34.png)
Введение таких дизъюнктов может существенно повысить эффективность системы генерации тестов.
Если вентиль входит в активный путь, то его входы должны иметь неконтролирующие значения, которые позволяют распространять влияние неисправности. Например для вентиля И ни один из неактивных входов не должен иметь значение 0, которое блокирует активизацию. С другой стороны, неактивный вход вентиля И, входящего в активный путь, может также иметь различные сигналы для исправной и неисправной схемы. При этом значения сигналов могут быть согласованы инее согласованы. Эта ситуация показана на рис. 21.4 и рис. 21.5.
На этом основании мы можем добавить дизъюнкты , требующие неконтролирующих значений. Например, для вентиля ИЛИ с активным входом и неактивным
можно вести дизъюнкт
(если
активно, то и
должно быть активно).
Отметим, что учет требования неконтролирующих значений для входов активных элементов в структурных методах имеет очень большое значение, в данном методе это не так, но они позволяют сузить пространство поиска решений.
Кроме этого, на этапе препроцессорной обработки можно идентифицировать линии уникальной активизации для каждой неисправности и добавить в КНФ активные дизъюнкты для каждого вентиля. Например, для схемы рис. 19.9 аналогично дополнительному дизъюнкту можно генерировать дизъюнкт
, который показывает, что если
активно, то
также должно быть активно.
В некоторых случаях в КНФ можно удалить отдельные переменные, если это не вредит окончательному решению. Будем говорить, что переменная определяет переменную
, если присваивание
значения 0 или 1 ведет к тому, что переменная
везде входит в формулу либо с отрицанием, либо без него.
В этом случае мы можем удалить из формулы все дизъюнкты, содержащие
, и отложить присваивание переменной
до тех пор, пока не будет определено окончательное значение для
. Например, все дизъюнкты, содержащие
,
,
могут быть удалены из КНФ схемы рис. 21.6.
![(E\vee B)\cdot(E\vee C)\cdot(\overline{E}\vee\overline{B}\vee\overline{C})\cdot\\
(E\vee\overline{E_1})\cdot(\overline{E}\vee E_1)\cdot(E\vee\overline{E_2})\cdot(\overline{E}\vee E_2)\cdot\\
(F\vee A)\cdot(F\vee E_1)\cdot(\overline{F}\vee\overline{A}\vee\overline{E_1})\cdot\\
(G\vee F)\cdot(G\vee E_2)\cdot(\overline{G}\vee\overline{F}\vee\overline{E_2})](/sites/default/files/tex_cache/a2d68fae4abce7e83d6ddf71e3cd91fa.png)
В заключение, отметим, что порядок рассмотрения переменных в процессе решения влияет на его скорость. Поэтому, иногда предварительно определяется порядок рассмотрения переменных, что также способствует улучшению характеристик алгоритма.