Як я можу перефактурувати кодову базу, а інші швидко виконуватимуть її?


18

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

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

Я знаю, що одне рішення - швидко спілкуватися або приймати кращі практики в галузі PM, але ми все ще не такі великі. Я просто хочу очистити код і приєднатись до того, що він оновив. Чи було б використання гілки підходящим планом? Найкраще об'єднання зусиль? Щось ще?

Відповіді:


35

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

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


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

Точно правильно! Великі реконструкції нікуди не йдуть (див. Netscape 6 , або Піраміда проекту )
Andomar

8

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


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

+1. Ви не можете ділитися базою коду з ким-небудь, не спілкуючись
MarkJ

4

Так, гілка є хорошим рішенням для цього.

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

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


1
-1: Ні. Див. Відповідь @ Karl Bielefeldt.
Джим Г.

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

І я кажу: "Не розгалужуйтесь, а потім знову об'єднайтеся". У кращому випадку це витрачені даремно зусилля. У гіршому випадку ви зробите величезний безлад.
Джим Г.

3

Ви розглядали варіант "Ще не робіть цього"?

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

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

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


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

2

tl; dr - Здається, що пора піднятися до великих ліг. Нанесення помади на свиню не робить її гарнішою, якщо тільки ви не займаєтесь такою штукою ...

Проблема людей

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

Rule 1: Always pull before you merge/rebase

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

Проблема з кодом

Звідки ви знаєте, що внесені вами зміни не порушують код?

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

Rule 2: Don't make assumptions, write proofs (ie tests).

На додаток до цього, перед тим, як натиснути на початковий / віддалений майстер, слід запустити повну гаму тестів.

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

Спочатку вам може знадобитися деяке організаційне переструктурування

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

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

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

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

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

Міф про «Міфічний місяць людини»

Вірите чи ні, більші / більш успішні проекти з відкритим кодом не ведуться як демократія. Вони управляються як ієрархія. Заявляючи, що проект не може ефективно перерости понад 8-10 розробників, наївно. Якби це було правдою, то таких мегапроектів, як Linux Kernel, не існувало б. Більш глибоке питання полягає в тому, що надання доступу до всіх лише робить ефективне спілкування занадто важким для обробки.

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

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

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


-1

чистий / красивий і найголовніше довготривалий код підтримки.

На мій досвід, чисте / красиве - ворог ремонту. Часто красивий код:

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

З іншого боку, постійний код:

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

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

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