Опубликован: 06.09.2012 | Уровень: для всех | Доступ: платный | ВУЗ: Московский государственный университет путей сообщения
Лекция 21:

Выполнимость булевых функций и бинарные диаграммы в построении тестов

< Лекция 20 || Лекция 21: 1234 || Лекция 22 >

Как отмечалось в предыдущей лекции, где представлен метод SOCRATES, на этапе препроцессорной обработки можно найти нелокальные импликации, которые позволяют сократить число откатов в процессе поиска и тем самым его ускорить. Напомним, что для схемы рис. 19.9 имеет место нелокальная импликация: если A=1, то отсюда следует D=1, и наоборот, равенство D=0 имплицирует A=0. В соответствии с этим, в КНФ схемы можно явным образом добавить дизъюнкт (\overline{A}\vee D), что в результате дает для схемы следующую КНФ


(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})

Таким образом, можно дополнительно ввести нелокальные импликации. Однако, на практике они обычно вводятся в случае неудачи с использованием основной КНФ поскольку требуют дополнительных ресурсов.

Кроме этого, можно дополнительно ввести информацию об активизированных путях в схеме, которая используется в структурных методах. Если неисправность обнаружима, то существует, по крайней мере, один активизированный путь между неисправной линией и выходом схемы. Таких путей может быть несколько, но мы выбираем только один активный путь. Каждую линию этого пути назовем активной линией. Для определения активного пути мы для каждого элемента (входящего в путь) дополнительно вводим дизъюнкты, которые для каждой линии этого пути используют вспомогательные переменные. При этом для переменной X вводится активная переменная Act_{X} . Для каждого вентиля с входом X и выходом Y (входящими в активный путь) мы добавляем дизъюнкт (\overline{ Act_{X}}\vee Act_{Y}), который показывает, что если активно X, то активно Y. Для элемента, имеющего несколько выходов (например, разветвление) со входом X и выходами Y, Z добавляем дизъюнкт (\overline{ Act_{X}}\vee Act_{Y}\vee Act_{Z}) (если активно X, то активно Y или Z). На рис. 21.2, 21.3 представлены примеры таких дизъюнктов.


Рис. 21.2.

Если активно X, то должно быть активно (\overline{Act_{X}}\vee Act_{Y}).


Рис. 21.3.

Если активно X, то должно быть активно X_{1} или X_{2} :


(\overline{Act_{X}}\vee Act_{X_1}\vee Act_{X_2}).

Введение таких дизъюнктов может существенно повысить эффективность системы генерации тестов.

Если вентиль входит в активный путь, то его входы должны иметь неконтролирующие значения, которые позволяют распространять влияние неисправности. Например для вентиля И ни один из неактивных входов не должен иметь значение 0, которое блокирует активизацию. С другой стороны, неактивный вход вентиля И, входящего в активный путь, может также иметь различные сигналы для исправной и неисправной схемы. При этом значения сигналов могут быть согласованы инее согласованы. Эта ситуация показана на рис. 21.4 и рис. 21.5.

Согласованная разница сигналов.

Рис. 21.4. Согласованная разница сигналов.
Не согласованная разница сигналов.

Рис. 21.5. Не согласованная разница сигналов.

На этом основании мы можем добавить дизъюнкты , требующие неконтролирующих значений. Например, для вентиля ИЛИ с активным входом D и неактивным E можно вести дизъюнкт (\overline{Act_{D}}\vee \overline{E}) (если D активно, то и E должно быть активно). Отметим, что учет требования неконтролирующих значений для входов активных элементов в структурных методах имеет очень большое значение, в данном методе это не так, но они позволяют сузить пространство поиска решений.

Кроме этого, на этапе препроцессорной обработки можно идентифицировать линии уникальной активизации для каждой неисправности и добавить в КНФ активные дизъюнкты для каждого вентиля. Например, для схемы рис. 19.9 аналогично дополнительному дизъюнкту (\overline{A}\vee D) можно генерировать дизъюнкт (\overline{Act_{A}}\vee Act_D), который показывает, что если B активно, то D также должно быть активно.

В некоторых случаях в КНФ можно удалить отдельные переменные, если это не вредит окончательному решению. Будем говорить, что переменная V определяет переменную W, если присваивание V значения 0 или 1 ведет к тому, что переменная W везде входит в формулу либо с отрицанием, либо без него. В этом случае мы можем удалить из формулы все дизъюнкты, содержащие W, и отложить присваивание переменной W до тех пор, пока не будет определено окончательное значение для V. Например, все дизъюнкты, содержащие A,B,C могут быть удалены из КНФ схемы рис. 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})

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

Все дизъюнкты, содержащие A,B,C  могут быть удалены из КНФ.

Рис. 21.6. Все дизъюнкты, содержащие A,B,C могут быть удалены из КНФ.
< Лекция 20 || Лекция 21: 1234 || Лекция 22 >
Дмитрий Медведевских
Дмитрий Медведевских

Добрый день  можно поинтересоваться где брать литературу предложенную в курсе ?Большинство книг я не могу найти  в известных источниках

Андрей Баранов
Андрей Баранов
Донецк, Донецкий национальный технический университет, 2019
Андрей Чернов
Андрей Чернов
Россия, Ростов-на-Дону, Ростовский институт инженеров железнодорожного транспорта, 1993