- •2015 Г.
- •1. Тестирование программного обеспечения
- •1.1 Модульное тестирование
- •1.2 Интеграционное тестирование
- •1.3 Системное тестирование
- •1.4 Регрессионное тестирование
- •1.5 Ручное и автоматизированное тестирование
- •2. Автоматизация тестирования программного обеспечения
- •2.1 Основные аспекты автоматического тестирования
- •2.2 Преимущества и недостатки автоматического тестирования
- •3. Практическая часть
- •3.1 Постановка задачи
- •3.2 Описание тестируемой программы
- •3.3 Выполнение тестирования
- •3.4 Листинг тестов
- •3.5 Листинг тестируемой программы
1.1 Модульное тестирование
Под модульным тестированием (unit testing) понимается процесс тестирования отдельных модулей, функций или классов исходного кода программы. Целью модульного тестирования является поиск ошибок и дефектов в отдельно взятых, изолированных частях программы, а также оценка возможности перехода к следующему этапу кодирования и тестирования. Модульное тестирование проводится преимущественно на этапах проектирования и кодирования ПО непосредственно программистами.
Согласно стандарту [3], модульное тестирование включает следующие этапы:
1) Планирование:
а) планирование общего подхода, ресурсов и расписания;
б) определение характеристик ПО, которые должны быть протестированы на соответствие со спецификацией;
в) доработка общего плана тестирования;
2) Получение тестов:
а) разработка набора тестов;
б) реализация доработанного плана и проекта;
3) Выполнение модульного тестирования:
а) выполнение тестовых процедур;
б) проверка окончания работы;
в) оценка тестирования и модулей.
Модульное тестирование позволяет, в первую очередь, обнаружить дефекты, связанные с алгоритмическими ошибками и ошибками реализации алгоритмов в программе, ошибки работы с условиями и циклами, а также с использованием локальных переменных и ресурсов.
Модульное тестирование соответствует принципам тестирования «белого ящика» (структурного тестирования) и характеризуется степенью, с которой тесты выполняют или покрывают логику программы.
Наименьший компонент программы, который может быть независимо протестирован, – элемент (unit). Обычно в качестве тестируемого элемента выступает либо программный модуль (единица компиляции), если система разрабатывается с помощью процедурного языка программирования, либо класс – в случае использования объектно-ориентированного языка. На практике существует несколько подходов к выделению тестируемых элементов:
элемент – это часть программного кода, выполняющая одну функцию с точки зрения функциональных требований;
элемент – это программный модуль, т.е. минимально компилируемый элемент программной системы;
элемент – это задача в списке задач проекта;
элемент – это участок кода, который помещается на одном экране (или листе бумаги);
элемент – это один класс или их множество с единым интерфейсом.
Для тестирования каждого отдельного элемента необходимо использовать тестовые драйверы и заглушки. Под драйвером понимается модуль тестов, который запускает тестируемый элемент. Заглушки заменяют недостающие элементы программы, к которым обращается тестируемый элемент, и выполняют такие действия, как:
- возвращение к элементу без выполнения каких-либо других действий;
- отображение трассировочного сообщения;
- возвращение константы или ввод значения тестером;
- упрощенная реализация недостающего элемента;
- имитация исключительных или критических (аварийных) условий.
Для большинства языков программирования высокого уровня существуют специализированные инструменты и библиотеки для выполнения модульного тестирования.
Модульные тесты используются для так называемой разработки через тестирование (TDD – test-driven development). В этом случае сначала разрабатывается тест, покрывающий желаемое изменение кода программы, и только потом пишется код, который может пройти данный тест. На практике модульные тесты покрывают критические и нетривиальные участки кода. Это может быть код, который подвержен частым изменениям, код, от работы которого зависит работоспособность большого количества другого кода, или код с большим количеством зависимостей. Чтобы быть полезным, модульное тестирование должно устанавливать собственную среду выполнения перед применением, чтобы иметь возможность последовательно проверять код, который следует протестировать. После того как тест реализован и проверен, он регистрируется в системе контроля исходного кода, и его результаты будут использованы в течение остатка жизненного цикла продукта, чтобы обеспечить требуемое поведение метода.
