Refaktoryzacja: kod, harmonogram, aplikacja

Refaktoryzacja to rodzaj reorganizacji. Technicznie, on wychodzi z matematyki, gdy kładzie się ekwiwalentność wyrażenia - czynniki są bardziej czystymi sposobami wyrażania tego samego zdania. Kod refaktoryzacyjny oznacza równoważność, produkty początkowe i końcowe muszą być funkcjonalnie identyczne. W praktyce czyni kod bardziej klarownym i czystym, prostym i eleganckim. Przykładem jest zakres od zmiany nazwy zmiennej na wpis metody na klasę strony trzeciej, dla której programista nie ma żadnych praw.

Analiza i refaktoryzacja w celu stworzenia czystego kodu

Oznacza to po prostu ulepszenie projektu istniejącego kodu bez zmiany jego obserwowalnego zachowania. Początkowo stworzony w społeczności Smalltalk, stał się główną technologią rozwoju. Chociaż narzędzia do refaktoryzacji pozwalają na bardzo łatwe zastosowanie. Ważne jest, aby deweloper zrozumiał, co robi i dlaczego pomoże, na przykład w sytuacji, gdy konieczne jest umożliwienie ponownego użycia powtarzającego się bloku kodu.


Każdy refaktoryzacja jest prostym procesem, który dokonuje logicznej zmiany w strukturze kodu. Jeśli zmienisz dużą liczbę kodów jednocześnie, możliwe, że zostały wprowadzone błędy. Ale kiedy i gdzie popełniono błędy, trudno powiedzieć. Jeśli zmiany są przeprowadzane małymi krokami po sprawdzeniach przeprowadzonych po każdym kroku, błąd prawdopodobnie powstaje podczas testu, gdy tylko kod zostanie wprowadzony do systemu. RobićKod refaktoryzacji, możliwe byłoby sprawdzenie tego kroku, a po anulowaniu kroku można go podzielić na jeszcze więcej małych kroków w celu zidentyfikowania awarii. Jest to zaleta kompleksowych testów modułowych w systemie, chronionych przez ekstremalne programowanie. Dają deweloperom i menedżerom pewność, że refaktoryzacja nie naruszyła systemu, kod zachowa się tak samo jak poprzednio.


Działanie poprawy kodu następuje w przybliżeniu w następujących etapach:

Działanie



Pytania, które należy zadać, działania



Identyfikacja problemu



Czy jest jakiś problem? W czym problem?



Charakterystyka problemów



Dlaczego muszę coś zmienić? Jakie są korzyści? Czy istnieje jakieś ryzyko?



Opracowywanie rozwiązań



Jaki powinien być "stan docelowy" kodu? Jaki rodzaj konwersji kodu przekształca kod w pożądany stan?



Zmień kod



Kroki, które będą refaktoryzować kod.

Zwykle przeprowadza się go małymi krokami. Po każdym takim kroku deweloper zazwyczaj pozostaje w działającym systemie, który nie działa programowo. Praktycy naprzemiennie usuwają błędy i uzupełniają kod między tymi krokami. Tak więc, refaktoryzacja nie wyklucza możliwości zmiany funkcjonalności, po prostu mówi, że jest to kolejna czynność związana z ponownym zamówieniem kodu.

Ciągły proces zarządzania jakością

