Национальный цифровой ресурс Руконт - межотраслевая электронная библиотека (ЭБС) на базе технологии Контекстум (всего произведений: 637335)
Контекстум
Электро-2024

Эффективное тестирование программного обеспечения. Руководство разработчика (5000,00 руб.)

0   0
Первый авторАниче
ИздательствоМ.: ДМК Пресс
Страниц372
ID837194
АннотацияВ этой книге представлены основы систематического эффективного тестирования программного обеспечения. Показаны способы автоматизировать часть этого процесса, приводятся шаблоны проектирования, которые помогут писать легко контролируемый и простой для наблюдения код. Обсуждаются модульные, интеграционные и системные тесты, рассматривается передовой опыт работы с тестовым кодом. Издание адресовано разработчикам с разным уровнем знаний: начинающие детально изучат процесс тестирования на конкретных примерах, опытные познакомятся с новыми практическими приемами и отточат имеющиеся навыки.
ISBN978-5-97060-997-2
Аниче, М. Эффективное тестирование программного обеспечения. Руководство разработчика / М. Аниче .— Москва : ДМК Пресс, 2023 .— 372 с. — ISBN 978-5-97060-997-2 .— URL: https://rucont.ru/efd/837194 (дата обращения: 01.06.2024)

Предпросмотр (выдержки из произведения)

