Biorąc pod uwagę niewielki projekt, którego celem jest dodanie nowych funkcji do aplikacji, wprowadzone zmiany dotyczą niektórych istniejących kodów, obejmujących ich aktualizację w niektórych obszarach. Podczas wdrażania zauważyłem, że niektóre z tych kodów, które zostały zaktualizowane, mają kandydatów do refaktoryzacji.
Czy jest to odpowiedni czas na refaktoryzację, która z kolei wymagałaby testowania regresji dla tych komponentów, których dotyczy (prawdopodobnie wprowadzając zakres, który pierwotnie nie był częścią projektu)? A może powinienem odroczyć, dokończyć funkcjonalność i być może mieć osobny projekt do refaktoryzacji (chociaż jestem nieco niezdecydowany, ponieważ użytkownicy biznesowi mogą nie sponsorować w pełni projektu, który nie dodaje żadnej funkcjonalności, chyba że cenią sobie łatwość obsługi kodu ...)?
źródło
Odpowiedzi:
Absolutnie.
Refaktoryzacja powinna zostać przeprowadzona w działającym i „pozytywnym” projekcie. Po przejściu wszystkich testów (na poziomie urządzenia, systemu i akceptacji) wiesz, że Twój produkt spełnia wymagania. Po refaktoryzacji możesz nadal potwierdzać, że wszystkie testy są zaliczane. Jeśli jakikolwiek test zaczyna się nie powieść, zrobiłeś coś złego i musisz to poprawić. Jeśli masz testy negatywne, powinieneś je poprawić przed refaktoryzacją, aby zawsze mieć pewność, że refaktoryzacja nie zmienia funkcji systemu.
Jest to również idealny czas na refaktoryzację, zakładając, że masz czas i zasoby, aby przeprowadzić refaktoryzację, a jednocześnie zapewnić terminowość i budżet. Refaktoryzacja ułatwi teraz zrozumienie i utrzymanie systemu, więc wraz z dodawaniem nowych funkcji staje się łatwiejsze. Musisz walczyć z gniciem kodu i entropią oprogramowania .
Jak zauważa Joel Etherton w komentarzach, musisz zarządzać zakresem refaktoryzacji. Skoncentruj się na refaktoryzacji części systemu, do których wkrótce będziesz dodawać funkcje, wykonując refaktoryzację, która ułatwi pracę lub dodanie nowych funkcji. Korzystanie z analizy statycznej, narzędzi pomiarowych i przeglądów kodu może pomóc w zidentyfikowaniu obszarów o największym znaczeniu. Nie chcesz przekraczać terminów, ponieważ dokonałeś refaktoryzacji - nadal musisz zwiększać wartość dodaną dla klienta.
Wspominasz, że klient nie widzi wartości w refaktoryzacji. Zazwyczaj klient nie dba o jakość kodu, ale o produkt. Refaktoryzacja ułatwi utrzymanie wysokiej jakości produktu i dostarczanie produktu spełniającego zmieniające się potrzeby klienta. Spróbuj wynegocjować czas na refaktoryzację w swoim harmonogramie (klient chce funkcji X w Y dni, spróbuj sprawdzić, czy nie możesz uzyskać dni Y + Z lub XN, abyś mógł poświęcić czas na projektowanie, refaktoryzację i wdrożenie), jeśli mogą.
źródło
Zastanów się nad odpowiedzią na poniższe pytania, wtedy podjęcie decyzji będzie łatwe. Mądrość „nie naprawiaj, jeśli nie jest zepsuta” jest kusząca, ale nie zawsze jest prawdziwa w przypadku pracy zawodowej.
0-Czy reklamacja klienta dotyczy tego kodu?
1-Czy jest to konieczne dla funkcjonalności aplikacji
2-Czy obecny kod jest szkodliwy?
3-Czy warto koszt zmiany?
4-Czy możesz sobie pozwolić na koszt?
5-Czy to najlepsze wykorzystanie twoich umiejętności w organizacji
6-Czy zmiany wymagałyby od użytkownika ponownego zainstalowania nowej zmiany - czy możesz to uzasadnić klientowi?
7-Czy możesz tolerować ryzyko złej naprawy?
8-Czy zmiana wpływa na inny kod poza twoim projektem?
9-Czy jest to produkt ewoluujący czy stabilny? Jeśli ewoluuje, czy mógłbyś uwzględnić zmiany w następnej wersji?
źródło
Refaktoryzuj wkrótce, refaktoryzuj często.
Jeśli możesz sobie na to pozwolić (czas, pieniądze itp.), Powinieneś to zrobić.
Mówię to, ponieważ czasami możesz zabraknąć czasu lub na przykład, że nie otrzymujesz pieniędzy na interwencję związaną z konserwacją kodu, lub chcesz zakończyć projekt jak najszybciej, a bardziej ogólnie, ponieważ refaktoryzacja wymaga zasobów. Ale poza tym zawsze jest dobry czas na refaktoryzację.
Potrzebujesz aktualnego kodu, a jeśli uważasz, że Twój kod rzeczywiście wymaga pewnych zmian, szczególnie podczas dodawania nowych funkcjonalności, powinieneś go zmienić.
Nie zapominaj, że dzięki systemowi kontroli wersji możesz rozwidlić swój projekt do nowej gałęzi, aby w ogóle nie wpłynąć na obecny kod.
źródło
Jeśli refaktoryzacja jest potrzebna do wdrożenia nowej funkcjonalności, należy to zrobić i uwzględnić w ramach nowego projektu.
Posiadanie duplikatu kodu będzie kosztować cię (zarówno ciebie, jak i firmę) na dłuższą metę, ponieważ zmiany będą wprowadzane w jednym miejscu, a nie w drugim.
Musisz mieć zestaw testów - albo automatyczne testy jednostkowe, albo testy regresji, które możesz uruchomić, które dowodzą, że nie wprowadziłeś problemów do istniejącej funkcjonalności.
Jeśli refaktoryzacja jest po prostu „przyjemna do zrobienia” - tj. Nie ma na niej wpływu nowej funkcji, to zostawię ją w spokoju. Wprowadzasz zmianę ze względu na zmianę.
źródło
Wygląda na to, że refaktoryzacja kodu ułatwi dodawanie nowych funkcji; taka jest teoria. Uwzględnij to w zakresie nowych funkcji. Bardziej prawdopodobne jest uzyskanie wpisu od użytkowników biznesowych w ten sposób. W takim przypadku powinieneś być w stanie przedstawić przekonujący argument i uzasadnić czas na refaktoryzację. Mamy nadzieję, że zrozumieją, że jest to niezbędna część procesu rozwoju i będą mieli mniej zastrzeżeń. Nie zawsze możesz wykazać tę bezpośrednią korzyść.
źródło