logo

7 Tehnike preoblikovanja kode v programskem inženirstvu

Ker ste razvijalec, kako začnete delati na novem projektu ...??

Najprej zberete nekaj osnovnih zahtev, nato pa na podlagi zahteve začnete uvajati funkcijo eno za drugo. Ko napredujete pri svojem projektu in izveste več o njem, nenehno dodajate in spreminjate kodo v svoji kodni bazi. Pozneje spremenite tudi kodo, da popravite napako in robne primere.



7-Tehnike-refaktoriranja-kode-v-programskem-inženiringu

Toda kaj se zgodi po nekaj dneh ali mesecih ...? Kako izgleda vaša koda ...?? Je zapleteno? Je težko razumeti? Če je odgovor da, potem zagotovo niste bili pozorni na izboljšanje ali prestrukturiranje kode. Morda ste napisali podvojeno kodo, ne da bi pogledali obstoječo kodo, ali pa ste napisali nekaj daljših metod/funkcij, velike razrede, preveč parametrov, neintuitivna imena spremenljivk, umestitev kode itd.

Izboljšanje ali posodabljanje kode brez spreminjanja funkcionalnosti programske opreme ali zunanjega obnašanja aplikacije je znano kot preoblikovanje kode. Zmanjša tehnične stroške in naredi kodo učinkovitejšo in vzdržljivejšo. Če prej ne boste pozorni na postopek preoblikovanja kode, boste pozneje plačali za napake v kodi. Zato ne prezrite čiščenja kode.



V procesu razvoja programske opreme imajo različni razvijalci različne sloge pisanja kode. Delajo spremembe, vzdržujejo kodo, razširijo kodo in večino časa pustijo kodo brez nenehnega preoblikovanja. Nerefaktorirana koda ponavadi koda rot: veliko zmede in nereda v kodi, kot je podvojena koda, nezdrave odvisnosti med razredi ali paketi, slaba razporeditev odgovornosti razreda, preveč odgovornosti na metodo ali razred itd. Da bi se izognili vsem tem težavam, je pomembno nenehno preoblikovanje.

Zdaj je vprašanje ... kakšne so tehnike za preoblikovanje kode?

Razpravljali bomo o nekaterih priljubljenih in pogostih tehnikah za preoblikovanje kode, a pred tem razpravljajmo o nekaj hitrih nasvetih ...



Nasveti:

  • Preoblikovanje kode morate izvesti v majhnih korakih. Naredite majhne spremembe v svojem programu, vsaka majhna sprememba nekoliko izboljša vašo kodo in pusti aplikacijo v delujočem stanju.
  • Zaženite test TDD in CI, potem ko ste naredili majhne spremembe v procesu preoblikovanja. Brez izvajanja teh testov obstaja tveganje za vnos napak.
  • Med postopkom preoblikovanja ne ustvarjajte novih funkcij ali funkcij. Pred dodajanjem kakršnih koli posodobitev ali novih funkcij v vašo obstoječo kodo morate preoblikovati kodo.
  • Postopek preoblikovanja lahko vpliva na rezultate testiranja, zato je dobro, da svojo ekipo za zagotavljanje kakovosti in testiranje vključite v postopek preoblikovanja.
  • Sprejeti morate, da s svojo kodo ne boste povsem zadovoljni. Vaša refaktorirana koda bo v bližnji prihodnosti zastarela in jo boste morali znova refaktorirati.

Najpogostejše tehnike preoblikovanja kode

Obstaja veliko pristopov in tehnik za preoblikovanje kode. Pogovorimo se o nekaterih priljubljenih ...

1. Rdeče-zeleno preoblikovanje

Rdeče-zelena je najbolj priljubljena in pogosto uporabljena tehnika refaktoriranja kode v procesu razvoja programske opreme Agile. Ta tehnika sledi pristopu k načrtovanju in implementaciji, ki temelji na prvem preizkusu, kar postavlja temelje za vse oblike refaktoriranja. Razvijalci prevzamejo pobudo za preoblikovanje v razvojni cikel, ki temelji na testiranju, in se izvaja v treh okrožnih korakih.

