Тестирование осуществляется в три этапа: составление (генерация) тестов, выполнение программы на этих тестах и оценка полученных результатов. Выполнение программы на тестах может осуществляться вручную (на бумаге, «в уме») для несложных программ. Такой вид тестирования называется статическим. Динамическое тестирование выполняется с использованием ЭВМ. Результаты прохождения теста анализирует программист или ЭВМ, для чего требуется иметь эталонные результаты и хранить их в памяти для сравнения. Возможно также использование эталонной программы, которая запускается на тех же тестах и вырабатывает эталонные выходные данные.
Тесты составляют программисты или автоматические системы генерации тестов. При этом используются два подхода: функциональный и структурный (рис. 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.
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):
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.