Що таке загальні процеси перегляду коду і що вважається поганим?


16

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

Процес здається справедливим, проте три людини, які роблять перевірку коду, не здаються справедливими. Я помічаю, що коли я ставлю свій код на огляд, я отримую десь 100-200 коментарів. Найбільше для мене одночасно було 300 коментарів. Звичайно, ви можете подумати, що це великі зміни, але це можуть бути і дуже невеликі зміни, як і менше ніж 50 рядків коду (що включає одиничні тести). Усі коментарі вважаються "повинні робити" і без аргументів.

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

Тож моє запитання, чи справедливо це? Або звичайні?


3
Які коментарі ви отримуєте? Здається, багато. Це форматування коментарів? Кодування? Важко відповісти, не знаючи більше про природу коментарів (а може бути саме те, що у вашому коді викликало коментарі).
MetalMikester

1
Гей - не впевнений, що це правильний термін, але в основному це загальні коментарі "найкращої практики", такі як перейменування змінних, переміщення функцій, перейменування функцій в 3–5 разів і т.д. У нас встановлені phpcs, щоб форматування було правильним.
user1207047

Також забув згадати в цьому квитку, я фактично розробник рівня 3 в цій компанії. У мене є сертифікація PHP і мені було чудово за останні 8 років роботи тут. Це було нещодавно, коли це почало відбуватися. Тож я маю на увазі, що хотілося б подумати, що через 8 років ти щось знатимеш правильно?
user1207047

1
"Отже, я маю на увазі, що хотілося б подумати, що через 8 років ви щось знаєте правильно?" - Ну, ти здивуєшся ... Те, що я іноді бачу на роботі ...
MetalMikester

Відповіді:


15

Усі коментарі вважаються "повинні робити" і без аргументів.

ІМХО - це справжнє питання, оскільки в цьому немає пріоритетів. Коли ви отримуєте 100-300 коментарів, там повинна бути деякі з них , які мають пріоритет А (реальні помилки), деякі з них Пріо B (швидше за все, приведуть до помилок пізніше) , а деякі з них Прио C (все інше). Скажіть своїм колегам, що ви готові поважати всі їхні бажання, але щоб зміни були ефективними, а ваш час обмежений, наполягайте на пріоритеті. Потім, почніть спочатку з виправлення коментаря, а коментар, і якщо у вас дійсно є час на більше, після цього, ви можете почати з B (якщо вам пощастить, ваш начальник зрозуміє, що виправити пріо B і C не так важливо, і дасть вам ще кілька важливих завдань замість того, щоб витрачати час).


Я багато разів намагався просити пріоритетні коментарі. Я повертаю щось на кшталт "приємно мати" і "потрібно". Виявляється, переважна більшість з них є "необхідними".
user1207047

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

2
Ви знаєте, @Dunk, я думаю, ти тут прав. Ваш коментар дійсно потрапив додому, і я прийняв цю відповідь, оскільки не думаю, що можу прийняти коментар. Я "аутсайдер" цієї групи і тепер розумію, чому внутрішній коло стає все кращим, і швидші огляди, а зовнішні - ні. Мене "примусили" до цієї команди керівництво, так, і ми "змушені" працювати разом. Тож це звучить дуже розумно і логічно пояснює, чому це суворіше. Це чи я дуже смерджу на кодування. Єдиний спосіб зрозуміти це - перейти до іншої групи / компанії та переконатися в цьому.
user1207047

4
@ user1207047: Ви не повинні приймати відповідь, тому що вам подобається одне із коментарів, які знаходяться внизу, оскільки це суперечить стандартам і цілі сайту (я думаю, що тут я відчуваю шаблон). Для цього існує функціональний коментар, що підтверджується.
webbiedave

10

Перегляд коду може бути суперечливим процесом.

Ти хоч на важливому стику. Зробіть продуманий аналіз на їх огляд. Чи виявляють вони проблеми з підбором азоту чи висвітлюють серйозні вади у вашому стилі та логіці?

Якщо це перший, я рекомендую працювати над вирішенням проблеми (нове завдання або новий процес перегляду коду).

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


