Метод функциональных диаграмм
Метод функциональных диаграмм или диаграмм причинно-следственных связей помогаетсистематически выбирать высокорезультативные тесты. Кроме этого, метод функциональных диаграмм дает полезный побочный эффект, так как позволяет обнаруживать неполноту и неоднозначность исходных спецификаций.
Функциональная диаграмма – это формальный язык, на который транслируется спецификация, написанная на естественном языке.
Методика использования функциональных жиаграмм:
1. Спецификация разбивается на “рабочие” участки, так как для больших спецификаций функциональные диаграммы становятся слишком громоздкими. Например, при тестировании компилятора в качестве рабочего участка можно рассматривать каждый отдельный оператор языка программирования.
2. В спецификации определяются причины и следствия. Причина – это отдельное входное условие или класс эквивалентных входных условий. Следствие – это выходное условие (результат выполнения программы). Например, если при выполнении программы обновляется содержимое некоторого файла, то изменение в нем является результатом выполнения программы, а подтверждающее сообщение – выходным условием.
Причины и следствия определяютсяпутем последовательного чтения спецификации. Каждым причине и следствию приписывается уникальный номер.
3. Анализируется семантическое содержание спецификации, которая преобразуется в булевский граф (функциональную диаграмму), связывающий причины и следствия.
4. Диаграмма дополняетсяпримечаниями, задающими ограничения и описывающими комбинации причин и (или) следствий, которые являются невозможными из-за синтаксических или внешних ограничений.
5. Путем методического прослеживания состояний условий диаграммы она преобразуется в таблицу решений с ограниченными входами. Каждый столбец таблицы решений соответствует тесту.
6. Столбцы таблицы решений преобразуются в тесты.
Процедура генерации таблицы решений заключается в следующем:
a) Выбрать некоторое следствие, которое должно быть в состоянии 1.
b) Найти все комбинации причин (с учетом ограничени), которые установят это следствие в 1, прокладывая из этого следствия обратную трассу через диаграмму.
c) Построить столбец в таблице решений для каждой комбинации причин.
d) Для каждой комбинации причин определить состояния всех других следствий и поместить их в соответствующий столбец таблицы решений.
При выполнении этого шага необходимо руководствоваться следующими положениями:
· Если обратная трасса прокладывается через узел ИЛИ, выход которого должен принимать значение 1, то одновременно не следует устанавливать в 1 более одного входа в этот узел. Цель данного правила – избежать пропуска определенных ошибок из-за того, что одна причина маскируется другой.
· Если обратная трасса прокладывается через узел ИЛИ, выход которого должен принимать значение 0, то все комбинации входов, приводящие выход в 0, должны быть в конечном счете перечислены. Однако, когда исследуется ситуация, где один вход есть 0, а один или более других входов есть 1, не обязательно перечислять все условия, при которых остальные входы могут быть 1.
· Если обратная трасса прокладывается через узел И, выход которого должен принимать значение 0, то необходимо указать лишь одно условие, согласно которому все входы являются нулями.
Каждый узел диаграммы может находиться в двух состояниях – 0 или 1; 0обозначает состояние “отсутствует”, а 1 – “присутствует”.
Для представления функциональных диаграмм используются следующие базовые символы:
Если значение aесть 1, то и значение bесть 1; в противном случае значениеbесть0.
Если значение aесть 0, то значение bесть 1; в противном случае значениеbесть0.
ФункцияИЛИустанавливает, что если a, или b,
или сесть 1, тоdесть 1; в противном случае dесть 0.
Функция И устанавливает, что если и a, и b есть 1, то и с есть 1; в противном случае сесть 0.
Пример
Рассмотрим диаграмму, отображающую спецификацию: Файл обновляется, если символ в колонке 1 является буквой “A” или “B”, а символ в колонке 2 – цифра. Если первый символ ошибочный, то выдается сообщение X1, а если второй символ не является цифрой – сообщение X2.
Причины:
1 – символ “A” в колонке 1
2 – символ “B” в колонке 1
3 – цифра в колонке 2
Следствия:
7 – файл обновляется
6 – выдается сообщение X1
8 – выдается сообщение X2
Приведенная функциональная диаграмма содержит невозможную комбинацию причин: причины 1 и 2 не могут быть установлены в 1 одновременно.
Для изображения невозможных комбинаций причин используются следующие логические ограничения:
Ограничение Е устанавливает, что Е должно быть истинным, если хотя бы одна из причин – а или b – принимает значение 1 (a и b не могут принимать значение 1 одновременно).
Ограничение I устанавливает, что по крайней мере одна из величин a, b или c всегда должна быть равной 1 (a,b и с не могут принимать значение 0 одновременно).
Ограничение О устанавливает, что одна и только одна из величин а или bдолжна быть равна 1.
Ограничение R устанавливает, что если a принимает значение 1, то и b должна принимать значение 1, т.е. невозможно, чтобы a было равно 1, а b – 0.
Ограничение М устанавливает, что если следствие aимеет значение 1, то следствие b должно принять значение 0.
Для рассмотренного выше примера физически невозможно, чтобы причины 1 и 2 присутствовали одновременно, но возможно, чтобы присутствовала одна из них. Следовательно, они связаны ограничением Е.
Преобразуем полученную функциональную диаграмму в таблицу решений.
Выберем следствие 7 (файл обновляется). Следствие 7имеет место, еслиузлы3 и 11есть1. В свою очередь узел 11 есть 1, если одна из причин 1 или 2 имеет значений 1. Таким образом, возможны следующие состояния узлов 1 – 3:
1 0 1 и 0 1 0.
Следствие 6 имеет место, если значение узла 11 есть 0 (узлы1 и 2оба равны 0).
Следствие 8 имеет место, если значение узла 3 есть 0.
Таблица решений будет иметь следующий вид:
Столбец 1 представляет условие, где следствие 6 есть 1, столбцы 2,3 – следствие 7 есть 1, а столбец 4 соответствует условию, для которого следствие 8 есть 1.
Пробелы в таблице решений представляют “безразличные” ситуации (состояние причины несущественно).
Преобразуем таблицу решений в набор тестов:
Кол.1 Кол.2
1. 1 1
2. A 2
3. B 2
4. A A