Red-Green-Refactoring

  • RDEČA: Prvi korak se začne s pisanjem neuspešnega rdečega testa. Ustaviš se in preveriš, kaj je treba razviti.
  • Zelena: V drugem koraku napišete najpreprostejšo dovolj kodo in pridobite razvojno uspešno zeleno testiranje.
  • Refaktor: V zadnjem in tretjem koraku se osredotočite na izboljšanje in izboljšanje svoje kode, da vaš test ostane zelen.

Torej ima ta tehnika v bistvu dva različna dela: prvi del vključuje pisanje kode, ki vašemu sistemu doda novo funkcijo, drugi del pa je namenjen preoblikovanju kode, ki izvaja to funkcijo. Upoštevajte, da med potekom dela ne bi smeli delati obojega hkrati.

2. Preoblikovanje z abstrakcijo

To tehniko večinoma uporabljajo razvijalci, ko je treba opraviti veliko refaktoriranja. To tehniko večinoma uporabljamo za zmanjšanje redundance (podvajanja) v naši kodi. To vključuje dedovanje razredov, hierarhijo, ustvarjanje novih razredov in vmesnikov, ekstrakcijo, zamenjavo dedovanja z delegiranjem in obratno.

Refactoring-By-Abstraction

Pull-up/push-down metoda je najboljši primer tega pristopa.

  • Metoda vlečenja: Potegne dele kode v superrazred in pomaga pri odpravljanju podvajanja kode.
  • Metoda Push-Down: Vzame del kode iz nadrazreda in ga premakne navzdol v podrazrede.

Potegnite navzgor telo konstruktorja, ekstrahirajte podrazred, ekstrahirajte nadrazred, strnite hierarhijo, metodo predloge obrazca, ekstrahirajte vmesnik, zamenjajte dedovanje z delegiranjem, zamenjajte delegiranje z dedovanjem, potisnite polje navzdol, vse to so drugi primeri.

V bistvu pri tej tehniki zgradimo abstrakcijsko plast za tiste dele sistema, ki jih je treba preoblikovati, in protipostavko, ki jo bo sčasoma nadomestila. Spodaj sta navedena dva pogosta primera ...

c struktura v strukturi
  • Enkapsulirano polje: Kodo prisilimo v dostop do polja z metodama getter in setter.
  • Posplošite vrsto: Ustvarimo bolj splošne tipe, da omogočimo skupno rabo kode, zamenjamo kodo za preverjanje tipa s stanjem, nadomestimo pogojno s polimorfizmom itd.

3. Metoda sestavljanja

Med razvojno fazo aplikacije velikokrat pišemo dolge metode v naš program. Zaradi teh dolgih metod je vašo kodo izjemno težko razumeti in težko spremeniti. V teh primerih se večinoma uporablja metoda sestavljanja.

Pri tem pristopu uporabljamo metode racionalizacije za zmanjšanje podvajanja v naši kodi. Nekaj ​​primerov je: metoda ekstrahiranja, ekstrahiranje spremenljivke, vdelana Temp, zamenjava Temp s poizvedbo, vgrajena metoda, razdelitev začasne spremenljivke, odstranitev dodelitev parametrom itd.

Ekstrakcija: Kodo razdelimo na manjše dele, da poiščemo in izločimo fragmentacijo. Po tem ustvarimo ločene metode za te dele, nato pa se to nadomesti s klicem te nove metode. Ekstrakcija vključuje razred, vmesnik in lokalne spremenljivke.

V vrsti: Ta pristop odstrani številne nepotrebne metode v našem programu. Poiščemo vse klice metod, nato pa vse nadomestimo z vsebino metode. Po tem izbrišemo metodo iz našega programa.

skrbnik PowerShell

4. Poenostavitev metod

