Tam, gdzie pracuję, ludzie (konsultanci) odczuwają presję, aby jak najszybciej udostępnić funkcje. Zamiast więc spędzać zbyt dużo czasu na myśleniu o tym, jak robić rzeczy we właściwy sposób lub ponieważ nie chcą niczego zepsuć, kod jest kopiowany z różnych modułów i modyfikowany.
Nie jest łatwo temu zapobiec, ponieważ podstawa kodu jest otwarta dla całej firmy. Wiele osób nad tym pracuje.
Teraz, gdy bałagan już tam jest, jaki jest najlepszy sposób na usunięcie tych zwolnień bez nadmiernego zrywania?
refactoring
LennyProgrammers
źródło
źródło
Odpowiedzi:
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ę.
źródło
W ramach edukacji, takiej jak @Peter, możesz wprowadzić wykrywacz kopiuj i wklej, taki jak PMD, i używać go jako części cyklicznej kompilacji, aby pomóc w egzekwowaniu tej części standardów kodowania.
Upewnij się, że Twój standard kodowania projektów pokrywa się z tym wzorcem, abyś miał podstawę do rozpoczęcia dyskusji.
źródło
Nie masz problemu technicznego, masz problem społeczny. Rzeczywiście masz problem z zarządzaniem.
„Baza kodów jest otwarta dla całej firmy” nie stanowi problemu. Nie ma znaczenia
Liczy się to, że istnieje system nagród dla zarządu za kopiowanie i wklejanie. Główną przyczyną jest to, że ludzie są nagradzani (tj. Płaceni, chwaleni, promowani lub rozszerzani) za kopiowanie i wklejanie.
Nie można tego przełamać bez zasadniczej zmiany kultury z „naciskanej na jak najszybsze uwalnianie funkcji” na „nagradzaną za dokonanie odpowiednich, dobrze przetestowanych zmian w podstawie kodu”.
Musisz
Zacznij od góry, z menedżerami, którzy wzmacniają nagrody. Musisz ujawnić obecną praktykę i udokumentować koszty i ryzyko. Musisz zaproponować alternatywę, która zmniejsza koszty i ryzyko.
Musisz nieustannie dokumentować i ujawniać koszty i ryzyko do końca swojej kadencji w tej organizacji. Bezwzględny. Oparte na faktach. Koszt i ryzyko. Każdego tygodnia wyższe koszty i ryzyko związane z kopiowaniem i wklejaniem.
Będziesz musiał pomóc menedżerom przypisać sobie nowe podejście, które sprawi, że będą wyglądać dobrze, a ty zostaniesz zignorowany.
Bardzo ważne jest ograniczenie kopiowania i wklejania. Ale trudno jest zmienić kulturę organizacji. Musisz podać wiele faktów i w kółko kierować sprawę do menedżerów, którzy się z tobą nie zgadzają.
źródło
Mam teraz bazę kodu, która zaczynała z tego gnić. Miałem ponad 10 funkcji statycznych na moduł, które były w zasadzie identyczne z tymi samymi funkcjami statycznymi w innych modułach. Każdy zachowywał się na tyle inaczej, aby uzasadnić nowe wcielenie w celu robienia rzeczy tak szybko, jak to możliwe.
Dzisiaj musiałem dodać jeszcze jedną funkcję i po prostu nie mogłem jej znieść. Utworzyłem nową bibliotekę, połączyłem funkcje 100+ w 10 funkcji ponownego wprowadzania, które nieznacznie zmieniają ich zachowanie w oparciu o flagi bitowe, a następnie napisałem serię testów, aby upewnić się, że wszelkie zmiany w tej bibliotece nie spowodują niczego innego.
Całkowity czas spędzony: 4 godziny. W razie potrzeby byłem gotowy na 20-godzinny maraton i byłem zaskoczony, jak szybko opanowałem narastający bałagan. Jako bonus łatwiej było później naprawić kilka problemów związanych z zależnością nagłówka. Dodatkowo, ponieważ wiele naszych zastrzeżonych rzeczy znajduje się teraz w statycznych obiektach do łączenia, możemy dać naszym klientom, którzy uzyskują dostęp do kodu źródłowego więcej niż wcześniej.
Moja rada: ugryź kulę i zmień na nowo ten bałagan, zanim zrobi to naprawdę źle . Prawdopodobnie nie potrwa to tak długo, jak myślisz, ale na wszelki wypadek stwórz dla siebie nową gałąź.
Ponadto nadal można kopiować / wklejać, aby uzyskać dostęp do funkcji podczas rozwiązywania podstawowego problemu. Kiedy skończysz, po prostu oderwij wklejone elementy i użyj nowej biblioteki.
źródło
Zgadzam się z dotychczasowymi odpowiedziami. Powinieneś:
Ale z drugiej strony musisz spojrzeć na to, co powoduje, że ludzie kopiują wklej i to naprawiają.
Myślę więc, że aby zatrzymać wzór kopiowania / wklejania, musisz ułatwić ponowne użycie.
przeczytaj Wytyczne dotyczące projektowania ram
Mam nadzieję że to pomoże.
źródło
Istnieje silna postawa „kopiuj wklej uważany za szkodliwy”. Myślę, że to dobrze, ale idzie trochę za daleko. Skopiuj wklej jako ćwiczenie w odkrywaniu podobieństw i różnic między dwiema metodami lub klasami - jako krok w procesie triangulacji - myślę, że jest zdrowy. Ale zatrzymanie się przed całkowitą triangulacją - wyeliminowaniem duplikacji wprowadzonej przez wklejanie kopii - jest rzeczywiście szkodliwe.
Jeśli potrafisz znaleźć sposób na zastosowanie tego bardziej dopracowanego podejścia, aby powiedzieć programistom, że nie „to źle!”, A raczej „to jest niekompletne, czy możesz ze mną współpracować, aby dokończyć refaktoryzację?”, Może się okazać, że prowadzisz bardziej konstruktywne rozmowy.
źródło
Martwię się tutaj o ten sam problem, a moim podejściem jest: nie próbuj go unikać z góry, po prostu dokonaj refaktury, gdy stanie się zbyt źle.
Moduł, nad którym obecnie pracuję nad startetem, jako kopia innego modułu, teraz zmieniam wszystko, co musi być inne. Gdy to zrobisz i nowy moduł zostanie ukończony, porównuję go z oryginalnym modułem i dowiem się, które części są mniej więcej niezmienione i powinny zostać przeniesione do biblioteki, abstrakcyjnej klasy nadrzędnej itp.
źródło
Kto jest odpowiedzialny, ponosi winę. Nie można oczekiwać, że jedna osoba przejrzy każdy wiersz kodu, ale określa standardy i ramy czasowe.
Kontrahenci (lub każdy, kto ma krótkoterminowy projekt) mogą zostać postawieni w sytuacji, w której otrzymują rekompensatę za uruchomienie go za pierwszym razem. Istnieje jakaś zachęta, aby zrobić to jak najszybciej. Skopiowany kod może nigdy nie wymagać modyfikacji, a jeśli tak, to nie będzie przez nich.
Możesz spróbować zmusić ich, aby naprawili to we własnym czasie. Potem zaczną to robić od samego początku, ale potem poświęcą nadmierną ilość czasu, aby załatwić sprawę. Myślę, że AmmoQ ma dobry pomysł na refaktoryzację rzeczy, które powodują problemy.
źródło
Jedynym sposobem na wyeliminowanie kodu kopiowania / wklejania jest (IMHO) przegląd kodu, poproszenie osoby (lub najlepiej więcej) o sprawdzenie kodu, a kiedy znajdzie kod, który wydaje się pochodzić z operacji kopiuj / wklej, pozwól programatorowi zreformować.
źródło
Jak sugerowano, jest to głównie problem w organizacji. Spróbuj zacząć od edukacji ludzi (nie zapomnij o warstwie bezpośredniego zarządzania powyżej swojej pozycji). Bardzo pomaga rozpocząć pociąg do jednej lub dwóch osób i pozwolić wirusowi się rozprzestrzeniać. Gdy większość uważa, że to dobry pomysł, zapoznaj się z opisem i spróbuj wprowadzić recenzje, aby zagwarantować, że tak pozostanie. Jest to bardzo powolny i żmudny proces, ale nie można go szybko zmienić. Na początku będzie to wymagało dodatkowego czasu, dlatego ważne jest, aby kierownictwo znało i wspiera długoterminowy cel.
@Anders K. Recenzje są dobrym sposobem na utrzymanie praktyki. Zmuszanie ludzi do pisania kodu, w który nie wierzą, powoduje duże tarcie. Powrócą do starego habitu, gdy tylko będzie to możliwe. Mocno wierzę, że powinieneś zacząć od edukacji, aby nabrać tempa.
źródło