Чи повинні ваші найкращі програмісти перевіряти код усіх інших у контролі джерела?


29

Однією з відмінностей svn і git є можливість контролювати доступ до сховища. Важко порівняти ці два, тому що існує різниця в поглядах щодо того, кому взагалі слід дозволити вносити зміни!

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

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


5
Визначити "найкращого програміста"? Найкраще при чому? Дотримуючись довільних правил? Відкрутити код? Написання коду з нульовим дефектом?
Тімо Геуш

3
Вибачте, я все ще намагаюся обійти мою концепцію перегляду неконтрольованого (тобто не зареєстрованого) коду ... безумовно, однією з ключових переваг використання SCS є те, що огляд може бути зроблений проти відомого / контрольованого ітерація коду?
Андрій

2
@Andrew у gitбудь-якого розробника може мати власне репо (на своєму персональному комп’ютері) та публічне персональне репо (на сервері, позаду apache), до якого він може лише додавати зміни. Різниця полягає в тому, що лише ведучий репо розробників - це "блаженний", той, з якого всі повинні оформити замовлення. Код ведучих замовлень з публічних репортажів розробника і об'єднує їх у своє публічне репо. Ви обоє знаєте / керуєте ітерацією, а також керуйте джерелом.
Хуберт Каріо

32
"Git, здається, припускає, що вашим найкращим (найпродуктивнішим, найдосвідченішим) програмістам довіряють перевірку коду" - це неправильна презумпція. Git можна налаштувати так, як вам потрібно. Модель "Затягнути запит" є лише одним із способів - ідеально підходить для проектів з відкритим кодом з потенційною великою кількістю невідомих учасників. У більшості комерційних середовищ модель "запит на потяг" буде червоним прапором, що вказує на погані процеси та процедури SDLC та QC.
mattnz

4
Я вважаю, що @mattnz тут правильний. Це виключно в результаті сильного впливу з відкритим кодом на git, де є основна команда розробників, яка контролює стан репо, але інші можуть також зробити свій внесок.
Стівен Еверс

Відповіді:


53

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

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

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

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

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


10
+1: Для ... Хороші програмісти все одно витрачають багато часу на вирішення зламаного коду інших програмістів.
Джим Г.

3
+1 Найкраща відповідь. Особливо вказуючи на те, що один дев, який здійснив неполадки, що впливають на нарощування, негативно впливає на всіх.
Еван Плейс

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

1
Це хороший момент, @Newtopian. Місця, де я бачив цей успіх, мають більшу кількість мікросервісних моделей, і лише одна команда scrum має доступ до будь-якого даного мікросервісу, але відповідальність поширюється на всю систему. Якщо у вас немає принаймні пари досвідчених програмістів на кожну команду scrum, ваші практики найму потребують вдосконалення.
Карл Білефельдт

40

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

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

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

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


8
@HubertKario - Якщо ваші найкращі розробники витрачають час на перегляд коду, а решта фактично заблоковані, поки це не завершиться, я не бачу занадто багато практичної різниці.
Теластин

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

9
Останній рядок у цьому питанні - це справді вся суть у моїх очах. Розробник, якому не довіряють, у кращому випадку виявиться неефективним та ненавидить свою роботу. Не наймайте людей, яким ви не довіритесь. Безглуздо витрачати гроші на людей, яким ти не дозволиш робити роботу, за яку ти їм платиш.
Джиммі Хоффа

1
@HubertKario - ти знаєш краще, ніж я. Навколишнє середовище, в якому я був, дратувало перемикання різних гілок / наборів змін.
Теластин

5
@Telastyn Я не знаю, чи повинен я тлумачити вашу відповідь буквально так само, як і я, але ще одним недоліком цього могла бути історія анотацій / звинувачення, все було б неправильно. Якщо ви знайшли якийсь код, який ви не зрозуміли, ви запитаєте рецензента, який його вчинив, а не програміста, який його написав.
Даніель Каплан

28

Ні. Кожен повинен мати змогу взяти на себе зобов'язання.

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

Ще одна чудова річ називається одиничними тестами;)

Однак є й альтернатива.

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

b) У підривному режимі та подібному ви можете використовувати гілки, де кожен розробник повинен створити виправлення, щоб перейти у головну гілку.


1
Це. Якщо ви здійснюєте без тестування і не будуєте тести, вимога перегляду коду є недосконалою пов'язкою.
Брайан Ноблеуч

так. Тому я згадав про альтернативи. Огляди коду краще, ніж нічого. Неможливість версії коду - це біль, якому жоден розробник не повинен піддаватися.
jgauffin

2
Експериментальні тести не допомагають, якщо вони написані тими самими <вставте сюди свої 4 літери>, що й код одиниці.
ott--

@BrianKnoblauch: можна стверджувати, що і навпаки. В ідеалі ви повинні мати і те, і інше.
Док Браун

@ ott-- Я щойно почув історію про диявола, який пішов після вчинення жахливого безладу виправлення та коментування всіх Ассортів у своїх підрозділах тестів. Тести успішно проходять за замовчуванням, тому знадобилося певний час, щоб помітити проблему!
Олексій

