Що відбувається, якщо функція, об'єднана в розробку, відкладається управлінням?


53

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

Проблема полягає в тому, що ця функціональність була об'єднана в розробку, коли вона була закінчена разом з усіма іншими функціями, на які ми очікували натиснути в прямому ефірі на наступному випуску, щоб ми не могли просто злити dev -> test -> master, як ми зазвичай робимо.

Як ми могли уникнути цього питання?


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

Відповіді:


74

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

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


9
Чи не позначення конфігурації не означає подвоєння тестових зусиль для цього коду? Ви повинні перевірити обидва шляхи.

16
У цьому випадку, оскільки ви не увімкнете цей прапор у виробництві, ви можете протестувати цей випадок на випуск, а потім протестувати на випадок, коли він буде готовий перейти до prod. Це має бути приблизно однаковою роботою, як тестування відновлення та повторного повторного замовлення.
Алан Шутько

4
Поширений термін - Feature Toggle . Якщо є невелика "точка входу в функцію", це, ймовірно, може бути зроблено після рішення управління. Якщо ні, то з цим методом виникнуть проблеми, як і з будь-яким методом.
Док Браун

3
У нас є функції, які розробляються протягом 6+ місяців, які приховані Feature Toggling, як назвав Док Браун. Це також дозволяє нам протестувати функцію (або її відсутність) у невиробничих середовищах. Іноді ці функції доповнюють існуючі функції, і в цьому випадку ми повинні мати тести одиниць як для старого, так і для нового набору функцій. Кожен одиничний тест просто встановив би прапор на все, що йому потрібно зробити поточний тест.
ps2goat

25

Як ми могли уникнути цього питання?

З точки зору процесу, з’ясуйте:

  • Хто був прийнятим рішенням розпочати цю роботу?
  • Чому рішення про випуск цієї функції змінилося?
    • Пропущені очікування?
    • Неправильне спілкування?
    • Неадекватна підтримка бізнесу?
    • Немає участі клієнтів?

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


9
+10. Як тільки керівництво почало сумніватися у випуску функції, вони повинні повідомити розробників, щоб можливе видалення могло бути враховано при прийнятті рішення про об'єднання функції в розробку.
Барт ван Інген Шенау

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

11
Якщо у вашій організації є люди, які є достатньо потужними, щоб відмовитись визнати свою провину, а також достатньо по-дитячому не бажають уникати помилок, то вам все одно слід мати проблеми зі смертю щодо власної інформації. Ви просто не хочете їх розповідати (або записувати це занадто явно). З огляду на це, Ендерленд не вживає слова «звинувачувати», і якщо організація трактує цю пораду як «з’ясуйте, хто винен», то це саме по собі є проблемою для роботи організації. Все це говорить про "зрозуміти, чому проблема виникла", що важливо, щоб уникнути її в майбутньому.
Стів Джессоп

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

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

19

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

Я думаю, ви б оголосили "відключення автоматичної реєстрації за допомогою конфігурації" просто як додаткову функцію (це просто форма Feature Toggle ), тому це повинно плавно інтегруватися у ваш робочий процес. Ви можете оцінити зусилля, якщо вам подобається, ви можете використовувати для нього гілку функцій (чи ні, якщо ви не використовуєте гілки функцій для таких питань). І ви однозначно можете використати описаний вами потік "merge dev -> test -> master".

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


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

@Gusdor: дивись мою редакцію.
Doc Brown

1

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

Я створив «гілки зв’язку» на додаток до стандартних гілок gitflow. Комплект складається з усіх функцій, готових до uat / qa. Створюється список функцій uat / qa. Вони об'єднуються у тимчасовий пакет, і цей пакет розгортається в uat / qa. Будь-яке виправлення помилок відбувається в оригінальній гілці функції, і вона повертається назад у пакет і розгортається. Це відокремлює майбутній випуск, а також дозволяє протестувати ці функції разом до того, як вони знайдуть свій шлях до галузі розвитку. Ті гілки, які затверджені, отримують запит на виведення - слідкуючи за процесом gitflow. Готові функції для тестування можна додати або вилучити з тимчасової гілки пакета та перевстановити.

  • Це допомагає майстру завжди відображати стан, готовий до виробництва (може автоматизуватися за допомогою гачка)
  • Розвиток завжди відображає останню доставку (і тестування) наступного кандидата на реліз

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

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

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