Введение в тестирование программного обеспечения
Представьте, что вы купили новый телефон. Принесли домой, включили — а он не звонит. Или звонит, но не показывает контакты. Или показывает, но батарея садится за час. Вряд ли вам это понравится. Именно для того, чтобы такие ситуации не случались, существует тестирование программного обеспечения.
План лекции
Сегодня мы заложим фундамент. Вот что вы узнаете.
- 1 Что такое тестирование и зачем оно нужно
- 2 Чем тестирование отличается от отладки
- 3 Кто такой тестировщик
- 4 Что такое ошибка, дефект и сбой
- 5 Виды тестирования: статическое и динамическое
- 6 Тестирование «чёрным ящиком»
- 7 Тестирование «белым ящиком»
- 8 Уровни тестирования: модульное, интеграционное, системное, приёмочное
- 9 Пирамида тестирования
- 10 Типичные мифы о тестировании
- 11 Итоги и практика
Что такое тестирование?
Тестирование программного обеспечения — это процесс проверки программы на соответствие требованиям и ожиданиям. Простыми словами: это способ убедиться, что программа делает то, что должна, и не делает того, чего не должна.
Представьте, что вы написали программу «Калькулятор». Она должна складывать, вычитать, умножать и делить. Тестирование — это когда вы сами (или другой человек) вводите разные числа и проверяете, что результат правильный.
Найти ошибки, пока их не нашли пользователи.
Чем раньше найдена ошибка, тем дешевле её исправить.
Почему тестирование важно?
Ошибки в программном обеспечении могут стоить очень дорого. Вот несколько реальных примеров.
- 1996 год. Ракета Ariane 5 взорвалась через 37 секунд после запуска. Причина — ошибка в программном обеспечении, которая не была обнаружена при тестировании. Ущерб — около 370 миллионов долларов.
- 2018–2019 годы. Boeing 737 MAX. Две катастрофы, 346 погибших. Причина — ошибка в программном обеспечении системы управления.
- 2024 год. Крупный сбой в работе облачного провайдера привёл к остановке работы тысяч компаний по всему миру на несколько часов.
Тестирование vs отладка
Эти два слова часто путают, но это разные вещи. Давайте разберёмся.
Кто такой тестировщик?
Тестировщик (по-английски QA-инженер, от Quality Assurance — «обеспечение качества») — это специалист, который проверяет программное обеспечение на наличие ошибок.
Проверяет, что программа работает по требованиям.
Составляет отчёты, которые помогают программистам исправить проблему.
Общается с разработчиками, аналитиками и менеджерами.
Пытается сломать программу так, как это сделал бы реальный человек.
Ошибка, дефект, сбой: в чём разница?
В тестировании есть три важных термина, которые часто путают. Давайте разберёмся.
a - b вместо a + b
Сбой (failure)ситуация, когда программа работает неправильнокалькулятор выдаёт 1 вместо 3 при сложении 1 и 2
Виды тестирования: обзор
Тестирование бывает очень разным. Чтобы не запутаться, все виды делят на несколько групп.
Статическое и динамическое тестирование
Это деление по тому, запускаем ли мы программу во время тестирования.
Программа не запускается. Проверяются код, документация, требования. Пример: чтение кода коллегой, анализ документации.
Программа запускается. Проверяется, как она работает на реальных данных. Пример: ввод чисел в калькулятор и проверка результата.
Динамическое — «проверка в деле».
Тестирование «чёрным ящиком»
Тестирование «чёрным ящиком» (black box testing) — это когда тестировщик не знает, как устроена программа внутри. Он проверяет только то, что видно снаружи: входные данные и результат.
Тестирование «белым ящиком»
Тестирование «белым ящиком» (white box testing) — это когда тестировщик знает, как устроена программа, видит её код и может проверить внутреннюю логику.
Тестирование «серым ящиком»
Серый ящик — это что-то среднее между чёрным и белым. Тестировщик знает часть внутреннего устройства, но не всё.
Уровни тестирования
Тестирование можно проводить на разных «уровнях» — от самой маленькой части программы до всей системы целиком.
Модульное тестирование
Модульное тестирование (unit testing) — это проверка отдельных маленьких частей программы: функций, методов, классов.
- Проверяет одну функцию или метод.
- Изолирует её от остальной программы.
- Обычно пишется программистом, а не тестировщиком.
- Запускается автоматически.
Интеграционное тестирование
Интеграционное тестирование (integration testing) — это проверка того, как несколько модулей работают вместе.
- Проверяет взаимодействие между модулями.
- Ищет ошибки в «стыках» — там, где один модуль передаёт данные другому.
- Проводится после модульного тестирования.
Системное тестирование
Системное тестирование (system testing) — это проверка всей системы целиком, как единого целого.
- Проверяет, что система выполняет все требования.
- Имитирует работу реального пользователя.
- Проводится после интеграционного тестирования.
- Может включать тестирование производительности, безопасности, удобства использования.
Приёмочное тестирование
Приёмочное тестирование (acceptance testing) — это последняя проверка перед сдачей программы заказчику или выпуском на рынок.
- Проводится заказчиком или конечным пользователем.
- Отвечает на вопрос: «Доволен ли заказчик?»
- Проверяет, что программа решает бизнес-задачи, а не просто «работает».
Пирамида тестирования
Все уровни тестирования можно представить в виде пирамиды. Чем ниже уровень — тем больше тестов и тем быстрее они выполняются.
Миф 1: «Тестирование доказывает, что программа работает»
Это один из самых распространённых мифов. На самом деле тестирование не доказывает, что программа работает правильно.
Почему? Потому что проверить все возможные варианты работы программы невозможно. Даже для простого калькулятора количество комбинаций чисел и операций — бесконечное.
Миф 2: «Тестирование можно сделать в конце»
Многие думают: «Сначала напишем программу, потом протестируем». Это неправильный подход.
Миф 3: «Тестировщик — это тот, кто не смог стать программистом»
Это обидный и неправильный миф. Тестирование — это отдельная профессия со своими навыками и знаниями.
Умение находить нестандартные сценарии.
Умение точно описывать ошибки.
Умение общаться с разработчиками.
Понимание баз данных, сетей, API.
Практическое задание
Давайте попробуем применить теорию на практике. Представьте, что вы тестируете простой калькулятор.
Задание 1
Придумайте 5 тестовых примеров для функции сложения двух чисел. Для каждого укажите входные данные и ожидаемый результат.
Задание 2
Придумайте 3 тестовых примера, которые могут сломать калькулятор. Например, ввод буквы вместо числа, деление на ноль, очень большое число.
Задание 3
Объясните своими словами, чем отличается тестирование «чёрным ящиком» от тестирования «белым ящиком».
Шпаргалка
Сохраните этот слайд — здесь все основные понятия лекции.
Итоги лекции
Подведём итоги. Вот что вы теперь знаете.
- ✅ Тестирование — это проверка программы на соответствие требованиям.
- ✅ Тестирование ≠ отладка. Тестировщик ищет, программист исправляет.
- ✅ Ошибка → дефект → сбой — цепочка возникновения проблем.
- ✅ Статическое тестирование — без запуска, динамическое — с запуском.
- ✅ Чёрный ящик — без знания кода, белый ящик — с доступом к коду.
- ✅ Уровни тестирования: модульное → интеграционное → системное → приёмочное.
- ✅ Пирамида тестирования: много модульных, меньше интеграционных, ещё меньше системных, мало приёмочных.
- ✅ Тестирование не доказывает отсутствие ошибок. Оно помогает их найти.
Домашнее задание
Задания для самостоятельной работы. Первые два обязательны, остальные — для оценки «отлично».
- Найдите в интернете один пример реальной катастрофы из-за ошибки в программном обеспечении. Опишите, что произошло и как можно было этого избежать.
- Напишите своими словами (5–7 предложений), чем тестирование отличается от отладки.
- Придумайте 5 тестовых примеров для функции «деление двух чисел».
- Объясните, почему тестирование «чёрным ящиком» не может найти ошибку переполнения.
- Нарисуйте пирамиду тестирования и подпишите каждый уровень.
Что дальше?
В этом блоке по тестированию у нас ещё несколько материалов.
- Лекция 2: классы эквивалентности и граничные значения.
- Лекция 3: тест-кейсы, чек-листы, баг-репорты.
- Практика 1: тестирование калькулятора «чёрным ящиком».
- Практика 2: модульное тестирование в Visual Studio (C#) или pytest (Python).
Спасибо за внимание!
🔍
Тестирование — это не про «поиск виноватых»
Это про заботу о пользователе. Чем лучше протестирована программа, тем меньше проблем у того, кто ей пользуется.