Уровни тестирования Инна Исаева Классификация видов тестирования По объекту тестирования: Функциональное тестирование (functional testing) Тестирование производительности (performance testing) • Нагрузочное тестирование (load testing) • Стресс-тестирование (stress testing) • Тестирование стабильности (stability / endurance / soak testing) Тестирование удобства использования (usability testing) Тестирование интерфейса пользователя (UI testing) Тестирование безопасности (security testing) Тестирование локализации (localization testing) Тестирование совместимости (compatibility testing) Классификация видов тестирования По знанию системы: Тестирование чёрного ящика (black box) Тестирование белого ящика (white box) Тестирование серого ящика (gray box) По степени автоматизации: Ручное тестирование (manual testing) Автоматизированное тестирование (automated testing) Полуавтоматизированное тестирование (semiautomated testing) Классификация видов тестирования По степени изолированности компонентов: Компонентное (модульное) тестирование (component/unit testing) Интеграционное тестирование (integration testing) Системное тестирование (system/end-to-end testing) По времени проведения тестирования: Альфа тестирование (alpha testing) • Тестирование при приёмке (smoke testing) • Тестирование новой функциональности (new feature testing) • Регрессионное тестирование (regression testing) • Тестирование при сдаче (acceptance testing) Бета тестирование (beta testing) Классификация видов тестирования По признаку позитивности сценариев: Позитивное тестирование (positive testing) Негативное тестирование (negative testing) По степени подготовленности к тестированию: Тестирование по документации (formal testing) Эд Хок (интуитивное) тестирование (ad hoc testing) Модульное тестирование • Тестируется минимально возможный для тестирования компонент, например, отдельный класс или функция. • Процесс проверки корректностей модулей(классов) программы. • Заключается в изолированной проверке каждого отдельного элемента путем запуска тестов в искусственной среде. Что такое модуль? Модуль - это • часть программного кода, выполняющая одну функцию с точки зрения функциональных требований; • программный модуль, т.е. минимальный компилируемый элемент программной системы; • задача в списке задач проекта (с точки зрения его менеджера); • участок кода, который может уместиться на одном экране или одном листе бумаги; • один класс или их множество с единым интерфейсом. Цель • Достоверность в соответствии требованиям каждого отдельного модуля системы перед тем, как будет произведена его интеграция в состав системы • Получение работоспособного кода с наименьшими затратами • Определение степени готовности системы к переходу на следующий уровень разработки и тестирования • Разработка тестов, проверяющих работу каждой нетривиальной функции или метода модуля Задачи модульного тестирования • Поиск и документирование несоответствий требованиям • Поддержка разработки и рефакторинга низкоуровневой архитектуры системы и межмодульного взаимодействия • Поддержка рефакторинга модулей • Поддержка устранения дефектов и отладки Фазы модульного тестирования (Стандарт IEEE 1008 ) • Фаза планирования тестирования Этап планирования основных подходов к тестированию, ресурсное планирование и календарное планирование Этап определения свойств, подлежащих тестированию Этап уточнения основного плана, сформированного на этапе (1) • Фаза получения набора тестов Этап разработки набора тестов Этап реализации уточненного плана • Фаза измерений тестируемого модуля Этап выполнения тестовых процедур Этап определения достаточности тестирования Этап оценки результатов тестирования и тестируемого модуля. Преимущества • • • • Облегчение рефакторинга Легкость обнаружения ошибок Упрощение интеграции Устранение сомнений по поводу надежности отдельных модулей • Документирование кода • Позволяет уменьшить связность компонентов системы Недостатки • Увеличение срока разработки • При изменении требований, ранее созданные тесты становятся ненужными Размер теста • Тестовый метод должен быть коротким • Количество проверок должно быть минимальным иначе по падению теста сложно будет найти причину ошибки. • Каждый тест должен покрывать одну единицу бизнеслогики: Простой метод Один из исходов конструкции if..else Один из случаев (case) блока switch Исключение, обрабатываемое блоком try…catch Исключение, генерируемое (throw) в методе Интеграционное тестирование • Интеграционное тестирование - это тестирование части системы, состоящей из двух и более модулей. • Интеграционное тестирование - это тестирование корректности взаимодействия нескольких модулей, объединенных в единое целое. Цель • Удостовериться в корректности совместной работы компонентов системы • Проверка соответствия проектируемых единиц функциональным, приёмным и требованиям надежности. Задача интеграционного тестирования • Поиск дефектов, связанных с ошибками в реализации и интерпретации взаимодействия между модулями. Методы проведения интеграционного тестирования • восходящее тестирование; • монолитное тестирование; • нисходящее тестирование. Восходящее тестирование Сначала тестируются все программные модули, входящие в состав системы и только затем они объединяются для интеграционного тестирования. Монолитное тестирование • Монолитное тестирование предполагает, что отдельные компоненты системы серьезного тестирования не проходили. • Основное преимущество – отсутствие необходимости в разработке тестового окружения, драйверов и заглушек. • После разработки всех модулей выполняется их интеграция, затем система проверяется вся в целом, как она есть. Недостатки • очень трудно выявить источник ошибки (идентифицировать ошибочный фрагмент кода); • трудно организовать исправление ошибок; • процесс тестирования плохо автоматизируется. Нисходящее тестирование Сначала тестируют только самый верхний управляющий уровень системы, без модулей более низкого уровня. Затем постепенно с более высокоуровневыми модулями интегрируются более низкоуровневые. Системное тестирование • Системное тестирование охватывает целиком всю систему, фокусируется на нефункциональных требованиях — безопасности, производительности, точности, надежности. • На этом уровне также тестируются интерфейсы к внешним приложениям, аппаратному обеспечению, операционной среде и т.д. Задачи Выявление дефектов, связанных с работой системы в целом: неверное использование ресурсов системы непредусмотренные комбинации данных пользовательского уровня несовместимость с окружением непредусмотренные сценарии использования отсутствующая или неверная функциональность неудобство в применении и тому подобное. Категории тестов системного тестирования 1. 2. 3. 4. 5. 6. 7. 8. Полнота решения функциональных задач. Тестирование целостности (соответствие документации, комплектность). Стрессовое тестирование - на предельных объемах нагрузки входного потока. Корректность использования ресурсов (утечка памяти, возврат ресурсов). Оценка производительности. Эффективность защиты от искажения данных и некорректных действий. Проверка инсталляции и конфигурации на разных платформах. Корректность документации Основные понятия • Рефакторинг — процесс полного или частичного преобразования внутренней структуры программы при сохранении еѐ внешнего поведения.