Refaktorování kódu - Code refactoring

V programování počítače a software design , Refaktorování je proces restrukturalizace stávajícího počítačového kódu -changing na factoring -bez změny jeho vnějšího chování. Refactoring je určen ke zlepšení designu, struktury a / nebo implementace softwaru (jeho nefunkčních atributů) při zachování jeho funkčnosti . Potenciální výhody refaktoringu mohou zahrnovat vylepšenou čitelnost kódu a sníženou složitost ; tyto mohou zlepšit zdrojový kód ' s udržovatelnosta vytvořit jednodušší, čistší nebo expresivnější interní architekturu nebo objektový model pro zlepšení rozšiřitelnosti . Dalším potenciálním cílem pro refaktoring je lepší výkon; softwaroví inženýři čelí pokračující výzvě psát programy, které fungují rychleji nebo využívají méně paměti.

Refaktoring obvykle používá řadu standardizovaných základních mikro-refaktorování , z nichž každé je (obvykle) drobná změna ve zdrojovém kódu počítačového programu, která buď zachovává chování softwaru, nebo alespoň nemění jeho shodu s funkčními požadavky. Mnoho vývojových prostředí poskytuje automatizovanou podporu pro provádění mechanických aspektů těchto základních refaktorů. Pokud bude provedeno dobře, refaktorování kódu může vývojářům softwaru pomoci objevit a opravit skryté nebo neaktivní chyby nebo chyby zabezpečení v systému zjednodušením základní logiky a odstraněním zbytečných úrovní složitosti. Pokud bude provedeno špatně, může selhat požadavek, aby nebyla změněna externí funkce, zavést nové chyby nebo obojí.

Neustálým zdokonalováním designu kódu usnadňujeme a usnadňujeme práci. To je v ostrém kontrastu s tím, co se obvykle děje: málo refaktoringu a velká pozornost věnovaná účelnému přidávání nových funkcí. Pokud si zvyknete na hygienický zvyk nepřetržitého refaktorování, zjistíte, že je snazší rozšířit a udržovat kód.

-  Joshua Kerievsky, Refaktorování vzorů

Motivace

Refaktoring je obvykle motivován tím, že si všimnete vůně kódu . Například tato metoda může být velmi dlouhá nebo se může jednat o téměř duplikát jiné blízké metody. Jakmile jsou tyto problémy rozpoznány, lze je vyřešit refaktorováním zdrojového kódu nebo jeho transformací do nové podoby, která se chová stejně jako dříve, ale která již „nevoní“.

Pro dlouhou rutinu lze extrahovat jeden nebo více menších podprogramů; nebo pro duplicitní rutiny lze duplikát odstranit a nahradit jednou sdílenou funkcí. Neprovedení refaktoringu může mít za následek hromadění technického dluhu ; na druhé straně je refaktoring jedním z hlavních způsobů splácení technického dluhu.

Výhody

Existují dvě obecné kategorie výhod pro činnost refaktoringu.

  1. Udržitelnost. Opravy chyb je snazší, protože zdrojový kód je snadno čitelný a záměr autora je snadno pochopitelný. Toho lze dosáhnout redukcí velkých monolitických rutin na sadu individuálně stručných, dobře pojmenovaných jednoúčelových metod. Toho lze dosáhnout přesunutím metody do vhodnější třídy nebo odstraněním zavádějících komentářů.
  2. Rozšiřitelnost Je snazší rozšířit možnosti aplikace, pokud používá rozpoznatelné návrhové vzory , a poskytuje určitou flexibilitu tam, kde žádná dříve možná neexistovala.

Výkonové inženýrství může odstranit neefektivnost programů známých jako softwarové nafouknutí, které vyplývají z tradičních strategií vývoje softwaru, jejichž cílem je minimalizovat čas vývoje aplikace, nikoli čas potřebný ke spuštění. Výkonové inženýrství může také přizpůsobit software hardwaru, na kterém běží, například za účelem využití výhod paralelních procesorů a vektorových jednotek.