Idealnie, refaktoryzacja będzie częścią ciągłego procesu poprawy jakości. Innymi słowy, łatwo będzie przeplatać się z innymicodzienne czynności każdego programisty.
Tworzenie czystego kodu z analizą i refaktoryzacją jest przydatne, gdy wystąpi błąd i problem musi zostać naprawiony lub kod musi zostać rozszerzony. Proces jednoczesnej obsługi lub dodawania nowych funkcji pozwala również menedżerom i programistom na większe prawdopodobieństwo rozwiązania problemu, ponieważ nie będzie to wymagało dodatkowej fazy testowania.
Jeśli deweloper jest odpowiedzialny za zrozumienie kodu, zadadzą pytania i zaczną dokumentować niejasną część, która będzie dobrym punktem wyjścia do zastosowania nowych metod. Często czas operacji rozliczeniowej nie pozwala od razu podjąć dobrą decyzję. Możliwe, że funkcja została dodana w pośpiechu, a nie usunięty błąd. W takich przypadkach odpowiedni kod powinien zostać oznaczony notatką FIXME, aby można było przerobić, gdy czas jest dozwolony. Takie okoliczności wymagają refaktoryzacji w celu ulepszenia istniejącego kodu nie dla poszczególnych elementów, ale dla całego projektu. Kiedy przychodzi czas na rozwiązanie zgromadzonych problemów, zeskanuj FIXME i TODO. Ponad podstawą kodu będą wszystkie problemy do sprawdzenia. Następnie można je zreorganizować w odpowiedni priorytet. Refaktoryzacja to dobra rzecz, ponieważ złożone wyrażenia są zwykle budowane z prostszych, bardziej uciążliwych komponentów. Zapewnia prostsze komponenty lub redukuje je do bardziej złożonych wyrażeń złożonych, w zależności od tego, jak programista będzie działał. Na przykład skuteczność refaktoryzacji istniejącego koduliczba członków i operatorów: (x - 1) * (x + 1) = x 2 - 1. Cztery terminy w porównaniu z trzema. Trzech operatorów przeciwko dwóm. Jednak wyrażenie po lewej stronie jest łatwiejsze do zrozumienia, ponieważ używa bardziej prostych operacji. Ponadto dostarcza więcej informacji o strukturze funkcji f (x) = x 2 - 1, ponieważ korzenie +/- 1, które trudno byłoby określić, po prostu "patrzą" po prawej stronie.

Obszary działania

Oprogramowanie do refaktoryzacji w celu ulepszenia istniejącego kodu jest niewielkie w sieci, ale wiele z nich jest dobrze zaprojektowanych. Z biegiem czasu rośnie rozmiar własnego oprogramowania i jego złożoność, a liczba błędów rośnie, w wyniku czego spada wiarygodność kodu. Twórcy oprogramowania, zwłaszcza gdy nie są oryginalnymi autorami, są coraz trudniej utrzymać i rozszerzyć kod. Baza kodowa, która w każdej firmie programistycznej powinna być cennym zasobem, może w pewnym momencie zostać przeciążona. Te negatywne procesy mogą powodować przedwczesne starzenie się oprogramowania, co wyjaśniono w pracy Martina Fowlera "Refaktoryzacja: ulepszanie istniejącego kodu".
Strategicznie ważna jest uwaga kierowników oprogramowania i programistów. Z praktycznego punktu widzenia zastosowanie metod rozwoju spowolni proces starzenia się. Refaktoryzacja może wyeliminować to starzenie się przy odpowiednim zastosowaniu, najlepiej za pomocą dobrych narzędzi programowych, które pomagają w identyfikowaniu, analizowaniu i opisywaniu problemów, a ostatecznie pozwalają je naprawić.

Częste kopiowanie tego składnikajest używany przez programistę jako bardziej akceptowalna metoda, ponieważ jest mniej kłopotliwy. Przynajmniej Fowler wierzy w refaktoryzację, aby ulepszyć istniejący kod. Aktualny kod źródłowy może się zmieniać w czasie w stosunku do oryginalnego projektu i może nie być od razu zrozumiany przez programistę. Jednak ignoruje fakt, że kod źródłowy ma wiele ukrytych znaczeń. Poprawione błędy znalezione w kodzie źródłowym nie mogą być udokumentowane, ale są bardzo cenne. Refaktoryzacja zachowuje tę ukrytą wartość, zapewniając, że zachowanie systemu nie ulegnie zmianie.

Proces zmiany nazwy metody

