Тема9 Тестирование, отладка и сборка ПО

advertisement
Тестирование
программных
средств
Содержание
Основные определения
Экономика тестирования
Тестирование программы как «черного ящика»
Тестирование программы как «белого ящика»
Аксиомы (принципы) тестирования
Философия тестирования
Тестирование модулей
Пошаговое тестирование
Восходящее тестирование
Нисходящее тестирование
Метод «большого скачка»
Метод сандвича
Модифицированный метод сандвича
Введение
Цель проверяющего
(тестовика) — заставить
программу сбиться.
Роль тестирования
состоит в том, чтобы
определить
местонахождение
немногочисленных
ошибок, оставшихся в
хорошо спроектированной
программе.
Основные определения

Тестирование (testing) — процесс выполнения программы
(или части программы) с целью найти ошибки.

Доказательство (proof) — попытка найти ошибки в
программе безотносительно к внешней для программы
среде. Большинство методов доказательства предполагает
формулировку утверждений о поведении программы и
затем вывод и доказательство математических теорем о
правильности программы. Доказательства могут
рассматриваться как форма тестирования, хотя они и не
предполагают прямого выполнения программы.

Контроль (verification) — попытка найти ошибки,
выполняя программу в тестовой или моделируемой среде.
Основные определения

Испытание (validation) — попытка найти ошибки, выполняя
программу в заданной реальной среде.

Аттестация (certification) — авторитетное подтверждение
правильности программы. При тестировании с целью
аттестации выполняется сравнение с некоторым заранее
определенным стандартом.

Отладка (debugging) - не является разновидностью
тестирования. Хотя слова «отладка» и «тестирование» часто
используются как синонимы, под ними подразумеваются
разные виды деятельности. Тестирование — деятельность,
направленная на обнаружение ошибок; отладка направлена на
установление точной природы известной ошибки, а затем —
на исправление этой ошибки. Эти два вида деятельности
связаны — результаты тестирования являются исходными
данными для отладки.
Вопросы
1. В чем отличие между процессами отладки и
тестирования ПО?
Версии зала...
Тестирование и отладка
Основные определения

Тестирование модуля, или автономное
тестирование (module testing, unit testing) —
контроль отдельного программного модуля, обычно в
изолированной среде (т. е. изолированно от всех
остальных модулей). Тестирование модуля иногда
включает так же математическое доказательство.

Тестирование сопряжений (integration testing) —
контроль сопряжений между частями системы
(модулями, компонентами, подсистемами).

Тестирование внешних функций (external function
testing) — контроль внешнего поведения системы,
определенного внешними спецификациями.
Основные определения

Комплексное тестирование (system testing) —
контроль и/или испытание системы по отношению к
исходным целям. Комплексное тестирование является
процессом контроля, если оно выполняется в
моделируемой среде, и процессом испытания, если
выполняется в среде реальной, жизненной.

Тестирование приемлемости (acceptance testing) —
проверка соответствия программы требованиям
пользователя.

Тестирование настройки (installation testing) —
проверка соответствия каждого конкретного варианта
установки системы с целью выявить любые ошибки,
возникшие в процессе настройки системы.
Тестирование


при создании типичного программного
проекта около 50 % общего времени и более
50–60 % общей стоимости расходуется на
проверку (тестирование) разрабатываемой
программы или системы.
доля стоимости тестирования в общей
стоимости программ имеет тенденцию
возрастать при увеличении сложности
программных изделий и повышении
требований к их качеству.
Тестирование
Тестирование
Тестирование программ охватывает ряд видов
деятельности:
 постановку задачи;
 проектирование тестов;
 написание тестов;
 тестирование тестов;
 выполнение тестов;
 изучение результатов тестирования.
