Tam, gdzie pracuję, często muszę opracowywać (i naprawiać błędy) w starym systemie (.NET 1), w którym kod jest kompletnym spaghetti - bez namysłu nad nazwami zmiennych, strukturą programu i komentarzami.
Z tego powodu wieki zajmuje mi zrozumienie, jakie bity wymagają zmiany, i często „psuję” istniejące oprogramowanie, ponieważ dokonałem modyfikacji. Naprawdę naprawdę chcę spędzić kilka miesięcy (z kolegami) przechodząc przez to do refaktoryzacji, ale zarówno obecni programiści nie widzą potrzeby - ani nie myślę, że jest na to czas (system jest ogromny).
Boję się, że muszę popracować nad jego kodem, ponieważ naprawienie czegoś zajmuje kilka dni, ale okazało się, że zepsułem coś innego. To oczywiście sprawia, że wyglądam na niekompetentnego - więc jak sobie z tym poradzić?
źródło
Odpowiedzi:
Zacznij pisać testy części, nad którymi pracujesz. Możesz wypróbować przepływ pracy, który wygląda mniej więcej tak:
Jeśli nie wyrzucisz swoich testów, z czasem zbudujesz zestaw testów, który powinien obejmować najważniejsze (i / lub niestabilne) części aplikacji, a wprowadzanie zmian stanie się łatwiejsze i bezpieczniejsze.
Pomocna może być również Efektywna praca ze starszym kodem Michaela Feathersa.
źródło
Lubię śledzić Wujek Bob Martin „s skaut regułę :
„Kiedy masz duży bałagan z przeszłości, musisz zrobić… To, co musisz zrobić, to przestać robić bałagan i zacząć je porządkować.
Nie oznacza to, że wezwiesz swoich menedżerów do sali konferencyjnej i powiesz im, że nie będziesz oferować funkcji przez następne trzy miesiące, gdy zmienisz kod. Nie rób tego! Oznacza to raczej, że przyjmiesz „Regułę zwiadowcy” i sprawdzisz każdy moduł w nieco czystszym stanie niż po sprawdzeniu.
Od iteracji do iteracji oraz od wydania do wydania zamierzacie wyczyścić ten system, jednocześnie dodając do niego nowe funkcje i funkcje. Nie ma innego wyjścia."
źródło
Możesz wyjaśnić menedżerowi, że poprawki, które powinny zająć godziny, mogą zająć kilka dni ze względu na bałagan w bazie kodu. Inni programiści nie zobaczą potrzeby refaktoryzacji, jeśli są oryginalnymi programistami - będą znali system na wylot, ale kierownictwo powinno wiedzieć, że istnieje ryzyko, że ci programiści kiedykolwiek odejdą i zabiorą ze sobą swoją wiedzę.
Wykonanie pełnego refaktoryzacji zwykle nie jest wykonalne, więc często refaktoryzujesz małe kawałki na raz - kilka metod lub moduł. Cholera, jeśli poprawka zajmie kilka dni, być może możesz w tym samym czasie dołączyć małe refaktoryzowanie problematycznego modułu.
źródło
Czy naprawdę musisz spędzać miesiące na refaktoryzacji kodu? Czy możesz zmienić kod podczas wprowadzania zmian. Na przykład, jeśli stwierdzisz, że metoda Foo wymaga modyfikacji, możesz skorzystać z okazji, aby zrefaktoryzować metodę Foo. A jeśli musisz przejść przez tuzin innych metod, aby dowiedzieć się, że problemem jest Foo, możesz pozostawić komentarze w tych metodach, abyś ty lub ktoś inny w przyszłości wiedział, co powinien zrobić kod. Oczywiście oznacza to, że wciąż jest stos kodu spaghetti, ale możesz przynajmniej przesunąć bazę kodu we właściwym kierunku i ułatwić sobie przejście w dół. Wielomiesięczny czas na kod refaktoryzacyjny będzie wielką sprzedażą, ponieważ oznacza to, że przez cały czas nie dostarczasz niczego, czego chce użytkownik końcowy.
A tworzenie testów jednostkowych (lub, mam nadzieję, rozszerzenie istniejącego pakietu testowego) powinno zmniejszyć prawdopodobieństwo przypadkowego uszkodzenia.
źródło
Kolejna wskazówka. Kiedy robaki się ujawnią, a po nałożeniu bandaża nie poprzestań!
Zapytaj pięć osób, weź czerwoną pigułkę i zobacz, jak głęboko schodzi królicza nora, i napraw pierwotną przyczynę (i ścieżkę na dole).
Dużo się uczysz o systemie. Pomaga ustalić, co należy naprawić i zrefaktoryzować. A po kilku takich wyprawach masz solidne „belki podporowe”, aby wzmocnić monolityczną kupę spaghetti.
źródło
Możesz również zachować stary kod, dopóki nie będziesz absolutnie pewien, że twoje modyfikacje są dźwiękoszczelne. Wystarczy, jeśli uwzględnisz wszystkie zmiany, abyś mógł je przełączać w czasie wykonywania i szybko wskazać lokalizację nowego błędu regresji:
źródło
Jedna sprawa:
Never change any existing code if you are not sure what effect change would have on complete application.
źródło