Czy powinieneś zmienić istniejący kod, który nie jest uszkodzony w projekcie skoncentrowanym na nowych funkcjach?

11

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 ...)?

Carlos Jaime C. De Leon
źródło
2
Czy masz przygotowane testy pozwalające na dokonanie żądanego refaktoryzacji?
2
Odpowiedziałeś na to sam, klienci nie będą dbać o łatwość utrzymania kodu, chyba że sam kod jest dostarczalny. Dbają o pieniądze i czas i zakładają jakość jako coś oczywistego. Jakość, czas i koszty są bezpośrednio związane z długiem technicznym, ale są również związane z tym, co są skłonni zaakceptować. Jeśli NIE włączysz refaktoryzacji na bieżąco, to możliwość utrzymania kodu obniży się, a dług techniczny gwałtownie wzrośnie.
wałek klonowy

Odpowiedzi:

17

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ą.

Thomas Owens
źródło
1
+1 szczególnie dla akapitu o wartości refaktoryzacji dla klientów.
Marjan Venema,
1
Zakładając, że masz dobry zestaw testów jednostkowych do sprawdzenia poprawności refaktoryzacji, nie zmienia obserwowanego zachowania. Biorąc pod uwagę wybór refrakcji lub testów jednostkowych. Najpierw dodaj testy jednostkowe.
Martin York,
5
@Thomas Owens: +1 Zgadzam się, ale chciałbym również dodać ostrzeżenie dotyczące refaktoryzacji. Refaktoryzacja jest bardzo łatwa, aby rozpocząć kaskadę refaktoryzacji, która może przesadzić z faktyczną konieczną pracą i spowodować zbliżanie się terminów.
Joel Etherton,
@Joel To dobra uwaga. Musisz ograniczyć zakres refaktoryzacji, aby dotrzymać terminów.
Thomas Owens
3

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?

Bez szans
źródło
Przeczytałeś mi w myślach! Myślałem dokładnie o tej słynnej zasadzie „nie naprawiaj, jeśli nie jest złamana”, aby uzasadnić odroczenie refaktoryzacji!
Carlos Jaime C. De Leon,
3

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.

Jose Faeti
źródło
2

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ę.

ChrisF
źródło
0

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ść.

JeffO
źródło