Refaktoring ( eng. refaktoring ), vagy kód újratervezése, kódrevíziója, algoritmusok ekvivalens átalakítása - a program belső szerkezetének megváltoztatásának folyamata anélkül, hogy befolyásolná a külső viselkedését, és célja a program működésének könnyebb megértése [1] [2 ] . Az újrafaktorálás kis egyenértékű (azaz viselkedésmegőrző) transzformációk sorozatán alapul. Mivel minden transzformáció kicsi, a programozó könnyebben követheti annak helyességét, ugyanakkor az egész sorozat a program jelentős átstrukturálásához vezethet, és javíthatja a konzisztenciát és az áttekinthetőséget.
A refaktorálás célja a programkód könnyebb megértése; e nélkül a refaktorálás nem tekinthető sikeresnek.
Az újrafaktorálást meg kell különböztetni a teljesítményoptimalizálástól . A refaktoráláshoz hasonlóan az optimalizálás sem változtatja meg általában a program viselkedését, csak felgyorsítja a munkáját. De az optimalizálás gyakran nehezebbé teszi a kód megértését, ami az átalakítás ellentéte [3] .
Másrészt az átalakítást is meg kell különböztetni az újratervezéstől , amely a szoftver funkcionalitásának bővítése érdekében történik. Általános szabály, hogy a nagyobb átalakítások megelőzik az újratervezést.
Az újrafaktorálást folyamatosan alkalmazni kell a kód fejlesztése során. Megvalósításának fő ösztönzői a következő feladatok:
A refaktorálás során sok szempontból jobb a tapasztalaton alapuló intuícióra hagyatkozni. Vannak azonban olyan látható kódszagok , amelyek újrafeldolgozást igényelnek :
A programozásban a refaktorálás kifejezés egy program forráskódjának megváltoztatását jelenti anélkül, hogy megváltoztatná a külső viselkedését. Az extrém programozásban és más agilis módszerekben az újrafaktorálás a szoftverfejlesztési ciklus szerves részét képezi: a fejlesztők felváltva új teszteket és funkcionalitást készítenek, majd a kód átalakítása között javítják a konzisztenciát és az átláthatóságot. Az automatizált egységtesztelés biztosítja, hogy az átalakítás ne törje meg a meglévő funkciókat.
A refaktorálás eredetileg nem a hibák kijavítását és új funkciók hozzáadását szolgálja, egyáltalán nem változtatja meg a szoftver viselkedését [3] , és segít elkerülni a hibákat és megkönnyíti a funkciók hozzáadását. A kód érthetőségének javítása vagy szerkezetének megváltoztatása, a "halott kód" eltávolítása érdekében hajtják végre - mindezt annak érdekében, hogy a kódot a jövőben könnyebben karbantartható és fejleszthető legyen. Különösen az új viselkedés hozzáadása egy programhoz lehet nehéz egy meglévő struktúrával, amely esetben a fejlesztő elvégezheti a szükséges átalakítást az új funkció hozzáadása előtt.
Ez lehet egy mező áthelyezése egyik osztályból a másikba, egy kódrészlet eltávolítása a metódusból és önálló metódussá tétele, vagy akár a kód áthelyezése egy osztályhierarchián keresztül. Minden egyes lépés eleminek tűnhet, de az ilyen kis változtatások halmozott hatása radikálisan javíthat egy projekten, vagy akár meg is akadályozhatja, hogy egy rosszul megtervezett program szétessen.
A leggyakrabban használt [4] refaktorálási módszerek a következők:
A metódus aláírásának megváltoztatásának lényege egy metódusparaméter hozzáadása, módosítása vagy eltávolítása. A metódusaláírás megváltoztatása után minden kliens kódjában javítani kell a rá irányuló hívásokat. Ez a változás érintheti a program külső felületét, ráadásul a felületet módosító fejlesztő nem mindig fér hozzá ennek a felületnek az összes klienséhez, így a felületváltozások valamilyen formában történő regisztrációja szükséges lehet a későbbi átvitelhez a felülettel együtt. a program új verziója.
Ha egy osztálynak van nyilvános mezője, akkor azt priváttá kell tenni, és hozzáférési metódusokat kell megadnia. A "Field Encapsulation" után gyakran a " Módszer áthelyezése " kerül alkalmazásra .
A metódus kinyerése abból áll, hogy egy hosszú kódból külön töredékeket kinyerünk és/vagy megjegyzéseket igényelnek, és külön metódusokká alakítjuk, megfelelő hívások helyettesítésével a felhasználási helyeken. Ebben az esetben az a szabály érvényes, hogy ha egy kódrészlethez megjegyzés szükséges ahhoz, hogy mit csinál, akkor azt külön metódusra kell szétválasztani. Szintén szabály: egy metódus ne foglaljon el egy képernyőnél többet (a szerkesztési körülményektől függően 25-50 sort), különben egyes töredékei önálló értékűek és kiválogathatók. A kiválasztott töredék és a környező kontextus közötti kapcsolatok elemzéséből következtetést vonunk le az új módszer paraméterlistájára és lokális változóira.
A metódus áthelyezése olyan metódusra vonatkozik, amely gyakrabban hivatkozik egy másik osztályra, mint amelyikben található.
A több elágazású feltételes utasítást felváltja egy olyan alaposztály polimorf metódusának hívása, amelynek az eredeti utasítás minden ágához alosztályai vannak. Az ág kiválasztása implicit módon történik, attól függően, hogy az alosztály melyik példányához címezték a hívást.
Alapelvek:
A refaktoráló eszközök műszaki kritériumai:
Gyakorlati kritériumok a refaktoráló eszközökhöz: