Refactoring: koda, čas, aplikacija

Refaktoring je neke vrste reorganizacija. Tehnično izhaja iz matematike, ko je izražen enakovrednost izraza - dejavniki so bolj čisti načini izražanja iste izjave. Koda refaktoringa pomeni enakovrednost, začetni in končni proizvodi morajo biti funkcionalno identični. V praksi je koda bolj jasna in čista, preprosta in elegantna. Primer je območje od preimenovanja spremenljivke v vnos metode v razred tretje osebe, za katerega razvijalec nima nobenih pravic.

Analiza in preoblikovanje za ustvarjanje čiste kode

To preprosto pomeni izboljšanje zasnove obstoječe kode brez spreminjanja opaznega vedenja. Sprva je bila zasnovana v skupnosti Smalltalk in je postala glavna tehnologija razvoja. Čeprav orodja za preoblikovanje omogočajo, da jih je zelo enostavno uporabiti. Pomembno je, da razvijalec razume, kaj dela in zakaj bo pomagal, na primer, v situaciji, ko je treba dovoliti ponovno uporabo ponavljajočega se bloka kode.


Vsak preoblikovanje je preprost postopek, ki naredi logično spremembo v strukturi kode. Če spremenite veliko število kod naenkrat, je mogoče vnesti napake. A ko in kje so bile napake, je težko reči. Če se spremembe izvedejo v majhnih korakih s preverjanji, opravljenimi po vsakem koraku, se napaka verjetno pojavi v testnem zagonu takoj, ko se koda vnese v sistem. NareditiKoda preoblikovanja bi lahko preverila ta korak in po tem, ko je bil korak preklican, ga lahko razdelimo na še manjše korake, da ugotovimo napake. To je prednost obsežnih modularnih testov v sistemu, ki so zaščiteni s skrajnim programiranjem. Razvijalcem in upravljavcem dajejo zaupanje, da refactoring ni kršil sistema, se bo kodeks obnašal enako kot prej.


Izboljšanje kode se izvaja približno v naslednjih fazah:

Ukrep



Vprašanja, ki jih je treba zastaviti, ukrepi



Identifikacija problema



Ali obstaja problem? V čem je težava?



Značilnosti problemov



Zakaj moram nekaj spremeniti? Kakšne so koristi? Ali obstajajo tveganja?



Razvijanje rešitev



Katera bi morala biti „ciljna država“ kode? Kakšna pretvorba kode spremeni kodo v želeno stanje?



Sprememba kode



Koraki, ki bodo spremenili kodo.

Ponavadi se izvede v majhnih korakih. Po vsakem takem koraku razvijalec ostane v delovnem sistemu, ki ne deluje programsko. Praktiki izmenjujejo popravke napak in dopolnjujejo kodo med temi koraki. Tako refactoring ne izključuje možnosti spreminjanja funkcionalnosti, temveč preprosto pravi, da je to še ena dejavnost, povezana s preurejanjem kode.

Stalni proces upravljanja kakovosti

V idealnem primeru bo refactoring del stalnega procesa izboljševanja kakovosti. Z drugimi besedami, z drugimi se bo lahko prepletativsakodnevne dejavnosti vsakega razvijalca programske opreme.
Ustvarjanje čiste kode z analizo in preoblikovanjem je uporabno, če pride do napake in je treba težavo popraviti ali pa je treba kodo razširiti. Postopek istočasnega servisiranja ali dodajanja novih funkcij omogoča vodstvu in razvijalcem, da bolj verjetno rešijo problem, saj to ne bo zahtevalo dodatne faze testiranja.
Če razvijalec, ki je odgovoren za razumevanje kode, težko postavi vprašanja in začne dokumentirati nejasen del, ki bo dobro izhodišče za uporabo novih metod. Pogosto časovni potek klirinške operacije vam ne omogoča, da bi takoj sprejeli dobro odločitev. Možno je, da je bila funkcija dodana v naglici in ne napaka. V teh primerih mora biti ustrezna koda označena z opombo FIXME, da jo je mogoče ponovno obdelati, ko je čas dovoljen. Takšne okoliščine zahtevajo izboljšanje obstoječe kode ne za posamezne elemente, ampak za celoten projekt. Ko pride čas za reševanje nabranih težav, skenirajte FIXME in TODO. Na osnovi kode bodo vse težave za pregled. Nato jih je mogoče reorganizirati v ustrezno prednostno nalogo. Refactoring je dobra stvar, ker so kompleksni izrazi običajno zgrajeni iz enostavnejših, bolj okornih komponent. Zagotavlja enostavnejše komponente ali jih zmanjšuje na učinkovitejše kompleksne izraze, odvisno od tega, kako bo programer deloval. Na primer, učinkovitost preoblikovanja obstoječe kodeštetje članov in operaterjev: (x - 1) * (x + 1) = x 2 - 1. Štiri besede v primerjavi s tremi. Trije operaterji proti dvema. Vendar pa je izraz na levi strani lažje razumljiv, saj uporablja enostavnejše operacije. Poleg tega zagotavlja več informacij o strukturi funkcije f (x) = x 2 - 1, saj korenine +/- 1, ki bi jih bilo težko določiti, preprosto "gledali" na desni strani.

Področja ukrepanja

Programska oprema za izboljšanje obstoječe kode je v omrežju majhna, vendar je večina dobro oblikovana. Sčasoma se velikost lastne programske opreme in njena kompleksnost povečata, povečuje se število napak in posledično se zmanjšuje zanesljivost kode. Razvijalci programske opreme, zlasti če niso izvirni avtorji, so vse težje vzdrževati in razširiti kodo. Osnova kode, ki naj bi bila v kateri koli programski družbi dragocena dobrina, lahko v določenem trenutku postane preobremenjena. Ti negativni procesi lahko povzročijo prezgodnje staranje programske opreme, kot je pojasnjeno tudi pri delu Martina Fowlerja "Refactoring: Izboljšanje obstoječega kodeksa".
Strateško pomembna je pozornost vodilnih in razvijalcev programske opreme. Na praktični ravni bo uporaba razvojnih metod upočasnila to staranje. Refactoring lahko odpravi to staranje s pravilno uporabo, po možnosti z dobrimi programskimi orodji, ki pomagajo pri prepoznavanju, analiziranju in opisovanju problemov, in končno omogočajo njihovo odpravljanje.

Pogosto kopirajte komponentorazvijalec uporablja kot bolj sprejemljivo metodo, ker je manj zapletena. Vsaj Fowler verjame v refactoring za izboljšanje obstoječe kode. Trenutna izvorna koda se lahko sčasoma spremeni iz prvotne zasnove in jo razvijalec ne razume takoj. Vendar pa ne upošteva dejstva, da ima izvorna koda veliko skritih pomenov. Popravljanje napak v izvorni kodi ni mogoče dokumentirati, vendar so zelo dragocene. Refaktiranje ohranja to skrito vrednost in zagotavlja, da se vedenje sistema ne bo spremenilo.

Postopek preimenovanja metode

