Refactorizarea

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 23 septembrie 2019; verificările necesită 7 modificări .

Refactoring ( eng.  refactoring ), sau reproiectarea codului, revizuirea codului, transformarea echivalentă a algoritmilor  - procesul de modificare a structurii interne a programului , fără a afecta comportamentul său extern și care vizează facilitarea înțelegerii muncii sale [1] [2 ] ] . Refactorizarea se bazează pe o serie de mici transformări echivalente (adică, care păstrează comportamentul). Deoarece fiecare transformare este mică, este mai ușor pentru programator să-și urmărească corectitudinea și, în același timp, întreaga secvență poate duce la o restructurare semnificativă a programului și poate îmbunătăți consistența și claritatea acestuia.

Obiectivele de refactorizare

Scopul refactorizării este de a face codul programului mai ușor de înțeles; fără aceasta, refactorizarea nu poate fi considerată reușită.

Refactorizarea ar trebui să fie distinsă de optimizarea performanței . La fel ca refactorizarea, optimizarea de obicei nu schimbă comportamentul programului, ci doar accelerează activitatea acestuia. Dar optimizarea face adesea codul mai greu de înțeles, ceea ce este opusul refactorizării [3] .

Pe de altă parte, refactorizarea trebuie, de asemenea, diferențiată de reinginerie , care este efectuată pentru a extinde funcționalitatea software-ului. De regulă, refactorizările majore preced reinginerirea.

Motive pentru refactorizare

Refactorizarea ar trebui să fie aplicată constant atunci când se dezvoltă codul. Principalele stimulente pentru implementarea sa sunt următoarele sarcini:

  1. este necesar să se adauge o nouă funcție care nu se încadrează bine în soluția arhitecturală acceptată ;
  2. este necesar să se corecteze o eroare, ale cărei cauze nu sunt imediat clare;
  3. depășirea dificultăților în dezvoltarea echipei, care sunt cauzate de logica complexă a programului.

Semne de cod prost

În multe feluri, atunci când refactorizează, este mai bine să te bazezi pe intuiție bazată pe experiență. Cu toate acestea, există câteva mirosuri vizibile de cod care necesită refactorizare : 

  1. duplicarea codului ;
  2. metoda lungă;
  3. clasa mare;
  4. listă lungă de parametri;
  5. O funcție „lacomă” este o metodă care accesează excesiv datele altui obiect;
  6. variabile temporare redundante;
  7. clase de date;
  8. date negrupate.

Refactorizarea codului

În programare, termenul de refactorizare înseamnă schimbarea codului sursă al unui program fără a modifica comportamentul său extern. În Extreme Programming și în alte metodologii agile, refactorizarea este o parte integrantă a ciclului de dezvoltare a software-ului: dezvoltatorii alternează între crearea de noi teste și funcționalități și apoi refactorizarea codului pentru a-i îmbunătăți consistența și transparența. Testarea unitară automată se asigură că refactorizarea nu distruge funcționalitatea existentă.

Refactorizarea nu este destinată inițial să remedieze erori și să adauge noi funcționalități, nu schimbă deloc comportamentul software-ului [3] și ajută la evitarea erorilor și facilitează adăugarea de funcționalități. Se realizează pentru a îmbunătăți înțelegerea codului sau pentru a-i schimba structura, pentru a elimina „codul mort” - toate acestea pentru a face codul mai ușor de întreținut și dezvoltat în viitor. În special, adăugarea unui comportament nou la un program poate fi dificilă cu o structură existentă, caz în care dezvoltatorul poate efectua refactorizarea necesară înainte de a adăuga noua funcționalitate.

Aceasta ar putea fi mutarea unui câmp de la o clasă la alta, scoaterea unei bucăți de cod dintr- o metodă și transformarea acesteia într-o metodă independentă sau chiar mutarea codului printr-o ierarhie de clasă. Fiecare pas individual poate părea elementar, dar efectul cumulativ al unor astfel de mici modificări poate îmbunătăți radical un proiect sau chiar poate preveni destramarea unui program prost conceput.

Metode de refactorizare

Cele mai frecvent utilizate metode de refactorizare [4] sunt:

Schimbați semnătura metodei

Esența modificării semnăturii unei metode este adăugarea, modificarea sau eliminarea unui parametru de metodă. După schimbarea semnăturii metodei, este necesar să corectați apelurile către aceasta în codul tuturor clienților. Această modificare poate afecta interfața externă a programului, în plus, nu întotdeauna dezvoltatorul care modifică interfața are acces la toți clienții acestei interfețe, așa că poate fi necesară o anumită formă de înregistrare a modificărilor de interfață pentru transferul ulterior al acestora împreună cu noua versiune a programului.

Câmp încapsulat

Dacă o clasă are un câmp public, trebuie să îl faceți privat și să furnizați metode accesorii. După „Încapsularea câmpului ” se aplică adesea „ Relocarea metodei ” .

Metoda de extragere

Extragerea metodei constă în extragerea fragmentelor separate dintr-un cod lung și/sau care necesită comentarii de cod și transformarea lor în metode separate, cu înlocuirea apelurilor corespunzătoare la locurile de utilizare. În acest caz, se aplică regula: dacă o bucată de cod necesită un comentariu despre ceea ce face, atunci ar trebui să fie separată într-o metodă separată. De asemenea, o regulă: o metodă nu trebuie să ocupe mai mult de un ecran (25-50 de linii, în funcție de condițiile de editare), altfel unele dintre fragmentele sale au valoare independentă și sunt supuse selecției. Din analiza conexiunilor fragmentului selectat cu contextul înconjurător, se face o concluzie despre lista de parametri ai noii metode și variabilele sale locale.

Mutare metoda

Relocarea metodei se aplică unei metode care se referă mai des la o clasă diferită de cea în care rezidă.

Înlocuiește condiționalul cu polimorfism

O instrucțiune condiționată cu mai multe ramuri este înlocuită cu un apel la o metodă polimorfă a unei clase de bază care are subclase pentru fiecare ramură a instrucțiunii originale. Alegerea ramurii este implicită, în funcție de instanța subclasei căreia i s-a adresat apelul.

Principii de baza:

Probleme de refactorizare

Instrumente de automatizare de refactorizare

Criterii tehnice pentru instrumentele de refactorizare:

Criterii practice pentru instrumentele de refactorizare:

Vezi și

Note

  1. M. Fowler (2000), p. 61-62
  2. Kerievsky, 2008 , Introducere.
  3. 1 2 M. Fowler (2000), p. 62
  4. Kerievsky, 2008 .

Literatură

Link -uri