Výzvy

Refaktoring vyžaduje extrahování struktury softwarového systému, datových modelů a závislostí v rámci aplikace, aby se zpětně získaly znalosti o existujícím softwarovém systému. Obrat týmů znamená chybějící nebo nepřesné znalosti současného stavu systému a rozhodnutí o návrhu odcházejících vývojářů. Další aktivity refaktoringu kódu mohou vyžadovat další úsilí k získání těchto znalostí. Činnosti refaktoringu generují architektonické úpravy, které zhoršují strukturální architekturu softwarového systému. Takové zhoršení ovlivňuje architektonické vlastnosti, jako je udržovatelnost a srozumitelnost, které mohou vést k úplnému novému vývoji softwarových systémů.

Činnosti refaktoringu kódu jsou zabezpečeny softwarovou inteligencí při použití nástrojů a technik poskytujících údaje o algoritmech a sekvencích provádění kódu. Poskytnutí srozumitelného formátu pro vnitřní stav struktury softwarového systému, datových modelů a závislostí uvnitř komponent je zásadním prvkem pro vytvoření porozumění na vysoké úrovni a poté upřesněných pohledů na to, co je třeba upravit a jak.

Testování

Před refaktoringem by měly být nastaveny automatické testy jednotek, aby se rutiny stále chovaly podle očekávání. Testy jednotek mohou přinést stabilitu i velkým refaktorům, když se provádějí s jediným atomovým potvrzením . Společnou strategií umožňující bezpečné a atomové refaktory zahrnující více projektů je uložit všechny projekty do jednoho úložiště , známého jako monorepo .

S testováním jednotek na místě je refaktoring iterační cyklus provádění malé transformace programu , testování pro zajištění správnosti a další malá transformace. Pokud kdykoli test selže, poslední malá změna je vrácena zpět a opakována jiným způsobem. Prostřednictvím mnoha malých kroků se program přesune z místa, kde byl, na místo, kam chcete. Aby byl tento velmi iterační proces praktický, musí testy běžet velmi rychle, jinak by programátor musel strávit velkou část svého času čekáním na dokončení testů. Zastánci extrémního programování a dalšího agilního vývoje softwaru popisují tuto aktivitu jako nedílnou součást cyklu vývoje softwaru .

Techniky

Zde je několik příkladů mikro-refaktorování; některé z nich se mohou vztahovat pouze na určité jazyky nebo typy jazyků. Delší seznam najdete v knize a webových stránkách refaktoringu Martina Fowlera . Mnoho vývojových prostředí poskytuje automatickou podporu pro tyto mikro-refaktorování. Například programátor mohl klikněte na název proměnné a poté vyberte „Zapouzdřit pole“ Refaktoring z kontextového menu . IDE by poté vyzvalo k zadání dalších podrobností, obvykle s rozumnými výchozími hodnotami a ukázkou změn kódu. Po potvrzení programátorem provede požadované změny v celém kódu.

  • Techniky, které umožňují lepší porozumění
    • Graf závislosti programu - explicitní znázornění závislostí dat a řízení
    • Graf závislosti systému - reprezentace volání procedur mezi PDG
    • Softwarová inteligence - reverzní inženýři počátečního stavu, aby pochopili existující závislosti v rámci aplikace
  • Techniky, které umožňují větší abstrakci
    • Zapouzdřit pole - vynutit kód pro přístup do pole metodami getr a setter
    • Zobecnit typ - vytvořte obecnější typy, které umožní větší sdílení kódu
    • Nahraďte kód pro kontrolu typu stavem / strategií
    • Nahraďte podmíněné polymorfismem
  • Techniky rozdělení kódu na více logických částí
    • Komponentizace rozděluje kód na opakovaně použitelné sémantické jednotky, které představují jasná, dobře definovaná a snadno použitelná rozhraní.
    • Třída Extract přesune část kódu ze stávající třídy do nové třídy.
    • Extrahovat metodu, aby se část větší metody stala novou metodou. Rozebráním kódu na menší části je to snáze srozumitelné. To platí také pro funkce .
  • Techniky pro vylepšení názvů a umístění kódu
    • Přesunout metodu nebo přesunout pole - přesunout do vhodnější třídy nebo zdrojového souboru
    • Metoda přejmenování nebo pole přejmenování - změna názvu na nový, který lépe odhalí jeho účel
    • Vytáhnout - v objektově orientovaném programování (OOP), přejít na nadtřídu
    • Zatlačte dolů - v OOP, přejděte do podtřídy
  • Automatická detekce klonů

