Кращі техніки код-рев’ю

code review

Стандарти код-рев’ю

Огляд коду – один із складових процесів підтримки якості програмного забезпечення. У ході нього одна або кілька осіб вивчають та оцінюють програму в основному шляхом перегляду та читання окремих фрагментів його вихідного коду.

Перевірка вихідного коду вручну або автоматично (за допомогою спеціальних інструментів огляду коду) є частиною процесу моніторингу якості програми. Це робиться для пошуку та виправлення помилок, вивчення відповідності стандартам кодування, читабельності та ремонтопридатності коду, наявності дублікатів тощо. Кожна частина програмного забезпечення чи нова функція, створювана розробниками компанії, перевіряється на якість.

Створення надійної процедури перевірки коду закладає основу для безперервного розвитку продукту та запобігає випуску небезпечного для користувачів коду. Щоб підвищити якість коду і переконатися в тому, що кожен фрагмент коду був переглянутий іншим членом команди, методи код-рев’ю повинні бути включені до повсякденної роботи команд, які розробляють програмне забезпечення.

Під час проведення код-ревью слід пам’ятати про такі речі, необхідні ефективного результату.

  • Огляд коду має бути швидким, зі своєчасними відповідями та зворотним зв’язком. Аналіз коду повинен проводитися відразу після висування нового коду, щоб розробник міг отримати моментальний зворотний зв’язок.
  • Аналіз коду має розвивати та вчити. Оскільки основною метою процесу є підвищення якості коду, огляди, що проводяться, повинні стати засобом обміну знаннями і досвідом між колегами.
  • Огляд коду має супроводжуватись тестами. Без проведення необхідних тестів огляд може залишити не усунені помилки та проблеми з безпекою в коді.
  • Коментуйте та заохочуйте хороше кодування після огляду коду. Варто дати зрозуміти власнику коду, що він добре справляється зі своєю роботою. Огляд коду служить не тільки для пошуку помилок, але й для заохочення програмістів.
  • Оглядачі коду повинні дотримуватися стандартних практик кодування. Рев’ю коду не варто будувати на індивідуальних припущеннях, необхідно дотримуватися загальноприйнятих принципів, на які можна посилатися та цитувати. Це необхідно для того, щоб усі дотримувалися стандартів кодування, посібників зі стилю та принципів мови, прийнятих для розробки програм.
  • Результати ревью можуть стати причиною розбіжностей між рев’юєром та розробником. Програміст може не приймати коректність і актуальність зауважень, що висуваються. Подібні суперечки слід вирішувати, дотримуючись загальноприйнятих практик, викладених у посібнику зі стандартів стилю кодування, а також враховуючи думки фахівців, які мають великий досвід у даній галузі.

Приклади коментарів до реву коду:

Підвищення ефективності коду:

  • “Розгляньте можливість використання словника замість циклу для перевірки існування елемента у списку”.
  • “Цю ділянку коду можна рефакторити, щоб використовувати вираз-генератор”.

Поліпшення читабельності:

  • “Ім’я змінної ‘temp’ недостатньо описує її, будь ласка, придумайте більш осмислене ім’я”.
  • “Функцію можна зробити більш читабельною, додавши до неї doc-рядок, що пояснює її призначення”.

Обробка помилок:

  • “Цей код не обробляє винятки належним чином, будь ласка, додайте блок try-except для обробки можливих помилок”.
  • “У даному випадку не слід повертати None, подумайте про те, щоб натомість викинути виняток”.

Безпека:

  • “Переконайтеся, що введення користувача сановано правильно, щоб уникнути атак XSS і SQL-ін’єкцій”.
  • “Розгляньте можливість використання бібліотеки типу hashlib для безпечного хешування паролів замість модуля sha256”.

Тестове покриття:

  • “Цьому коду потрібно більше тестових прикладів, щоб забезпечити повне покриття та запобігти регресії”.
  • “Будь ласка, додайте негативні тестові випадки, щоб перевірити поведінку коду у непередбачених ситуаціях”.

