Диагностирование микропроцессорных систем, страница 6

          Тестирование осуществляется в три этапа: составление (генерация) тестов, выполнение программы на этих тестах и оценка полученных результатов. Выполнение программы на тестах может осуществляться вручную (на бумаге, «в уме») для несложных программ. Такой вид тестирования называется статическим. Динамическое тестирование выполняется с использованием ЭВМ. Результаты прохождения теста анализирует программист или ЭВМ, для чего требуется иметь эталонные результаты и хранить их в памяти для сравнения. Возможно также использование эталонной программы, которая запускается на тех же тестах и вырабатывает эталонные выходные данные.

          Тесты составляют программисты или автоматические системы генерации тестов. При этом используются два подхода: функциональный и структурный (рис. 7.7).

Рис.7.7. Методы тестирования программ

 Рассмотрим эти подходы на примере тестов для бинарной программы вычисления булевой функции

 .                                       (7.1)

          Метод бинарных программ основан на том, что процесс вычисления булевой функции можно свести к последовательности выполнения  команд условного перехода i: если А, то j, иначе i + 1, где i – порядковый номер команды; А – булева переменная, значение которой проверяется данной командой. Если А = 1, то осуществляется переход к выполнению команды с порядковым номером j, если А = 0 – переход  к  выполнению  команды  с  порядковым  номером  i + 1.

          Функция  (7.1) задана табл. 7.5 и вычисляется программой (рис. 7.8).

Рис.7.8.  Схема бинарной программы

          В табл. 7.6 приведена ее запись на языке Ассемблер. Переменные a,b,c подаются в порт ввода с именами VAR1, VAR2, VAR3, а результат вычисления выводится в порт с именем RES. В памяти выделена область из трех ячеек М1, М2, М3 для хранения соответственно переменных a,bиc. Адрес ячейки М1 имеет имя BASE. Переменные представлены значениями 0 и 1. Для каждой переменной отводится 1 байт, т.е. одна ячейка памяти, имеющая восемь разрядов (в восьмиразрядном микропроцессоре). Поэтому значению 0 соответствует слово 00000000, а значению 1 – 00000001.

                                                                        Т а б л и ц а   7.5

a b c

f

0 0 0

0

0

0 0 1

0

0

0 1 0

0

0

0 1 1

0

0

1 0 0

0

1

1 0 1

1

1

1 1 0

1

1

1 1 1

0

0

          При функциональном подходе тестируемая программа рассматривается как «черный ящик». Это означает, что ее внутренняя структура никак не учитывается, а тесты составляются на основании функциональных спецификаций. Для рассматриваемой бинарной программы необходимо проверить, что реализуется именно данная функция (табл. 7.5).

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

          Для оценки полноты функционального теста используются различные критерии (рис. 7.7):

Т а б л и ц а   7.6