Jedną częścią odpowiedzi jest Refaktoryzacja .
Najpierw zacznij pisać testy jednostkowe, aby upewnić się, że nic nie zepsułeś przypadkowo swoich zmian. Następnie zacznij ulepszać projekt, usuwając duplikaty itp. W małych krokach, uruchamiając testy jednostkowe po każdym kroku, naprawiając wszelkie problemy, jeśli którykolwiek z testów zakończy się niepowodzeniem, lub natychmiast przywracając, jeśli napotkasz większy problem, niż można łatwo rozwiązać.
Druga część to edukacja .
Należy nauczyć ludzi, aby nie pozostawili za sobą złego kodu. To z pewnością długotrwała bitwa, ponieważ nawyki i procesy myślowe są trudne (czasem wręcz niemożliwe) do zmiany . Jednak bez niego nadal będziesz otrzymywać niekończącą się liczbę złych kodów krzyczących o refaktoryzację.
Możesz zdecydować się na grupowe przeglądy kodu, aby rozpocząć dyskusję na temat dobrych i złych nawyków kodowania i rozpowszechnić zalety tego pierwszego. Nie wystarczy powiedzieć „musisz (nie) pisać takiego kodu”, musisz przekonać ludzi logiką i twardymi faktami. Na przykład „jeśli n razy ten fragment metody został zduplikowany w bazie kodu , jakie są szanse, że jeśli w tej metodzie zostanie znaleziony błąd, zostanie on naprawiony w każdej kopii kodu metody?”
Twoja firma może również wymagać zmiany zachęt i kryteriów akceptacji dla konsultantów - jeśli uda im się napisać niechlujny kod, na pewno będą wybierać łatwiejszą ścieżkę. Jeśli firma w dalszym ciągu ceni sobie „szybką dostawę” w perspektywie długoterminowej konserwacji, nic się nie zmieni :-( Może być więc konieczne przedyskutowanie tego z kierownictwem. Jednym ze sposobów na ich zrozumienie jest to: refaktoryzacja oznacza utrzymanie kodu w czystości, łatwe do zrozum i utrzymuj. Pominięcie refaktoryzacji jest jak spłata zadłużenia na karcie kredytowej. Możesz sobie z tym poradzić na chwilę, ale jeśli nie będziesz aktywnie zarządzać swoimi nawykami zakupowymi i długami, pewnego dnia nieuchronnie spadnie ci na ramiona. W życiu projektu oprogramowania bankructwo ma miejsce, gdy projekt staje się niemożliwy do utrzymania: łatwiej jest przepisać go od zera niż dodać nową funkcję do istniejącej bazy kodu. Lub użytkownicy mają już dość gorszego poziomu wsparcia i funkcji, że po prostu przełączają się na konkurencję.