Коли здійснювати код?


59

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

Тож питання полягає в тому, коли дійсно взяти на себе зобов’язання зі сховищем, щоб виправдання було виправданим?

Як доповнення: чи правильна практика вимірювати розвиток проекту на основі його зобов'язань?


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

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

Відповіді:


79

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


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

34

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

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

Це також залежить від системи SCM, яку ви використовуєте. Розподілені системи, як правило, роблять злиття та роздвоєння безболісними та швидкими, і ви можете здійснювати місцеве; це означає, що ви повинні зробити багато і натиснути / злитися, коли ви зробили значну кількість роботи. З централізованими системами, такими як svn чи cv, доручення дорожче, і це впливає на всіх. Розгалуження частково вирішує це питання, але оскільки це відбувається на сервері, воно може бути болісно повільним, а злиття може бути громіздким. Тож із централізованими SCM часто існує більш ретельна культура, де ви виконуються лише після того, як ви виконали значну кількість роботи.

Щодо додатку: Будь ласка, не робіть цього. Рядки коду, кількість комітів, кількість знайдених / вирішених помилок тощо - це все дуже погані вимірювання якості або навіть кількості.


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

Так, але в меншій мірі, тому що (див. Оригінальну відповідь) ви нікого прямо не заважаєте. Залежно від розглядуваної SCM, зазвичай вважається хорошою практикою очищення вашої історії комісій перед об'єднанням вгору за течією (наприклад git rebase -i).
tdammers

13

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

Для нерозподілених VCS (наприклад, SVN) застосовується та сама логіка, замість локального сховища використовуйте приватну гілку, а не push - злиття з основною гілкою.


+1 Здивований, це більше не зверталося до уваги. Це була моя перша думка - dvcs або vcs
Michael Durrant

9

Ви повинні робити зобов’язання рано і часто.

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

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

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


1
+1. При об'єднанні BDD-As-If-You-Mean-It, Refactor Till You Drop, Atomic Coding, і вельми виразний мову, 90 секунд може бути довгий час обходитися без фіксації.
Йорг W Міттаг

8

Коміти - це складові будь-яких даних / коду, що контролюється версіями. Кожна комісія повинна виконувати саме одне з наступних дій:

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

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

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

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

Що стосується вимірювання прогресу проекту на основі комітетів, можливо, якщо рефакторинг і фіксація помилок не враховуються.


Я думаю, що ця відповідь повинна бути прийнятою відповіддю, але, напевно,
запитуючий

7

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

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


5
Це було б правдою, якби ви здійснювали транзакцію до магістралі, але якщо ви збираєтеся в функціональну гілку або в приватну гілку, не потрібно бути готовою до інтеграції.
Ніл Баттерворт

1
@Neil Butterworth: ... якщо немає інших розробників, які працюють в тій же гілці з деякими залежностями від вашого коду.
FrustratedWithFormsDesigner

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

1
Цікава дихотомія тут між розподіленими та централізованими vcs. З розподіленими vcs це ніколи не викликає занепокоєння, оскільки ви можете взяти на себе зобов’язання розміщувати гілки на місцевому рівні і не пустити будь-яких інших розробників.
Джордж Мауер

2
@George - Це хибна дихотомія. Справжня дихотомія полягає у використанні приватних (на розробника) гілок, або публічних (спільних кількох розробників). Це ортогонально, чи використовуєте ви централізований розподілений VCS (однак, DVCS заохочують приватні відділення, оскільки гілки починаються як приватні, поки ви не публікуєте їх).
Стівен С. Сталь

6

Як доповнення: чи правильна практика вимірювати розвиток проекту на основі його зобов'язань?

Ні. Щодня було WTF про те, чому це жахлива ідея.

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

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


1
+1 для попередження про компіляцію. У нас в офісі була скарбничка, де кожен повинен був вносити плату за кожен раз, коли він / вона вчиняв щось, що призвело до того, що збір не вдався. На жаль, ми отримали досить трохи грошей таким чином, принаймні спочатку :)
Ray

@Ray - на моєму останньому місці штраф потрапив до фонду лото. На жаль, ми ніколи не стикалися з цією шкідливою звичкою. : P
Тяньна

1

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

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


Пам'ятайте, що з розподіленими системами виконайте!! Ви повинні натиснути, коли у вас є щось готове для спільного використання.
Рейн Генріхс

@Rein Henrichs: Добре, хоча управління джерелами на роботі не має такої функціональності (принаймні, наскільки я знаю). Коли щось зроблено, усі інші в проекті можуть бачити та повторно синхронізувати (і зазвичай це роблять, іноді наосліп).
FrustratedWithFormsDesigner

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

@Rein Henrichs: Я не заперечую це !!
FrustratedWithFormsDesigner

1

Як тільки відповідне завдання виконано . Завдання є частиною користувальницької історії .

Завдання виконується в наступних випадках:

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

Ви можете мати інше визначення зробленого .

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


1

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

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

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

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

Ось як це працює з Git, але головне стосується будь-якого контролю версій.


це, мабуть, не пропонує нічого суттєвого щодо висловлених та пояснених у 10 попередніх відповідей. Крім того, останній абзац, мабуть, стосується особливості git, тоді як, здається, питання не стосується git
gnat

Розрізання не є специфічним для git. Це можна зробити з будь-яким типом контролю версій, це був лише приклад, як я знаю, у Git є його вбудований.
Джаспер Кенніс

-1

Коли:

  • він будує (ВЖЕ)
  • одиничні тести проходять
  • вона працює (якщо вона чітко не позначена як "незавершена робота")
  • переваги збереження стану коду переважають клопоту виконувати тести, продумувати гарне повідомлення про фіксацію та вирішувати будь-які конфлікти злиття під час процесу фіксації

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