Pri tem pristopu sta vključeni dve tehniki ... pogovorimo se o obeh.

  • Poenostavitev pogojnih izrazov Preoblikovanje: Pogojni stavek v programiranju sčasoma postane bolj logična in zapletena. Za razumevanje celotnega programa morate poenostaviti logiko v svoji kodi.
    Obstaja toliko načinov za preoblikovanje kode in poenostavitev logike. Nekateri od njih so: konsolidacija pogojnega izraza in podvajanje pogojnih fragmentov, razgradnja pogojnika, zamenjava pogojnika s polimorfizmom, odstranitev nadzorne zastavice, zamenjava ugnezdenega pogojnika z zaščitnimi klavzulami itd.
  • Poenostavitev metode klicev refactoring: S tem pristopom naredimo klice metod preprostejše in lažje razumljive. Delamo na interakciji med razredi in jim poenostavljamo vmesnike.
    Primeri so: dodajanje, odstranjevanje in uvajanje novih parametrov, zamenjava parametra z eksplicitno metodo in klic metode, parametriranje metode, izdelava ločene poizvedbe od modifikatorja, ohranitev celotnega predmeta, odstranitev nastavitvene metode itd.

5. Premikanje elementov med objekti

Pri tej tehniki ustvarjamo nove razrede in varno premikamo funkcionalnost med starimi in novimi razredi. Podrobnosti izvedbe skrivamo pred javnim dostopom.

Zdaj je vprašanje ... kdaj premakniti funkcionalnost med razredi ali kako ugotoviti, da je čas za premik funkcij med razredi?

Ko ugotovite, da ima razred toliko odgovornosti in se preveč stvari dogaja, ali ko ugotovite, da je razred nepotreben in ne dela ničesar v aplikaciji, lahko premaknete kodo iz tega razreda v drug razred in ga v celoti izbrišete.

Primeri so: premakniti polje, ekstrahirati razred, premakniti metodo, vgrajeni razred, skriti delegata, uvesti tujo metodo, odstraniti posrednika, uvesti lokalno razširitev itd.

6. Pripravljalno preoblikovanje

Ta pristop je najbolje uporabiti, ko med dodajanjem nekaterih novih funkcij v aplikaciji opazite potrebo po preoblikovanju. Torej je v bistvu del posodobitve programske opreme z ločenim postopkom refaktoriranja. Prihranite se s prihodnjim tehničnim dolgom, če opazite, da je treba kodo posodobiti v prejšnjih fazah razvoja funkcij.

Končni uporabnik si ne more ogledati takšnih prizadevanj inženirske ekipe iz oči v oči, vendar bodo razvijalci, ki delajo na aplikaciji, ugotovili vrednost preoblikovanja kode, ko bodo gradili aplikacijo. Prihranijo lahko svoj čas, denar in druge vire, če le nekaj časa porabijo za posodobitev kode prej.

Kot da bi rad šel 100 milj proti vzhodu, a namesto da bi se le potikal skozi gozd, se bom peljal 20 milj severno do avtoceste in nato šel 100 milj proti vzhodu s trikrat večjo hitrostjo, kot bi lahko Pravkar sem šel naravnost tja. Ko vas ljudje silijo, da greste naravnost tja, morate včasih reči: 'Počakaj, preveriti moram zemljevid in poiskati najhitrejšo pot.' Pripravljalno preoblikovanje naredi to namesto mene.

Jessica Kerr (Razvijalec programske opreme)

Pripravljalno preoblikovanje

7. Preoblikovanje uporabniškega vmesnika

Naredite lahko preproste spremembe v uporabniškem vmesniku in preoblikujete kodo. Na primer: poravnajte vnosno polje, uporabite pisavo, prebesedite z aktivnim glasom, navedite obliko, uporabite skupno velikost gumba in povečajte barvni kontrast itd.

Končne besede

Postopek preoblikovanja kode morate obravnavati kot čiščenje urejene hiše. Nepotreben nered v domu lahko ustvari kaotično in stresno okolje. Enako velja za napisano kodo. Čisto in dobro organizirano kodo je vedno enostavno spremeniti, razumeti in vzdrževati. Kasneje ne boste imeli težav, če boste prej pozorni na postopek preoblikovanja kode.

Dva izmed najvplivnejših razvijalcev programske opreme Martin Fowler in Kent Beck so posvetili svoj čas razlagi postopka refaktoriranja kode in njegovih tehnik. O tej temi so napisali tudi celotno knjigo Refactoring: Izboljšanje zasnove obstoječe kode . Ta knjiga opisuje različne tehnike refaktoriranja z jasno razlago dela na teh procesih refaktoriranja. Priporočamo vam, da preberete to knjigo, če se želite poglobiti v postopek preoblikovanja kode.