Московский государственный университет путей сообщения
Опубликован: 06.09.2012 | Доступ: свободный | Студентов: 978 / 56 | Оценка: 5.00 / 5.00 | Длительность: 35:22:00
Специальности: Разработчик аппаратуры
Лекция 19:

Методы генерации тестов PODEM, FAN и SOCRATES

< Лекция 18 || Лекция 19: 1234 || Лекция 20 >

19.2 Метод FAN

Идеи, заложенные в этом методе, получили развитие в алгоритме "FAN" (fan-out oriented test generation)[19.2]. В нем предусмотрена препроцессорная обработка, в которой анализируется структура ДУ, которая разбивается на древовидные подсхемы. Метод использует следующие стратегии.

  1. На каждом шаге алгоритма определяется, насколько это возможно, множество сигналов, которые получают определенные значения вследствие импликации. В отличие от предыдущего метода, здесь используется как прямая, так и обратная импликация.
  2. Присваиваются значения D, D', которые однозначно определяются неисправностью.
  3. В том случае, когда D-граница состоит из одного элемента, используется одномерная активизация.
  4. Более эффективная процедура кратного продвижения назад (по нескольким путям).
  5. Продвижение назад останавливается, если в узлах разветвления возникают противоречия (конфликт).

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

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

Процедура кратного продвижения назад по нескольким путям позволяет методу FAN по сравнению с PODEM быстрее обнаруживать конфликтные ситуации в процессе построения тестов и тем самым сократить число возвратов при переборе. Напомним, что процедура продвижения назад в PODEM при прохождении каждого логического элемента выбирает только один его вход и определяет значение для него, что фактически способствует увеличению перебираемых вариантов. Особенно это заметно для ситуаций с выбором "тяжелых подзадач". Например, для обеспечения значения 1 выхода вентиля И необходимо, чтобы все его входы получили также значения 1.Но метод PODEM выберет и присвоит значение только одному (самому "тяжелому" входу) и распространит его назад ко входам схемы. Для остальных входов выполняется своя процедура продвижения назад. В методе FAN в такой ситуации всем входам присваиваются значения 1, которые далее распространяются ко входам схемы одновременно. Это тоже способствует более раннему обнаружению конфликтов при генерации теста.

В том случае, когда D-граница содержит один элемент, в методе FAN применяется одномерная активизация. Рассмотрим схему рис. 19.6 [19.3],

Пример схемы для активизации в FAN

Рис. 19.6. Пример схемы для активизации в FAN

для которой необходимо построить тест для неисправности coinst1 входа вентиля G. Влияние неисправности должно распространяться через мультиплексор и вентиль H. Для распространения через вентиль H его верхнему входу необходимо присвоить значение 1. Но из процедуры активизации в месте неисправности следует, что этот вход устанавливается в блокирующее значение 0. Поэтому для обнаружения подобных ситуаций в методе FAN выполняется одномерная активизация. Для нашего примера при активизации необходимо установить значение верхнего входа 1. Оно при импликации дает конфликт в месте неисправности.

На этапе препроцессорной обработки схема разбивается на одновыходные древовидные подсхемы, которые не содержат сходящихся разветвлений. Очевидно, внутри таких подсхем продвижение назад выполняется без конфликтов и может остановиться на линиях, которые являются выходами предыдущих подсхем без разветвлений. После того, как в процессе продвижения назад внутри подсхемы некоторые линии получили определенно значение, можно выполнить процедуру подтверждения этих значений. Рассмотрим узел разветвления J на рис. 19.7 [19.3] c ветвями J_{1} и J_{2} .

Пример схемы, содержащей древовидную подсхему

Рис. 19.7. Пример схемы, содержащей древовидную подсхему

Здесь вентили G и J являются выходами древовидных подсхем (иногда их называют головными - head). Если существует путь от узла разветвления вперед (по направлению к выходам) до схемы P, то схема называется граничной (bound). Схемы, которые не являются граничными, называются свободными. Для нашего примера схемы A,B,C,D,E,F,G,H,J являются граничными, в то время как схемы J_{1}, J_{2}, K и L представляют свободные схемы. Свободные схемы, которые непосредственно питают граничные cхемы (как в случае разветвления J) или через логические элементы (случай G) являются головными (head). Они определяют границу между свободными и граничными линиями.

Как и предыдущий метод FAN работает на каждом шаге на достижение поставленных целей. Это логические значения некоторых линий схемы, которые должны быть обеспечены в течение поиска теста. Процедура продвижения назад начинается с начальных целей. На начальном этапе эти цели обусловлены значениями D или D' на неисправных линиях, которые определяются при инициализации неисправностей. Начальные цели становятся текущими при входе в процедуру кратного продвижения назад Mback. В процессе выполнения этой процедуры некоторые линии схемы получают новые значения, которые могут стать новыми текущими целями или головными (head) целями или целями узлов разветвления (FPO), которые в конечном счете должны быть выполнены.Здесь цели соответствующие головным (head) линиям, называются головными. Аналогично определяются цели соответствующие узлам разветвления FPO. При выполнении текущих целей в процессе продвижения назад FAN останавливается на узлах разветвлениях и головных линиях до тех пор, пока не выполнены текущие цели. Затем выбирается узел разветвления, ближайший к внешнему выходу, если такой существует. Головные (head) цели всегда выполняются последними, после того, как достигнуты остальные цели, которые вследствие отсутствия разветвлений могут быть выполнены без конфликтов. Если на узле разветвления возникает конфликтная ситуация, то она должна быть разрешена. Конфликт случается в том случае, когда при выполнении процедуры кратного продвижения назад два или более путей сходятся на узле разветвления с противоположными требованиями (0 и 1). Если на узле разветвления нет конфликта, то процедура кратного продвижения назад Mback проходит этот узел и продолжает продвижение назад внутри другой древовидной подсхемы.

