What Is Refactoring?

Podobne dokumenty
Etap implementacji. Refaktoryzacja

SSW1.1, HFW Fry #20, Zeno #25 Benchmark: Qtr.1. Fry #65, Zeno #67. like

Zakopane, plan miasta: Skala ok. 1: = City map (Polish Edition)

Stargard Szczecinski i okolice (Polish Edition)

Wojewodztwo Koszalinskie: Obiekty i walory krajoznawcze (Inwentaryzacja krajoznawcza Polski) (Polish Edition)

Katowice, plan miasta: Skala 1: = City map = Stadtplan (Polish Edition)

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Tychy, plan miasta: Skala 1: (Polish Edition)

MaPlan Sp. z O.O. Click here if your download doesn"t start automatically

Instrukcja konfiguracji usługi Wirtualnej Sieci Prywatnej w systemie Mac OSX

Miedzy legenda a historia: Szlakiem piastowskim z Poznania do Gniezna (Biblioteka Kroniki Wielkopolski) (Polish Edition)

Karpacz, plan miasta 1:10 000: Panorama Karkonoszy, mapa szlakow turystycznych (Polish Edition)

ARNOLD. EDUKACJA KULTURYSTY (POLSKA WERSJA JEZYKOWA) BY DOUGLAS KENT HALL

Wojewodztwo Koszalinskie: Obiekty i walory krajoznawcze (Inwentaryzacja krajoznawcza Polski) (Polish Edition)

Wojewodztwo Koszalinskie: Obiekty i walory krajoznawcze (Inwentaryzacja krajoznawcza Polski) (Polish Edition)

OpenPoland.net API Documentation

Helena Boguta, klasa 8W, rok szkolny 2018/2019

Analysis of Movie Profitability STAT 469 IN CLASS ANALYSIS #2


Revenue Maximization. Sept. 25, 2018

Egzamin maturalny z języka angielskiego na poziomie dwujęzycznym Rozmowa wstępna (wyłącznie dla egzaminującego)


Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Proposal of thesis topic for mgr in. (MSE) programme in Telecommunications and Computer Science

Zasady rejestracji i instrukcja zarządzania kontem użytkownika portalu

Hard-Margin Support Vector Machines

Zdecyduj: Czy to jest rzeczywiście prześladowanie? Czasem coś WYDAJE SIĘ złośliwe, ale wcale takie nie jest.

Steps to build a business Examples: Qualix Comergent

Automatyczne generowanie testów z modeli. Bogdan Bereza Automatyczne generowanie testów z modeli

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian

