Кодревью — систематическая проверка исходного кода с целью обнаружения и исправления ошибок, которые остались незамеченными в начальной фазе разработки.
- Найти и справить дефекты ПО на ранней стадии.
- Улучшить коллективное и индивидуальное знание проекта.
- Поддерживать выбранный уровень однообразности, дизайна и стиля.
- Найти и разобрать ошибки, особенности проекта, интересные подходы и задачи - таким образом повысив профессиональный уровень команды.
- Снизить зависимость команды от конкретного разработчика, улучшить коллективное владение кодом.
- Другая перспектива ревьювера позволяет найти больше подходов к решению проблемы. Объективная критика помогает понять заблуждения разработчика.
- Тесты
- Кодстаил и комментарии
- Обработка ошибок
- Утечки ресурсов
- Потокобезопасность
- Дизайн классов
- Производительность
- Соответствие функциональным требованиям
- Безопасность
Как и любой навык, навык проведения кодревью совершенствуется при практике. Ниже представлены несколько общих советов для разработчика и ревьювера:
- Главным и самый первым ревьювером является сам разработчик.
- Создай себе чеклист, на котором будут основные проверки, проводимые ревьюверами.Это поможет избежать банальных и глупых багов, таких как: Отсутствие прав, неправильная кодировка файла, несобирающийся проект и тому подобное. Будет очень обидно сдать задачу на проверку, которую ревьювер завернет обратно через 5 минут.
- Дистанцируй себя от своего кода. Основная задача ревью - найти баги, а кто ищет - тот находит. Не принимай найденные баги близко к сердцу - скорее всего в твоем коде есть баг, а то и несколько.
- Научись у ревьювера чему-то новому. Если ревьювер предлагает простое и элегантное решение проблемы, то это win-win - Ты научишся чему то и плохой код не попадет в продакшн.
- Не переписывай код без повода. Не всегда ревьювер будет предлагать адекватные решения. Если считаешь, что ревьювер не прав - обьективно аргументируй.
- Не закрывайся в себе. Если тебе что-то не понятно, задай ревьюверу вопрос. Вынеси проблему на общее обсуждение. От этого никто не пострадает, зато все будут все понимать.
- Поддерживай стандарты кодирования. Про стандарты кодирования сказано многое, и если уж все под ними подписались, то необходимо их поддерживать.
- Просматривай 200-400 строк кода за раз, после сделай перерыв.
- Критикуй код, а не разработчика. Цель твоего комментария - сделать так, чтобы разработчик написал хороший код. Указание и анализ ошибки в позитивном ключе помогают достигнуть цели. Комментарии в негативном ключе без внятных аргументов - нет.
- Реальный авторитет идет от знаний, а не от должности или формального положения. Знание увеличивает авторитет и уважение среди других разработчиков. Кодревью - хороший способ продемонстрировать свои знания.
- Задавай вопросы прежде чем делать утверждения. Как правило ревьювер не настолько владеет контекстом, как разработчик. Возможно для того, что кажется неправильным есть своя причина.
- Не забудь пояснить. Одна из целей кодревью - прокачать навыки разработчика. Если ты знаешь, что так будет лучше, поясни, почему.
- Часто есть несколько способов сделать одно и то же. Если подход, который кажется тебе необычным позволяет эффективно достичь цели, то почему бы и нет?
- Убедись, что проект собирается без предупреждений и ошибок.
- Проведи анализ кода - цикломатическая сложность методов не должна превышать 20. Тестовое покрытие должно быть не мение 70%.
- Удали неиспольлзуемые директивы using и недостижимый код.
- Убедись, что везде, где необходимо есть проверки на null.
- Если код в нескольких методах повторяется - вынеси его в отдельный метод.
- Проверь, что все неуправляемые ресурсы корректно освобождаются.
- Убедись, что во всех необходимых местах используется обработка исключений и логирование, если оно необходимо.
- Используй анонимные типы, если тип будет использоваться только 1 раз.
- Проверь уровни доступа разработаных классов, методов и полей.
- Запусти тесты, проверь что они проходят за адекватное время.
Источники: https://blog.codinghorror.com/the-ten-commandments-of-egoless-programming/ http://www.developer.com/java/other/article.php/3579756 http://www.techrepublic.com/article/developers-guide-to-peer-reviews/1050834/ https://smartbear.com/learn/code-review/best-practices-for-peer-code-review/ http://www.codeproject.com/Articles/593751/Code-Review-Checklist-and-Guidelines-for-Csharp-De