Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Скобцовы Моделирование и тестирование

.pdf
Скачиваний:
97
Добавлен:
03.03.2016
Размер:
3.61 Mб
Скачать

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

для комбинационной схемы с n входами и одним выходом функциональным тестом является множество всевозможных 2n тестовых двоичных наборов, позволяющее восстановить булеву функцию, которая реализуется тестируемой схемой. Очевидно, что для схем большой размерности такой подход не всегда приемлем.

С другой стороны, структурные тесты проверяют только минимально необходимое множество неисправностей (как правило,

одиночных константных неисправностей после процедуры сокращения списка, изложенной в разделе 4.5). Далее мы, в основном, будем рассматривать структурные тесты. Детерминированные методы генерации тестов разделяются на два класса:

1)построение теста для схемы в целом безотносительно конкретной неисправности;

2)построение теста для конкретной заданной неисправности.

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

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

действующие и простые в реализации методы построения тестов, которые позволяют с малыми затратами времени получить тест для большей части неисправностей. Одним из таких методов является псевдослучайный метод генерации тестов, достаточно подробно описанный в литературе [1,49].

211

6.1 Псевдослучайный метод генерации тестов

Данный метод не ориентирован на конкретную неисправность и строит тест для всей схемы. Он относительно прост в реализации, обладает высоким быстродействием и для некоторых классов схем позволяет получить тесты с удовлетворительной полнотой (особенно это касается комбинационных схем). Этим обусловлено широкое применение этого метода в системах автоматизированного построения тестов [83].

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

ввод схемы

Генерация ПС-набора

Моделирование

неисправности

 

нет

 

Проверяет ли

 

 

 

 

набор новые

 

 

 

 

 

 

 

 

 

 

 

 

неисправности?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Включение набора xi в тест

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нет

Достигнута

 

 

 

 

 

 

полнота (длина) ?

 

 

 

да

выход

Рис.6.1 Псевдослучайная генерация тестов

212

В простейшем случае псевдослучайный двоичный набор обрабатывается следующим образом. Для текущего случайного двоичного вектора Xi с помощью программы моделирования с неисправностями определяется величина n(Xi), которая характеризует число неисправностей,

проверяемых на наборе Xi без учета тех неисправностей, которые проверяются ранее построенной тестовой последовательностью X1, X2,…,

Xi-1. Далее если n(Xi)≥Т (порог), то набор Xi включается в тестовую последовательность и генерируется следующий псевдослучайный набор.

Если n(Xi)<Т, то этот входной набор бракуется и не включается в тест.

Кроме этого, набор может браковаться и по некоторым другим причинам

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

В простейшем случае генерируется псевдослучайный набор, в

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

Кроме этого, был разработан ряд эвристических алгоритмов,

которые генерируют псевдослучайные наборы с более сложным распределением вероятностей. При этом для каждого входного набора схемы рассчитываются вероятности подачи на него 0 и 1. Для определения этих вероятностей обычно на этапе препроцессорной обработки предварительно анализируют структуру схемы, либо используют адаптивные алгоритмы управления датчиками случайных чисел [49,83].

Следует отметить, что в процессе случайного поиска последовательностная схема может перейти в такое состояние, что найти

213

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

6.2 Метод критических путей

Из структурных методов на начальном этапе хорошо зарекомендо-

вали себя на практике алгоритмы, основанные на методе критических путей [84-86]. Они дают неплохую полноту теста и относительно просты в реализации. Метод основан на том, что половина одиночных константных неисправностей на критических (активизированных) путях проверяется тестом. Поэтому желательно строить тесты, порождающие как можно больше критических путей, на которых изменение сигнала на любой линии схемы, входящей в такой путь, вызывает изменение сигнала на выходе схемы. Такие тесты строятся с использованием так называемых критических кубов логических элементов схемы (они будут описаны ниже). Начиная с выхода, где значение полагается равным 0* или 1* (звездочкой обозначается критичность), критические пути строятся по направлению к входам схемы. Для каждого логического элемента, выход которого получил критическое значение, осуществляется выбор критического куба его входам присваиваются такие значения, чтобы один или более входов были критическими, т.е. чтобы при изменении значения на входе изменялось значение сигнала на выходе элемента.

Например, если вентиль НЕ-И с входами х1, х2 имеет значение на выходе f=1*, то значения на его входах х1=0*, х2=1 критичны по отношению к

х1. Аналогично входные значения х1=1, х2=0* критичны по отношению к

х2. Набор х1=0, х2=0 не имеет критических значений, так как изменение х1

или х2 на единицу не вызывает изменения выхода вентиля f. Если выход

214

вентиля f=0*, то набор х1=1*, х2=1* критичен по отношению к обоим входам. Суть метода заключается в том, что мы пытаемся распространить критические значения от выхода схемы к входам с помощью критических кубов элементов. Прежде чем формально описать алгоритм генерации тестов методом критических путей, рассмотрим его на небольшом примере схемы, изображенной на рис. 6.2.

