Загрузка данных


Тестирование программного обеспечения — это проверка и оценка программы, цель которой — найти дефекты и получить информацию о качестве продукта.

При этом важно различать три понятия: верификацию, валидацию и тестирование. Верификация отвечает на вопрос: «Правильно ли мы сделали продукт по требованиям?». Валидация — «Сделали ли мы именно то, что нужно пользователю?». А непосредственно тестирование позволяет проверить поведение программы и обнаружить дефекты.

Также нужно различать ошибку, дефект и сбой. Ошибка — это неправильное действие человека, например разработчика. Из-за этой ошибки в программе может появиться дефект, то есть баг. А когда этот дефект проявляется во время работы программы и мы видим неправильное поведение, это уже сбой.

После обнаружения проблемы проводится отладка. Отладка — это поиск причины дефекта и её устранение. Для этого можно анализировать код, использовать debugger, смотреть логи и воспроизводить действия, которые привели к проблеме. Основной принцип такой: сначала воспроизводим проблему, затем находим её причину, исправляем и снова проверяем.

Существуют разные методы тестирования. При тестировании методом чёрного ящика внутренний код нас не интересует — мы подаём входные данные и проверяем результат. При методе белого ящика, наоборот, учитываем внутреннее устройство и код программы. Серый ящик — промежуточный вариант, когда часть информации о внутреннем устройстве системы нам известна.

Ещё тестирование делится на функциональное и нефункциональное. Функциональное отвечает на вопрос «Что делает система?». Например, действительно ли кнопка «Войти» авторизует пользователя. Нефункциональное отвечает на вопрос «Как система это делает?». Например, насколько быстро загружается страница.

Также выделяют четыре основных уровня тестирования. Компонентное проверяет отдельную часть программы, например функцию. Интеграционное проверяет взаимодействие нескольких компонентов, например приложения и базы данных. Системное проверяет всю систему целиком. Приёмочное показывает, соответствует ли готовый продукт требованиям и потребностям заказчика.

Отдельно существует тестирование производительности. Здесь проверяют скорость, стабильность и работу системы под нагрузкой. Можно измерять время отклика, количество одновременно работающих пользователей, пропускную способность и использование ресурсов компьютера.

И ещё одно важное понятие — регрессионное тестирование. Оно проводится после изменений программы, чтобы проверить, не сломались ли функции, которые раньше работали нормально. Его нельзя путать с повторным тестированием: при повторном тестировании мы проверяем, исправили ли конкретный баг, а при регрессионном — не сломало ли это исправление что-нибудь ещё.

Таким образом, тестирование нужно не для того, чтобы доказать, что программа идеальна, а для того, чтобы объективно оценить её качество, обнаружить проблемы и убедиться, что после изменений система продолжает нормально работать.

Особенно запомни последнюю разницу про re-testing и regression — в лекции она сформулирована очень чётко: re-testing проверяет конкретно исправленный дефект, а regression — не сломались ли другие функции.