Гей, добрі думки. З того, що я можу зібрати, деякі з них - це справді продуманий аналіз, але більшість з них з'являються набором ниток, таких як переміщення або перейменування функцій. Проблема полягає в тому, що коли вони пояснюють свій розумовий процес, це справді має сенс, але між собою вони не роблять те саме і роблять ті ж помилки, що і я.
user1207047

Тим більше, що огляд коду настільки глибокий, що я забуваю, що робив, і створював більше помилок, виправляючи додаток через надмірну кількість 100 коментарів. Наприклад, одного разу мені сказали переписати велику частину коду. До цього код був правильним та функціональним. Після огляду коду та майже 150 коментарів, оригінальна функція та коректність були знищені та вставлено багато помилок. Коли я зрозумів це і виправив їх, мені в основному сказали: "Так, наш процес перегляду коду робить вас приголомшливим програмістом, тому що тепер ви повертаєтеся, щоб виправити це, і це зробити легше".
user1207047

8
@user: найменування методів / функцій важливо, це не обов'язково збирання ніт. Якщо ви робите погану роботу з називанням, це може дратувати вашу команду. Якщо ви не можете придумати чітке ім'я, то це, мабуть, не є хорошою функцією. Ви, здається, "новий" хлопець, а інші, мабуть, мають метод свого безумства, про який вони, мабуть, обговорювали багато разів раніше. Таким чином, причина менше коментарів. Я пропоную вам вивчити, що вони хочуть, і спробувати відповідати, а не стикувати голови. Заслужи певну повагу, тоді ти зможеш запропонувати альтернативні ідеї, які будуть зустрічатися відкрито.
Данк

1
@user: Здається, вам потрібні стандарти кодування / дизайну.
Данк

2
@user: Все, що ви можете зробити, - це спробувати працювати в системі та продемонструвати, що ви гравець команди. Якщо ви це зробили. то або ваше сприйняття неправильне, ви маєте справу з нераціональними людьми, вони сприймають ваше ставлення як суперечливе, або це просто неприємна офісна політика. Єдине, над чим ви маєте контроль, - це ваше ставлення / сприйняття. Якщо ви впевнені, що ви чомусь не нагнітаєте проблему, то я не знаю, чому ви залишилися б. Відвідайте місце, де приємно працювати, тому що люди поживають. Якщо ті ж проблеми трапляються в іншому місці, тоді дивіться у дзеркало.
Данк

5

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

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

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

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

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


1
На 100% погоджуєтесь з останнім абзацом: Ви повинні обговорити намічений дизайн перед його впровадженням. Принаймні тоді ви починаєте з нібито прийнятних рамок. Потім після впровадження, можливо, варто буде ще один випадок обговорення остаточного дизайну (не коду). Потім змініть код, щоб відповідати результату остаточного обговорення дизайну. Якщо після декількох спроб це зробити, і це не покращує питання, то це повинно дати зрозуміти, що позиція просто погана, і ви повинні почати шукати в іншому місці.
Данк

4

З того, що ви говорите, мені здається, що вони можуть мати упередженість щодо розробників php, і тому вони намагаються знайти кожне, що не так у вашому коді, щоб довести свою думку.¹

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

  • Перш за все, аналізатор статичного коду повинен використовуватися для виявлення більшості проблем до того, як відбудеться перевірка коду. Наприклад, запуск коду через Sonar, Lint або будь-який інший хороший аналізатор коду повинен допомогти вам позбутися більшості незначних проблем. Тим більше, що ваші рецензенти можуть визначати спеціальні профілі, щоб забезпечити все, починаючи від розміщення дужок, пробілів, коментарів, правильного іменування змінних та багато іншого ...
  • По-друге, мені здається, що я добре працюю, якщо поділити коментарі на різні категорії. Наприклад, дві категорії, де одна група включає невеликі речі, які ви повинні взяти до відома і застосовувати в майбутньому. І друга група для тих коментарів, які потребують негайної модифікації вашого коду, що вимагатиме чергового зобов’язання та подальшого перегляду. Звичайно, кількість коментарів в останній групі має бути меншою.