Эффективное_тестирование_программного_обеспечения._Руководство_разработчика.pdf
УДК 004.415.53 ББК 32.372 А67 А67 Эффективное тестирование программного обеспечения / пер. с англ. А. Н. Киселева. – М.: ДМК Пресс, 2023. – 370 с.: ил. Аниче М. ISBN 978-5-97060-997-2 В этой книге представлены основы систематического эффективного тестирования программного обеспечения. Показаны способы автоматизировать часть этого процесса, приводятся шаблоны проектирования, которые помогут писать легко контролируемый и простой для наблюдения код. Обсуждаются модульные, интеграционные и системные тесты; рассматривается передовой опыт работы с тестовым кодом. Издание адресовано разработчикам с разным уровнем знаний: начинающие детально изучат процесс тестирования на конкретных примерах, опытные познакомятся с новыми практическими приемами и отточат имеющиеся навыки. УДК 004.415.53 ББК 32.372 © LICENSEE 2023. Authorized translation of the English edition © 2021 Manning Publications. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой This translation is published and sold by permission of Manning Publications, the owner of all rights to publish and sell the same. бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. ISBN 978-1-6334-3993-1 (англ.) ISBN 978-5-97060-997-2 (рус.) © Manning Publications, 2022 © Перевод, оформление, издание, ДМК Пресс, 2022
Стр.5
Оглавление 1  Эффективное и систематическое тестирование программного обеспечения .....................................................................................................28 2  Тестирование на основе спецификаций ........................................................64 3  Структурное тестирование и охват кода ......................................................101 4  Проектирование по контрактам ...................................................................138 5  Тестирование на основе свойств ...................................................................161 6  Дублеры и имитации для тестирования .......................................................187 7  Проектирование с учетом простоты тестирования .....................................222 8  Разработка через тестирование ....................................................................251 9  Большие тесты ................................................................................................270 10  Качество тестового кода ................................................................................319 11  Заключение .....................................................................................................340
Стр.6
Содержание Оглавление ............................................................................................................ 5 Предисловие ........................................................................................................ 12 Вступление ......................................................................................................... 15 Благодарности .................................................................................................... 17 О книге ................................................................................................................ 20 Об авторе ........................................................................................................... 26 Об иллюстрации на обложке .............................................................................. 27 1 Эффективное и систематическое тестирование программного обеспечения ................... 28 1.1 Разница между разработчиками, тестирующими и не тестирующими свой код ................................................................ 29 1.2 Эффективное тестирование программного обеспечения для разработчиков .................................................................................. 40 1.2.1 Эффективное тестирование в процессе разработки .................... 41 1.2.2 Эффективное тестирование как итеративный процесс ............... 43 1.2.3 Сосредоточение внимания на разработке, а затем на тестировании .......................................................................... 43 1.2.4 Миф о «правильности по замыслу» ................................................ 44 1.2.5 Стоимость тестирования ........................................................... 44 1.2.6 Что подразумевается под словами «эффективный» и «систематический» ................................................................... 45 1.2.7 Роль автоматизации тестирования ............................................ 45 Всеобъемлющее тестирование невозможно .................................. 46 1.3.2 Своевременное прекращение тестирования .................................. 47 1.3.3 Изменчивость важна (парадокс пестицидов) ................................ 47 1.3.4 В одних частях ошибок больше, чем в других .................................. 47 1.3.5 Никакой объем тестирования не будет идеальным или достаточным ......................................................................... 48 1.3.6 Контекст имеет решающее значение ........................................... 48 1.3.7 Верификация не валидация ............................................................ 49 1.3 Принципы тестирования программного обеспечения (или Почему тестирование такое сложное) .......................................... 46 1.3.1 1.4 Пирамида тестирования и на чем следует сосредоточиться............... 49 1.4.1 Модульное тестирование ............................................................. 50 1.4.2 Интеграционное тестирование .................................................... 52 1.4.3 Системное тестирование ............................................................ 53
Стр.7
Содержание 7 1.4.4 Когда использовать каждый уровень тестирования ...................... 54 1.4.5 Почему я предпочитаю модульные тесты? ................................... 55 1.4.6 Что я тестирую на разных уровнях?............................................. 56 1.4.7 Что делать, если вы не согласны с пирамидой тестирования ........ 57 1.4.8 Поможет ли эта книга найти все ошибки? ................................... 60 Упражнения ........................................................................................................ 60 Итоги ................................................................................................................. 62 2 Тестирование на основе спецификаций ........................... 64 2.1 Требования говорят сами за себя .......................................................... 65 2.1.1 Шаг 1: изучение требований, входных и выходных данных .............. 68 2.1.2 Шаг 2: исследование, что делает программа для различных входных данных ............................................................................. 68 2.1.3 Шаг 3: изучение возможных входных и выходных данных и определение разделов ................................................................. 69 2.1.4 Шаг 4: анализ границ .................................................................... 72 2.1.5 Шаг 5: определение списка тестов ................................................ 74 2.1.6 Шаг 6: автоматизация тестирования ......................................... 76 2.1.7 Шаг 7: расширение набора тестов с применением творческой смекалки и опыта ......................................................................... 79 2.2 Коротко о тестировании на основе спецификаций ............................. 80 2.3 Поиск ошибок с помощью тестирования на основе спецификаций .... 82 2.4 Тестирование на основе спецификаций в реальных условиях ........... 91 2.4.1 Процесс тестирования должен быть итеративным, а не последовательным ................................................................. 91 2.4.2 Как далеко следует заходить при тестировании на основе спецификаций? ............................................................................. 91 2.4.3 Раздел или граница? Не имеет значения! ...................................... 91 2.4.4 Точек включения и исключения достаточно, но не стесняйтесь добавлять точки входа и выхода ................................................... 92 2.4.6 Когда количество комбинаций резко возрастает, оставайтесь прагматичными ...................................................... 92 2.4.7 Если сомневаетесь, используйте самые простые входные данные .... 93 2.4.8 Выбирайте разумные значения входных данных, которые вас не беспокоят................................................................................. 93 2.4.9 Проверяйте на null и исключительные случаи, только когда это имеет смысл .......................................................................... 93 2.4.10 Используйте параметризованные тесты, когда тесты имеют одну и ту же структуру ................................................................ 94 2.4.11 Требования могут иметь любую степень детализации ................. 94 2.4.12 Применима ли предложенная методика для тестирования классов и состояний? .................................................................... 95 2.4.13 Роль опыта и творчества ............................................................. 96 2.4.5 Используйте варианты одних и тех же входных данных для более полного понимания ........................................................ 92 Упражнения ........................................................................................................ 97 Итоги ................................................................................................................. 99 3 Структурное тестирование и охват кода .................101 Кратко о структурном тестировании ...................................................105 3.1 Охват кода, правильный способ ...........................................................102 3.2
Стр.8
8 Содержание 3.3 Критерии охвата кода ...........................................................................107 3.3.1 Охват строк ...............................................................................107 3.3.2 Охват ветвей ..............................................................................107 3.3.3 Охват условий + ветвей ...............................................................108 3.3.4 Охват путей ...............................................................................109 3.4 Сложные условия и критерий охвата MC/DC ....................................... 110 3.4.1 Абстрактный пример ..................................................................110 3.4.2 Создание набора тестов по критерию MC/DC .............................111 3.5 Тестирование циклов и других подобных конструкций ....................113 3.6 Классификация и выбор критериев .....................................................114 3.7 Тестирование на основе спецификаций и структурное тестирование: практический пример ..................................................115 Граничное и структурное тестирование ..............................................120 3.8 3.9 Одного структурного тестирования часто недостаточно ...................121 3.10 Структурное тестирование в реальном мире ......................................123 3.10.1 Почему некоторые испытывают неприязнь к оценке охвата кода? ...........................................................................................123 3.10.2 Что означает достижение 100 % охвата? ...................................125 3.10.3 Какой критерий охвата использовать .........................................127 3.10.4 MC/DC для слишком сложных выражений, которые нельзя упростить ...................................................................................127 3.10.5 Другие критерии охвата ..............................................................129 3.10.6 Когда полный охват нежелателен? ..............................................129 3.11 Мутационное тестирование .................................................................130 Упражнения .......................................................................................................133 Итоги ................................................................................................................137 4 Проектирование по контрактам .......................................138 4.1 4.2 Пред- и постусловия ..............................................................................139 4.1.1 Ключевое слово assert ...................................................................140 4.1.2 Строгие и слабые пред- и постусловия .........................................141 Инварианты ...........................................................................................143 4.3 Изменение контрактов и принцип подстановки Лисков ...................147 4.3.1 Наследование и контракты .........................................................149 Как проектирование по контрактам связано с тестированием? .......151 Проектирование по контрактам в реальном мире .............................152 4.5.1 Слабые или строгие предусловия? ................................................153 4.5.2 Проверка допустимости входных данных, контракты или и то и другое? ........................................................................153 4.5.3 Утверждения и исключения: когда использовать то или другое ....155 4.5.4 Исключение или возврат специального значения? ........................157 4.5.5 Когда не следует использовать проектирование по контрактам ...........................................................................157 4.4 4.5 4.5.6 Следует ли писать тесты для предусловий, постусловий и инвариантов? ...........................................................................158 4.5.7 Инструментальная поддержка ....................................................158 Упражнения .......................................................................................................159 Итоги ................................................................................................................160 5 Тестирование на основе свойств ..........................................161 5.1 Пример 1: программа проверки оценок за экзамены ........................162
Стр.9
Содержание 9 5.2 5.3 5.4 Пример 2: тестирование метода unique ..............................................166 Пример 3: тестирование метода indexOf .............................................168 Пример 4: тестирование класса Basket ................................................174 5.5 Пример 5: создание сложных объектов предметной области ............182 5.6 Тестирование на основе свойств в реальном мире ............................183 5.6.1 Тестирование на основе примеров и на основе свойств ................183 5.6.2 Общие проблемы в тестах на основе свойств ..............................184 5.6.3 Творческая смекалка имеет решающее значение ..........................185 Упражнения .......................................................................................................186 Итоги ................................................................................................................186 6 Дублеры и имитации для тестирования ......................187 6.1 Пустышки, фиктивные объекты, заглушки, шпионы и имитации ....190 6.1.1 Объекты-пустышки ....................................................................190 6.1.2 Фиктивные объекты ....................................................................190 6.1.3 Заглушки .....................................................................................190 6.1.4 Имитации ...................................................................................191 6.1.5 Шпионы .......................................................................................191 Введение в фреймворки имитаций .....................................................191 6.2.1 Заглушки .....................................................................................192 6.2.2 Имитации и ожидания .................................................................197 6.2.3 Захват аргументов .....................................................................200 6.2.4 Моделирование исключений .........................................................204 6.2 6.3 Имитации в реальном мире .................................................................206 6.3.1 Недостатки имитаций ...............................................................207 6.3.2 Что следует и не следует имитировать ......................................208 6.3.3 Обертки для даты и времени .......................................................213 6.3.4 Имитация типов, которыми вы не владеете ...............................215 6.3.5 Что другие говорят об имитациях? .............................................217 Упражнения .......................................................................................................219 Итоги 220 7 Проектирование с учетом простоты тестирования .......................................................................................222 7.1 7.2 Отделение инфраструктурного кода от предметного ........................223 Внедрение зависимостей и управляемость .........................................232 7.3 Улучшение наблюдаемости классов и методов ...................................235 7.3.1 Пример 1: добавление методов для упрощения проверок ..............236 7.3.2 Пример 2: наблюдение за поведением методов void ......................237 Передача зависимостей через конструктор класса и значений через параметры методов ....................................................................240 Сложные условия и тестируемость .............................................246 Проектирование с учетом простоты тестирования на практике .......244 7.5.1 Связность тестируемого класса ..................................................244 7.5.2 Тесная связь с тестируемым классом ...........................................245 7.5.3 7.5.4 Приватные методы и тестируемость ........................................246 7.5.5 Статические методы, синглтоны и тестируемость ...................247 7.5.6 Гексагональная архитектура и имитации как метод проектирования ..........................................................................247 7.5.7 Дополнительная информация о проектировании с учетом 7.4 7.5
Стр.10
10 Содержание тестируемости .......................................................................................248 Упражнения .......................................................................................................248 Итоги ................................................................................................................250 8 9 Разработка через тестирование .........................................251 Размышления о первом опыте применения TDD ...............................260 8.1 Наш первый сеанс TDD .........................................................................252 8.2 8.3 TDD в реальном мире ............................................................................262 8.3.1 Использовать или не использовать TDD? .....................................262 8.3.2 TDD следует использовать постоянно? .......................................263 8.3.3 Подходит ли TDD для всех типов приложений? ............................263 8.3.4 Что говорят исследования о TDD? ...............................................264 8.3.5 Другие школы TDD .......................................................................265 8.3.6 TDD и правильное тестирование .................................................267 Упражнения .......................................................................................................267 Итоги ................................................................................................................269 Большие тесты ....................................................................................270 9.1 Когда использовать большие тесты .....................................................271 9.1.1 Тестирование больших компонентов ...........................................271 9.1.2 Тестирование больших компонентов, взаимодействующих с внешним кодом ..........................................................................280 9.3 9.4 База данных и тестирование SQL .........................................................285 9.2.1 Что тестировать в SQL-запросе.................................................285 9.2.2 Автоматизированные тесты для SQL-запросов ..........................287 9.2.3 Настройка инфраструктуры для тестирования SQL ..................293 9.2.4 Рекомендации ..............................................................................295 9.2 Системные тесты ...................................................................................296 9.3.1 Введение в Selenium ......................................................................297 9.3.2 Проектирование объектов страниц ............................................300 9.3.3 Шаблоны и лучшие практики .......................................................310 Заключительные замечания по большим тестам ...............................314 9.4.1 Как сочетаются методы тестирования в больших тестах?........314 9.4.2 Анализ затрат/выгод ..................................................................315 9.4.3 Будьте осторожны с методами, охваченными, но не проверенными тестами ......................................................315 9.4.4 Инфраструктурный код имеет большое значение ........................316 9.4.5 DSL и инструменты для разработки тестов клиентами ............316 9.4.6 Тестирование веб-систем других типов ......................................316 Упражнения .......................................................................................................317 Итоги ................................................................................................................318 10 Качество тестового кода ...........................................................319 10.1 Отличительные черты поддерживаемого тестового кода ..................320 10.1.1 Тесты должны быть быстрыми ...................................................320 10.1.2 Тесты должны быть связными, независимыми и изолированными .......................................................................320 10.1.3 Тесты должны иметь причину для существования .......................321 10.1.4 Тесты должны быть воспроизводимыми и надежными .................321 10.1.5 Тесты должны иметь строгие утверждения ................................323
Стр.11
Содержание 11 10.1.6 Тесты должны терпеть неудачу при изменении поведения ...........323 10.1.7 Тесты должны иметь единственную и четкую причину неудачи ...324 10.1.8 Тесты должны быть простыми в разработке ..............................324 10.1.9 Тесты должны легко читаться ....................................................325 10.1.10 Тесты должны позволять легко изменять и развивать их ............329 10.2 Дурно пахнущие тесты ..........................................................................329 10.2.1 Чрезмерное дублирование.............................................................330 10.2.2 Нечеткие утверждения ................................................................331 10.2.3 Неправильное обращение со сложными или внешними ресурсами ....................................................................................331 10.2.4 Слишком обобщенные наборы тестовых данных ..........................332 10.2.5 Чувствительные утверждения ....................................................333 Упражнения .......................................................................................................336 Итоги ................................................................................................................339 11 Заключение ..............................................................................................340 11.1 Хотя модель выглядит линейной, итерации имеют фундаментальное значение .................................................................340 11.2 Разработка программного обеспечения без ошибок: миф или реальность? ............................................................................341 11.3 Вовлекайте в процесс тестирования конечных пользователей .........342 11.4 Модульное тестирование – сложная задача ........................................343 11.5 Уделяйте внимание мониторингу ........................................................344 11.6 Что дальше? ...........................................................................................344 Приложение A. Решения упражнений ................................................................346 Ссылки ................................................................................................................354 Предметный указатель .....................................................................................361
Стр.12

Облако ключевых слов *


* - вычисляется автоматически
Периодика по подписке
Антиплагиат система Руконтекст