Atacul clonelor. Cum se face cu dublarea codului? 15
- 08.08.17 12:57 •
- crazy_llama •
- # 335172 •
- Habrahabr •
- Din nisip •
- 7 •
- 9000
- la fel ca Forbes, doar mai bine.
În ciuda faptului că problemele asociate cu dublarea codului sunt menționate destul de des, relevanța acestor probleme de la an la an rămâne aproape neschimbată. În multe proiecte populare, numărul de clone este măsurat în sute sau chiar mii.
De unde provin clonele?
Se pot identifica următoarele motive principale pentru apariția clonelor:
Trebuie să luptăm împotriva clonelor?
Pe de o parte, codul duplicat are o serie de dezavantaje evidente. Acest cod este mai greu de schimbat și dezvoltat, din cauza duplicatelor, mărimea proiectului crește și înțelegerea lui devine mai complicată. În plus, atunci când copiați, există și riscuri de propagare a erorilor din fragmente sursă.
Pe de altă parte, ștergerea duplicatelor poate duce la erori, mai ales dacă trebuie să faceți modificări semnificative în textul programului. Cu toate acestea, argumentul principal împotriva eliminării clonelor este că o astfel de îndepărtare duce adesea la o creștere a numărului de dependențe. Foarte interesant despre acest lucru este scris în articolul "Redundanța vs dependențe: care este mai rău?".
Din punctul meu de vedere, clonele reprezintă un semn de cod sursă care nu este foarte de înaltă calitate și implică, prin urmare, aceleași probleme. Din păcate, ele nu pot fi eliminate întotdeauna, și nu întotdeauna sunt problema reală. În unele cazuri, ele pot indica o alegere de arhitectură nereușită sau o degradare excesivă a funcției.
În ultimă instanță, ștergerea clonelor sau nu depinde de situația specifică. Cu toate acestea, în orice caz, codul duplicat este întotdeauna o ocazie de reflectat.
Instrumente pentru căutarea clonelor
Din păcate, aceste instrumente nu sunt integrate în mediul de dezvoltare. Lipsa integrării face dificil navigarea și refactorizarea clonelor. În același timp, nu există atât de multe instrumente încorporate în mediul de dezvoltare. De exemplu, în cazul alegerii IntelliJ IDEA este numai între standard și fișa de inspecție două (PMD și duplicat detector).
Principalele caracteristici ale plug-in-ului Detector duplicat:
- Analiza codului în zbor (în timpul editării)
- Analiza proiectelor de scară industrială (cu milioane de linii de cod)
- Navigare convenabilă și compararea duplicatelor
- Suportul lingvistic Java și Kotlin
De ce poate fi util un instrument de detectare a clonelor?
- Pentru a lucra cu codul vechi
- Pentru o examinare convenabilă a codului
- Pentru a urmări clonele care nu pot fi șterse
- Pentru refactorizare, dacă utilizați o metodologie similară cu XP
Refactorizarea clonelor
De fapt, există o singură cale de a elimina clonele - de a generaliza funcționalități similare. Pentru a face acest lucru, puteți crea o metodă sau o clasă auxiliară sau puteți încerca să exprimați un duplicat prin altul. Totuși, nu uitați că refactorizarea se face pentru a îmbunătăți calitatea codului. Prin urmare, este mai bine să o abordăm în mod creativ, deoarece uneori problema poate fi mai largă sau mai restrânsă sau chiar altceva.
Să analizăm câteva exemple concrete din cadrul primăverii populare. Pentru a face acest lucru, folosim mediul de dezvoltare IntelliJ IDEA și pluginul Detector duplicat.
Caracteristici ale mediului de dezvoltare și plug-in
Mediul de dezvoltare IntelliJ IDEA și pluginul Detector duplicat oferă multe caracteristici care vor simplifica refactorizarea clonelor. De exemplu, o mulțime de funcții pot fi găsite în meniul contextual Refactor sau în tooltip pentru inspecțiile de cod (Alt + Enter ca parte a inspecției).
Afișați panoul de comparare duplicat
Rezumați fragmentul sub forma unei metode