х1

1*

 

 

 

 

 

 

 

 

 

 

х1

0*

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

&

 

 

 

 

 

 

 

 

 

 

 

&

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2

1*

 

 

 

 

 

 

 

 

 

 

x2

1

 

 

 

 

 

 

 

 

1*

 

 

 

 

 

 

 

 

 

x5

0*

 

 

 

 

 

 

 

 

 

 

x5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x3

0

 

 

 

 

&

x7

0*

 

 

x3

0*

 

 

 

 

 

&

 

x7

1*

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

&

 

 

 

x6

1

 

 

 

 

 

 

 

&

 

 

 

x6

1*

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x4

0

 

 

 

 

 

 

 

 

 

 

 

x4

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

а)

 

 

 

 

 

 

 

 

 

 

 

в)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

х1

0

 

 

 

 

 

 

 

 

 

х1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

&

 

 

 

 

 

 

 

 

 

&

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2

0

 

 

 

 

 

 

 

 

 

x2

0*

 

 

 

 

 

 

 

 

1*

 

 

 

 

 

 

 

 

 

 

x5

1

 

 

 

 

 

 

 

 

 

x5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

&

 

 

 

 

 

x3

1*

 

 

 

 

&

x7

0*

 

x3

1

 

 

 

x7

1*

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

&

 

 

 

x6

0*

 

 

 

 

 

&

 

 

 

x6

 

1*

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x4

1*

 

 

 

 

 

 

 

 

 

 

x4

0*

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

г)

 

 

 

 

 

 

 

 

 

 

 

б)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис.6.2 Иллюстрация метода критических путей

 

 

Выбираем начальное значение выхода схемы х7=0*. Из табл. 6.1

критических кубов (методы их построения будут рассмотрены ниже) для вентиля И видно, что существуют два критических куба со значениями на выходе 0*10* и 10*0* (здесь значения записаны в порядке х5, х6, х7).

Выбирая первый из них, получаем х5 =0*, х6=1. Из табл. 6.1 выбираем единственный для вентиля НЕ-И со значением 0* на выходе

215

критический куб 1*1*0*, который определяет х1=1*, х2=1*. Чтобы получить значение х6=1, из трех возможных комбинаций значений входов выбираем х3=0, x4=0. Таким образом, мы получили тестовый набор

х1=1, х2=1, х3=0, x4=0. Очевидно, что этот набор проверяет одиночные константные неисправности, противоположные критическим значениям,

т.е. если линия помечена 1*, то проверяется неисправность const0 на этой линии. Если же она помечена 0*, то проверяется неисправность соnst1. На рис. 6.2 приведены еще три набора, которые построены аналогичным способом и вместе с первым набором составляют полный проверяющий тест на одиночные константные неисправности для рассматриваемой схемы.

Таблица 6.1

Функция

a

b

c

Аналитическая запись куба

 

 

 

 

 

 

 

 

 

1

 

 

2

3

4

5

c=ab

1*

1*

1*

c1* = a1*b1*

 

 

 

 

 

0*

1*

0*

c0* = a0*b1 a1b0*

 

 

 

 

 

1*

0*

0*

 

 

 

 

 

 

 

 

 

 

c=a b

0

1*

1*

c1* = a0b1* a1*a0

 

 

 

 

 

1*

0

1*

c0* = a0*b0*

 

 

 

 

 

0*

0*

0*

 

 

 

 

 

 

 

 

 

 

c=ā

0*

1*

c1* = a0*

 

 

 

 

 

1*

0*

c0* = a1*

c =

 

 

 

0*

1

1*

c1* = a0*b1 a1b0*

ab

 

 

 

 

 

1

0*

1*

c0* = a1*b1*

 

 

 

 

 

1*

1*

0*

 

 

 

 

 

 

 

 

c =

 

 

 

 

0*

0*

1*

c1* = a0*b0*

a b

 

 

 

 

 

0

1*

0*

c0* = a0b1* a1*b0

 

 

 

 

 

1*

0

0*

 

 

 

 

 

 

 

 

 

 

216

1

2

3

4

5

c = a b

0*

1

1*

c1* = a0*b1 a0b1* a1*b0 a1b0*

 

0

1*

1*

 

 

1*

0

1*

 

 

1

0*

1*

 

 

0*

0

0*

c0* = a0*b0 a0b0* a1*b1 a1b1*

 

0

0*

0*

 

 

1*

1

0*

 

 

1

1*

0*

 

 

 

 

 

 

c=a~b

0*

0

1*

c1* = a0*b0 a0b0* a1*b1 a1b1*

 

0

0*

1*

 

 

1*

1

1*

 

 

1

1*

1*

 

 

0*

1

0*