Стандарти коду та найкращі практики:

  • “Функція не повинна мати побічних ефектів, будь ласка, відрефакторіть її, щоб вона повертала лише значення”.
  • “Уникайте використання глобальних змінних, замість них використовуйте властивості класу чи аргументи функцій”.

Найкращі практики рев’ю коду

  • Встановіть цілі та стандарти компанії. Перед початком огляду коду дуже важливо вибрати ключові показники і встановити чіткі цілі. Цілі компанії мають ставитися з урахуванням відповідних стандартів програмування. Встановивши свої стандарти, компанія повинна гарантувати, що будь-який програмний продукт, який вона розробляє, відповідатиме вимогам.
  • Створіть чек-лист, щоб перевірити код. Чек-лист складається із встановлених наборів рекомендацій та питань, яких дотримується компанія протягом всього процесу перевірки коду. Це дає компанії перевагу організованого підходу до необхідних перевірок якості коду перед його затвердженням у кодовій базі.
  • Встановіть деякі метрики для перегляду коду. Ступінь підвищення якості коду має якимось чином оцінюватися. Використовуючи об’єктивні метрики, ви можете вивчити вплив запитів на зміни та оцінити ефективність ваших оцінок.
  • Обмежте кількість рядків коду для огляду за один раз. Це необхідно, щоб огляд проходив з однаковою ефективністю.
  • Застосовуйте засоби автоматизації. Будь-яка команда або компанія розробників повинна мати у своєму арсеналі спеціальні засоби автоматизованої перевірки коду. За допомогою подібних інструментів час перевірки коду може бути скорочений до декількох хвилин. Вони здатні проаналізувати всю базу коду за лічені хвилини, виявити помилки та дублікати коду та запропонувати виправлення. До таких інструментів можна віднести: PVS-Studio (виявляє помилки, мертвий код, потенційні вразливості), SonarQube (перевіряє помилки, відповідність стандартам кодування, технічний обов’язок), AppRefactoring (виявляє дублікати та перетину фрагментів коду, надаючи інформацію для унікалізації коду), (Виявляє помилки в коді, проблеми безпеки) та інші.
  • Дайте позитивний зворотний зв’язок на оглядах коду. Вихідний код може бути результатом парного програмування, тому корисно давати зворотний зв’язок для позитивних змін та рекомендацій.

Приклад чек-листа ревью коду

Структура коду:

  • Правильні відступи та форматування
  • Погодження правил іменування та чіткої організації коду
  • Коментування та документація

Продуктивність:

  • Ефективність та оптимізація коду
  • Уникнення ресурсомістких операцій

Безпека:

  • Валідація та санація введення
  • Практика безпечного кодування (наприклад, запобігання ін’єкціям SQL)
  • Захист від поширених загроз (наприклад, XSS)

Функціональність:

  • Правильна та очікувана поведінка коду
  • Обробка та налагодження помилок

Тестове покриття:

  • Правильне тестування та покриття коду
  • Правильні тестові кейси та умови тестування

Стандарти коду та найкращі практики:

  • Дотримання професійних стандартів та угод
  • Можливість повторного використання, супроводжуваність та масштабованість
  • Правильна обробка помилок та винятків

Аналіз дубльованого коду

У середовищі розробників вважається, що рев’ю коду на наявність дублів та перетинів має важливе значення і це підтверджено практикою. Фахівці з огляду коду повинні тримати під контролем код, що дублюється, щоб надалі було простіше вносити необхідні зміни та скоротити технічний борг.

В якості метрики можна використовувати відсоткове співвідношення фрагментів, що дублюються, до загальної кількості рядків коду. Знайти та видалити дубльований код можна за допомогою таких інструментів, як AppRefactoring. Цей сервіс допомагає видалити дубльований код та провести рефакторинг програмного забезпечення.

Висновок

Основна мета код-рев’ю – забезпечити загальну якість та безпеку програмної системи. Рецензування коду колег не повинно бути таким, що лякає або розчаровує. Встановіть стандарти для огляду коду, введіть метрики та використовуйте інструмент автоматизації, щоб допомогти в процесі аналізу вихідного коду для змін та покращень.

Джерело