Emilka szuka swojej gwiazdy / Emily Climbs (Emily, #2)

Pielgrzymka do Ojczyzny: Przemowienia i homilie Ojca Swietego Jana Pawla II (Jan Pawel II-- pierwszy Polak na Stolicy Piotrowej) (Polish Edition)

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

TTIC 31210: Advanced Natural Language Processing. Kevin Gimpel Spring Lecture 9: Inference in Structured Prediction

INICJATYWA STUDENCKA. Gdańsk,

Machine Learning for Data Science (CS4786) Lecture11. Random Projections & Canonical Correlation Analysis

Jak zasada Pareto może pomóc Ci w nauce języków obcych?

Test-Driven Development

ERASMUS + : Trail of extinct and active volcanoes, earthquakes through Europe. SURVEY TO STUDENTS.

Ankiety Nowe funkcje! Pomoc Twoje konto Wyloguj. BIODIVERSITY OF RIVERS: Survey to students

Enkapsulacja, dziedziczenie, polimorfizm

Dolny Slask 1: , mapa turystycznosamochodowa: Plan Wroclawia (Polish Edition)

PHP 5 język obiektowy

Wojewodztwo Koszalinskie: Obiekty i walory krajoznawcze (Inwentaryzacja krajoznawcza Polski) (Polish Edition)

DODATKOWE ĆWICZENIA EGZAMINACYJNE

Leba, Rowy, Ustka, Slowinski Park Narodowy, plany miast, mapa turystyczna =: Tourist map = Touristenkarte (Polish Edition)

Wybrzeze Baltyku, mapa turystyczna 1: (Polish Edition)

Blow-Up: Photographs in the Time of Tumult; Black and White Photography Festival Zakopane Warszawa 2002 / Powiekszenie: Fotografie w czasach zgielku

Sargent Opens Sonairte Farmers' Market

Rev Źródło:

Polimorfizm. dr Jarosław Skaruz

Installation of EuroCert software for qualified electronic signature

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

TTIC 31210: Advanced Natural Language Processing. Kevin Gimpel Spring Lecture 8: Structured PredicCon 2

y = The Chain Rule Show all work. No calculator unless otherwise stated. If asked to Explain your answer, write in complete sentences.

Poland) Wydawnictwo "Gea" (Warsaw. Click here if your download doesn"t start automatically

No matter how much you have, it matters how much you need

SubVersion. Piotr Mikulski. SubVersion. P. Mikulski. Co to jest subversion? Zalety SubVersion. Wady SubVersion. Inne różnice SubVersion i CVS

JAVA W SUPER EXPRESOWEJ PIGUŁCE

METODY PROGRAMOWANIA

18. Przydatne zwroty podczas egzaminu ustnego. 19. Mo liwe pytania egzaminatora i przyk³adowe odpowiedzi egzaminowanego

EGZAMIN MATURALNY Z JĘZYKA ANGIELSKIEGO POZIOM ROZSZERZONY MAJ 2010 CZĘŚĆ I. Czas pracy: 120 minut. Liczba punktów do uzyskania: 23 WPISUJE ZDAJĄCY

Klasy i obiekty cz II

Dokumentacja do API Javy.

Wroclaw, plan nowy: Nowe ulice, 1:22500, sygnalizacja swietlna, wysokosc wiaduktow : Debica = City plan (Polish Edition)

Aktualizacja Oprogramowania Firmowego (Fleszowanie) Microprocessor Firmware Upgrade (Firmware downloading)

Karpacz, plan miasta 1:10 000: Panorama Karkonoszy, mapa szlakow turystycznych (Polish Edition)

Marzec: food, advertising, shopping and services, verb patterns, adjectives and prepositions, complaints - writing

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Miedzy legenda a historia: Szlakiem piastowskim z Poznania do Gniezna (Biblioteka Kroniki Wielkopolski) (Polish Edition)


Zmiany techniczne wprowadzone w wersji Comarch ERP Altum

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych


Relaxation of the Cosmological Constant

Realizacja systemów wbudowanych (embeded systems) w strukturach PSoC (Programmable System on Chip)

Wykład 7: Pakiety i Interfejsy

17-18 września 2016 Spółka Limited w UK. Jako Wehikuł Inwestycyjny. Marek Niedźwiedź. InvestCamp 2016 PL

Zarządzanie sieciami telekomunikacyjnymi

Program szkolenia: Fundamenty testowania

European Crime Prevention Award (ECPA) Annex I - new version 2014

Camspot 4.4 Camspot 4.5

Przykład zastosowania notacji UML dla realizacji zastosowania wzorca Mediator (materiały dla studentów na prawach rękopisu)

SQL 4 Structured Query Lenguage

How to translate Polygons

Instrukcja obsługi User s manual

Po powtórce zaczynamy naukę kolejnych nowych słów i wyrażeń, po czym zostawiamy je w przegródce numer 1. Systematyczność

Polski Krok Po Kroku: Tablice Gramatyczne (Polish Edition) By Anna Stelmach

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

Zajęcia z języka angielskiego TELC Gimnazjum Scenariusz lekcji Prowadzący: Jarosław Gołębiewski Temat: Czas Present Perfect - wprowadzenie

Klaps za karę. Wyniki badania dotyczącego postaw i stosowania kar fizycznych. Joanna Włodarczyk

Niepubliczne Przedszkole i Żłobek EPIONKOWO

Machine Learning for Data Science (CS4786) Lecture 11. Spectral Embedding + Clustering

deep learning for NLP (5 lectures)

1. CZYM JEST SERIALIZACJA

Programowanie obiektowe

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Wstęp. Ale po co? Implementacja

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian

Transkrypt:

What Is Refactoring? Definition: The process of changing software in a way that the external behavior is not altered but the internal structure is improved. Or, an instance of such a change. (E.g. I carried out a refactoring. ) Cleaning up code. Improving design. But after the code works. Fights against software entropy Refactoring - 1

Why Refactor? Continuous improvement of design Tidying up. Avoids decay. Needed if make it work is first priority Best design choices may not evident at first Makes software easier to understand Refactoring done to clean up hacks Done after reflection. May be done to remove ambiguity, misleading code, a hack, etc. If you can change it successfully, you understand it Refactoring - 2

Why Refactor? (2) Helps you find bugs A change to improve structure may reveal a flaw in old implementation Helps you developing working code more quickly Counter-intuitive! Short cycles of add-functionality then improve-design. (Kent Beck s two hats idea). Refactoring - 3

But Hold On Possible objections. Touching the design is asking for trouble! Once it s working, why bother? After I think it s working, don t I have to reverify the design changes again? What we need to make refactoring successful is Unit tests Refactoring - 4

Unit Testing in TDD Motto: Clean code that works. (Ron Jeffries) Unit testing has broader goals that just insuring quality Improve developers lives (coping, confidence) Support design flexibility and change Allow iterative development with working code early Refactoring - 5

Unit Testing Benefits Developers can work in a predictable way of developing code Programmers write their own unit tests Get rapid response for testing small changes Build many highly-cohesive looselycoupled modules to make unit testing easier Refactoring - 6

Red/Green/Refactor The TDD mantra of how to code: Red: write a little test that doesn t work, perhaps even doesn t compile Green: Write code to make the test work quickly (perhaps not the best code) Refactor: Eliminate duplication and other problems that you did to just make the test work Refactoring - 7

When Should Refactor? Remember: afterwards! (After what?) The Rule of Three First, just do it. Second time, do it badly but tolerate it. Third time, do it well: refactor. Some guidelines: When you need to add a function. Existing design makes this hard. Improve it. When you need to fix a bug. As part of a code review. Refactoring - 8

Refactoring and Design Smells Fowler, design smells, and catalog of refactorings The book http://www.refactoring.com/ List of smells on the web: http://wiki.java.net/bin/view/people/smellsto Refactorings Refactoring - 9

Tool Support for Refactoring Refactorings: standard re-structurings to solve common problems Can do them by hand Put might be tricky IDEs and separate tools support this IntelliJ, ReSharper, JRefactory, C# Refactory Eclipse, JBuilder, next release of Visual Studio Refactoring - 10

Why tools? Ponder these: In Java, you decide to change a class s name. What needs to changed? In Java, you want to change the name of a method. What needs to be changed? Refactoring - 11

Java Refactorings in Eclipse Renaming resources classes, methods, fields moving to another package inner and anonymous classes Class hierarchy modifications includes make an interface from a class Code level mods make a code segment a function Refactoring - 12

Refactoring JDT has actions for refactoring Java code Refactoring - 13

Refactoring Refactoring actions rewrite source code Within a single Java source file Across multiple interrelated Java source files Refactoring actions preserve program semantics Does not alter what program does Just affects the way it does it Refactoring - 14

Refactoring Full preview of all ensuing code changes Programmer can veto individual changes List of changes before vs. after Refactoring - 15

Refactoring JDT has actions for refactoring Java code Refactoring - 16

Refactoring Growing catalog of refactoring actions Organize imports Rename {field, method, class, package} Move {field, method, class} Extract method Extract local variable Inline local variable Reorder method parameters Refactoring - 17

Cechy języka utrudniające refaktoryzację Mechanizm refleksji określenie klasy danego obiektu, uzyskanie informacji nt. modyfikatorów klasy, pól, metod, konstruktorów i nadklasy, odkrycie, jakie stałe i deklaracje metod należą do danego interfejsu, stworzenie instancji klasy, której nazwa nie jest znana do chwili uruchomienia programu, pobranie i ustawienie wartości pola obiektu, nawet jeśli nazwa pola nie jest znana aż do uruchomienia programu, wywołanie metody obiektu, nawet bez uprzedniej znajomości jej nazwy, stworzenie tablicy, której rozmiar i typ przechowywanych obiektów nie jest znany aż do chwili wykonania programu, a następnie modyfikowanie przechowywanych w niej obiektów. Refactoring - 18

Wymagania stawiane narzędziom oraz algorytmom Zasada niezmienionego zachowania Samodzielne pozyskiwanie maksymalnej ilości potrzebnych danych Niemożność polegania na użytkowniku w sprawie bezpieczeństwa refaktoryzacji Udostępnianie użytkownikowi listy problemów Maksymalnie dobra jakość generowanego kodu Prostota i łatwość modyfikacji wygenerowanego kodu Brak kompilacji kodu w trakcie refaktoryzacji w celu sprawdzenia jego poprawności Refactoring - 19

Wpływ dodania klasy na zachowanie Przed import java.util.*; class A { HashMap m = new HashMap();} Po import java.util.*; class HashMap {} class A { HashMap m = new HashMap();} Refactoring - 20

Refaktoryzacje (1) Zmiana nazwy (Rename) Przemieszczenie klasy (Move class) Przemieszczenie pola statycznego (Move static field) Przemieszczenie pola (Move field) Przemieszczenie metody statycznej (Move static method) Przemieszczenie metody nie-statycznej (Move non-static method) Ekstrakcja metody (Extract Method) Rozwinięcie wywołań metody (Inline method) Rozwinięcie odwołań do zmiennej (Inline variable) Wprowadzenie zmiennej objaśniającej (Introduce explaining variable) Awansowanie zmiennej do pola (Promote temporary to field) Zmiana nagłówka metody (Change method signature) Ekstrakcja interfejsu (Extract Interface) Ekstrakcja nadklasy (Extract Superclass) Refactoring - 21

Refaktoryzacje (2) Przemieszczenie metody/pola w dół hierarchii dziedziczenia (Push down method/field) Przemieszczenie metody/pola w górę hierarchii dziedziczenia (Pull up method/field) Enkapsulacja dostępu do pola (Encalpsulate field) Użycie typu nadrzędnego gdzie to możliwe (Use Supertype where possible) Dodanie metod delegujących (Add delegate methods) Oczyszczenie deklaracji import (Clean imports) Minimalizowanie praw dostępu (Minimize Access Rights) Stworzenie metody fabrycznej (Create factory method) Wprowadzenie stałej (Introduce constant) Ustatycznienie metody (Make method static) Bezpieczne usunięcie (Safe delete) Zamiana klasy anonimowej na zagnieżdżoną (Convert anonymous to inner) Zastąpienie zmiennej wyrażeniem (Replace temp with query) Wyodrębnienie na zewnątrz łańcuchów tekstowych (Externalize Strings) Refactoring - 22

Wprowadzenie Obiektu Null Przed class ZamykaczOkien { void pozamykaj() { Okno o = znajdźokno(); if (o!= null) { o.zamknij(); } } Okno znajdźokno() { return null; } } Po class ZamykaczOkien { void pozamykaj() { Okno o = znajdźokno(); o.zamknij(); } } Okno znajdźokno() { return new OknoNull(); } class OknoNull extends Okno { public void zamknij() {} } Refactoring - 23

Redukcja zakresu zmiennej Przed int i=1; zróbcoś(); zróbcośinnego(); obliczjeszczecośinnego(); pierwszeużycie(i);... Po zróbcoś(); zróbcośinnego(); obliczjeszczecośinnego(); int i = 1; pierwszeużycie(i); Refactoring - 24

Wprowadzenie Klasy Wyliczeniowej (1) Przed public class Person { public static final int BLOOD_GROUP_0 = 0; public static final int BLOOD_GROUP_A = 1; public static final int BLOOD_GROUP_B = 2; public static final int BLOOD_GROUP_AB = 3; private int bloodgroup; public Person(int bg) { bloodgroup = bg; } } Po public class Person { private BloodGroup bloodgroup; public Person(BloodGroup bg) { bloodgroup = bg; } } public class BloodGroup { public static final int 0 = new BloodGroup(0); public static final int A = new BloodGroup(1); public static final int B = new BloodGroup(2); public static final int AB = new BloodGroup(3); private int bloodgroup; private BloodGroup(int bg) { bloodgroup = bg; } } Refactoring - 25

Wprowadzenie Klasy Wyliczeniowej (2) Refactoring - 26

Refaktoryzacja w Eclipse Refactoring - 27

Refaktoryzacja w Eclipse Refactoring - 28

Refaktoryzacja w Visual Studio Refactoring - 29