Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Методы тестирования и отладки программного обеспечения. Учебник
.pdf
№ 3621
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ «МИСиС»
ИНСТИТУТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И АВТОМАТИЗИРОВАННЫХ СИСТЕМ
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РФ
ВЫСШЕГО ОБРАЗОВАНИЯ
УПРАВЛЕНИЯ
Кафедра автоматизированного проектирования и дизайна
Е.Е. Карпович
МЕТОДЫ ТЕСТИРОВАНИЯ И ОТЛАДКИ
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Учебник
Рекомендовано редакционно-издательским
советом университета
Москва 2020

УДК 004.4
К26
Рецензент
проф., канд. техн. наук И.М. Крепков (НИУ МЭИ);
проф., д-р техн. наук В.В. Куприянов
Карпович Е.Е.
К26 Методы тестирования и отладки программного обеспе-
чения: учебник / Е.Е. Карпович. – М. : Изд. Дом НИТУ
«МИСиС», 2020. – 136 с.
ISBN 978-5-907226-64-7
В учебнике рассмотрены традиционные методы тестирования программного обеспечения, рассматривающие программу как «белый
ящик» или как «черный ящик», описана организация процесса тестирования в жизненном цикле программного обеспечения. Рассмотрены особенности объектно-ориентированного тестирования и методы регрессионного тестирования, а также методы и средства отладки
программ.
Учебник предназначен для студентов, обучающихся в бакалавриате по направлению подготовки 09.03.01 «Информатика и вычислительная техника».
ISBN 978-5-907226-64-7
УДК 004.4
© Е.Е. Карпович, 2020
© НИТУ «МИСиС», 2020

ОГЛАВЛЕНИЕ
Предисловие ..................................................................... 6
1. Основные понятия и определения процесса тестирования
программного обеспечения .................................................. 7
1.1. Определение процесса тестирования программ .............. 7
1.2. Аксиомы тестирования .............................................. 8
1.3. Фазы тестирования ................................................. 10
Контрольные вопросы ................................................... 12
2. Традиционные методологии тестирования ....................... 13
2.1. Методология тестирования
«белого ящика» ............................................................ 13
2.1.1. Основные понятия и определения ....................... 13
2.1.2. Метод тестирования базового пути ....................... 15
2.1.3. Способы тестирования условий ........................... 20
2.1.4. Тестирование ветвей и операторов отношений ....... 22
2.1.5. Метод потоков данных ....................................... 25
2.1.6. Тестирование циклов ......................................... 27
2.2. Методология тестирования «черного ящика» .............. 30
2.2.1. Особенности тестирования «черного ящика» ......... 30
2.2.2. Метод разбиения на классы по эквивалентности ...... 32
2.2.3. Метод анализа граничных значений .................... 34
Контрольные вопросы ................................................... 38
3. Организация процесса тестирования программного
обеспечения .................................................................... 40
3.1. Место процесса тестирования в жизненном цикле
программного обеспечения ............................................. 40
3.2. Тестирование элементов........................................... 41
3.3. Тестирование интеграции программного обеспечения .. 45
3.3.1. Цель и задачи тестирования интеграции
программного обеспечения .......................................... 45
3.3.2. Нисходящее тестирование интеграции ................. 45
3.3.3. Восходящее тестирование интеграции ................. 48
3.4. Тестирование правильности ..................................... 50
3.5. Системное тестирование .......................................... 52
Контрольные вопросы ................................................... 58
4. Критерии выбора тестов ................................................ 60
4.1. Требования к критерию выбора тестов ....................... 60
4.2. Структурные критерии выбора тестов ........................ 61
4.3. Функциональные критерии выбора тестов .................. 62
3

4.4. Стохастические критерии выбора тестов .................... 64
4.5. Мутационный критерий .......................................... 66
Контрольные вопросы ................................................... 69
5. Особенности тестирования объектно-ориентированных
программ ........................................................................ 70
5.1. Проверка объектно-ориентированных моделей ........... 70
5.2. Изменение методики тестирования для объектно-
ориентированного программного обеспечения ................... 73
5.3. Тестирование, основанное на ошибках ....................... 77
5.4. Тестирование, основанное на сценариях ..................... 78
5.5. Тестирование поверхностной
и глубинной структуры .................................................. 80
5.6. Тестирование содержимого класса ............................ 81
5.6.1. Стохастическое тестирование класса .................... 81
5.6.2. Тестирование разбиений на уровне классов ........... 82
5.7. Методы тестирования взаимодействия классов ........... 83
5.7.1. Стохастическое тестирование.............................. 86
5.7.2. Тестирование разбиений .................................... 87
5.7.3. Тестирование на основе состояний ....................... 87
Контрольные вопросы ................................................... 90
6. Методы регрессионного тестирования программного
обеспечения .................................................................... 92
6.1. Цели и задачи регрессионного тестирования ............... 92
6.2. Виды регрессионного тестирования ........................... 95
6.3. Управляемое и неуправляемое регрессионное
тестирование ................................................................ 97
6.4. Классификация тестов при отборе ............................100
6.5. Пример регрессионного тестирования
функции решения квадратного уравнения .......................104
6.6. Оценивание выборочных методов регрессионного
тестирования ..............................................................106
6.7. Разновидности метода отбора тестов
при регрессионном тестировании ...................................109
6.7.1. Случайные методы отбора тестов ........................109
6.7.2. Безопасные методы отбора тестов .......................111
6.7.3. Методы минимизации отбора тестов ................... 113
6.7.4. Методы отбора тестов, основанные
на покрытии кода .....................................................115
Контрольные вопросы ..................................................117