Ten przykład dotyczy zmiennej, klasy lub innego elementu java, który ma mylącą nazwę i musi wiedzieć, jak ten kod naprawić. Wymaga to wszystkich linków i ewentualnie aktualizacji plików. Proces ten może wymagać zmiany nazwy metody w podklasach. Z drugiej strony, zmiana nazwy pakietu będzie obejmowała także przenoszenie plików i katalogów oraz aktualizację systemu zarządzania wersjami.
Metody korekty:
  • Przenoszenie klasy. Klasa znajduje się w niewłaściwym pakiecie, więc powinna zostać przeniesiona do innej paczki, w której jest najlepiej dopasowana.
  • Fragment. Długa metoda musi zostać podzielona na etapy, aby poprawić czytelność i wygodę obsługi. Sekcja kodu z jednym zadaniem logicznym zostaje zastąpiona przez wywołanie nowej metody.
  • Ekstrakcja nadklasy. Istniejąca klasa zapewnia funkcjonalność, którą należy w jakiś sposób zmodyfikować. Klasa abstrakcyjna jest również wprowadzana jako rodzic obecnej klasywtedy ogólne zachowanie jest "zaostrzone" wobec tego nowego ojca.
  • Zastąpienie wartości warunkowej polimorfizmem. Metody klasy mogą sprawdzać pewną wartość (jeśli operator jest przełącznikiem), aby określić właściwą akcję do wykonania.
  • Zalety metody

    Przeprowadzenie kilku operacji refaktoryzacji przed lub podczas debugowania kodu ma pewne zalety. Często łatwiej jest określić lokalizację błędu. W ten sposób zostaje utrzymany czas poświęcony na pracę nad kodem i poprawę jego jakości. Dobrze skonstruowany kod jest również mniej podatny na błędy, jeśli chodzi o jego ekspansję. Eksperci twierdzą, że zastosowanie tej metody zwiększa korzyści każdego programu, który ma przynajmniej jedną z następujących wad:
  • Programy trudne do odczytania i trudne do zmiany.
  • Aplikacje z podwójną logiką.
  • Programy wymagające dodatkowych zachowań wymagających zmian kodu.
  • Programy ze skomplikowaną logiką warunkową, trudne do modyfikacji.
  • Podsumowując, można argumentować, że rzeczywiste korzyści zazwyczaj pojawiają się w dłuższej perspektywie, na przykład przy odnawianiu ulepszeń istniejącego kodu pdf. Składają się na znacznie mniej czasu, jaki przeznaczają programiści na debugowanie i konserwację, aby poprawić niezawodność kodu. Ponadto kopiowanie kodu jest zmniejszane, a ponowne użycie kodu jest stymulowane. Całkowity koszt utrzymania i rozwoju powinien się zmniejszyć, a szybkość reakcji zespołu na zmieniające się potrzeby - zwiększyć.

    Brak korekty DLA

    Jeżeli istnieje tak wiele korzyści z dobrze zorganizowanego, czystego kodu, a jeśli oprogramowanie kod refaktoryzacji jest chaotyczny, źle zorganizowany, podatne na błędy kodu, aby dobrze przemyślane, to powstaje pytanie, dlaczego nie wszyscy programiści ? W praktyce deweloperzy są bardziej niechętni do dokonywania ulepszeń, ponieważ niektóre refaktoryzacji po prostu zmęczony. Zwłaszcza, gdy nie ma na to widocznej zewnętrznej korzyści. Można go również obwiniać za zarządzanie projektem. Kiedy poradnictwo obsługuje tylko widocznych zewnętrznie właściwości kodu, takich jak funkcjonalności i wydajności, ale nie zwrócić uwagę na wewnętrznej jakości kodu. Ponadto istnieje poważne ryzyko złamania kodu przez operacje refaktoryzacji. A jeśli na przykład zmieni się nazwa pliku, śledzenie zmian może być również problemem. Nawet jeśli twórca oprogramowania próbuje zreorganizować jakiś źle skonstruowany kod. Zarządca może mieć zupełnie inną perspektywę i może wykonać dla przeciwstawiać się wszelkim próbom zmiany działający kod. Problemy te nie mogą po prostu zignorować je trzeba zastanowić się, jak twórcom i zarządzania.

    Automatyzacja procesu

    Przy prowadzeniu zewnętrznego refaktoryzacji obserwowane zachowanie jest gwarancją pozostaje niezmieniona. Jeśli jest wykonywany ręcznie, często konieczna jest przebudowa systemu i wykonanie testów. Dlatego metoda ręczna jest naprawdę praktyczna tylko z szacunkiemnastępujące warunki:
  • System, z którego składa się zreorganizowany kod, można szybko przywrócić.
  • Istnieją automatyczne testy "regresji", które można często uruchamiać.
  • Ta sytuacja nie jest bardzo powszechna i oznacza, że ​​programy refaktoryzacji są ograniczone. Jest coraz bardziej rozpowszechniony, zwłaszcza gdy coraz więcej osób korzysta z metod XP (Extreme Programming). Kolejną przeszkodą w tej metodzie jest to, że wiele z tych refaktoryzacji jest nudnych. Co ważniejsze, przekonanie, że dokonano poprawnych zmian. Dlatego przy dokonywaniu ulepszeń zaleca się korzystanie z automatycznych narzędzi. Szybkość ich pracy ma jeszcze jedną zaletę, która przejawia się w środowisku rozwoju zespołu. Deweloper wykonuje operacje refaktoryzacji znacznie rzadziej, jeśli kod źródłowy jest również własnością innych programistów. Integracja z programistami, którzy wybrali IDE, przynosi również wiele korzyści. Po pierwsze, obecność narzędzi pod ręką oznacza, że ​​programiści mogą łatwo się zreorganizować. Nie muszą zmieniać schematów rozwoju i refaktoryzacji, a zamiast tego postrzegają je jako część normalnego cyklu rozwoju. Po drugie, funkcje IDE, takie jak integracja kontroli wersji, mogą zmniejszyć wysiłek metody, taki jak przeniesienie klasy lub zmiana nazwy pakietu.

    Analiza kodu Visual Studio 2017

    Przedwczesna optymalizacja może być źródłem wszelkiego zła, ale narzędzia aplikacji zapewniają klarowność, czystość i bezpieczeństwo kodu. Testowanie programu przed wysłaniem jest ważną częścią procesu rozwoju. Tu właśnie wchodzą w życienarzędzia i metody analizy kodu i profilowania - umożliwiają ocenę kodu pod kątem błędów, wąskich gardeł i efektywnego wykorzystania zasobów przetwarzania i pamięci. Nowoczesne narzędzia do profilowania kodu mogą bezpośrednio wskazywać dokładne linie kodu wymagające refaktoryzacji lub bibliotek i innych zależności, które są słabymi punktami w architekturze aplikacji.
    Przed Visual Studio 2012, większość z tych typów analiza i testowanie kodu wymaga narzędzi firm trzecich i manualnych zadań montażu, testowania, analizy powtórek dewelopera. Dzisiaj Visual Studio ma dość mocne narzędzia do analizy. Ponadto, istnieją doskonałe narzędzia, które pomogą dewelopera zagłębić się testowania aplikacji i optymalizacji wydajności, szablonów projektowych, które są skuteczne nałóg i osadzony środowisko testowe i solidne narzędzia do automatycznego testowania integracji i analizy zespołu przepływów pracy i uwalniania.

    narzędzia do debugowania produktywności

    kompleksowy zestaw wbudowanych narzędzi do refactoring projektu poprawy istniejącego kodu pierwotnie pogrupowane działanie koncentratora i diagnostykę w Visual Studio 2013, który został udoskonalony i rozszerzony box Networking Wydajność i Diagnostyka „i” Zeskanowane dokumenty „w Visual Studio 2015. Dzięki Visual Studio 2017 narzędzia te są tak zintegrowane w środowisku programistycznym, że nie mają już kapryśnej nazwy, ale wciąż ewoluują. Program jest wyposażony w świetną dokumentację i wskazówki odDokumenty Microsoft, począwszy od „Pierwsze kroki z narzędzi produktywności” oraz „Przewodnik dla początkujących do profilowania wydajności w programie Visual Studio.
    Znajdziesz tu informacje na temat zbierania danych oraz metody profilowania podczas realizacji nie tylko dla aplikacji .NET Framework tradycyjne i ASP.NET JavaScript dla produktów i stron internetowych, o wysokiej wydajności obliczeniowej (HPC) oraz testów obciążeniowych. Innym narzędziem, które deweloperzy chętnie korzystać, opowiada refaktoryzacji kodu c PerfView do analizy wyników. Morrison jest starszy architekt w firmie Microsoft i napisał PerfView do analizy wydajności i konfiguracji poleceń wewnętrznych, które tworzą .NET Framework i Visual Studio. Teraz jest to narzędzie open source, które wciąż jest w fazie rozwoju.

    Dodatkowe mechanizmy do profilowania i debugowania

    Oprócz dostępnych narzędzi firmy Microsoft, korzystać z narzędzi firm trzecich mających na celu zaspokoić potrzeby dostrajania:
  • Jains dotTrace Profiler pomaga śledzić zbierania śmieci wykonywania, dystrybucji wydajności obciążenia wejście-wyjście Dostępny jest 10-dniowy okres próbny dla kroków próbnych.
  • Wydajność Redgate mrówki Profiler - kolejnym popularnym narzędziem dla projektów opartych na .NET Framework zapewnia taką samą analizę kodu synchronizacji, a także innych narzędzi, ale także pogłębia wykonywanie zapytań do bazy danych z obsługą zaawansowanych dostępu do danych profilowania obsługa Oracle, MySQL, PostgreSQL.
  • DevExpress CodeRush to kolejnaNarzędzie do analizy i refaktoryzacji baz danych C #, Visual Basic i XAML. Narzędzia do analizy CodeRush nie tylko działają z podstawowymi rozwiązaniami, ale również mają zintegrowaną integrację testową, wspierającą ramy NUnit, xUnit, MSpec i MSTest, a także przypadki testowe CoreCLR w środowisku DNX.
  • Microsoft Code Analysis 2017 zapewnia wbudowany dostęp do ponad 100 najpopularniejszych reguł FxCop jako analizatorów na żywo. Analizatory przyglądają się kodowi C # lub Visual Basic podczas pisania, a także udzielają wskazówek dotyczących wydajności, bezpieczeństwa i najlepszych praktyk, a także uzyskują dostęp do kodu szybkiej korekty kodu.
  • Microsoft DevSkim jest bardziej złożoną i elastyczną strukturą modułów kodu i analizatorów, które koncentrują się na analizie bezpieczeństwa wbudowanego kodu podczas pisania. Potencjalne problemy związane z bezpieczeństwem są wyróżnione w kodzie łącza, aby uzyskać dodatkowe informacje, za pomocą jednego kliknięcia, a na bezpiecznym alternatywnym kodzie.
  • Harmonogram

    Zastosowanie zautomatyzowanych narzędzi do refaktoryzacji zwiększa prawdopodobieństwo, że programista wykona niezbędne kroki w odpowiednim czasie, zmniejszając prawdopodobieństwo wystąpienia błędów. Ale nie mniej ważny jest wybór terminów na jego przeprowadzenie. Planowane refaktoryzacja poprawia wydajność kodu, eliminując duplikowanie. Kluczową kwestią jest naprawienie go tak szybko, jak to możliwe, zanim stanie się problemem. W tym przypadku stosuje się ciągły refaktoryzacji, co jest bardzo ważne dla ciągłego dostarczania kodu.
    W najlepszym razie deweloperzy często przełączają się między wszystkimi wymienionymi powyżej rodzajami refaktoryzacji. W tym przypadku nazwa typu nie ma znaczenia, aleWażne jest, aby to działało. Na przykład, jeśli czytasz kod, programista rozumie, że klasy lub metody mogą być wykonane lepiej, musisz to zrobić natychmiast, bez zbędnych opóźnień, używając zwykłych metod wyodrębniania poważnych awarii lub metod zmiany nazw dla lepszego czytania. Platforma Martin Fowler w Workflows pomaga użytkownikom lepiej poznać, zaplanować i wykonać ulepszenia. Dlatego każdy programista potrzebuje nie tylko wiedzieć, co to jest refaktoryzacja kodu, ale także, kiedy wykonać go poprawnie.

    Powiązane publikacje