Перейти к основному содержимому

16. Тестирование и качество кода

Почему важно писать тесты?​

Junior

Ответ: Тесты гарантируют, что код работает как ожидается, предотвращают регрессии (ошибки, возникающие после внесения изменений), документируют поведение кода и делают рефакторинг безопаснее. Кроме того, они помогают проектировать более качественную архитектуру, стимулируя модульность.


Что такое модульные тесты (Unit Tests)?​

Junior

Ответ: Вид тестирования программного обеспечения, при котором отдельные модули или компоненты тестируются изолированно. В PHP стандартным инструментом является PHPUnit.


Какие фреймворки для модульного тестирования вы использовали?​

Junior

Ответ: Основной фреймворк для PHP — PHPUnit. Также использовал Pest, который построен поверх PHPUnit и предлагает более выразительный функциональный синтаксис.


Что такое инструменты статического анализа?​

Junior

Ответ: Инструменты статического анализа анализируют код без его выполнения. Они помогают обнаруживать потенциальные ошибки, уязвимости безопасности, нарушения стиля кода и другие проблемы на ранних этапах разработки.


Как измеряется покрытие тестами?​

Junior

Ответ: Покрытие тестами (Code Coverage) — это метрика, измеряющая процент строк кода, выполненных вашим набором тестов. Она определяется путём отслеживания, какие части кода затрагиваются при выполнении тестов, обычно с помощью таких инструментов, как Xdebug или PCOV.


Что такое Code Coverage?​

Junior

Ответ: Метрика, измеряющая процент строк кода, выполненных вашим набором тестов.


Что такое интеграционное тестирование?​

Junior

Ответ: Тестирование того, как различные модули или компоненты вашего приложения работают вместе как единое целое.


Какие инструменты статического анализа вы использовали?​

Middle

Ответ: Использовал PHPStan для поиска ошибок и повышения качества кода, Psalm для продвинутого статического анализа (особенно для крупных кодовых баз), а также PHP_CodeSniffer (PHPCS) для поддержания единообразия стиля кода.


В чём разница между модульными, интеграционными и функциональными тестами?​

Middle

Ответ:

  • Модульные тесты (Unit tests): Тестируют изолированные компоненты (например, отдельный метод) отдельно от зависимостей (часто с использованием моков).
  • Интеграционные тесты (Integration tests): Тестируют взаимодействие между несколькими компонентами (например, как сервис взаимодействует с репозиторием или базой данных).
  • Функциональные тесты (Feature tests): Тестируют полный пользовательский сценарий или API-эндпоинт от начала до конца, часто затрагивая несколько слоёв приложения.

Какие методы измерения покрытия модульными тестами вы использовали?​

Middle

Ответ: Среди часто используемых методов: Line Coverage (процент выполненных строк), Branch Coverage (проверка всех путей через условия) и Path Coverage. PHPUnit обычно отображает покрытие по строкам с помощью драйверов Xdebug или PCOV.


Что такое мокирование (Mocking)?​

Middle

Ответ: Создание поддельной версии объекта, имитирующей поведение реального объекта, для изоляции тестируемого блока кода.


TDD и BDD​

Middle

Ответ:

  • TDD (Test-Driven Development): Написание тестов до написания самого кода. Фокус на реализации.
  • BDD (Behavior-Driven Development): Написание тестов на основе ожидаемого поведения и пользовательских сценариев (например, Behat). Фокус на коммуникации.

Что такое мутационное тестирование (Mutation Testing)?​

Senior

Ответ: Вид тестирования, при котором в код вносятся небольшие изменения (мутации) для проверки того, обнаружат ли их существующие тесты. Это позволяет измерить эффективность тестов.