Программа

Введение

Примеры наиболее дорогих ошибок

Причины возникновения:

Космические лучи :)

Ошибки в ПО

Виды тестирования (различные классификации)

По цели

По свойствам

По исполнителю

По уровню

По интерфейсу

Политика версионирования при тестировании:

Альфа-версии

Бета-версии

Выбор вида тестирования

Пирамида тестирования:

Приоритеты различных видов тестирования

Соотношение видов тестов

Принципы семантического версионирования

Стандарт версионирования

Пример на разделяемом протоколе взаимодействия

Пример на библиотечных решениях

Тестирование API. WSDL

Теория

Особенности тестирования протоколов

RPC: WSDL/SOAP + REST/JSON

Messaging

XSD-схемы - основы и примеры описания типов

WSDL-сервис - основы и пример описания методов

Пример генерированного кода для сервера и клиента

Практика

Сетевой сниферинг SOAP с помощью wireshark

SoapUI:

Создание проекта на основе WSDL

Посылка запросов и получение ответов

Создание TestSuit

Проверки на основе XPath

Планирование тестирования. Test case / Bugs

Структура и назначение Test-plan:

Кто

Что

Как

Когда

Критерии

Структура и назначение Test-case:

Предусловия

Шаги

Фокусирование на функциональности

Заведение ошибок:

Workflow

Основные поля и принципы их заполнения

Поиск дубликатов по стекам

Тестирование API. REST

Теория

Напоминание принципов протокола HTTP (GET/POST/...)

JSON-schema/OpenAPI/Swagger - основы и примеры описания REST API

Аналогия с XSD/WSDL

Практика

Postman:

Импорт описания API

Применение окружений

Создание запросов

Использование переменных и их переопределение

Тесты на JS для проверки:

Кода возврата

Полей ответа

Соответствия схеме

Назначение и применение mock-серверов

Тестирование интерфейса пользователя. Web

Теория

Архитектура Selenium:

WebDriver

API на Python, Java, ...

IDE как расширение браузеров

Принципы идентификации элементов web-страниц

Практика

Selenuim:

Создание виртуального окружения на Python

Запуск WebDriver

Поиск элементов на странице (css, id, атрибуты)

Ввод текстовых данных

Автоматизированная генерация сценария в IDE

Нагрузочное тестирование

Теория

Фокусы нагрузочного тестирования:

Производительность

Стабильность

Отказоустойчивость

Масштабируемость

Стресс-тестирование

Профили нагрузки:

SLA

Пределы производительности

Параметры:

Время обработки

Чатота запросов

Размер данных

Откуда брать профили нагрузки:

БД

Журналы

Прогноз

Инструменты:

Web-консоль

JMeter

Gatling

K6

Практика

JMeter:

Поддерживаемые протоколы

Ручное создание HTTP-запросов

Запись сценариев через Proxy

Thread group и его параметры

Вынесение общих параметров

Просмотр результатов в графическом и табличном видах

Тестирование интерфейса пользователя (Desktop)

Теория

Примеры технологий разработки интерфейса и соответствие инструментов тестирования со знанием идентификаторов элементов интерфейса:

Qt: Squish

JS: Selenium

Применение компьютерного зрения: Sikuli

Архитектура

OpenCV

Tesseract

Jython

Применение машинного обучения: Testolang

Архитектура

QEMU/KVM

Нейронные сети

Практика

Sikuli:

Подключение sikuli в Python

Тест сложения в калькуляторе передачей нажатия клавиш

Фиксация изображений для поиска

Параметры поиска изображения

Fuzzing-тестирование

Теория

Виды верификации:

Статическая

Динамическая (..., fuzzing, ...)

Sanitizers:

asan

ubsan

Генерация данных:

Начальная выборка

Контроль трасс исполнения

Эволюционные алгоритмы

Критерии остановки тестирования

Практика

AFL fuzzer:

Сборка clang с ключами asan и ubsan

Создание тестовых данных для затравки

Пример на дереве условных операторов

Запуск afl-fuzz и разъяснение полей, выводимых в runtime

Разбор результата поска падения приложения

Классификация методов test design

Black Box

Классы эквивалентности

Граничные значения

Доменный анализ

Диаграмма переходов состояний

Попарное тестирование

Тестирование вариантов использования

White Box

Потоки управления

Потоки данных

Experience based

Checklists

Исследовательское тестирование. Test strategy model:

Function

Claims

Domain

User

Stress

Risk

Flow

Automatic

Scenario