|
Добрый день можно поинтересоваться где брать литературу предложенную в курсе ?Большинство книг я не могу найти в известных источниках |
Многомерная активизация путей в шестизначном алфавите
18.2 D - алгоритм
Среди структурных методов генерации тестов, использующих многозначные алфавиты, первым был разработан D-алгоритм [18.3], который позволяет выполнять многомерную активизацию путей и гарантирует построение проверяющего теста для неизбыточной неисправности в комбинационной схеме.
Основным рабочим инструментом в D-алгоритме является техника кубов. Модели логических элементов представляются также с помощью кубов. Например, в табл. 18.5 представлены 0-кубы для вентиля И. Легко видеть, что данная таблица в сжатой форме содержит все условия, при которых на выходе вентиля И возможно значение 0. Можно показать, что множество сжатых кубов, используемое в D-алгоритме, определяется соответствующей функцией
.
Так, например, каждый терм функции
вентиля соответствует строке табл. 18.5. Аналогично функция
соответствует табл. 18.6, которая содержит 1-кубы и определяет условия, при которых на выходе вентиля И возможна 1.
Распространение символов
и
через логические элементы осуществляется с помощью
- и
-кубов, которые определяются функциями многозначными функциями
соответственно.
Так, табл. 18.7, содержащая
-кубы вентиля И, получена из функции
вентиля И. Аналогично, функция
определяет
-кубы табл. 18.8.
Простым кубом неисправности
на выходе вентиля называется
(
)-куб (
для неисправности
,
для неисправности
), в котором выходу вентиля присваивается
(
), а значения входам присваиваются таким образом, чтобы на выходе исправного вентиля было значение, инверсное
. Например,
является простым
-кубом для неисправности
на входе вентиля И. Очевидно, что простой
-куб служит средством активизации неисправности на соответствующей линии схемы (он вносит влияние неисправности в месте ее возникновения).
Основной моделью логической схемы в
-алгоритме является система таблиц кубов, в которых столбцы соответствуют линиям схемы, а строки - кубам. Например, табл. 18.9 содержит
кубы для схемы, изображенной на рис. 18.4. Пустые клеточки соответствуют неопределенным значениям
. Вторая таблица содержит 0(1)-кубы. Для нашего примера она представлена в табл. 18.10.
Кроме этих таблиц используется куб
для текущих значений линий схемы и несколько стеков. Сначала всем линиям в кубе
присваиваются неопределенные значения
. Затем в
вносится простой куб данной неисправности. Далее выполняется
-распространение к одному из выходов схемы. Оно выполняется путем выбора последователя неисправного вентиля и пересечения с одним из его
-кубов с текущим кубом
.
При
-распространении обычно производится выбор
или
-куба данного элемента, оставшиеся варианты хранятся в стеке. Операция пересечения определена в табл. 18.11. Если при пересечении кубов, возникает хотя бы один символ
, то это показывает противоречие, возникающее на данной линии вследствие различных требований (например, из простого
-куба следует, что данная линия должна иметь значение 0, а из условий
распространения здесь должна быть 1.
-алгоритм можно сформулировать следующим образом в виде псевдокода.
D-алгоритм( неисправность h_{i})
{
Ранжирование элементов схемы от входов к выходам;
Выбор простого D-куба для неисправности h_{i};
Занесение элементов-последователей h_{i} в D-границу;
D-распространение();
Доопределение();
Return();
}
D-распространение()
//активизирует пути с D,D'-значениями от неисправности до внешнего выхода
{
while(есть необработанные элементы в D-границе)
{
Выбор следующего необработанного элемента из D-границы;
while(есть необработанные последователи элемента)
{
Выбор следующего элемента-последователя;
Выбор D-куба для элемента-последователя;
D-пересечение выбранного D-куба с текущим тест-кубом К;
if(пересечение пусто или неопределено)continue;
//переход на конец цикла
if(все D-кубы элемента использовались и не дали результата) break;
if(пересечение D-кубов успешно)
{
Занесение элементов-последователей D-значений в D-границу;
Сохранение состояния алгоритма в стеки;
break;
}
else if (пересечение D-куба с тестовым кубом пусто) возврат();
else if ( противоречие при операции пересечения кубов) break;
}
if(ни один из вариантов не дал D-распространения)
Возврат();
}
return;
}
Доопределение()
//дает значения внешних входов, обеспечивающие условия D-распространения
{
J=координаты тестового куба К с определенными значениями 0,1 ;
if(J содержит только внешние входы)
тест построен, останов;
for(каждого неподтвержденного сигнала в G)
{
выбор 0,1 сигнала z из J с наибольшим рангом;
if(входы элемента с выходом z все равны D или D')
break;
while(есть необработанные 0,1-кубы вентиля z)
{
Выбор следующего необработанного 1- или 0- куба вентиля z;
if(нет необработаных 1- или 0- кубов)
{
if(нет выбора в стеке импликации) stop;
неисправность избыточна;
else if(есть альтернативный выбор)
then извлечение из стека альтернативного значения;
else
{
Возврат();
D-распространение();
}
}
if(0,1-куб пересекается с z) удаление z из J и занесение в J-границу значений входов z;
break;
if(пересечение пусто) отметка текущего 0,1-куба как отработанного;
}
}
return;
}
Возврат()
{
if( внешний выход содержится в D-границе)
Доопределение();
else if(извлечение из стека импликации альтернативного значения);
if(нет вариантов в стеке импликации) stop;
неисправность избыточна;
else return;
}
D-алгоритм





























































