Крім того, я мушу сказати, що в моїх перших реальних оглядах кодів також було більше коментарів, ніж я спочатку очікував. Однак я ніколи не вважав це поганою справою. Якщо ви продовжуєте дізнаватися з їх коментарів² і готові застосовувати ті нещодавно вивчені методи / найкращі практики у своїх подальших поданнях коду, коментарів повинно бути менше. Це точно було для мене ;-)

¹ На мій досвід, це трапляється багато, тому що багато програмістів стверджують, що php - це найзлочинніша мова програмування, яка використовує найдосвідченіших програмістів. Я віддаляюся від цього твердження, оскільки вважаю, що чудове програмне забезпечення можна написати будь-якою мовою!

² Припустимо, що хоча коментарі надмірні, в них є певна цінність


Я від усієї думки згоден з тим, що ви сказали. Це досвід навчання, і варто вчитися. Однак це триває досить довго до того моменту, коли це просто не здається таким. Або я стаю тупішою, або щось інше відбувається. Я гадаю, що якщо кожен запит на виклик генерує 100 коментарів, то або ви весь час помиляєтесь, або тут є щось інше, що не збігається з тим, що вони заявляють, що намагаються зробити. Або вони повинні сказати: «Добре, зупинимось і вчимося», або перейдіть до суті. Принаймні так я це бачу.
user1207047

1
@ user1207047 Прочитавши ваші відповіді на інші відповіді, мені здається, як ви вже знаєте відповідь на своє власне запитання .. :-) Здається, зрозуміло, що з вашими оглядами коду щось непослушно. Можливо, настав час поговорити з начальником або вимагати переведення в іншу команду?
Jérôme

3

Чи звичайно комусь регулярно отримувати 100 коментарів у своїх оглядах коду? Я б сказав, що ні. Чи загально для людей, чия якість коду "залишає бажати кращого", отримують багато коментарів, абсолютно.

Однак це також залежить від "правил" процесу перегляду коду. У ВСЕГО є свої уявлення про те, як щось треба було зробити. Якщо ваш процес перегляду коду дозволяє коментарям мати форму "Ви повинні зробити це так, а не таким чином", ви, швидше за все, отримаєте багато коментарів навіть за відповідний код. Якщо ваш процес призначений для пошуку «дефектів», то кількість коментарів повинна бути значно меншою.

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

ОНОВЛЕННЯ: З урахуванням сказаного, деякий код є просто поганим, навіть якщо дефект є вільним. У такому випадку коментар до огляду повинен бути єдиним коментарем, який говорить щось подібне. "Цей код потрібно очистити. Будь ласка, відкладіть огляд, поки код не буде обговорено з [ваше ім'я тут]." У такому випадку подальший перегляд коду повинен припинитися, поки коментар не буде виправлений.

UPDATE2: @User: Чи обговорюєте ви свій код / ​​дизайн з одним із них, поки ви розробляєте його, щоб ви могли реалізувати те, що вони шукають, перш ніж дійти до того, як це зробити ваш шлях? Чи змінюєте ви щось про те, як ви розробляєте код на основі їх пропозицій чи продовжуєте думати, що ваш шлях добре? Ви щось дізнаєтесь з їхніх коментарів?

Коли я є керівником проекту, моя відповідальність за ВСІ робочі продукти. Якщо я схвалюю робочий продукт, то я стверджую, що продукт є прийнятним. Я хочу мати репутацію в створенні якісної продукції. Таким чином, я маю очікування і не прийму менш задовільно. У той же час я намагаюся навчити та пояснювати причини своїх уподобань. Ці вподобання не завжди можуть бути ідеальними (особливо в очах інших), але більшість цих переваг випливає з досвіду. Зазвичай це реакція, щоб уникнути повторення поганих. Таким чином, є кілька моїх особистих «наклейок», які необхідні для отримання мого схвалення, незалежно від відштовхування.

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


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

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

