|
@@ -0,0 +1,98 @@
|
|
|
+# Оптимальные методы ревью кода
|
|
|
+## Стандарты, связанные с код-ревью
|
|
|
+
|
|
|
+Обзор кода является неотъемлемой частью процессов, связанных с обеспечением высокого качества программного обеспечения. В ходе этого процесса один или несколько человек изучают и оценивают программу, основываясь преимущественно на анализе и чтении отдельных фрагментов исходного кода.
|
|
|
+
|
|
|
+## Методы код-ревью
|
|
|
+
|
|
|
+Проверка исходного кода может осуществляться как вручную, так и с использованием специальных инструментов для обзора кода. Этот процесс является неотъемлемой частью мониторинга качества программного продукта. Он направлен на поиск ошибок, обеспечение соответствия стандартам кодирования, улучшение читаемости и обеспечение возможности внесения изменений в код, а также на обнаружение дублированного кода и других проблем. Каждый компонент программного обеспечения или новая функция, разработанные сотрудниками компании-разработчика, подвергаются проверке на соответствие требованиям качества.
|
|
|
+
|
|
|
+Создание надежного процесса обзора кода является основой для постоянного развития продукта и предотвращает выпуск небезопасного для пользователей кода. Для повышения качества кода и обеспечения проверки фрагментов кода другими членами команды, методы код-ревью должны входить в повседневную работу команд, занимающихся разработкой программного обеспечения.
|
|
|
+
|
|
|
+В процессе кода-ревью следует учитывать следующие факторы, которые являются ключевыми для достижения эффективных результатов.
|
|
|
+
|
|
|
+• Обзор кода должен проводиться оперативно, с получением быстрых ответов и обратной связи. Анализ кода должен производиться сразу после представления нового фрагмента кода, чтобы разработчик получил незамедлительную обратную связь.
|
|
|
+
|
|
|
+• Анализ кода должен способствовать обучению и развитию. Поскольку процесс направлен на повышение качества кода, обзоры должны стать возможностью обмена знаниями и опытом между коллегами.
|
|
|
+
|
|
|
+• Код-ревью должно сопровождаться тестированием. Без проведения необходимых тестов обзор может пройти мимо неисправленных ошибок и проблем с безопасностью кода.
|
|
|
+
|
|
|
+• После обзора кода следует комментировать и поощрять хорошее кодирование. Разработчику следует сообщить, что он хорошо справляется с работой. Код-ревью служит не только для поиска ошибок, но и для поощрения программистов.
|
|
|
+
|
|
|
+• Обзоры кода должны соответствовать стандартным практикам кодирования. Код-ревью не должен быть основан на индивидуальных предположениях, и следует придерживаться общепринятых принципов, на которые можно ссылаться и цитировать. Это необходимо для соблюдения стандартов кодирования, руководств по стилю и основных принципов языка программирования, используемых в разработке программного обеспечения.
|
|
|
+
|
|
|
+• Результаты код-ревью иногда могут вызывать разногласия между ревьюером и разработчиком. Программист может не соглашаться с правильностью и актуальностью сделанных замечаний. Такие разногласия следует разрешать на основе общепринятых практик, изложенных в руководстве по стандартам кодирования, а также учитывая мнения экспертов с большим опытом в данной области.
|
|
|
+
|
|
|
+
|
|
|
+Примеры комментариев к ревью кода:
|
|
|
+1. Повышение эффективности кода:
|
|
|
+• "Рассмотрите возможность использования словаря вместо цикла для проверки существования элемента в списке".
|
|
|
+• "Этот участок кода можно рефакторить, чтобы использовать выражение-генератор".
|
|
|
+2. Улучшение читабельности:
|
|
|
+• "Имя переменной 'temp' недостаточно описывает ее, пожалуйста, придумайте более осмысленное имя".
|
|
|
+• "Функцию можно сделать более читабельной, добавив к ней doc-строку, объясняющую ее назначение".
|
|
|
+3. Обработка ошибок:
|
|
|
+• "Этот код не обрабатывает исключения должным образом, пожалуйста, добавьте блок try-except для обработки возможных ошибок".
|
|
|
+• "В данном случае не следует возвращать None, подумайте о том, чтобы вместо этого выбросить исключение".
|
|
|
+4. Безопасность:
|
|
|
+• "Убедитесь, что пользовательский ввод санирован правильно, чтобы избежать атак XSS и SQL-инъекций".
|
|
|
+• "Рассмотрите возможность использования библиотеки типа hashlib для безопасного хэширования паролей вместо модуля sha256".
|
|
|
+5. Тестовое покрытие:
|
|
|
+• "Этому коду нужно больше тестовых примеров, чтобы обеспечить полное покрытие и предотвратить регрессии".
|
|
|
+• "Пожалуйста, добавьте отрицательные тестовые случаи, чтобы проверить поведение кода в непредвиденных ситуациях".
|
|
|
+6. Стандарты кода и лучшие практики:
|
|
|
+• "Функция не должна иметь побочных эффектов, пожалуйста, отрефакторите ее, чтобы она возвращала только значение".
|
|
|
+• "Избегайте использования глобальных переменных, вместо них используйте свойства класса или аргументы функций".
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## Эффективные подходы ревью кода
|
|
|
+• Определите цели и стандарты компании. Перед началом процесса кода-ревью необходимо определить ключевые параметры и установить ясные цели. Цели компании должны соответствовать стандартам программирования. Установив свои стандарты, компания должна гарантировать соответствие всех разрабатываемых программных продуктов требованиям.
|
|
|
+
|
|
|
+• Создайте чек-лист для проверки кода. Чек-лист состоит из набора рекомендаций и вопросов, которыми компания следует во время проверки кода. Такой подход помогает организовать необходимые процедуры проверки качества кода перед его утверждением в кодовой базе.
|
|
|
+
|
|
|
+• Установите метрики для оценки кода. Эффективность повышения качества кода должна быть оценена при помощи объективных метрик. Используя такие метрики, можно изучить влияние изменений и оценить результаты своих оценок.
|
|
|
+• Ограничьте количество проверяемых строк кода за один раз. Это необходимо для обеспечения одинаковой эффективности процесса обзора кода.
|
|
|
+
|
|
|
+• Используйте инструменты автоматизации. Каждая команда или компания, занимающаяся разработкой, должна иметь специализированные инструменты для автоматизации проверки кода. С помощью таких инструментов можно сократить время проверки до нескольких минут. Они способны проанализировать всю базу кода за считанные минуты, обнаружить ошибки и дублированный код, а также предложить варианты исправлений.
|
|
|
+
|
|
|
+Некоторые из таких инструментов включают PVS-Studio (для выявления опечаток, неиспользуемого кода и потенциальных уязвимостей), SonarQube (для проверки ошибок, соответствия стандартам кодирования и технического долга), AppRefactoring (для выявления дублированного кода и пересечений фрагментов кода, предоставляющего информацию для создания уникального кода), Codacy (для выявления ошибок в коде и проблем безопасности) и другие.
|
|
|
+
|
|
|
+• Предоставьте положительную обратную связь на обзоре кода. Исходный код может быть результатом парного программирования, поэтому полезно давать обратную связь о положительных изменениях и рекомендациях.
|
|
|
+
|
|
|
+
|
|
|
+## Примеры чек-листа ревью кода:
|
|
|
+1. Структура кода:
|
|
|
+ - Правильные отступы и форматирование
|
|
|
+ - Соответствие правилам именования и четкая организация кода
|
|
|
+ - Наличие комментариев и документации
|
|
|
+2. Оптимизация и производительность:
|
|
|
+ - Эффективность и оптимизация кода
|
|
|
+ - Избегание ресурсоемких операций
|
|
|
+3. Безопасность:
|
|
|
+ - Валидация и защита ввода данных
|
|
|
+ - Практика безопасного программирования (например, предотвращение SQL-инъекций)
|
|
|
+ - Защита от распространенных угроз (например, XSS атак)
|
|
|
+4. Функциональность:
|
|
|
+ - Правильное и ожидаемое поведение кода
|
|
|
+ - Обработка и отладка ошибок
|
|
|
+5. Тестирование:
|
|
|
+ - Правильное тестирование и покрытие кода тестами
|
|
|
+ - Создание корректных тестовых случаев и условий
|
|
|
+6. Стандарты кодирования и лучшие практики:
|
|
|
+ - Соблюдение профессиональных стандартов и соглашений
|
|
|
+ - Возможность повторного использования кода, поддерживаемость и масштабируемость
|
|
|
+ - Правильная обработка ошибок и исключений
|
|
|
+
|
|
|
+
|
|
|
+## Анализ дублированного кода
|
|
|
+
|
|
|
+В среде разработчиков широко распространено мнение о важности проверки кода на наличие дублирования и пересечений, что подтверждается практикой. Ревью кода должно включать контроль за дублированием кода, так как это позволяет легче вносить изменения в будущем и сокращает технический долг.
|
|
|
+
|
|
|
+Одной из метрик, которую можно использовать, является процентное соотношение дублирующихся фрагментов кода к общему количеству строк кода. Для поиска и удаления дублированного кода можно использовать инструменты, например, AppRefactoring. Это сервис помогает обнаружить и удалить дублированный код, а также провести рефакторинг программного обеспечения.
|
|
|
+
|
|
|
+## Заключение
|
|
|
+
|
|
|
+Основная цель код-ревью - обеспечить общее качество и безопасность программной системы. Ревью кода коллег не должно вызывать страх или разочарование. Установите стандарты для процесса проверки кода, используйте метрики и автоматизированные инструменты, чтобы помочь в анализе и улучшении исходного кода.
|
|
|
+
|
|
|
+[Использованная литература](https://habr.com/ru/articles/716068/)
|