Наиболее важным является проектирование
тестов.
СВЯЗЬ ПРОЦЕССОВ ТЕСТИРОВАНИЯ
С ПРОЦЕССОМ ПРОЕКТИРОВАНИЯ
Экономика тестирования
Тестирование программы как «черного ящика»
ВХОД
Тестируется
входная
информация
ВЫХОД
Тестируется
выходная
информация
Сложности исчерпывающего теста:
1) нельзя создать тест, гарантирующий отсутствие ошибок;
2) разработка таких тестов противоречит экономическим
требованиям.
Тестирование программы как «белого ящика»
ВХОД
Тестируется
внутреннее
содержание программы
ВЫХОД
Слабые стороны.
1) Число не повторяющих друг друга маршрутов в
программе - астрономическое.
2) Хотя исчерпывающее тестирование маршрутов
является полным тестом, и хотя каждый маршрут
программы может быть проверен, сама программа
может содержать ошибки.
Тестирование программы как «белого ящика»
Слабые стороны объясняются следующим образом:
1) Исчерпывающее тестирование маршрутов не может
дать гарантии того, что программа соответствует
описанию.
2) Программа может быть неверной в силу того, что
пропущены некоторые маршруты.
3) Исчерпывающее тестирование маршрутов не может
обнаружить ошибок, появление которых зависит от
обрабатываемых данных.
Аксиомы (принципы)
тестирования

Гленфорд Майерс в своей
работе "Надежность
программного
обеспечения" приводит
несколько "аксиом
тестирования"
Аксиомы тестирования
1)Хорош тот тест, для которого высока
вероятность обнаружить ошибку.