Refaktorování hardwaru

Zatímco termín refaktoring původně odkazoval výhradně na refaktorování softwarového kódu, v posledních letech byl refaktorován také kód napsaný v jazycích popisu hardwaru (HDL). Termín refaktorování hardwaru se používá jako zkratkový termín pro refaktorování kódu v jazycích popisu hardwaru. Protože většina hardwarových inženýrů HDL nepovažuje za programovací jazyky , je třeba refaktoring hardwaru považovat za samostatné pole od tradičního refaktoringu kódu.

Zeng a Huss navrhli automatické refaktorování popisů analogového hardwaru (ve VHDL-AMS ). Refaktoring v jejich přístupu zachovává simulované chování návrhu hardwaru. Nefunkční měření, které se zlepšuje, spočívá v tom, že refaktorovaný kód lze zpracovat standardními nástroji pro syntézu, zatímco původní kód nikoli. Refaktoring digitálních HDL, i když manuální refaktoring, zkoumal také kolega ze Synopsys Mike Keating. Jeho cílem je usnadnit pochopení složitých systémů, což zvyšuje produktivitu návrhářů.

Dějiny

První známé použití termínu „refaktoring“ v publikované literatuře bylo v článku Williama Opdykeho a Ralpha Johnsona ze září 1990 . Griswoldova Ph.D. diplomová práce, Opdykeho Ph.D. tento termín také použila diplomová práce, publikovaná v roce 1992. Ačkoli refaktoringový kód se provádí neformálně po celá desetiletí, William Griswold z roku 1991 Ph.D. disertační práce je jednou z prvních velkých akademických prací o refaktoringu funkčních a procedurálních programů, následovaná disertační prací Williama Opdykeho z roku 1992 o refaktoringu objektově orientovaných programů, i když všechny teorie a mechanismy jsou již dlouho k dispozici jako systémy transformace programů . Všechny tyto zdroje poskytují katalog běžných metod refaktoringu; metoda refaktoringu má popis, jak použít metodu, a ukazatele, kdy byste metodu měli (nebo neměli) použít.

Kniha Martina Fowlera Refaktorování: Zlepšení designu stávajícího kódu je kanonickým odkazem.

Pojmy „factoring“ a „factoring out“ se v komunitě Forth používají tímto způsobem přinejmenším od začátku 80. let. Tomuto tématu je věnována šestá kapitola knihy Lea Brodieho Thinking Forth (1984).

V extrémním programování má technika refaktorování extrakční metody v podstatě stejný význam jako factoring ve Forth; rozdělit „slovo“ (nebo funkci ) na menší, snadněji udržované funkce.

Refaktoringy lze také rekonstruovat posthoc tak, aby vytvářely stručné popisy komplexních softwarových změn zaznamenaných v softwarových úložištích, jako jsou CVS nebo SVN.

Automatické refaktorování kódu

Mnoho softwarových editorů a IDE má automatizovanou podporu refaktoringu. Je možné refaktorovat kód aplikace i testovací kód. Zde je seznam několika z těchto editorů nebo takzvaných refaktorujících prohlížečů .

Viz také

Reference

Další čtení

externí odkazy