1. Архитектура
1.1. Варианты создания архитектуры
1.1.1. Big Design Up Front – продумываем всю систему в самом начале
1.1.2. Rough Design Up Front – итеративно дополняем черновой набросок
1.2. Критерии архитектуры
1.2.1. Масштабируемость (Scalability)
1.2.2. Ремонтопригодность (Maintainability)
1.2.3. Заменимость модулей (Swappability)
1.2.4. Возможность тестирования (Testability)
1.2.5. Переиспользование (Reusability)
1.2.6. Сопровождаемость (Maintenance)
1.3. Модели архитектуры
1.3.1. Нотация и модель бизнес процессов (BPMN)
1.3.2. ArchiMate
1.3.3. Context-Containers-Components-Code
1.4. Архитектурные решения
1.5. Архитектурные шаблоны
1.5.1. Многоуровневый шаблон
1.5.1.1. Слой представления (также известен как слой пользовательского интерфейса)
1.5.1.2. Слой приложения (также известен как слой сервиса)
1.5.1.3. Слой бизнес-логики (также известен как уровень предметной области)
1.5.1.4. Слой доступа к данным (также известен как уровень хранения данных)
1.5.2. Клиент-серверный шаблон
1.5.3. Ведущий-ведомый
1.5.4. Каналы и фильтры
1.5.5. Шаблон посредника
1.5.6. Одноранговый шаблон
1.5.7. Шина событий
1.5.8. Модель-представление-контроллер
1.5.9. Доска
1.5.10. Интерпретатор
1.6. Микросервисная архитектура (MSA)
1.7. Сетевая архитектура
1.7.1. Принципы распределённых систем
1.7.1.1. Доступность
1.7.1.2. Производительность
1.7.1.3. Надежность
1.7.1.4. Масштабируемость
1.7.1.5. Управляемость
1.7.1.6. Стоимость
1.7.2. Балансировка
2. Процесс разработки ПО, базовая теория тестирования
2.1. Жизненный цикл разработки ПО
2.1.1. Модели разработки ПО
2.1.1.1. Водопадная модель (Waterfall)
2.1.1.2. Итеративно инкрементальная модель
2.1.1.3. Спиральная модель
2.1.1.4. V-модель
2.2. Стадии цикла разработки ПО
2.2.1. Разработка (Анализ) требований
2.2.2. Проектирование (дизайн и архитектура)
2.2.3. Разработка и программирование
2.2.3.1. Разработка алгоритмов - Создание логики работы программы
2.2.3.2. Написание исходного кода
2.2.3.3. Компиляция
2.2.3.4. Тестирование и отладка (Юнит)
2.2.4. Документация
2.2.4.1. Архитектурная (проектная)
2.2.4.2. Техническая
2.2.4.3. Пользовательская
2.2.4.4. Маркетинговая
2.2.5. Тестирование
2.2.5.1. Планирование и управление
2.2.5.2. Анализ и проектирование
2.2.5.3. Внедрение и реализация
2.2.5.4. Оценка критериев выхода и написание отчетов
2.2.5.5. Действия по завершению тестирования
2.2.6. Поддержка
2.3. Закон Литтла
2.4. Agile
2.5. Scrum
2.6. Kanban
2.7. Знание артефактов тестирования
2.7.1. Требования и спецификация
2.7.1.1. Бизнес-требования
2.7.1.2. Функциональные требования
2.7.1.2.1. Функциональные
2.7.1.2.2. Пользовательские
2.7.1.3. Нефункциональные требования
2.7.2. Качество
2.7.3. Тест-план
2.7.4. Тест-дизайн
2.7.4.1. Техники тест-дизайна
2.7.4.1.1. Эквивалентное разделение (Equivalence Partitioning — EP)
2.7.4.1.2. Анализ Граничных Значений (Boundary Value Analysis — BVA)
2.7.4.1.3. Причина / Следствие (Cause/Effect — CE)
2.7.4.1.4. Предугадывание ошибки (Error Guessing — EG)
2.7.4.1.5. Исчерпывающее тестирование (Exhaustive Testing — ET)
2.7.4.1.6. Попарное тестирование (Pairwise Testing)
2.7.5. Чек-лист
2.7.6. Тест-кейс
2.7.6.1. Шаги воспроизведения
2.7.6.2. Ожидаемый результат
2.7.6.3. Фактический результат
2.7.6.4. Предусловия
2.7.6.5. Постусловия
2.7.7. Ошибки ПО
2.7.7.1. Ошибка (error)
2.7.7.2. Дефект, Баг
2.7.7.3. Сбой (failure)
2.7.8. Источники дефектов
2.7.8.1. Ошибки в спецификации, дизайне или реализации программной системы
2.7.8.2. Ошибки использования системы
2.7.8.3. Неблагоприятные условия окружающей среды
2.7.8.4. Умышленное причинение вреда
2.7.8.5. Потенциальные последствия предыдущих ошибок, условий или умышленных действий
2.7.9. Верификация
2.7.10. Валидация
2.7.11. Матрица соответствия требований
2.7.12. Баг-репорт
2.7.12.1. Градация Серьезности дефекта (Severity)
2.7.12.1.1. S1 Блокирующая (Blocker)
2.7.12.1.2. S2 Критическая (Critical)
2.7.12.1.3. S3 Значительная (Major)
2.7.12.1.4. S4 Незначительная (Minor)
2.7.12.1.5. S5 Тривиальная (Trivial)
2.8. Основные ошибки тестирования
2.8.1. Зависимость тест-кейсов друг от друга
2.8.2. Непонятная формулировка шагов выполнения
2.8.3. Нечеткая формулировка ожидаемого результата
2.9. Качество ПО
2.9.1. Функциональность
2.9.1.1. Функциональная исправность
2.9.1.2. Соответствие стандартам
2.9.1.3. Функциональная совместимость
2.9.1.4. Безопасность
2.9.1.5. Точность
2.9.2. Надежность
2.9.2.1. Завершенность
2.9.2.2. Востанавливаемость
2.9.2.3. Устойчивость к отказам
2.9.3. Удобство использования
2.9.3.1. Удобство изучения
2.9.3.2. Понятность
2.9.3.3. Удобство и простота использования
2.9.4. Эффективность
2.9.4.1. Эффективность по времени
2.9.4.2. Эффективность использования ресурсов
2.9.5. Удобство сопровождения
2.9.5.1. Стабильность
2.9.5.2. Анализируемость
2.9.5.3. Контролепригодность
2.9.5.4. Изменяемость
2.9.6. Портативность
2.9.6.1. Удобство установки
2.9.6.2. Заменяемость
2.9.6.3. Совместимость
3. Клиент-серверная архитектура
3.1. Front-end
3.1.1. Интерфейс пользователя
3.1.1.1. Пользовательское поведение
3.1.1.2. Техническая реализация
3.1.1.3. Внешний вид
3.1.2. Website
3.1.2.1. HTML
3.1.2.2. CSS
3.1.2.3. JavaScript
3.1.3. Компоненты браузера
3.1.3.1. Пользовательский интерфейс
3.1.3.2. Механизм браузера
3.1.3.3. Модуль отображения
3.1.3.4. Сетевые компоненты
3.1.3.5. Исполнительная часть пользовательского интерфейса
3.1.3.6. Интерпретатор JavaScript
3.1.3.7. Хранилище данных
3.2. Back-end
3.2.1. HTML-разметка страницы
3.2.2. Сервер
3.2.3. Код приложения
3.2.4. База данных
3.2.4.1. СУБД
3.2.4.1.1. Функции СУБД
3.2.4.2. Виды баз данных
3.2.4.2.1. Реляционные
3.2.4.2.2. Нереляционные
3.2.4.3. SQL
3.2.4.3.1. Типы данных SQL
3.2.4.3.2. Основные типы запросов
3.2.4.4. API
3.2.4.4.1. Доступность API
3.2.4.4.2. Типы данных в API
3.2.4.4.3. Типы API
3.2.4.4.4. Тестирование API
3.2.4.4.5. Инструменты тестирования
4. Тестирование
4.1. Тестирование верстки
4.1.1. Визуальная часть
4.1.1.1. Отображение элементов, соответствие дизайну
4.1.1.2. Тестирование локализованных версий (перевод сайта)
4.1.1.3. Соответствие макету (слои в Фотошопе)
4.1.1.4. Увеличение/уменьшение масштаба работает нормально
4.1.1.5. Подсвечивание полей с ошибками
4.1.1.6. Проверка в разрешениях (+прокрутка)
4.1.2. Доступность и отсутствие JS ошибок
4.1.2.1. Нажимаются ли кликабельные элементы (внутренние/внешние ссылки, ссылки на электронную почту, кнопки, иконки)
4.1.2.2. При наведении на кликабельные элементы изменяется курсор, иначе – нет
4.1.2.3. Подсказки на непонятных кликабельных элементах
4.1.2.4. При отключении изображений должны быть подписи небольшим серым цветом
4.1.2.5. Работоспособность при выключенном JS. Критические функции должны быть доступны без JS
4.1.3. Корректная работа, надежная верстка
4.1.3.1. Проверка работы с данными (введение большого и малого количества текста в форму; блоки с контентом меняются местами
4.1.3.2. Проверка работы стилей (введение текста с заголовками, с абзацем и без, с картинками)
4.1.4. 404-е запросы
4.2. Функциональное тестирование
4.2.1. Корректность работы главных функций
4.2.2. Переход по ссылкам
4.2.3. Проверка пользовательских форм (валидация полей, обязательные/необязательные поля, уведомления об ошибках при неверном вводе, добавление комментариев в блог, обратная связь)
4.2.4. Поиск и покупка товара, оформление заказа
4.2.5. Сверка переданного заказчиком контента с имеющимся на сайте
4.2.6. Проверка возможной авторизации/регистрации
4.2.7. Добавление, удаление и редактирование данных пользователей, товаров и заказов
4.3. Usability тестирование (User Experience)
4.3.1. Навигационное тестирование сайта
4.3.2. Тестирование контента
4.3.3. Удобство использования
4.3.4. Тестирование UI (User Interface)
4.4. Тестирование совместимости (конфигурационное тестирование)
4.4.1. Кросс-платформенное тестирование сайта.
4.4.2. Кросс-браузерное тестирование сайта.
4.4.2.1. Сайт кроссбраузерный, если
4.4.2.1.1. структура сайта сохранена
4.4.2.1.2. отсутствуют развалы в вёрстке
4.4.2.1.3. нет непредусмотренных наложений
4.4.2.1.4. текста на другой текст и текста на изображения
4.4.2.1.5. сохранена общая читабельность информации на странице
4.4.2.1.6. все действия выполняются
4.4.3. Просмотр на мобильных устройствах.
4.4.4. Тестирование БД
5. Основы автоматизации
5.1. Пирамида тестирования
5.1.1. Системный
5.1.1.1. E2E (пользовательское поведение, бизнес-процессы)
5.1.1.2. Взаимодействие с ОС и системными ресурсами
5.1.2. Интеграционный
5.1.2.1. API (функциональность, контракт)
5.1.2.2. Интеграции между модулями одной системы
5.1.2.3. Простые интеграции между разными системами или сервисами
5.1.2.4. Совместимость изменений
5.1.2.4.1. Поддержка обратной совместимости
5.1.2.4.2. Поддержка двух версий реализации
5.1.2.4.3. Поэтапное переключение на новую версию
5.1.3. Модульный
5.1.3.1. Используем unit-tests
5.1.3.2. Используем моки
5.1.3.3. Проверяем всю доступную на этом уровне функциональность
5.2. Что автоматизируют?
5.2.1. Вспомогательные действия
5.2.2. Проверки (тест-кейсы)
5.2.3. Процессы
5.2.4. Генерация кода
5.3. Составляющие инструментов автоматизации
5.3.1. Язык программирования
5.3.2. Модуль для написания и запуска тестов Test Runner
5.3.2.1. Тесты
5.3.2.2. Наборы тестов
5.3.2.3. Предусловия / Постусловия
5.3.2.4. Хуки
5.3.2.4.1. Тест начался, закончился
5.3.2.4.2. Тест прошел успешно/неуспешно
5.3.2.4.3. Тест пропущен
5.3.2.4.4. Сьют начался, закончился
5.3.2.4.5. Сьют прошел успешно/неуспешно
5.3.2.4.6. Начало тестирования, окончание тестирования
5.3.2.5. Параметризация
5.3.2.6. Отчеты
5.3.2.6.1. Консоль
5.3.2.6.2. UI
5.3.3. Модуль для общения с интерфейсом (драйвер)
5.3.4. Дополнительные библиотеки
5.3.5. Модуль для генерации отчетов
5.3.6. Мокер
5.4. Инструменты автоматизации
5.4.1. Статические анализаторы кода
5.4.2. Back-end Tools
5.4.2.1. SQL
5.4.2.2. API
5.4.3. UI Tools
5.4.3.1. Drivers
5.4.3.1.1. Selenium
5.4.3.1.2. Puppeteer
5.4.3.1.3. Playwright
5.4.3.2. Frameworks
5.4.3.2.1. Selenide
5.4.3.2.2. WebdriverIO
5.4.3.2.3. CodeceptJS
5.4.3.2.4. И еще куча большая
5.4.4. API Tools
5.4.4.1. Базовые
5.4.4.1.1. Postman
5.4.4.1.2. SoapUI
5.4.4.1.3. JMeter
5.4.4.1.4. Programming Languages
5.4.4.2. Контрактные
5.4.4.2.1. Pact
5.4.5. Load Tools
5.4.5.1. JMeter
5.4.5.2. Gatling
5.4.5.3. Yandex Tank
5.5. Хороший автотест
5.5.1. Следует AAA (Arrange – Act – Assert)
5.5.2. Максимально простой
5.5.3. Атомарный
5.5.4. Содержит только одну проверку
5.5.5. Понятен любому участнику разработки
6. Этапы обеспечения качества
6.1. Квадранты тестирования
6.1.1. Грани
6.1.1.1. тесты для команды,
6.1.1.2. для бизнеса,
6.1.1.3. для критики продукта
6.1.1.4. для проверки технологий
6.1.2. Способы выполнения
6.1.2.1. автоматизированные
6.1.2.2. частично автоматизированные
6.1.2.3. ручные
6.1.2.4. с использованием инструментов
6.1.3. Какие помогает решить задачи?
6.1.3.1. Способ классифицировать тесты на проекте
6.1.3.2. Инструмент для решения разных задач тестирования
6.1.3.3. Способ улучшать тестовое покрытие
6.2. Стратегия тестирования
6.2.1. Оцениваем ресурсы команды и наше приложение
6.2.2. Оцениваем, какие виды тестирования будем применять
6.2.3. Оцениваем решения, которые будем применять для этих видов
6.2.4. Оцениваем риски
6.2.5. Расставляем приоритеты
6.2.6. Оцениваем ресурсы команды и наше приложение
6.3. Уровни обеспечения качества
6.3.1. Testing
6.3.1.1. Проверка на соответствие требованиям
6.3.1.2. Ответственность за свой компонент
6.3.2. Quality Control
6.3.2.1. Выявление текущего качества
6.3.2.2. Ответственность за состояние системы
6.3.3. Quality Assurance
6.3.3.1. Улучшение качества
6.3.3.2. Предотвращение ошибок
6.3.3.3. Ответственность за системы и процессы
6.4. Agile-тестирование
6.4.1. Манифест Agile-тестирования
6.4.2. Принципы Agile-тестирования
6.4.2.1. Тестирует вся команда
6.4.2.2. Тестирование – это не фаза/этап
6.4.2.3. Тестирование продвигает продукт
6.4.2.4. Укорачивание петли обратной связи
6.4.2.5. Тест формирует ожидания
6.4.2.6. Сначала тест – потом код
6.4.2.7. Нулевая терпимость к ошибкам
6.4.2.8. Легковесная документация
6.4.2.9. Тестирование — часть “Критерия готовности” (DoD)
6.5. Пять уровней определения «качества»
6.5.1. Трансцендентное качество
6.5.1.1. Узнаваемость
6.5.1.2. Эмоции при использовании сервиса
6.5.1.3. Вовлеченность клиента
6.5.1.4. Лояльность клиента
6.5.2. Качество по мнению пользователя
6.5.2.1. Удобство
6.5.2.2. Соответствие ожиданиям пользователя
6.5.2.3. Скорость работы сервиса (с точки зрения клиента)
6.5.2.4. Привлекательность с точки зрения дизайна
6.5.3. Качество продукта
6.5.3.1. Безопасность
6.5.3.2. Производительность
6.5.3.3. Исследовательское тестирование
6.5.3.4. Развитие
6.5.4. Качество, основанное на производстве
6.5.4.1. Степень автоматизации тестирования
6.5.4.2. Мониторинг и логирование
6.5.4.3. Количество багов на продакшене
6.5.4.4. Возвраты с переделкой идеи
6.5.4.5. Отказы от сделанной фичи
6.5.4.6. Вновь найденные баги
6.5.5. Качество ценности
6.5.5.1. Доверие
6.5.5.2. Комфорт
6.5.5.3. Рентабельность
6.5.5.4. Эффективность рекламы
7. Виды тестирования
7.1. По знанию внутренностей системы (Типы тестирования)
7.1.1. Черный ящик (предположения)
7.1.2. Серый ящик
7.1.3. Белый ящик
7.2. По объекту тестирования
7.2.1. Функциональное
7.2.2. Тестирование интерфейса пользователя
7.2.3. Тестирование локализации (страны)
7.2.4. Тестирование скорости и надежности
7.2.5. Тестирование безопасности
7.2.6. Тестирование опыта пользователя (Юзабилити)
7.2.7. Тестирование совместимости
7.3. По субъекту тестирования
7.3.1. Альфа-тестирование (сотрудники)
7.3.2. Бета-тестирование (кто-то случайный до релиза)
7.4. По времени проведения тестирования
7.4.1. До передачи пользователям
7.4.1.1. Тест приемки
7.4.1.2. Тестирование новых функций
7.4.1.3. Регрессионное тестирование
7.4.1.3.1. Полное
7.4.1.3.2. Выборочное
7.4.1.4. Тест сдачи
7.4.2. После передачи пользователям
7.5. По критерию "позитивности" сценариев
7.5.1. Позитивное
7.5.2. Негативное
7.6. По степени изолированности тестируемых компонентов
7.6.1. Компонентное
7.6.2. Интеграционное
7.6.3. Системное
7.7. По степени автоматизируемости
7.7.1. Ручное
7.7.2. Автоматизированное
7.7.3. Смешанное (полуавтоматизированное)
8. Виды тестирования (По целям)
8.1. Функциональное
8.1.1. Что делает?
8.1.1.1. Функциональное
8.1.1.1.1. Тестирование, основанное на анализе спецификации функциональности компонента или системы
8.1.1.2. Безопасности
8.1.1.2.1. Вид тестирования, используемый для проверки безопасности системы, а также для анализа рисков, связанных с обеспечением целостного подхода к защите приложения: атак хакеров, вирусов, несанкционированного доступа к конфиденциальным данным.
8.1.1.3. Взаимодействия
8.1.1.3.1. Тестирование для определения возможности взаимодействия программного продукта с одним или более заданными компонентами или системами.
8.1.1.4. Тестирование пользовательского интерфейса (GUI Testing)
8.1.1.4.1. Функциональная проверка интерфейса на соответствие требованиям — размер, шрифт, цвет, consistent behavior.
8.2. Нефункциональное
8.2.1. Как делает?
8.2.1.1. Тестирование системы для оценки характеристик системы и программного обеспечения.
8.2.1.1.1. Производительности
8.2.1.1.2. Удобства использования
8.2.1.1.3. На отказ и восстановление
8.2.1.1.4. Конфигурации
8.2.1.1.5. Тестирование установки (Installation testing)
8.3. Связанное с изменениями
8.3.1. Что изменилось?
8.3.1.1. Regress
8.3.1.1.1. Все на свете
8.3.1.2. Smoke
8.3.1.2.1. Основное
8.3.1.3. Sanity
8.3.1.3.1. В глубь
8.3.1.4. Повторное тестирование (Re-testing)
8.3.1.4.1. тестирование, во время которого исполняются тестовые сценарии, выявившие ошибки во время последнего запуска, для подтверждения успешности исправления этих ошибок.
8.3.1.5. Тестирование сборки (Build Verification Test)
8.3.1.5.1. тестирование направленное на определение соответствия, выпущенной версии, критериям качества для начала тестирования.
8.4. Неформализованное
8.4.1. Свободное тестирование
8.4.1.1. Ad-hoc testing (интуитивное тестирование) – выполняется, когда мало времени на тестирование.
8.4.1.2. Pair testing (парное тестирование) – процесс, когда 2 тестировщика проверяют один модуль и помогают друг другу.
8.4.1.3. Buddy testing (совместное тестирование) — когда 2 человека, как правило разработчик + QA, работают параллельно и находят дефекты в одном и том же модуле.
8.4.2. Monkey testing — произвольное тестирование программы с целью ее сломать.
8.4.3. Исследовательское тестирование (exploratory testing) — подход, в рамках которого тестировщик выполняет работу с приложением по выбранному сценарию, который дорабатывается в процессе выполнения.
8.4.3.1. Session-based testing (сессионное тестирование) – тестирование с точки зрения пользователя по разным пользовательским сценариям.
8.4.3.2. Checklist-based testing (тестирование чек листов) — тестирование по готовому чек-листу.
9. Клиент-серверная модель взаимодействия
9.1. Слои приложения
9.1.1. Представление
9.1.2. Логика
9.1.3. Хранилище
9.2. Монолитные и распределенные приложения
9.2.1. Тонкий клиент
9.2.2. Толстый клиент
9.3. Сетевые модели
9.3.1. OSI
9.3.1.1. Application
9.3.1.1.1. HTTP, DHCP, DNS
9.3.1.2. Presentation
9.3.1.2.1. SSL, TLS
9.3.1.3. Session
9.3.1.3.1. L2TP, PPTP
9.3.1.4. Transport
9.3.1.4.1. TCP, UDR
9.3.1.5. Network
9.3.1.5.1. IP, ICMP
9.3.1.6. Data link
9.3.1.6.1. ARP, PPPoE
9.3.1.7. Physical
9.3.1.7.1. USB, Bluetooth
9.3.2. TCP/IP
9.3.2.1. Application
9.3.2.2. Transport
9.3.2.3. Network
9.3.2.4. Link
9.4. Вёрстка
9.4.1. Отзывчивый дизайн
9.4.2. Адаптивный дизайн
9.4.3. Мобильный сайт