Тестирование и отладка программного обеспечения

3.1 Основные термины и их соотношение

3.2 Статические методы устранения ошибок

3.3 Функциональное тестирование

3.4 Структурное тестирование

3 Тестирование и отладка программного обеспечения

3.1 Основные термины и их соотношение

Отладка – процесс изменения программы с целью исправления ошибок. Цель отладки – получение работоспособной программы.

Тест – совокупность специально подобранных входных и соответствующих им выходных данных, используемая для контроля правильности программы, или, проще, заранее заготовленная пара «вход – выход». Выходные данные теста формируются вручную или программным путем, но только не с помощью тестируемой программы.

Содержание тестов определяется спецификацией задачи и логикой ее решения.

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

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

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

Понятие отладки применимо к программе на стадии разработки.

Приведенные понятия теста и тестирования относятся к программе в целом, независимо от аспекта ее рассмотрения (как «черного ящика» или с точки зрения структуры; тестирование разработчиком или заказчиком).

Виды тестов

Функциональные тесты составляются на уровне спецификации, до решения задачи. Будущий алгоритм рассматривается как «черный ящик» - функция с неизвестной (или не рассматриваемой) структурой, преобразующая входы в выходы. Суть функциональных тестов: каким бы способом ни решалась задача, при заданных входных значениях должны получиться соответствующие выходные значения.

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

Чаще всего совокупность тщательно составленных функциональных тестов покрывает множество структурных тестов.

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

Общая последовательность разработки тестов

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

Способы организации отладки и тестирования в процессе разработки

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

Отладка начинается с отладки взаимосвязи подзадач самого высокого уровня (отладки интерфейсов подзадач). Для этого программа, помимо алгоритмов подзадач, сразу пишется полностью. Алгоритмы подзадач заменяются заглушками – простейшими операциями, имитирующими решение подзадачи.

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

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

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

Приведенные понятия рассматривают взаимосвязь процессов разработки и тестирования, но не касаются видов тестирования – функционального или структурного.

Здесь можно сделать следующие уточнения.

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

В рамках общей задачи подзадача тестируется структурными тестами общей задачи как «черный ящик».

1.4


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: