Как проверяешь свою работу на ошибки?

«Как проверяешь свою работу на ошибки?» — вопрос из категории Софт-скиллы, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

Мой процесс проверки кода многослоен и включает как автоматические инструменты, так и ручные практики:

1. Статический анализ кода (до запуска)

  • PHPStan / Psalm: Запускаю на максимальном уровне строгости, который позволяет проект. Они находят type errors, возможные null-исключения, недостижимый код.
    vendor/bin/phpstan analyse --level=max src/
  • Линтер (PHP_CodeSniffer): Слежу за соответствием стандартам кодирования (PSR-12).

2. Автоматическое тестирование

  • Unit-тесты (PHPUnit): Пишу тесты для критической бизнес-логики, сервисов, утилит. Цель — изолированно проверить конкретный метод.
    // Пример простого unit-теста
    public function test_calculator_adds_correctly(): void
    {
        $calc = new Calculator();
        $this->assertEquals(5, $calc->add(2, 3));
        $this->assertEquals(0, $calc->add(0, 0));
        $this->assertEquals(-1, $calc->add(2, -3)); // Проверка edge case
    }
  • Feature-тесты (Laravel): Тестирую целые сценарии, например, регистрацию пользователя или создание заказа, эмулируя HTTP-запросы.

3. Ручное тестирование в локальном окружении

  • После написания функционала прохожу по основным и альтернативным сценариям (happy path, edge cases, обработка ошибок) прямо в браузере или через API-клиент (Postman).
  • Проверяю, что изменения не сломали существующий функционал (регрессионное тестирование).

4. Отладка (когда что-то идёт не так)

  • Xdebug + IDE (PhpStorm): Основной инструмент для пошаговой отладки сложной логики.
  • Логирование (Monolog): Добавляю контекстные логи в местах, где важно отследить состояние (Log::info('Processing order', ['order_id' => $order->id])).
  • Для быстрой проверки в development-окружении иногда использую dd() или dump(), но никогда не оставляю их в коде для мержа.

5. Интеграция в CI/CD Все вышеперечисленные автоматические шаги (статика, тесты) запускаются в пайплайне GitLab CI/GitHub Actions при каждом пулл-реквесте. Мерж невозможен, если пайплайн не проходит.

Этот подход позволяет отловить большинство ошибок до того, как код попадёт даже на ревью, не говоря уже о production.