Короткий ответ
Содержательное ревью проверяет не только работоспособность кода, но и корректность логики, читаемость, тестовое покрытие и соответствие архитектуре проекта, с конкретными и аргументированными комментариями.
Как это работает подробнее
Ревьюер сначала понимает контекст задачи (что нужно было сделать и почему), затем читает diff, обращая внимание на граничные случаи, обработку ошибок, потенциальные проблемы производительности (например, запросы в цикле) и соответствие существующим соглашениям кода. Отдельно стоит проверить, покрывают ли тесты новую логику, включая негативные сценарии, а не только «счастливый путь».
Пример кода
example.py
# Фрагмент PR на ревью: функция обновления остатка товара
def decrease_stock(product_id: int, qty: int):
product = db.get_product(product_id)
product.stock -= qty
db.save(product)
# Комментарий ревьюера: "Нет проверки product.stock >= qty — остаток может
# уйти в минус при параллельных запросах. Нужна проверка и, вероятно,
# блокировка строки в транзакции (SELECT FOR UPDATE). Добавь тест
# на одновременное списание двумя запросами."Что использовать на практике
- Практика. Полезно делить комментарии по важности: «блокирует merge» (баг, нарушение контракта, уязвимость) и «предложение на подумать» (стиль, альтернативный подход) — это экономит время автора на приоритизацию правок. Для сложных PR стоит запускать код локально или смотреть его в превью-окружении, а не полагаться только на чтение diff, особенно если изменение затрагивает конкурентный доступ к данным или внешние интеграции.
Подводные камни
- Риски. Частая ошибка — ревьюер фокусируется только на стиле кода (отступы, именования) и пропускает логические ошибки или отсутствие обработки ошибок. Другая ошибка — одобрять PR «по диагонали», доверяя автору, особенно если PR большой — в таком случае стоит попросить разбить его на более мелкие части вместо того, чтобы пытаться удержать в голове весь контекст сразу. Также вредно превращать ревью в бесконечный спор о вкусовых предпочтениях, не влияющих на корректность кода.