7. Методы и средства отладки программного обеспечения .....118
7.1. Обзор ошибок, обнаруживаемых
при отладке программ .................................................. 118
7.2. Методы отладки.....................................................122
7.3. Методы и средства получения дополнительной
информации об ошибке .................................................125
7.4. Общая методика отладки программного
обеспечения ................................................................129
7.5. Рекомендации по отладке .......................................130
7.6. Заповеди отладки программного обеспечения ............131
7.7. Уровни отладки программ .......................................132
Библиографический список ..............................................134
5

ПРЕДИСЛОВИЕ
Тестирование программного обеспечения – это один из самых
важных этапов в процессе создания продукта. Не уделив ему
должного внимания, нельзя добиться высокого качества на выходе. Все крупные компании, занимающиеся разработкой программ и приложений для различных бизнес-целей, имеют в штате группу высококвалифицированных тестировщиков, которые
привлекаются к участию в проекте на разных этапах. Каждый
из них может специализироваться на каком-то конкретном этапе тестирования, что позволяет добиваться более качественного
результата. В связи этим в университетах изучают методологии
тестирования программ как отдельную учебную дисциплину.
В данном учебнике рассмотрены методы и средства тестирования программного обеспечения. Учебник написан в соответствии
с программой учебной дисциплины «Методы тестирования и отладки программного обеспечения» и состоит из семи разделов.
В первом разделе даны основные определения, рассмотрены
фазы и информационные потоки процесса тестирования.
Во втором разделе описаны традиционные методы тестирования программ: тестирование «белого ящика» и «черного
ящика». В третьем разделе подробно описаны различные виды
тестирования программ, применяемые в жизненном цикле программного обеспечения, рассмотрены их цели и задачи на каждом этапе разработки программных продуктов.
Критерии выбора тестов и определение полноты тестирования рассмотрены в четвертом разделе. В пятом разделе проанализированы методы объектно-ориентированного тестирования
на уровне классов и интеграции программного обеспечения. Шестой раздел
Методология отладки программ рассмотрена в седьмом разделе.
Учебник составлен по материалам лекций, прочитанных автором студентам, обучающимся в бакалавриате по направлению
09.03.01 «Информатика и вычислительная техника».
посвящен методам
регрессионного тестирования.
6

1. ОСНОВНЫЕ ПОНЯТИЯ И ОПРЕДЕЛЕНИЯ
ПРОЦЕССА ТЕСТИРОВАНИЯ
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
1.1. Определение процесса тестирования
программ
Тестирование программного обеспечения является одним
из основных процессов жизненного цикла программного обеспечения (ЖЦ ПО). Процессы ЖЦ ПО определены в международном стандарте ISO/1ЕС 12207: 1995 (ISO – International
Organization of Standardization – Международная организация по стандартизации; IEC – International Electrotechnical
Commission – Международная комиссия по электротехнике).
Этот документ определяет структуру ЖЦ, содержащую процессы, действия и задачи, которые должны быть выполнены во время создания ПО.
По определению Г. Майерса: «Тестирование – процесс выполнения программы с намерением найти ошибки». Существующие
на сегодняшний день методы тестирования ПО не позволяют
однозначно и полностью устранить все дефекты и ошибки и установить корректность функционирования программного продукта. Поэтому, все существующие методы тестирования действуют
в рамках формального процесса проверки исследуемого или разрабатываемого программного продукта.
Такой процесс формальной проверки или верификации может доказать, что дефекты отсутствуют, с точки зрения используемого метода. То есть нет никакой возможности точно установить или гарантировать отсутствие дефектов в программном
продукте с учетом человеческого фактора, присутствующего
на всех этапах ЖЦ ПО.
Тестирование ПО – это попытка определить, выполняет ли
программа то, что от нее ожидают. Как правило, никакое тестирование не может дать абсолютной гарантии работоспособности
программы в будущем. Задача тестирования ПО
жении стоимости
фектов.
разработки путем раннего обнаружения де-
состоит в сни-
7