1
@Laurent: Я знаю, що ви говорите, і багато в чому погоджуєтесь. Однак це відкриває банку з хробаками, яка схильна до снігової кулі. Якщо у вашої компанії є кошти та графік, щоб перегляд коду міг взяти на себе значну частину зусиль, тоді це добре (як медичне обладнання / авіаційні проекти). Але більшість проектів не мають розкоші. Таким чином, обмеження обсягу коментарів до огляду є дуже корисним. Щоб компенсувати свої занепокоєння, це завдання вести нагляд за розробниками та їх роботою. Вони повинні знати, за ким слід пильно стежити, і виправити ці проблеми перед переглядом коду.
Данк

Тут нам доведеться погодитися :) Технічний борг - це те, що вам доведеться рано чи пізно виплатити (і чим більше ви будете чекати, тим більше сплачуєте відсотки). Ви не заощадите жодну копійку, затримуючи прибирання. Якщо ви не витратите час на його очищення, то наступна зміна може коштувати вам удвічі більше часу, оскільки вам буде важко зрозуміти код. Я працюю з 8-річною базою коду, і розвиток сповільнився до мелірування через проблеми з якістю. Зараз у нас є офіційне правило "внутрішня якість не домовляється". Я можу засвідчити, що це нас врятувало!
Лоран Буро-Рой

Я перечитав ваш коментар і розумію, що, можливо, ми маємо інший світогляд через нашу методологію. Я працюю над Agile Team, де немає ведучого. Оскільки ми всі рівні і всі відповідальні за якість коду, ми повинні контролювати один одного. І перегляд коду проводиться кожні 3-4 години перед кожною інтеграцією. Отже, чистка великого запиту - це кілька годин, якщо ми дуже нацисти, або якщо ми зробили рефактор, який вплинув на стару і грубу частину програмного забезпечення. Тому я бачу коментар щодо якості коду як "no biggy".
Лоран Буро-Рой

2

Деякі важливі відмінності в процесі перевірки нашої команди:

  • основою перевірки є контрольний список, складений всією командою.
  • Фокус - дефекти (теперішнє та майбутнє), а не стиль заради стилю.
  • 3 інспектори (включаючи автора) сідають разом, щоб розібратися з коментарями. Залишаються лише коментарі з більшістю голосів.

2

Для 50 LOC 300 коментарів здається трохи надмірними і - вау - 3 рецензенти на кожен запит на тягнення? Ваша компанія повинна мати багато ресурсів.

З мого досвіду щодо корисного перегляду коду, повинні бути деякі правила та / або вказівки:

  • Пріоритетність коментарів
  • Класифікація коментарів (помилка, стиль коду тощо)
  • Узгоджена архітектура / дизайн, які слід виконати
  • Узгоджений стиль коду

Якщо ви не отримаєте пріоритету у рецензентів, попросіть свого відповідального керівника проекту / керівника команди; відповідальна особа за витрати повинна мати думку щодо пріоритетів.

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

Якщо ваша команда розробників не погодилася з "питаннями смаку" (наприклад, якщо змінна члена починається з "m_"), то кожен рецензент змусить вас дотримуватися його стилю, що є лише марною тратою часу / грошей.


1

Це справді звучить для мене як проблема спілкування. Ви очікуєте, що ваш код недостатньо поганий, щоб заслужити 300 коментарів. Оглядачі, здається, вважають, що вам потрібно багато відгуків. Сперечаючись вперед і назад асинхронним способом, витрачається багато часу. Чорт, написання 300 коментарів - ДУМОВНА марна трата часу. Якщо це не всі дефекти, то, можливо, як новий член команди, ви ще не знаєте стилю команди. Це нормально і те, чого слід навчитися прискорювати весь колектив.

Моя пропозиція - заощадити час. Прискорити зворотній зв'язок. Я би:

  • Робіть більше проміжних оглядів, щоб уникнути однієї і тієї самої помилки і не створювати один і той же коментар 50 разів
  • Сядьте з рецензентом, коли вони переглядають ваш код, щоб ви могли поговорити про проблеми, коли вони з’являються, тим самим уникаючи документування 300 «проблем», які будуть вилучені під час наступного комітету
  • Коли ви пишете код, попрацюйте з одним із цих "справжніх" розробників, щоб побачити, що вони роблять по-іншому

Люди можуть сперечатися проти спарювання, оскільки "це займе більше часу", але це, очевидно, не проблема.

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