Код-ревью часто требует много времени и внимания, и легко что-нибудь упустить. Нашли и перевели для вас подробный чек-лист со списком того, на что нужно обратить внимание.
Чек-лист подойдёт любому разработчику, который хочет проверить свой (или чужой) код и сделать его лучше. Ещё больше упростят жизнь программы , которые будут проверять код за вас и автоматически добавлять правки в пул-реквест.
Реализация
Изменения в коде выполняют свою задачу?
Это изменение вносит нежелательные зависимости времени компиляции или выполнения?
Был ли использован фреймворк/API/библиотека/сервис, который не нужно было использовать?
Есть ли фреймворк/API/библиотека/сервис, который не был использован, но мог бы улучшить решение?
Код находится на верном уровне абстракции?
Код достаточно разбит на модули?
Можете ли вы придумать другое решение, которое значительно лучше в плане поддерживаемости, читабельности, производительности и безопасности?
Существует ли похожая функциональность в кодовой базе? Если да, то почему она не была использована повторно?
Есть ли какие-нибудь лучшие практики, шаблоны проектирования или специфические для языка шаблоны, которые могли бы существенно улучшить этот код?
Следует ли этот код принципам SOLID ?
Логические ошибки и баги
Есть ли сценарий, при котором код не будет работать так, как задумано?
Могут ли какие-то события или введённые данные сломать код?
Обработка ошибок и логирование
Правильно ли обрабатываются ошибки?
Нужно ли добавить/убрать какую-либо отладочную информацию?
Дружелюбны ли к пользователю сообщения об ошибках?
Хватает ли логируемых событий и написаны ли они так, чтобы можно было легко провести отладку?
Юзабилити и доступность
Хорошо ли спроектировано предлагаемое решение с позиции юзабилити?
Хорошо ли задокументирован API?
У предлагаемого решения хорошая доступность?
API/UI интуитивен для использования?
Тестирование
Достаточно ли для него автоматизированных тестов (юнит/интеграционных/системных)?
Уже существующие тесты в достаточной степени покрывают новый код?
Есть ли какие-либо тест-кейсы, входные данные или пограничные случаи, которые можно протестировать вдобавок?
Производительность
Повредит ли вносимое изменение производительности системы?
Есть ли возможность улучшить производительность кода?
Зависимости
Если это изменение требует изменений вне кода, например в документации или конфигурации, были ли они сделаны?
Может ли это изменение иметь последствия для других частей системы или обратной совместимости?
Безопасность и защита данных
Этот код создаёт дыру в безопасности?
Авторизация и аутентификация проводятся должным образом?
Правильно ли обрабатываются и хранятся конфиденциальные пользовательские данные?
Правильное ли шифрование используется?
Раскрывает ли это изменение какие-либо секретные данные вроде ключей доступа, паролей или имён пользователей?
Если код работает с пользовательским вводом, учитывает ли он такие уязвимости, как межсайтовый скриптинг и SQL-инъекции; проводится ли его очистка и проверка?
Данные, полученные из внешних API или библиотек, проверяются должным образом?
Производительность
Повлияет ли изменение кода негативно на производительность системы?
Есть ли какая-нибудь возможность повысить производительность кода?
Читабельность
Какие части были вам непонятны и почему?
Можно ли улучшить читабельность кода, добавив методы меньшего размера?
Можно ли улучшить читабельность, изменив имена функций/методов/переменных?
Код находится в правильном файле/папке/пакете?
Можно ли изменить структуру каких-либо методов, чтобы получился более интуитивный поток управления?
Понятен ли поток управления?
Есть ли ненужные комментарии?
Можно ли донести мысль лучше в каких-то комментариях?
Сделает ли код понятнее большее количество комментариев?
Можно ли убрать какие-нибудь комментарии, сделав сам код более читабельным?
Остался ли закомментированный код?
Экспертное мнение
Стоит ли какому-нибудь специалисту, например по безопасности или юзабилити, посмотреть на код перед коммитом?
Повлияет ли это изменение на другие команды? Стоит ли им также высказать своё мнение?
Перевод статьи «A Code Review Checklist to Focus on the Important Parts»