Согласно приведенному выше определению, тестирование
предусматривает анализ или выполнение программного продукта. Тестовая деятельность, связанная с анализом результатов разработки ПО, называется статическим тестированием (static
testing). Статическое тестирование предусматривает проверку
программных кодов, сквозной контроль и проверку программы
без запуска па машине, т.е. проверку за столом (desk checks). В отличие от этого, тестовая деятельность, предусматривающая выполнение программного продукта, носит название динамического
тестирования (dynamic testing). Статическое и динамическое тестирование дополняют друг друга, каждый из этих типов реализует собственный подход к выявлению ошибок.
Дефект (bug) – это программная ошибка. Говоря простыми
словами, программная ошибка – не что иное, как изъян в разработке программного продукта, который вызывает несоответствие ожидаемых результатов выполнения программного продукта и фактически полученных результатов. Дефект может
возникнуть на стадиях кодирования, формулирования требований или проектирования, либо же его причина кроется в некорректной конфигурации или данных. Дефектом может быть также что-то другое, что не соответствует ожиданиям заказчика и
может быть, а может и не быть определено в спецификации программного продукта.
«Тестирование программ, – отмечал Э. Дейкстра, – можно использовать для того, чтобы показать наличие ошибок и никогда – для того, чтобы показать их отсутствие!»
1.2. Аксиомы тестирования
Тестирование осуществляется путем выполнения тестов. Ведущими программистами были сформулированы следующие
сиомы тестирования:
– хорош тот тест, для которого высока вероятность обнаруже-
ния ошибки;
– главная проблема тестирования – решить, когда закончить
(обычно решается просто – кончаются деньги);
– невозможно тестировать свою собственную программу;
– необходимая часть тестов – описание выходных результатов;
8
ак-

– избегайте невоспроизводимых тестов;
– готовьте тесты как для правильных, так и для неправиль-
ных данных;
– не тестируйте «с лету»;
– детально изучайте результаты каждого теста;
– по мере обнаружения все большего числа ошибок в некотором модуле или программе, растет вероятность обнаружения
в ней еще большего числа ошибок;
– тестируют программы лучшие умы;
– принято считать тестируемость главной задачей разработчиков программы;
– не изменяй программу, чтобы облегчить тестирование;
– тестирование должно начинаться с постановки целей.
Рассмотрим основные принципы процесса тестирования ПО.
Тестирование – процесс выполнения программы в целях обнаружения ошибок. Шаги процесса задаются тестами.
Каждый тест определяет:
– свой набор исходных данных и условий для запуска про-
граммы;
– набор ожидаемых результатов работы программы.
Другое название теста – тестовый вариант. Полную проверку
программы гарантирует исчерпывающее тестирование. Оно требует проверки всех наборов исходных данных, всех вариантов их
обработки и включает большое число тестовых вариантов. Увы,
но исчерпывающее тестирование во многих случаях остается
только мечтой – срабатывают ресурсные ограничения (прежде
всего ограничения по времени).
Хорошим считают тестовый вариант с высокой вероятностью
обнаружения еще не раскрытой ошибки. Успешным называют
тест, который обнаруживает до сих пор не раскрытую ошибку.
Целью проектирования тестовых вариантов является систематическое обнаружение различных классов ошибок при минимальных затратах времени и стоимости.
Важен
ответ на вопрос: что может тестирование?
Тестирование обеспечивает:
– обнаружение ошибок;
– демонстрацию соответствия функций программы ее назначению;
9

– демонстрацию реализации требований к характеристикам
программы;
– отображение надежности как индикатора качества программы.
А чего не может тестирование? Тестирование не может показать отсутствие дефектов (оно может показывать только их присутствие). Важно помнить это (скорее печальное) утверждение
при проведении тестирования.
1.3. Фазы тестирования
Процесс тестирования ПО можно разделить на три фазы (или
этапа). Реализация тестирования делится на три этапа:
1. Создание тестового набора (test suite) путем ручной разработки или автоматической генерации для конкретной среды
тестирования (testing environment). Тестовый набор включает
в себя исходные данные и соответствующие им ожидаемые результаты.
2. Прогон программы на тестах, управляемый тестовым монитором (test monitor, test driver) с получением протокола тестирования (test log).
3. Оценка результатов выполнения программы на наборе тестов в целях принятия решения о продолжении или остановке
тестирования.
Рассмотрим информационные потоки процесса тестирования
(рис. 1.1).
етирование Оенивание
ходные данные
дл апк а
прораы
10
Рис. 1.1. Информационные потоки процесса тестирования
елтаты тетов
идаеые релтаты
ики
Отладка
нтенивнот
оиок
одел
наденоти
правлени
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
