Готуєтесь до огляду коду як розробника?


10

Я шукаю тут кілька ідей.

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

Моє запитання:

  1. Будучи цільовим розробником, ви можете запропонувати деякі найкращі практики, які розробник може включити до того, як його код буде переглянуто.

    • В даний час я практикую такі методи

      • PPT для логічного потоку
      • Детальні коментарі.

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

Я думаю, що багато розробників переживали б те, через що я переживаю.


2
Тільки одне: не робіть дурниць у своєму коді.
BЈовић

1
KISS: якщо код простий, ваш мозок здатний керувати ним усім.
mouviciel

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

@DXM Дякую за відповідь. Це моя ТЛ вела б зустріч.
Картик Сренівасан

@Karthik: k, ця частина хороша. Отже, виходячи з вашого запитання, ви не запитуєте, як написати та створити високоякісний код, готовий до перегляду коду. Натомість, ваша головна турбота: «Я продовжую шукати реалізацію та витрачання, і витрачається занадто багато часу». Чи можете ви детальніше розглянути це? чому ви займаєтесь пошуком, якщо TL має код перед собою та веде засідання?
DXM

Відповіді:


8

Отже, виходячи з наданих деталей ОП, це звучить як запитання: "як я дізнаюся власний код, щоб, коли мене попросили знайти X або пояснити Y, я міг швидко відповісти".

Кілька пропозицій, які я можу придумати:

  • При кодуванні потрібно витратити час на вивчення та розуміння власного коду. Це може бути те, що ваша TL намагається натрапити на вас не так багато слів. Будучи TL в поточному проекті, я робив багато оглядів коду за останні 11 місяців, і я помічаю практику деяких розробників шукати "приклад коду" або в нашій власній базі коду, або деінде (google і т. д. ...) і скопіюйте / вставте його. Особисто я не витримую цього, оскільки, хоча їхній код проходить прості одиничні тести, вони не розуміють, що він насправді робить, тому ми ніколи не гарантуємо, що цього немає " t деякий граничний випадок або очікуваний стан відмови, який може статися.

  • Як наслідок попереднього твердження, якщо вам доведеться скопіювати / вставити, спробуйте скопіювати / вставити лише той код, який Ви раніше писали, і який ви розумієте. Безумовно, добре "запозичити" ідею інших людей, але в цьому випадку перепишіть їх код за рядком, тому що, як ви пишете його, ви отримаєте краще розуміння того, що він робить. Якщо ви використовуєте зовнішні API, навіть якщо у вас є приклад, який використовує цей API, все одно знайдіть кілька хвилин, щоб знайти посилання та дізнатися, як працює цей API. Не припускайте просто, що якщо він працював раніше, він також буде працювати у вашій ситуації.

  • Прочитайте і навчіться любити принцип DRY . Багато разів те, що ви спокусилися скопіювати / вставити, може бути розміщене у загальному місці (окрема функція, окремий клас, окрема бібліотека ...)

  • Прочитайте і навчіться любити принципи SOLID, і поки ви до цього, перегляньте KISS, про який вже згадував mouviciel. Ці принципи орієнтовані на створення дуже короткого, чистого та модульного коду. Якщо у вас є великі класи та великі функції в них, то, очевидно, буде набагато складніше знайти речі, а крім цього спробуйте пояснити, що робить код. З іншого боку, якщо ви дотримуєтесь (або принаймні намагаєтесь слідувати) SRP та зробите для кожного класу / функції відповідальним лише за одне, ваш код буде малим і дуже читабельним.

  • Візьміть копію чистого коду . Дуже гарна книга. У ньому йдеться про написання коду, який пояснюється самостійно і легко читається, підтримується та розширюється. Якщо ви практикуєте написання коду, який легко читати, у вас не повинно виникнути проблем з читанням власного коду в оглядах коду. І це найсмішніша частина. Я попросив людей прочитати власний код або просто сказати мені, що представляють змінні, і вони не змогли відповісти, хоча написали цей код (абсолютно нові класи, а не спадщина) лише тиждень тому . Гарне називання проходить довгий шлях.

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

  • Якщо після всіх вищезазначених пунктів ви все ще опинитесь у біді? Ви новачок у команді та просили працювати з багатьма застарілими кодами? У такому випадку, можливо, ваш TL є A $$, і ви можете бути ініціативними, попросивши його перед зустріччю пройти легко і не витрачати час усіх, хто бере участь. Коли нові люди приєднуються до команди, TL потребує достатнього терпіння, оскільки робота в новій платформі, новому продукті, нових людях, новому середовищі вимагає великої концентрації у нової людини, і цій людині не вистачить деяких деталей на початку. Працює як розроблено, і ваш TL повинен просто прийняти це.

  • Якщо після всіх пунктів вище, ви все ще відчуваєте, що у вас є жахливі відгуки про код. Поговоріть зі своїм TL. Іноді люди відчувають себе погано через характер зустрічей з переглядом коду, коли насправді TL абсолютно задоволений тобою. Коли я роблю огляди коду, моя мета - виділити те, що потрібно змінити, переконайтесь, що ви розумієте зміни та рухаєтесь далі. Багато разів я не встигаю бути ввічливим, а деякі люди захищаються і намагаються відповісти на кожен мій коментар. У таких ситуаціях зустріч з перегляду коду припиняється, тому я схильний їх переривати і рухатись далі. Як правило, після зустрічі я б поговорив з новими хлопцями, щоб переконатися, що вони розуміють процес, і що це нічого особистого. Після кількох оглядів коду людям, як правило, набагато комфортніше.


