Уровни тестирования Инна Исаева Классификация видов тестирования По объекту тестирования: Функциональное тестирование (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. Полнота решения функциональных задач. Тестирование целостности (соответствие документации, комплектность). Стрессовое тестирование - на предельных объемах нагрузки входного потока. Корректность использования ресурсов (утечка памяти, возврат ресурсов). Оценка производительности. Эффективность защиты от искажения данных и некорректных действий. Проверка инсталляции и конфигурации на разных платформах. Корректность документации Основные понятия • Рефакторинг — процесс полного или частичного преобразования внутренней структуры программы при сохранении еѐ внешнего поведения.