Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методы тестирования и отладки программного обеспечения. Учебник

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
№ 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. Информационные потоки процесса тестирования
елтаты тетов
идаеые релтаты
ики
Отладка
нтенивнот оиок
одел
наденоти
правлени
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]