+1 для "не копіюйте та не вставляйте код, який ви не розумієте". Це нестерпно! Також +1 для "розмови з TL"
MarkJ

@DXM Ваша здатність розуміти тонкі нюанси питання була дуже професійна, не кажучи вже про вашу відповідь, дуже інформативна та описова. Розум = Здутий!
Karthik Sreenivasan

@DXM З вашої посилання "З іншого боку, якщо ви дотримуєтесь (або принаймні намагаєтесь дотримуватися) SRP і змушуєте кожного класу / функції відповідати лише за одне, ваш код буде малим і дуже читабельним". Можете чи ви дайте мені знати , що робить * SRP значить? * Я бачив ще один цікавий пост на код ясності тут .
Karthik Sreenivasan

1
@KarthikSreenivasan - У контексті використовується його практика, де метод або клас відповідають за одне. Наприклад, метод, який додає числа разом, також не повинен повертати середнє значення. Простий пошук знайшов це: en.wikipedia.org/wiki/Single_responsibility_principle
Ramhound

10

Практика відрізняється, але, на мій досвід:

  • Не робіть нічого особливого до коду. Природно, щоби трохи більше підняти свій код, коли ви дізнаєтесь, що його буде переглянуто, і немає шкоди у виправленні очевидних речей, таких як орфографічні помилки тощо. Але не заходьте і додайте багато детальних коментарів або іншим чином міняйте код лише тому, що це заплановано для перегляду.

  • Код готується та розповсюджується рецензентам заздалегідь до огляду. Зазвичай це робить нейтральна третя сторона, ймовірно, фасилітатор перегляду коду. Якщо він роздрукований, код повинен бути досить малим, щоб рядки не загорталися занадто часто, але досить великими, щоб кожен міг його легко прочитати. Роздрукуйте його в альбомному форматі, якщо це потрібно.

  • Код повинен бути надрукований або відображений з номерами рядків . Переважно, число повинно продовжуватися від одного файла до іншого. Так набагато простіше посилатися на "рядок 3502", ніж "рядок 238 foo.c", а наявність номерів дозволяє кожному говорити про конкретні лінії, не витрачаючи часу на пошук цих рядків.

  • Однозначно повинен бути фасилітатор , btw. Його завдання полягає в тому, щоб уникнути того, щоб огляд не зациклювався на деталях, не допустив його особистого або гарячого характеру і суворо обмежив тривалість огляду.

  • Як автор, ви повинні переглянути код перед початком оглядової зустрічі. Запишіть зміни, які ви запропонували, якби це був чийсь код. Це приєднує вашу пам’ять про код, який ви, можливо, не переглядали протягом декількох днів, а також допомагає практично дивитися на власний код критичним оком. Після того, як ви ознайомилися з декількома рецензіями, як рецензент, так і як автор, ви побачите, що ваші власні нотатки більше відповідатимуть рештам групи.

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

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


Я додам одне: "рядок 3502" був би великою червоною позначкою. Мати дуже довгі файли - це, безумовно, погано.
BЈовић

2
@VJo: Caleb запропонував продовжити номери рядків у файлах, тому рядок 3502 - це фактично рядок 238 foo.c.
Хайнзі

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

1
@ThomasOwens Номери рядків призначені виключно для того, щоб легко описати місце розташування в переглянутому коді під час огляду. Це швидше і менш схильне до помилок, ніж використання "файлу foo.c, рядок 123", і ОП спеціально просить витратити менше часу на пошук коду. Погодьтеся, що проблеми слід відслідковувати за файлами. IME, огляди, як правило, охоплюють групу занять, можливо, два великих або десяток малих. 3500+ рядків занадто багато, щоб одразу переглядати - намагався лише зробити так, щоб цифри продовжувались від одного файла до іншого.
Калеб

Якщо ви організовані, це не має значення. Мені здається, що це сповільнить мене. Я брав участь у перегляді коду, і я завжди роздруковую файли, зшиваю їх за класом / файлом, а потім читаю та коментую їх. Якщо хтось хоче сказати мені, де шукати, я хочу, щоб пара файлів з іменем / номером рядка - це було б значно полегшити мені, тим більше, що мій IDE виводить ім'я файлу у заголовку / колонтитулі на кожній сторінці, і я друкую номери рядків на основі файлу.
Томас Оуенс

3

Ще одне, що потрібно додати до інших відповідей: щоб полегшити перевірку офіційних кодів, проводите МНОГО неформальних оглядів коду! Наприклад:

"Ей, Боб, чи можу я показати вам, як я реалізував функцію foo ()?" "Гей, Стів, ти можеш поглянути на цю схему класів і дай мені знати, що ти думаєш?" "Ей, Карен, ти можеш допомогти мені продумати цю проблему? Я думаю, що я отримав хороше рішення, але я міг би скористатися вашою допомогою ..."

Зробіть це звичайною звичкою. Коли ви залучаєте своїх колег на початку проектування, ви:

  • Побудувати стосунки
  • Отримайте нові уявлення про проблему
  • Вдосконаліть вашу здатність пояснювати проблему / рішення
  • Збережіть час пізніше в офіційних оглядах коду

+1 для створення команди та вдосконалення вмінь пояснювати проблему. Це справді чудова ідея!
Karthik Sreenivasan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.