c0* = a0*b1 a0b1* a1*b0 a1b0*

 

0

1*

0*

 

 

1*

0

0*

 

 

1

0*

0*

 

 

 

 

 

 

Понятие критических кубов первоначально было введено для вентиля НЕ-И [84] и использовано при генерации тестов в системе

LASAR. Далее это понятие было распространено на основные вентили

[85,86]. При этом критические кубы для простых вентилей И, ИЛИ, НЕ,

НЕ-И, НЕ-ИЛИ во всех работах одинаковы (хотя трактуются различно).

Для более сложных логических элементов критические кубы в этих работах определены по-разному. Мы при определении критических кубов используем подход, близкий к предложенному в работе [85].

Для комбинационных ДУ основной алгоритм генерации тестов методом критических путей можно сформулировать следующим образом.

1. Выбрать внешний выход схемы и присвоить ему критическое

значение 0*.

217

2. Для элемента, имеющего критическое значение на выходе, выбирая соответствующие критические кубы из таблицы *-кубов его типа,

распространить значения на входы элемента.

3. Присвоить соответствующие значения выходам элементов, кото-

рые соединены с входами, получившими новые значения в п. 2. Вы-

полнить операцию импликации для всех таких выходов.

4.Если импликация показывает несовместимость вновь полученных значений со старыми (противоречивая ситуация), перейти к п. 5, иначе

кп. 6.

5.Вернуться к последнему выбору критических кубов. Если выбора нет (все варианты распространения критических значений рас-

смотрены), то перейти к п. 7, иначе выбрать *-куб и перейти к п. 3.

6.Выбрать «необработанный» элемент с критическим выходом и вернуться к п. 2. Если таких элементов нет, перейти к п. 8.

7.Для рассмотренного критического значения на внешнем выходе не существует выходного набора с критическими путями. Если это был 0*, то внешнему выходу присвоить значение 1* и вернуться к п. 2,

если же - 1*, то в случае наличия «необработанных» внешних выходов схемы вернуться к п. 1. Если все выходы обработаны, то конец.

8. Выполнить процедуру доопределения для оставшихся

«неподтвержденными» некритических значений на выходах элементов. 9. Если это невозможно вследствие несовместимости вновь получен-

ных значений со старыми, то вернуться к п. 5. В противном случае

(если набор построен) вернуться к п. 1; если на внешнем выходе был

0*, то присвоить этому выходу значение 1* и перейти к п. 2.

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

помощью того же алгоритма, отрабатывая в процессе генерации теста

218

всевозможные варианты выбора критических кубов, как это было показано для схемы, изображенной на рис. 6.2.

Такова укрупненная общая схема алгоритма для комбинационных схем. Следует отметить, что в процессе реализации для ускорения гене-

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

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

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

6. 3 Метод различающей функции

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

Пусть f(X) – булева функция, реализуемая исправной комбинационной схемой, а φ(X) – булева функция, реализуемая неисправной схемой.

Назовем различающей функцией следующее выражение:

D(φ)=f(X) φ(X).

219

Очевидно, что наборы значений входных переменных X, на которых

D(φ)=1, являются проверяющими тестами для данной неисправности φ.

Для примера рассмотрим схему, изображенную на рисунке 6.3.

x1

 

 

 

 

 

&

 

x4

 

 

 

 

 

 

 

 

 

 

 

 

 

x2

 

x12

 

 

 

1

x6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

&

 

 

 

 

 

 

 

 

 

 

 

 

 

x3

 

x5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис.6.3 Пример схемы для метода различающей функции

Применим метод различающей функции для построения проверяющего входного набора для константной неисправности х11. В

этом случае имеем:

 

 

 

 

 

 

 

 

 

 

 

 

1)

функцию, реализуемую исправной схемой f (x) = (x1&x2 ) (x2&x

3 ) ;

2)

функцию,

 

которая

 

реализуется

неисправной

схемой,

ϕ (x) = x2 (x2&x

3 ) = x2 .

 

 

 

равна:

 

D(х11)=f(x) φ(x)=

Тогда

различающая

функция

 

=((x1&x2 ) (x2&x

3 )) x2=x2((x1

 

) 1) = x2

 

 

 

= x2

 

1x3 .

 

 

x3

(x1

 

3 )

 

 

x

x

 

 

 

Очевидно,

что равенство D(x1 ≡ 1)=1

 

обеспечивает набор значений

входных переменных x1=0, x2=1, x3=1, который и является проверяющим тестом для данной неисправности. Для больших схем этот метод становится слишком громоздким и требует больших вычислительных ресурсов. Однако следует отметить, что современные методы символьных вычислений (над булевыми выражениями) позволяют расширить его возможности.

6.4 Метод булевых производных

Булева производная функции f(X) по переменной xi определяется

следующим выражением:

df

= f (xi = 0) f (xi =1) [1]. Существует и

 

 

dxi

220