эта аксиома является фундаментальным
принципом тестирования.
процесс тестирования должен представлять
собой попытки обнаружить в программе
прежде не найденные ошибки.
Аксиомы тестирования
2) Одна из самых сложных проблем при
тестировании - решить, когда нужно
его закончить.
Экономической проблема: как выбрать
конечное число тестов, которое дает
максимальную отдачу (вероятность
обнаружения ошибок) для данных
затрат.
Аксиомы тестирования
3) Не нужно тестировать свою
собственную программу.
Тестирование должно быть в высшей
степени разрушительным процессом, но
имеются глубокие психологические
причины, по которым программист не
может относиться к своей собственной
программе как разрушитель.
Аксиомы тестирования
4) Необходимая часть всякого теста описание ожидаемых выходных
данных (результатов).
Ожидаемые результаты нужно определять
заранее, чтобы не возникла ситуация,
когда «глаз видит то, что хочет
увидеть».
Аксиомы тестирования
5) Избегайте невоспроизводимых тестов, не
тестируйте «с лету».
Для того чтобы тестировать программу в
пакетной системе, программист обычно
должен оформить тест в виде специальной
ведущей программы или в виде файла
тестовых данных.
Тесты следует документировать и хранить в
такой форме, чтобы каждый мог
использовать их повторно.
Аксиомы тестирования
6) Готовьте тесты как для правильных, так и
для неправильных входных данных.
Тесты, представляющие неожиданные
или неправильные входные данные,
часто лучше обнаруживают ошибки, чем
правильные тесты.
Аксиомы тестирования
7) Детально изучите результаты
каждого теста.
Тестирование программы означает
большее, нежели выполнение
достаточного количества тестов;
оно также предполагает изучение
результатов каждого теста.
Аксиомы тестирования
8) Если число ошибок растет, то растет
вероятность обнаружения ошибок.
Ошибки образуют кластеры, т. е. встречаются
группами.
Аксиомы тестирования
9) Поручайте тестирование самым
способным программистам.
Тестирование и в особенности
проектирование тестов — этап в
разработке программного обеспечения,
особенно требующий творческого
подхода.
Аксиомы тестирования
10) Проект системы должен быть таким,
чтобы каждый модуль подключался к
системе только один раз.
Множество проблем во многих больших
программных системах возникает из-за
нарушения этой аксиомы.
Проектировать небольшие модули, каждый
из которых выполняет отдельную
функцию.
Аксиомы тестирования
11) Никогда не изменяйте программу,
чтобы облегчить ее тестирование.
Возникает соблазн изменить программу,
чтобы было легче ее тестировать
Аксиомы тестирования
12) Тестирование, как и всякая другая
деятельность, должна начинаться с
постановки целей.
Тесты должны быть спроектированы,
реализованы, проверены и, наконец,
выполнены.
Задачи тестирования должны быть
сформулированы на каждом его этапе
Философия тестирования
Чтобы ориентироваться в стратегиях проектирования
тестов, рассматривают два крайних подхода,
находящихся на границах спектра.
Тестирование модулей
Цель тестирования модулей — сравнение функций,
реализуемых модулем, со спецификациями его
функций или интерфейса.
Причины тестирования модулей
1) Появляется возможность управлять комбинаторикой
тестирования, поскольку первоначально внимание
концентрируется на небольших модулях программы.
2) Облегчается задача отладки программы, т.е.
обнаружение места ошибки и исправление текста
программы.
3) Допускается параллелизм, что позволяет
одновременно тестировать несколько модулей.
Сборка модулей
Подходы к комбинированию модулей
1) Пошаговое тестирование
2) Монолитное тестирование
Пошаговое тестирование
Восходящее тестирование
4
3
2
1
Процесс повторяется до тех пор, пока не будет
достигнута вершина.
Пошаговое тестирование
Восходящее тестирование
Пошаговое тестирование
Нисходящее тестирование
1
2
3
4
Процесс повторяется до тех пор, пока не будут
собраны и проверены все модули.
Пошаговое тестирование
Нисходящее тестирование
Пошаговое тестирование
Нисходящее тестирование
Достоинства:
1) метод совмещает тестирование модуля,
тестирование сопряжений и частично тестирование
внешних функций.
2) когда модули ввода-вывода уже подключены,
тесты можно готовить в удобном виде
3) выгоден, когда есть сомнения относительно
осуществимости программы в целом или когда в
проекте программы могут оказаться серьезные
дефекты.
4) отсутствие необходимости в драйверах; вместо
драйверов вам просто следует написать «заглушки».
Пошаговое тестирование
Нисходящее тестирование
Недостатки:
1)модуль редко тестируется досконально сразу
после его подключения.
2)может породить веру в возможность начать
программирование и тестирование верхнего уровня
программы до того, как вся программа будет
полностью спроектирована.
Монолитное тестирование
Метод «большого скачка»
В соответствии с этим методом каждый модуль
тестируется автономно. По окончании тестирования
модулей они интегрируются в систему все сразу.
Заглушки и драйверы необходимы для каждого
модуля. Модули не интегрируются до самого
последнего момента, а это означает, что в течение
долгого времени серьезные ошибки в сопряжениях
могут остаться необнаруженными.
Монолитное тестирование
Метод «большого скачка»
Для крупных программ метод «большого
скачка» обычно губителен
Пошаговое тестирование
Метод сандвича
Тестирование методом сандвича представляет собой
компромисс между восходящим и нисходящим
подходами.
При использовании этого метода одновременно
начинают восходящее и нисходящее тестирование,
собирая программу как снизу, так и сверху и встречаясь
в конце концов где-то в середине.
Пошаговое тестирование
Метод сандвича
1
2
3
2
1
Метод сандвича сохраняет такое достоинство
нисходящего и восходящего подходов, как начало
интеграции системы на самом раннем этапе.
Пошаговое тестирование
Модифицированный метод сандвича
В модифицированном методе сандвича нижние
уровни также тестируются строго снизу вверх.
Модули верхних уровней сначала тестируются
изолированно, а затем собираются нисходящим
методом.
Таким образом, модифицированный метод
сандвича также представляет собой компромисс
между восходящим и нисходящим подходами.
Литература
1. Гусятников
В.Н.,
Безруков
А.И.
Стандартизация и разработка программных
систем. - М: Финансы и статистика, 2010.
2. Гагарина Л.Г., Кокорева Е.В., Виснадул Б.Д.
Технология разработки программного
обеспечения.- М: ИД «ФОРУМ»: ИНФРА-М,
2008
3. Майерс Г. Искусство тестирования
программ. /Г. Майерс Т. Баджетт,
К. Сандлер/ – М: «Вильямс Диалектика»,
2012
Download