Чи слід використовувати історію комісій для передачі важливої ​​інформації розробникам?


94

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

Деякі розробники стверджували, що це була погана практика, і натомість це слід було зазначити або у вихідному файлі (тобто // Don't upgrade SDK Version x.y.z, see ticket 1234), або у READMEфайлі рівня проекту . Інші стверджували, що оскільки історія комісій є частиною проектної документації, це є прийнятним місцем для такої інформації, тому що ми всі повинні її читати в будь-якому разі.

Чи слід використовувати історію фіксації для передачі важливої ​​інформації іншим розробникам, чи слід дублювати таку інформацію в іншому місці, наприклад, проект READMEабо коментарі у відповідному вихідному файлі?


60
Здається, ваш проект має досить серйозні проблеми із спілкуванням.
tzerb

82
Вам потрібні нові наймачі, щоб пройти всю історію комісій?
Стівен Еверс

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

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

6
Це все ще не дає змоги вносити критичну інформацію виключно в історію фіксації.
17 з 26

Відповіді:


143

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

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

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


52
Дійсно, історія здійснення комісій - це історія проекту. Так само, як було б нерозумно мати важливу інформацію в історії редагування вікі, а не на самій сторінці. Історія (чи код, чи вікі) - це посилання на те, що раніше було, а не на те, що має відбутися зараз.
Звичайний

48
Якщо це можливо для вигаданого SDK, я б додав тестовий блок, призначений спеціально для проходження під V2 та відмови під V3, з явним твердженням твердження, що дає підставу не переходити на V3. Історія комісій - це гарне місце, щоб повідомити, чому ви вносите цю зміну для рецензерів коду, а не для документування найкращої практики.
Клорс

3
@Klors Поки ви не обмежуєтесь самими педантичними визначеннями одиничних тестів і не відмовляєтесь робити інші типи автоматизованих тестів, тест, заснований на перевірці файлової системи / тощо на ім'я бібліотек (якщо версія має закодовану версію) в ньому) або хеш / контрольна сума самого файлу може використовуватися для кидання червоного прапора кожному, хто хоче оновити бібліотеку, навіть у випадках, коли недолік нових версій важко / неможливо захопити в тесті. (наприклад, багатопотокові умови перегонів)
Dan Neely

18
@Klors Я думав те саме, але, на мою думку, тест одиниці повинен продемонструвати причину використання v2 над v3, таким чином, якщо тест одиниці проходить з v4, у вас немає тесту для одиниць, для якого потрібна v2 причина.
Метью

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

69

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

<!-- Do not change the SDK version because it causes Foo crashes. For more detail see Issue #123 -->

Безпосередньо над <dependency>лінією.

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

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

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

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


11
Я згоден: найкраще місце для критичної інформації - "у якомога більше місцях". Можливо, pom.xmlабо еквівалентний файл проекту, readme тощо, але історія фіксування все ще є хорошою. Якщо я дивлюсь на оновлення бібліотеки, я можу перевірити історію існуючої версії, щоб побачити, коли вона оновлювалася, а також будь-які примітки щодо проблем, які виникло у виконавця. Але я не хотів би перебирати історію, щоб зібрати всю документацію. Це хороше додаткове джерело.

35

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

Щодо команд та проектів, над якими я працював, я б скористався відкатом із коментарем, чому нова версія не вдалася. Я б додав історію відставання, щоб повторно спробувати оновити, якщо виправлена ​​нова версія. Я б додав коментарі до системи збирання / створення сценаріїв, де бібліотека пов'язана.

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

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


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


7
Так, коментар потрібно розмістити "на шляху" змін. Тому технічно неможливо здійснити дію, не побачивши попередження. Це дуже схоже на засоби безпеки.
dss539

+1 для пропозиції створити історію / квиток для оновлення у вашому трекері випуску, встановіть значення "У режимі очікування" з поясненням того, чому це ще не можна зробити. Відстежувач проблем - це одне місце, на якому ви дійсно можете вимагати, щоб люди шукали, перш ніж над чимсь працювати.
Ендрю Спенсер

+1 Цитуючи Джеффа Аттвуда (хоча він говорить про, ну, "користувачі"): "Наступного разу, коли ви проектуєте [X], розгляньте [клієнта] короткозорість. Думайте довго і наполегливо над тим, щоб розмістити речі прямо перед собою там, де вони не просто видні, але й неминучі. Інакше їх можна взагалі не побачити ". blog.codinghorror.com/treating-user-myopia
heltonbiker

17

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

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

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

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


1
Це єдина правдива відповідь. Визначення несправності в одиничному тесті запобігає поганому оновленню. Період.
Дірк Бестер

15

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

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

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


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

13

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

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


11

Я не впевнений, як спілкується ваша команда, але я вважаю, що найефективніший спосіб сказати це - спочатку надсилати та надсилати електронній пошті групі електронної пошти команди, позначеній як "НЕПРИЄМНА", з тією заявою

Хлопці, ми не можемо використовувати SDK v xyz, оскільки це призводить до переповнення буфера Foo, а служба Bar припиниться. Дотримуйтесь версії xyy

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

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

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

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


4
Мені подобається ідея групи електронної пошти. Занадто багато місць, де я працював, покладаються на окремі адреси, і речі не передаються новим членам.
JeffO

20
Що станеться, якщо хтось новий прийде до вашої команди? Хто несе відповідальність за надання їм такого роду псевдоінституціональних знань?
ABMagil

3
@ABMagil: Інформація надходить у вікі. Новачки в команді розробників, як правило, починають звідти, на деяких вступних сторінках. Потім вони стикаються з конкретними особами (які надали час для допомоги новому дияволу), коли у них є конкретні запитання (і вони завжди є). Для нас це, ймовірно, закінчиться в "Посібнику з налаштування розробника для ApplicationX", NOTE: Do not use SDK vers. x.y.z because...але початковим повідомленням має бути електронний лист.
FrustratedWithFormsDesigner

16
-1 електронні листи не працюють добре як документація
BlueRaja - Danny Pflughoeft

6
@ BlueRaja-DannyPflughoeft: Електронна пошта - це простий і простий у використанні метод, який дає змогу негайно знати всіх членів команди про те, що в роботі з певною версією певної бібліотеки була виявлена ​​проблема, і ця версія не повинна використовуватися. Як зазначається, довгострокову документацію найкраще робити у вікі команди, або в якійсь іншій базі знань.
FrustratedWithFormsDesigner

5

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

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

Потрібно мати якийсь документ про цю сторонній пакет SDK.

  • Яку проблему вона вирішує?
  • Чому саме цього обрали?
  • Які міркування потрібно враховувати стосовно: версій, оновлень, тестування тощо.
  • Хто приймає це рішення?

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


2

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

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

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


це читає скоріше як коментар, ніж відповідь. Дивіться: Як відповісти
gnat

Добрий момент, я розширив його. Сподіваємось, це краще відповідає критеріям StackExchange.
Корт Аммон

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

1

Я трактую цю ситуацію як дві основні проблеми, можливо, три.

  • Небажане оновлення SDK перетворило його на джерело, де це може негативно вплинути на продукт.
  • З питання: дописувач, який здійснив небажане оновлення, не знав про попереднє, конкретне рішення не оновлювати.

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

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

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

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

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

Можливе третє питання: Чому оновлення не хочеться в першу чергу? Очевидно, що принаймні один розробник вважав, що оновлення буде хорошою справою. Існує багато вагомих причин затримати оновлення, але також багато поганих. Слідкуйте за тим, щоб уникнути потоку лави (зайвий код сумісності назад) та культу вантажу ("ми не можемо оновити це, але я не знаю, чому") анти-шаблони!


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

Чому запит на витяг був відхилений? Яким чином особа, відповідальна за це рішення, повинна виявити (або запам'ятати) обмеження версії?
Ben Voigt

@BenVoigt Ну, або керівники команди знали про обмеження, або ніхто не пам’ятав про це, і це було повторно виявлено після виникнення проблем. У будь-якому випадку, використовуючи запити на
виклик, ви

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

0

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

Деякі інші інструменти можуть бути загальнодоступними блокнотами в документах evernote або google.


0

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

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

Альтернативою можуть бути контрольно-провідні контрольні пункти, які не пройдуть, з певною формою одиничної перевірки, яка прямо чи опосередковано оцінює версію SDK, як згадував Карл.

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

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