Często „skomplikowane” łatki / listy zmian to takie, które wykonują wiele różnych rzeczy naraz. Jest nowy kod, usunięty kod, kod refaktoryzowany, przeniesiony kod, rozszerzone testy; utrudnia to dostrzeżenie dużego obrazu.
Powszechną wskazówką jest to, że łatka jest ogromna, ale jej opis jest niewielki: „Implementuj $ FOO”.
Rozsądnym sposobem radzenia sobie z taką łatką jest poproszenie jej o podzielenie jej na serię mniejszych, samodzielnych elementów. Tak jak zasada pojedynczej odpowiedzialności mówi, że funkcja powinna robić tylko jedną rzecz, tak łatka powinna koncentrować się również na jednej rzeczy.
Na przykład pierwsze łatki mogą zawierać czysto mechaniczne refaktoryzacje, które nie wprowadzają żadnych zmian funkcjonalnych, a następnie ostatnie łatki mogą skupić się na faktycznej implementacji i testowaniu $ FOO przy mniejszej liczbie rozproszeń i czerwonych śledzi.
W przypadku funkcji wymagającej dużej ilości nowego kodu nowy kod można często wprowadzić w testowalnych porcjach, które nie zmieniają zachowania produktu, dopóki ostatnia łatka z serii nie wywoła nowego kodu (odwrócenie flagi).
Jeśli chodzi o robienie tego taktownie, zwykle wypowiadam to jako swój problem, a następnie proszę o pomoc autora: „Mam problem ze śledzeniem wszystkiego, co się tutaj dzieje. Czy możesz podzielić tę łatkę na mniejsze kroki, aby pomóc mi zrozumieć, jak to wszystko pasuje razem?" Czasami konieczne jest przedstawienie konkretnych sugestii dotyczących mniejszych kroków.
Tak duża łata, jak „Implement $ FOO”, zamienia się w serię łatek takich jak:
- Przedstaw nową wersję Frobnicate, która wymaga pary iteratorów, ponieważ będę musiał wywołać ją z sekwencjami innymi niż wektor, aby zaimplementować $ FOO.
- Przełącz wszystkich istniejących rozmówców Frobnicate, aby użyć nowej wersji.
- Usuń stary Frobnicate.
- Frobnicate robił za dużo. Uwzględnij krok przeróbki we własnej metodzie i dodaj do tego testy.
- Przedstaw Zerzify wraz z testami. Jeszcze nie używany, ale będę go potrzebować do $ FOO.
- Zaimplementuj $ FOO w kategoriach Zerzify i nowego Frobnicate.
Należy pamiętać, że kroki 1-5 nie wprowadzają żadnych zmian funkcjonalnych w produkcie. Są trywialne do sprawdzenia, w tym upewnienia się, że masz wszystkie odpowiednie testy. Nawet jeśli krok 6 jest nadal „skomplikowany”, przynajmniej koncentruje się na $ FOO. Dziennik w naturalny sposób daje o wiele lepsze wyobrażenie o tym, w jaki sposób wdrożono $ FOO (i dlaczego zmieniono Frobnicate).