Часто "складні" патчі / списки змін - це ті, хто робить багато різних речей одночасно. З'явився новий код, видалений код, код, який переробили, переміщений код, розширені тести; важко бачити велику картину.
Поширена підказка полягає в тому, що патч величезний, але його опис крихітний: "Реалізуйте $ FOO".
Розумний спосіб поводження з таким виправленням - попросити його розбити на ряд менших, самодостатніх шматочків. Подібно до того, як принцип єдиної відповідальності говорить, що функція повинна виконувати лише одне, патч повинен також зосереджуватися лише на одній справі.
Наприклад, перші патчі можуть містити суто механічні рефактори, які не вносять функціональних змін, і тоді остаточний патч може зосередитися на реальній реалізації та тестуванні $ FOO з меншою кількістю відволікань та червоних оселедців.
Для функціональності, що вимагає багато нового коду, новий код часто можна вводити в тестові шматки, які не змінюють поведінку продукту, поки останній патч у серії фактично не викликає новий код (фліп прапорця).
Що стосується цього тактовно, я зазвичай називаю це своєю проблемою, а потім прошу допомоги автора: "У мене виникають труднощі слідкувати за тим, що все відбувається тут. Чи можете ви розбити цей патч на менші кроки, щоб допомогти мені зрозуміти, як це все підходить" разом? " Іноді необхідно зробити конкретні пропозиції для менших кроків.
Настільки великий патч, як "Implement $ FOO", перетворюється на серію патчів на зразок:
- Представляємо нову версію Frobnicate, яка займає пару ітераторів, оскільки мені потрібно буде називати її послідовностями, відмінними від векторних, щоб реалізувати $ FOO.
- Переключіть усі існуючі абоненти Frobnicate, щоб використовувати нову версію.
- Видаліть старий Frobnicate.
- Frobnicate робив занадто багато. Сформулюйте фактор повторного кроку на власний метод і додайте для цього тести.
- Представляємо Zerzify з тестами. Ще не використовується, але мені знадобиться за $ FOO.
- Впровадьте $ FOO з точки зору Zerzify та нового Frobnicate.
Зауважте, що кроки 1-5 не вносять жодних функціональних змін у виріб. Вони банальні для огляду, включаючи те, що у вас є всі правильні тести. Навіть якщо крок 6 все ще "складний", принаймні він зосереджений на $ FOO. І журнал, природно, дає вам набагато краще уявлення про те, як було реалізовано $ FOO (і чому Frobnicate було змінено).