Ta primer velja za spremenljivko, razred ali drug java element, ki ima zavajajoče ime in mora vedeti, kako preoblikovati to kodo. To zahteva vse povezave in morebitne posodobitve datotek. Proces lahko vključuje preimenovanje metode v podrazrede. Po drugi strani pa bo preimenovanje paketa vključevalo tudi premikanje datotek in imenikov ter posodabljanje sistema za upravljanje različic.
Popravne metode:
  • Premikanje razreda. Razred je v napačnem paketu, zato ga je treba premakniti v drug paket, kjer je najbolj primeren.
  • Odlomek. Dolgo metodo je treba razdeliti v faze, da bi izboljšali berljivost in udobje uporabe. Oddelek kode z eno logično nalogo se nadomesti s klicem na novo metodo.
  • Pridobivanje nadrazreda. Obstoječi razred zagotavlja funkcionalnost, ki jo je treba na nek način spremeniti. Abstraktni razred je predstavljen tudi kot nadrejeni trenutni razredpotem je splošno obnašanje "zaostrilo" tega novega očeta.
  • Zamenjava pogojne vrednosti s polimorfizmom. Metode razreda lahko preverijo določeno vrednost (če je operater stikalo) za določitev pravilnega dejanja za izvedbo.
  • Prednosti metode

    Opravljanje več operacij preoblikovanja pred ali med odpravljanje napak kode ima določene prednosti. Mesto je pogosto lažje določiti. Tako se ohranja čas, porabljen za delo na kodeksu in izboljšanje njegove kakovosti. Dobro strukturirana koda je prav tako manj nagnjena k napakam, ko gre za njeno širitev. Strokovnjaki pravijo, da uporaba metode prinaša koristi vsakega programa, ki ima vsaj eno od naslednjih slabosti:
  • Programi, ki jih je težko brati in jih je težko spremeniti.
  • Dvojne logične aplikacije.
  • Programi, ki zahtevajo dodatno obnašanje, ki zahteva spremembe kode.
  • Programi s kompleksno pogojno logiko, ki jih je težko spremeniti.
  • Če povzamemo, lahko trdimo, da dejanske koristi običajno dolgoročno nastanejo, na primer pri preoblikovanju izboljšav obstoječe kode pdf. Sestavljajo jih bistveno krajši čas, ki ga razvijalci porabijo za odpravljanje napak in vzdrževalna dela, da bi izboljšali zanesljivost kode. Poleg tega se zmanjša podvajanje kode in spodbudi ponovna uporaba kode. Skupni stroški vzdrževanja in razvoja se morajo zmanjšati, hitrost ekipe pa se mora odzvati na spreminjajoče se potrebe - povečati.

    Pomanjkanje popravka ZA

    Če obstaja toliko nespornih prednosti v primerjavi z dobro strukturirano, jasno kodo in če je preoblikovanje programske kode posledica kaotične, slabo strukturirane, nagnjene k kodeksu, dobro premišljene kode, potem obstaja logično vprašanje, zakaj to ne storijo vsi razvijalci programske opreme. ? V praksi, razvijalci so bolj neradi opravljajo izboljšave, saj je nekaj refactoring samo utrujen. Še posebej, če za to ni očitne zunanje koristi. Lahko je tudi kriv za vodenje projekta. Če priročnik podpira samo zunanje vidne lastnosti kode, kot sta funkcionalnost in zmogljivost, vendar ne posveča pozornosti notranji kakovosti kode. Poleg tega obstaja resna nevarnost, da bi se kode preoblikovale. Če se na primer spremenijo imena datotek, je lahko težava tudi sledljivost sprememb. Tudi če razvijalec programske opreme poskuša reorganizirati neko slabo strukturirano kodo. Upravitelj ima lahko popolnoma drugačen pogled na uspešnost organa za potrjevanje in lahko nasprotuje vsakemu poskusu spremembe delovne kode. Teh težav ni mogoče preprosto prezreti, zato jih morajo razvijalci in vodstvo ustrezno upoštevati.

    Avtomatizacija procesa

    Pri izvajanju refaktorja je treba zagotoviti opazovanje zunanjega vedenja, ki ostane nespremenjeno. Če se izvede ročno, je pogosto treba ponovno zgraditi sistem in zagnati teste. Zato je ročna metoda res praktična le s spoštovanjem
  • Sistem, iz katerega je reorganizirana koda del, se lahko hitro obnovi.
  • Obstajajo samodejni "regresijski" preskusi, ki jih je mogoče pogosto izvajati.
  • Ta situacija ni zelo pogosta in pomeni, da so programi za preoblikovanje omejeni. Postaja vse bolj razširjena, še posebej, ko vedno več ljudi uporablja XP (Extreme Programming) metode. Druga ovira za metodo je, da je veliko teh preoblikovanja dolgočasno. Še pomembneje je prepričanje, da so bile narejene pravilne spremembe. Zato je pri izboljšavah priporočljivo uporabljati avtomatizirana orodja. Hitrost njihovega dela ima še eno prednost, ki se kaže v razvojnem okolju ekipe. Razvijalec izvaja operacije refaktoriranja veliko manj pogosto, če je uporabljena izvorna koda tudi v lasti drugih razvijalcev. Integracija z razvijalci, ki so izbrali IDE, prinaša tudi številne prednosti. Prvič, prisotnost orodij pri roki pomeni, da lahko razvijalci zlahka reorganizirajo. Ni jim treba preklapljati med razvojnimi in refaktorskimi režimi in ga namesto tega videti kot del njihovega običajnega razvojnega cikla. Drugič, funkcije IDE, kot je integracija nadzora različic, lahko zmanjšajo napor metode, kot je premikanje razreda ali preimenovanje paketa.

    Analiza kode Visual Studio 2017

    Prezgodnja optimizacija je lahko koren vsega zla, vendar orodja za uporabo zagotavljajo jasnost, čistost in varnost kode. Testiranje programa pred pošiljanjem je pomemben del razvojnega procesa. Tukaj pridejo v veljavoorodja in metode za analiziranje kode in profiliranje - vam omogočajo, da ocenite kodo za napake, ozka grla in učinkovito uporabo procesorskih in pomnilniških virov. Moderna orodja za profiliranje kod lahko usmerjajo neposredno na natančne črte kode, ki zahtevajo refaktoriranje, ali na knjižnice in druge odvisnosti, ki so šibke točke v arhitekturi aplikacije.
    Pred Visual Studio 2012 je večina teh vrst analize in testiranja kode zahtevala orodja tretjih oseb in ročno sestavljanje, testiranje, analizo in ponavljanje nalog za razvijalca. Danes ima Visual Studio precej močna orodja za analizo. Poleg tega obstajajo odlična orodja, ki bodo razvijalcu pomagala pri iskanju produktivnosti in testiranja optimizacije, projektnih predlog, ki imajo učinkovite odvisnosti in vgrajena testna okolja, kot tudi robustna orodja za integracijo avtomatizirane analize in testiranja v izdelavo in izdajo delovnega toka.

    Orodja za zmogljivost

    Celoten nabor vgrajenih orodij za izboljšanje obstoječe kode projekta je najprej združil koncentrator uspešnosti in diagnostike v programu Visual Studio 2013, ki je bil dodatno okrepljen in razširjen v oknu Nastavitev zmogljivosti in diagnostike ter v orodni vrstici Orodja za optično branje v Visual Studio 2015. S programom Visual Studio 2017 so ta orodja tako integrirana v razvojno okolje, da nimajo več muhastega imena, vendar se še naprej razvijajo. Program je opremljen z veliko dokumentacijo in navodiliMicrosoftovi dokumenti, ki se začnejo z odsekom "Uvod v orodja za zmogljivost" in "Navodila za vodenje uspešnosti Visual Studio Starter".
    Uporabniki bodo našli informacije o zbiranju in profiliranju podatkov med izvajanjem metode, ne le za tradicionalne aplikacije .NET Framework, ampak tudi za izdelke in spletne strani ASP.NET javascript, visoko zmogljivo računalništvo (HPC) in testiranje obremenitve. Drugo orodje, ki ga uživajo razvijalci, je koda RefV za PerfView za analizo uspešnosti. Morrison je višji arhitekt pri Microsoftu in je napisal PerfView za notranjo analizo uspešnosti in prilagoditev ekip, ki ustvarjajo .NET Framework in Visual Studio. Zdaj je odprto kodno orodje, ki je še vedno v aktivnem razvoju.

    Dodatni mehanizmi za profiliranje in odpravljanje napak

    Poleg orodij, ki so na voljo pri Microsoftu, se orodja tretjih oseb uporabljajo za zadostitev potrebam po natančnem uravnavanju: input-output Za preizkusne korake je na voljo desetdnevna preizkusna različica.Redgate ANTS Performance Profiler - drugo priljubljeno orodje za projekte .NET Framework ponuja enako analizo sinhronizacije kode kot druga orodja, hkrati pa poglablja učinkovitost poizvedb v bazi podatkov, ki podpirajo profiliranje dostopa do podatkov podpora za Oracle, MySQL, PostgreSQL.
  • DevExpress CodeRush je še enOrodje za analizo in refaktoriranje baz podatkov C #, Visual Basic in XAML. Orodja za analizo CodeRush ne delujejo le z osnovnimi rešitvami, temveč imajo tudi vgrajeno integrirano integracijsko testiranje, ki podpira okvir NUnit, xUnit, MSpec in MSTest, ter testne primere CoreCLR v okolju DNX.
  • Microsoft Code Analysis 2017 zagotavlja vgrajen dostop do več kot 100 najbolj priljubljenih pravil FxCop kot živih analizatorjev. Analizatorji med tipkanjem pregledujejo kodo C # ali Visual Basic in vam dajejo nasvete o uspešnosti, varnosti in najboljših praksah ter dostopu do kode za hitro popravljanje kode.
  • Microsoft DevSkim je bolj zapletena in prilagodljiva struktura kodnih modulov in analizatorjev, ki se osredotočajo na analizo varnosti vgrajenih kod pri vnosu. Morebitna varnostna vprašanja so označena v povezovalni kodi za dodatne informacije z enim klikom do varne nadomestne kode.
  • Časovna razporeditev

    Uporaba avtomatiziranih orodij za preoblikovanje omogoča večjo verjetnost, da bo razvijalec pravočasno opravil potrebne ukrepe in zmanjšal verjetnost napak. Vendar ni nič manj pomembna izbira pogojev za njeno izvajanje. Načrtovano preoblikovanje izboljša učinkovitost kode, saj odpravlja podvajanje. Ključna točka je, da jo popravimo čim prej, preden postane problem. V tem primeru se uporablja neprekinjeno prestrukturiranje, kar je zelo pomembno za neprekinjeno dostavo kode.
    V najboljšem primeru razvijalci pogosto preklapljajo med vsemi zgoraj omenjenimi vrstami refactoringa. V tem primeru ime tipa ni pomembno, ampakPomembno je, da teče. Na primer, če berete kodo, razvijalec razume, da je razrede ali metode mogoče opraviti bolje, to morate storiti takoj in takoj uporabiti običajne metode za pridobivanje večjih napak ali metod preimenovanja za boljše branje. Ta platforma Martin Fowler na Workflows pomaga uporabnikom bolje poznati, načrtovati in izvajati izboljšave. Zato vsak programer potrebuje ne samo vedeti, kaj je refactoring kode, temveč tudi, kdaj ga pravilno izvajati.

    Sorodne publikacije