8

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

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

Таким чином, будь-хто, який очікує на зміну, може вийти з нього, як тільки він буде готовий, і лише кваліфіковані люди (з правами +2 привілеї в Герріті) зможуть перенести цей код на тестування та згодом до виробництва.


2
Ми вживаємо герріт з великим успіхом. Вирішує кожне питання, у якого є ОП, і навіть деякі, які він не знає, мають.
mattnz

8

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

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

  1. Ні - я хочу переглянути кожен рядок коду, перш ніж перевірити його.
  2. Деякі - Дайте мені знати, що ви робите, і я надам відгуки
  3. Більшість - ідіть, виконайте свою роботу, і лише просите допомоги, коли це потрібно.

Переваги звільнення вашого таланту:

  • фокус на дизайні
  • участь у створенні стандартів кодування та стратегій виконання (не вручну робити це самі)
  • вирішити складні проблеми кодування
  • надавати наставництво (без затвердження кожного рядка коду)

Є розробники, зацікавлені у шляху управління, які можуть вважати за краще не кодувати цілий день; інших залиште в спокої.


1
+1. Нехай команда рецензує команду - і рецензент, і рецензований, можуть отримати прибуток, навіть якщо рецензент менш досвідчений, ніж рецензований. І ви можете зробити всі огляди ПІСЛЯ реєстрації. ІМО, якщо ви заважаєте людям робити реєстрацію, їх продуктивність знизиться (незважаючи на їх мотивацію).
Енді

5

чи варто огляд досягти продуктивності?

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

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

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


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

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

З іншого боку, коли команда є досить збалансованою, огляд коду є цікавим та повчальним. У моєму попередньому проекті у нас була вимога 100% перегляду коду, і це не забирало багато часу, ані відволікало. Були виявлені помилки за допомогою огляду, були дискусії щодо стилю кодування та вибору дизайну, але це відчувало просто ... нормально .


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

  • - О, інтеграція цієї зміни сильно затягнулася, тому що рецензент раптово захворів, яка біда.
    - Здравствуйте! Чорт-ло-о, ви коли-небудь думали мати резервних рецензентів для вирішення подібних випадків?

4

Так. Але лише якщо ви говорите про розподілене управління джерелами. З централізованим - це залежить.

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

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

Знову ж таки, якщо проект невеликий, ведучий швидко побачить, хто дає хороший код, а хто виробляє поганий код. Він досить швидко побачить, що J.Random пише хороший код, який потребує лише перевірки архітектурних рішень, тоді як стажер пише поганий код, який потрібно переглянути за рядком перед об'єднанням. Згенерований таким чином зворотній зв'язок зменшить навантаження на технічне обслуговування внизу і надасть досвід з перших рук того, що стажер насправді вчиться, і його слід тримати в компанії. Витягнення та злиття гілки з інших gitрепо займає буквально (пару) десятків секунд, зазвичай для читання заголовків повідомлень про фіксацію знадобиться більше часу, тому після того, як я дізнаюся, кому можна довіряти, щоб написати хороший код, з’єднуючи код інших людей, це не проблема.


2

Перегляд коду не обов'язково вимагає уваги лише ваших найкращих програмістів. ІМО, це має бути неофіційна річ. Лише друга думка або друга пара очей на фрагмент коду від не-новобранця, перш ніж його перевірятимуть у виробництві. Це допомагає пом’якшити основні огляди, а також допомагає людям краще покращувати кодування як ремесло, зазнаючи інших перспектив розвитку.

Сорт менш недоброзичливої ​​програми для програмування пар. Іншими словами, це не повинно зайняти багато часу, і вам не доведеться чекати когось годинами. Все, що у вашому процесі розвитку, що стосується людей, які чекають речей, - це марнотрата грошей і каліка до імпульсу / моралі, ІМО.

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


0

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

Особисто я був би злий, якщо мені доведеться перевірити код інших людей.

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


0

Так, огляд того вартий. Я не впевнений, що досягти продуктивності, якщо процес перегляду пропорційний з наступних причин:

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

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

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

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


1
-1: Це робить програмістів чесними - якщо ви знаєте, що його переглянуть, люди візьмуть менше ярликів. - Гм ... мене б хвилювало введення моральної небезпеки. Тобто, розробники можуть стати ледачими або неохайними, оскільки знають, що старший розробник завжди несе відповідальність за свій код у вигляді огляду коду.
Джим Г.

1
Рецензент взагалі не несе відповідальності за код, а натомість дає поради та вказівки щодо питань із кодом. Оригінальний розробник повинен виправити проблеми, і він все ще несе відповідальність за код.
Стів

-1

чи кидають хороші програмісти, якщо значна частина їх роботи - перегляд коду інших людей?

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

Чи повинні ваші найкращі програмісти перевіряти код усіх інших у контролі джерела?

Абсолютно НІ. Це, безумовно, втрата часу, за винятком певної критичної логіки, яка повинна бути в твердому стані .

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

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