Для того, чтобы сохранить полученные значения в процессе продвижения назад и разрешить конфликтные ситуации, FAN использует запись целей в виде триплета (s, n_{0}(s), n_{1}(s)). Здесь s означает целевую схему, n_{0}(s) представляет число нулей, которые потребовалось установить при продвижении до s, и n_{1}(s)- соответственно число требуемых единиц. При этой терминологии конфликт возникает, если оба числа n_{0}(s) и n_{1}(s) имеют ненулевые значения. Для разрешения конфликта используется правило: если n_{0}(s)<n_{1}(s), то узлу разветвления приписывается 1, в противном случае - 0.

При продвижении назад через логический элемент логические значения его входов зависят от значения на выходе и типа вентиля. Для И/НЕ-И вентилей 1/0 на выходе ведет к присвоению 1 на всех его входах. Соответственно для вентилей ИЛИ/НЕ-ИЛИ 0/1 на выходе ведет к необходимости присвоения значений 0 всем его входам. Кроме этого, если вентиль инвертирующего типа, то значения n_{0}(s) и n_{1}(s) в триплете меняются местами. Например, для вентиля НЕ-ИЛИ с триплетом (Z,u,v) на выходе его входам присваивается триплет (Z,v,u), если значение 1 требуется на выходе.

Если входу вентиля необходимо присвоить контролирующее значение (0 для И или НЕ-И, 1 для ИЛИ или НЕ-ИЛИ), то при продвижении назад через логический элемент выбирается как и в методе PODEM выбирается вход, имеющий лучшую управляемость. Предположим, что вентиль имеет входы X_{1},…,X_{n} и выход Y и без потери общности вход X_{1} имеет лучший показатель управляемости. Тогда при продвижении назад через логический элемент значения n_{0}(s), n_{1}(s) для его входов можно найти (по заданным значения выхода n_{0}(s), n_{1}(s)) согласно правилам, приведенным в табл. 19.2 [19.3].

Таблица 19.2.
N п/п Функция 0-счетчик 1-счетчик Управляемость
1 И n_0(X_1)=n_0(Y) n_1(X_1)=n_1(Y) легкий 0
2 И n_0(X_i)=0 n_1(X_i)=n_1(Y) остальные
3 НЕ-И n_0(X_1)=n_1(Y) n_1(X_1)=n_0(Y) легкий 0
4 НЕ-И n_0(X_i)=0 n_1(X_i)=n_0(Y) остальные
5 ИЛИ n_0(X_1)=n_0(Y) n_1(X_1)=n_1(Y) Легкая 1
6 ИЛИ n_0(X_i)=n_0(Y) n_1(X_i)=0 остальные
7 НЕ-ИЛИ n_0(X_1)=n_1(Y) n_0(X_1)=n_0(Y) Легкая 1
8 НЕ-ИЛИ n_0(X_i)=n_1(Y) n_1(X_i)=0 остальные
9 НЕ n_0(X)=n_1(Y) n_1(X)=n0(Y)
10 разветвление n_0(X)=\sum\limts_{i=1}^k{n_0(X_i)} n_1(X)=\sum\limts_{i=1}^k{n_1(X_i)}

Рассмотрим для примера распространение назад триплета через вентиль И. Если на выходе этого вентиля необходимо установить 0, то очевидно хотя бы один из его входов надо установить в 0. В методе FAN выбирается "легкий вход" с лучшим показателем управляемости за исключением тех входов, которые уже выбирались и были отвергнуты вследствие возникновения конфликта. Согласно первой строке табл. 19.2 значения n_{0}(X_{1}) и n_{1}(X_{1}) для выбранного входа приравниваются соответствующим значениям выхода элемента: n_{0}(X_{1})= n_{0}(Y), n_{1}(X_{1})= n_{1}(Y) . С другой стороны для неконтролирующих значений (1) имеем n_{0}(X_{i})=0 и n_{1}(X_{i})= n_{1}(Y), что представлено во второй строке табл. 19.2. Третья строка таблицы показывает, что при наличии инверсии значения n_{0}(X_{1}) и n_{1}(X_{1}) меняются местами, то есть n_{0}(X_{1})= n_{1}(Y), n_{1}(X_{1})= n_{0}(Y). Аналогичный смысл имеют остальные правила, приведенные в табл. 19.2. Особо следует отметить распространение через узел разветвления, где согласно последней строке табл. 19.2. значения n_{0}(X) и n_{1}(X) суммируются.

Применение этих правил рассмотрим на примере схемы 19.8 [19.3].

Пример вычислений n0(s), n1(s) при обратном распространении

Рис. 19.8. Пример вычислений n0(s), n1(s) при обратном распространении

Предположим, что в процессе обратного распространения на ветвях разветвления получились значения (J_{1},1,1) и (J_{2},1,2). Поскольку оба значения n_{0}(J_{1}) и n_{1}(J_{1}) для ветви J_{1} ненулевые (как и для второй ветви J_{2}), то имеет место конфликтная ситуация - не ясно, какое значение надо присвоить для разветвления J. Поскольку нулевое значение имеет вес 2, а единичное - вес 3, то мы выбираем для J значение 1 с большим весом. Так как сложилась конфликтная ситуация, то кратное продвижение назад в этом месте прекращается и необходимо разрешить конфликт путем возврата к точке последнего выбора и присвоения альтернативного значения. Если на узле разветвления невозможно найти согласованные значения, то неисправность является избыточной.

< Лекция 18 || Лекция 19: 1234 || Лекция 20 >
Дмитрий Медведевских
Дмитрий Медведевских

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

Артур Гибадуллин
Артур Гибадуллин
Россия, г. Нижневартовск