Тестирование
Оригинальное название: testing
Коротко
Проверка программы на соответствие требованиям и ожиданиям: запуск её в заданных условиях и сравнение фактического результата с ожидаемым.
Что такое «Тестирование»
Любая правка кода может что-то сломать, и вопрос только в том, кто заметит это первым — разработчик или клиент на странице оплаты. Тестирование переносит обнаружение ошибок на этап, когда их дешевле исправить. Ошибка, найденная до выкладки, стоит минут работы. Та же ошибка в рабочем магазине стоит потерянных заказов.
Важно понимать границы метода. Эдсгер Дейкстра сформулировал это так: тестирование может показать наличие ошибок, но не их отсутствие. Тесты проверяют только те сценарии, о которых подумали. Поэтому их набор пополняют каждый раз, когда находят новую ошибку.
Виды тестирования
- По уровню: модульное, интеграционное, системное, приёмочное.
- По цели: функциональное — работает ли то, что должно; нефункциональное — скорость, безопасность, удобство.
- По способу: ручное, когда сценарий проходит человек, и автоматическое, когда проверки выполняет программа.
- По моменту: проверка нового и регрессионное — повторная проверка старого после изменений.
Отдельная группа — проверки под нагрузкой; о них рассказывает статья про нагрузочное тестирование.
Пример автотеста на PHPUnit
Тест проверяет функцию расчёта цены со скидкой из кода проекта:
use PHPUnit\Framework\TestCase;
final class PriceTest extends TestCase
{
public function testDiscountIsApplied(): void
{
$this->assertSame(900.0, priceWithDiscount(1000.0, 10));
}
}
Такой тест выполняется за доли секунды и запускается перед каждой выкладкой. Если кто-то поменяет формулу, тест сразу покажет расхождение. Для запуска используется фреймворк тестирования, он же собирает отчёт.
Сколько тестов нужно сайту
Для визитки достаточно ручного прохода по формам после изменений. Для интернет-магазина или личного кабинета разумный минимум — автотесты на расчёты цен, скидок и доставки и сквозной сценарий оформления заказа. Принцип пирамиды тестирования: много быстрых модульных тестов в основании, меньше интеграционных и совсем немного медленных сквозных тестов через браузер. Сто процентов покрытия кода — не цель. Цель — чтобы самые дорогие ошибки ловились до пользователей.

