Як застосувати хороші / кращі практики контролю вихідного коду?


28

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

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

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

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

Чи слід шукати інструмент для вирішення цієї проблеми чи що я повинен зробити, щоб вирішити цю проблему?


Чи не ті проблеми, які вони об'єднують, стимулюють їх покращити спосіб роботи?
Флоскул

1
Лише одна ідея, змусити їх об'єднати код;) Але одне, що заважає мені в SVN часто чинити, це те, що це займає дуже багато часу, наприклад, git, наприклад ...
Knerd

5
Хто бере на себе відповідальність за вирішення конфліктів після того, як хтось здійснює злиття?
Flosculus

Підхід, який високо розгалужується, може дати найкраще для обох світів; якщо ви робите велику роботу на гілці і регулярно об'єднуєте головну гілку в цю гілку (тому всі злиття невеликі), тоді, коли ви нарешті з’єднаєте гілку назад у головну, це злиття тривіальне, але поки ви цього не зробили отримав стан посередника на майстра, який зламаний або іншим чином заплутано неповний. З деякими СКМ легше, ніж з іншими (залежно від того, наскільки легке розгалуження), але це може працювати з будь-яким із них.
Джон Ханна

Відповіді:


47

Ви шукаєте технічне рішення людської проблеми. Це рідко працює.

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

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

  1. Обговоріть це питання зі своїми колегами та поясніть наслідки великих зобов'язань. Можливо, вони просто не розуміють, що складні злиття є прямим наслідком рідкісних комітетів, і, ніж малі, часті внесення зроблять злиття (відносно) легкими.

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

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

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

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

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

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

    Програмісти не повинні боятися робити невеликі зобов’язання, а скоріше об'єднати багато змін у одну величезну комісію.

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

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

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

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

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

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

    • «Я думаю, що зобов’язання повинно відповідати конкретній задачі». Зважаючи на те, що часто завдання відповідає певній роботі, яка повинна бути виконана за один день (наприклад, на дошках завдань візуального управління), це не випадковість. Потім людина повинна навчитися змінювати завдання між відставанням (2 - 8 годин роботи) та логічно ізольованою зміною, яку слід здійснити (від декількох секунд до кількох годин роботи). Це також пов'язане з пунктом 5.

  7. Шукайте причину, яку команда не виконує, частіше. Ви можете бути здивовані результатами.

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

    Інші причини можуть включати:

    • Надмірно складні правила написання повідомлення про вчинення.

    • Правило, яке змушує розробника зв'язувати фіксацію завдання із системою відстеження помилок.

    • Страх зламати збірку.

    • Небажання мати справу з ризиком порушити збірку прямо зараз: якщо ви зробите зобов’язання в п'ятницю ввечері безпосередньо перед від'їздом, ви можете відкласти розгляд справи зі зламаною збіркою на понеділок.

    • Страх зробити злиття.

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

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


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

@VolkerK: дивіться мою редакцію (перші два абзаци відповіді). У вас є сервер CI? Коли ви говорили зі своїми колегами, як вони пояснюють своє небажання частіше брати на себе зобов’язання?
Арсеній Муренко

1
@VolkerK Ця відповідь дуже добре пояснює. У вас немає технічної проблеми. Проблема полягає в тому, що люди відмовляються дотримуватися процедури.
BЈович

1
До пункту 3: Клієнт TortoiseSVN може створювати різні діаграми, які візуалізують поведінку реєстрації на основі різних параметрів (наприклад, часу). Насправді їх досить цікаво оцінити. Я робив це часто ще у дні, коли ми використовували SVN. stackoverflow.com/questions/412129 / ... :)
Aschratt

2
Дякую за вклад, але я взяв інший маршрут і просто повідомив ;-)
VolkerK

-3

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

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

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


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

3
І це марно витрачаючи ресурси, тому що зазвичай у вас є середовище створення, яке добре відповідає вашим потребам. У мене була така ж ситуація давно, і я придбав власний ноутбук через 4 тижні. Я ненавидів щодня встановлювати все те саме, просто виконувати ту роботу, яку я очікував.
mliebelt

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

1
... Але це також (3) може знищити години роботи, якщо хтось забуде перевірити код, або випадково не зробить його з якоїсь причини і (4) продемонструє дияволам, що керівництво не довіряє їм дотримуватися правил натомість нав'язує правила драконічним способом, потенційно перетворюючи його на середовище нас проти них, і (5) він має потенціал заохотити їх обійти правила, щоб вони були продуктивними.
Бен Лі

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